You need to enable JavaScript to run this app.
导航

导出工具Exporter

最近更新时间2024.04.11 20:47:27

首次发布时间2024.02.29 15:55:40

异常排查方案

查看配置文件

Exporter会对配置做一定的检查和矫正,进程启动时会打印原始配置和矫正后的配置。如果出现异常,可以检查下矫正后的配置文件。

debug日志

  1. 查看errorinfo日志。
  2. 启动参数-log-level设置为debug,开启debug日志。

自监控指标

  1. 将启动参数-enable-self-metrics设置为true(默认即为true),开启自监控指标。
  2. 调用/metrics接口可以获取到监控指标。
    buckets            = prometheus.ExponentialBuckets(1e3, 10, 5)
    metaLoadDurationUs = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "metric_meta_load_duration_us",
        Help:    "metricMeta load duration us",
        Buckets: buckets,
    }, []string{})
    metaLoadError = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "metric_meta_load_error",
        Help: "metricMeta load error",
    }, []string{})
    monitorObjectsLoadDurationUs = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "monitor_objects_load_duration_us",
        Help:    "metric monitorObjects load duration us",
        Buckets: buckets,
    }, []string{})
    monitorObjectsCount = prometheus.NewGaugeVec(prometheus.GaugeOpts{
        Name: "monitor_objects_count",
        Help: "monitor objects count of a namespace-subNamespace",
    }, []string{"namespace", "sub_namespace"})
    dataLoadDurationUs = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "data_load_duration_us",
        Help:    "metric data load duration us",
        Buckets: buckets,
    }, []string{})
    dataSeries = prometheus.NewGaugeVec(prometheus.GaugeOpts{
        Name: "data_series",
        Help: "total series",
    }, []string{})
    limitDurationUs = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "limit_duration_us",
        Help:    "named limiter wait duration us",
        Buckets: buckets,
    }, []string{"name"})
    reqDataDurationUs = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "req_data_duration_us",
        Help:    "request data duration us",
        Buckets: buckets,
    }, []string{"namespace", "sub_namespace", "name"})
    reqMonitorObjectDurationUs = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Name:    "req_monitor_objects_duration_us",
        Help:    "request monitorObject duration us",
        Buckets: buckets,
    }, []string{"namespace", "sub_namespace"})
    reqDataError = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "req_data_error",
        Help: "request data error",
    }, []string{"namespace", "sub_namespace", "name"})
    reqMonitorObjectError = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "req_monitor_objects_error",
        Help: "request monitorObjects count",
    }, []string{"namespace", "sub_namespace"})
    

check元信息状态

  1. 调用/meta查看当前指标列表。
  2. 调用/monitor_objects查看当前的监控对象列表。

指标存在延迟

导出的指标量过大,可以考虑缩小导出的指标范围。

  1. 减少Namespaces,导出更少的云产品指标。
  2. 使用Metrics,仅导出需要的指标。

指标缺失

  1. 确认云监控页面上是否有此指标。
  2. 通过日志和debug日志确认问题。
  3. 如果是触发了限流,那么建议减少指标量。详情请参见指标存在延迟
  4. 通过/meta接口确认是否存在该指标,如果不存在,可能是通过Namespaces、SubNamespaces等字段过滤掉了部分指标。
  5. 通过/monitor_objects接口,确认是否存在相关实例,没有实例的话则不会有指标。
    • 通过云监控文档或/meta接口,获取当前指标的Namespace和SubNamespace。
    • 查看/monitor_objects接口的响应,查看namespace/subNamespace是否有对应数据。
      例如以下响应,代表仅有namespace为VCM_RDS_MySQL,subNamespace为deploy_monitor的指标存在监控实例。
      {
          "VCM_RDS_MySQL/deploy_monitor": [
              {
                  "Dimensions": [
                      {
                          "Name": "ResourceID",
                          "Value": "mysql-68781f23efcc"
                      }
                  ],
                  "Instances": [
                      {
                          "Name": "ResourceID",
                          "Value": "mysql-68781f23efcc"
                      }
                  ]
              }
          ]
      }
      

点间隔较大

默认允许的指标延迟为120s,一般不会出现问题。如果发现异常,可以将配置文件中的DelaySeconds适当调大。

指标值对不上

校验Exporter导出数据的值和云监控页面是否一致时,需要对齐聚合粒度。

  1. Exporter的聚合粒度,可以通过DataFreshIntervalSeconds参数进行配置,默认为60s。
  2. 云监控页面的聚合粒度,和选择的时间范围有关。
    • 时间范围选择1小时,那么聚合粒度默认为30s。
    • 时间范围选择1天,那么聚合粒度默认为60s。

所以,默认情况下Exporter的数据和云监控查询1天的时间范围情况下是一致的,和一小时时间范围的数据不一致是正常的。

限流报错

云监控接口Quota为10qps,Exporter请求接口的QPS由参数LimitQPSGetMetricData控制,默认值为5。

  • 如果偶尔触发限流报错,那么可以忽略,不会有较大影响。
  • 如果是经常触发限流报错,可能是因为部署了两个及以上的Exporter实例,每个Exporter实例使用5qps,导致超Quota。
    解决办法:
    1. 关掉多余Exporter实例。
    2. 如果需要多region采集,那么保证每个region仅一个实例。
    3. 调小LimitQPSGetMetricData
      例如部署了三个Exporter实例,那么LimitQPSGetMetricData需要最大为3;如果还是会超,那么可以适当再调小参数。