You need to enable JavaScript to run this app.
导航
Exporter异常排查方案
最近更新时间:2024.08.20 10:43:14首次发布时间:2024.02.29 15:55:40

本文介绍导出工具Exporter的问题排查方案。

常见日志错误排查方案

WARN: estimate request latency bigger than 'DataFreshIntervalSeconds'

Exporter在每次间隔时间内,无法完成指标数据的拉取。如果数据无法拉取完成,则在某些配置情况下,可能会出现断点。完整日志如下:

WARN: cost {} to finish collect all metric data for this interval with DataFreshIntervalSeconds={} total request count={}. you can adjust the configuration of exporter to eliminate this log.

出现该错误表示采集时间过长,有可能会影响prometheus拉不到数据,解决方案请参见指标断点

Error: Could not find operation ListExporterMetrics for version 2018-01-01

Exporter功能处于公测阶段,暂时免费使用。如需使用该功能,请先开通按量计费,然后联系对应销售或售后人员进行开白。

Error: Request was rejected because the request speed of this openAPI is beyond the current flow control limit

配置的QPS超过了限制,解决方案请参见LimitQPSGetMetricData接口限流

指标异常排查方案

自监控指标

  1. 建议导入如下的Exporter自监控grafana模板(仅适用于Exporter 1.0.18及以上版本)。

    注意

    以下模板目前仅兼容Grafana 7.0.0及以上版本。

    火山引擎Exporter自监控-Grafana模板.json
    未知大小
  2. 调用/metrics接口可以获取到监控指标。

    指标名称

    指标tag

    指标类型

    指标含义

    exporter_api_request_total

    • action:请求服务端的接口。其中,查询指标数据的接口是GetMetricData。
    • http_code:接口最终返回状态码。
    • error_code:服务端返回的业务错误码。其中。限流错误码是AccountFlowLimitExceeded。
    • retry_count:请求重试次数。

    counter

    exporter请求服务端接口的累计次数

    exporter_api_request_latency_ms_bucket
    exporter_api_request_latency_ms_count
    exporter_api_request_latency_ms_sum

    histogram

    exporter请求服务端接口延迟分布,单位ms

    exporter_strategy_last_pull_request_count

    gauge

    exporter上一轮次发起请求GetMetricData接口的次数

    exporter_strategy_last_pull_latency_ms

    gauge

    exporter上一轮次全部请求GetMetricData接口的总耗时

    exporter_strategy_discard_request_counter

    counter

    因数实例/指标数过多,导致请求积压被丢弃的请求总次数

    exporter_meta_object_count

    • namespace
    • sub_namespace

    gauge

    产品实例数量

    exporter_meta_metric_count

    gauge

    产品的指标数量

指标断点

指标断点,可以结合Exporter自监控Grafana面板排查。

  • 限流排查:观测如下面板429 AccountFlowLimitExceeded指标,解决方案请参见LimitQPSGetMetricData接口限流
    图片
  • 采集超时排查:观测如下面板指标,这个指标代表每轮次(即数据的刷新周期,对应DataFreshIntervalSeconds配置自动,默认60s)采集的总耗时。
    图片
    如果该指标持续的大于配置的DataFreshIntervalSeconds,默认60s,将无法在一个轮次完成所有指标数据采集,最终会导致prometheus侧显示丢点,建议方案:
    • 如果您能接受指标的精度降低,可以调整DataFreshIntervalSeconds到更高的时间,设置为120s或者300s,详情请参见LimitQPSGetMetricData接口限流
    • 适当的调大LimitQPSGetMetricData或者DataConcurrency参数,如果您不知道如何配置该参数,在1.0.18-rc1及以上版本支持自适应限流,可以删除该字段配置,使用默认配置。
    • 偶尔的抖动比如网络延迟,也有可能会造成偶尔的采集超时,错过了prometheus的采集周期。建议调大prometheus的采集频率,比如到1/5的DataFreshIntervalSeconds。
    scrape_configs:
      - job_name: "exporter"
        scrape_interval: 5s
        static_configs:
          - targets: ["localhost:9898"]
    

指标缺失或者无数据

  1. 确认访问exporter的<ip>:<port>/metrics接口是否正常。
  2. 确认prometheus中的Status页面Exporter的实例是否正常,也可查询prometheus的up指标判断。
    图片
  3. 确认云监控页面上是否有此指标。
  4. 通过日志和debug日志确认问题。
  5. 如果是触发了限流,那么建议减少指标量。详情请参见指标存在延迟
  6. 通过/meta/metric接口确认是否存在该指标。
  7. 通过/meta/object接口,确认是否存在相关实例,没有实例的话则不会有指标。
    1. 使用/meta/metric接口,获取指标的Namespace和SubNamespace。
    2. 查看/meta/object接口的响应,查看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的聚合粒度,可以通过QueryPeroid参数进行配置,默认为30s。
    2. 云监控页面的聚合粒度,和选择的时间范围有关。
      • 时间范围选择1小时,那么聚合粒度默认为30s。
      • 时间范围选择1天,那么聚合粒度默认为60s。
        因此,默认情况下Exporter的数据和云监控查询1小时的时间范围一般是一致的,和1天时间范围的数据有可能不一致。
  • prometheus/grafana查询中的step/interval参数也可能会影响最终的查询结果不一致,建议将其调整为与exporter的DataFreshIntervalSeconds参数保持一致。
    • prometheus
      图片
    • grafana
      图片

限流报错

限流的报错可以通过Exporter的日志,或者通过导入上述Exporter的Grafana看板的自监控指标来发现。

LimitQPSGetMetricData接口限流

云监控接口Quota默认为20QPS,Exporter请求接口的限流由QPS参数LimitQPSGetMetricData及并发参数DataConcurrency控制,1.0.18-rc1及以上版本默认会根据请求的实例数量及指标数量自适应动态调整。

  • 如果您的账号下仅部署一个exporter实例,建议直接将LimitQPSGetMetricData设置为账号的上限(默认账号上限为20)。
  • 如果您的账号下部署有多个exporter实例,建议删除LimitQPSGetMetricDataDataConcurrency 配置参数,使用默认自适应限流方式。
  • 1.0.18-rc0及以后版本,可以通过配置指标白名单采集方式,过滤掉不关注的指标,来降低Exporter请求云服务的QPS,从而可以减少Quota的占用。详情请参见云产品指标查询

通过配置来解决限流的问题的方式:

配置指标白名单采集(1.0.18及以上版本)

仅采集产品的部分指标,可通过配置OnlyIncludeMetrics字段,如下示例:

Region: cn-beijing
Credentials:
  AccessKey: '{ak}'
  SecretKey: '{sk}'
Products:
  - Namespace: VCM_ECS # 需要采集的产品
    OnlyIncludeMetrics: # 仅采集的指标列表
      Instance: # 指标的SubNamespace
        - CpuTotal # 具体的指标名称
        - MemoryUsedUtilization # 具体的指标名称
        - GpuUsedUtilization # 具体的指标名称
      GPU: # 指标的SubNamespace
        - GpuUsedUtilization  # 具体的指标名称
        - GpuMemoryUsedSpace  # 具体的指标名称

配置SubNamespace白名单采集(1.0.18及以上版本)

仅采集产品的部分SubNamespace指标,通过OnlyIncludeSubNamespaces字段配置,示例:

Region: cn-beijing
Credentials:
  AccessKey: '{ak}'
  SecretKey: '{sk}'
Products:
  - Namespace: VCM_ECS # 需要采集的产品
    OnlyIncludeSubNamespaces: # 仅采集的指标列表
      - Instance # 指标的SubNamespace

调大指标查询的batchsize大小

这个方式仅对您在某个地域产品实例数量比较大的场景(比如>10,甚至到>1000的场景有比较明显效果)。比如当使用默认BatchInstanceCount=10时,如果有1000个实例,那么每个指标会发送1000/10=100次请求,如果BatchInstanceCount=50,那么只需要发送1000/50=20次请求,会降低Quota的占用,但是极端情况下可能会请求延迟上涨。

Region: cn-beijing
Credentials:
  AccessKey: '{ak}'
  SecretKey: '{sk}'
BatchInstanceCount: 50 # 默认为10,最大50
Products:
  - Namespace: VCM_ECS # 需要采集的产品

调大数据刷新周期

如果您能接受降低数据的精度,录入由1分钟一个点,改为2分钟1个点,可以通过如下配置DataFreshIntervalSeconds参数。

Region: cn-beijing
Credentials:
  AccessKey: '{ak}'
  SecretKey: '{sk}'
DataFreshIntervalSeconds: 120 # 数据刷新周期,默认60s
Products:
  - Namespace: VCM_ECS # 需要采集的产品

需要同时降低LimitQPSGetMetricData或者删除LimitQPSGetMetricData参数配置使用自适应配置(1.0.18-rc1及以上版本支持)。

ListMonitorObjectsV2接口限流

该接口用于获取云产品的实例列表,接口的默认Quota为10,如果有多个Exporter实例,建议根据每个Exporter的产品数量比例来分摊这10个QPS,并通过LimitQPSMonitorObjectList参数设置。LimitQPSMonitorObjectList偶尔的被限流,一般不影响指标的数据拉取,只会影响元数据更新的时效性(新购实例监控数据延迟)。