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

导出监控数据到Prometheus

最近更新时间2024.02.23 11:31:05

首次发布时间2023.07.12 14:38:19

云监控支持导出监控数据到托管Prometheus和自建Prometheus。

操作视频

导出监控数据到托管Prometheus

云监控是火山引擎云上一站式监控告警解决方案,可以帮助您收集并可视化展示火山引擎上多种类型云产品的资源状态和监控信息,包括云服务器、集群、网关、专线连接、云存储等。您可以通过云监控提供的监控数据导出工具Exportor,将云监控中的云产品监控数据实时导出到托管Prometheus,与集群中的业务监控数据进行汇聚,实现业务数据和基础资源数据的统一监控。同时,还可以借助托管Prometheus与Grafana的天然兼容性,使用Grafana搭建业务相关的大盘。详情请参见导出云监控数据到托管Prometheus

导出监控数据到自建Prometheus

如果您在云下已有完善的企业管理系统,可以通过云监控提供的监控数据导出工具Exportor,将云上数据实时导出到线下进行统一监控,并持续写入Prometheus。Exportor安装在客户集群,通过OpenAPI调用云监控指标数据,以Prometheus协议对外吐出指标,您可以配置Prometheus采集任务进行采集。

注意

  • 该功能处于公测阶段,暂时免费使用。如需使用该功能,请先开通按量计费,然后联系对应销售或售后人员进行开白。
  • Exporter依赖GetMetricData接口,GetMetricData接口单请求最多支持批量拉取10个实例的监控数据,单请求的数据点数限制为1440个。
    如果您需要调用的指标和对象较多,可能会因为限频导致拉取失败,建议尽量将请求按照时间维度均摊。

使用说明

  • 安装Exportor需要将AK、SK作为运行参数。

  • 请求OpenAPI需要占用接口Quota,超限之后获取指标会被限制。

  • Exporter导出的数据是Gauge类型。

  • 目前仅支持导出部分云产品。支持的Namespace:

    Namespace

    产品名

    VCM_NAT

    NAT网关

    VCM_CLB

    负载均衡

    VCM_ALB

    应用型负载均衡

    VCM_EIP

    公网IP

    VCM_TOS

    对象存储

    注意

    Subnamespace为
    account_overview的指标,不支持通过Exporter导出数据到Prometheus。

    VCM_DirectConnectConnection

    专线连接-物理专线

    VCM_DirectConnectGateway

    专线连接-专线网关

    VCM_DirectConnectVIF

    专线连接-虚拟接口

    VCM_RDS_MySQL

    云数据库MySQL版

    VCM_MongoDB_Replica

    文档数据库MongoDB版-副本集

    VCM_MongoDB_Sharded_Cluster

    文档数据库MongoDB版-分片集

    VCM_Redis

    缓存数据库Redis版

    VCM_vePFS

    文件存储vePFS

    VCM_ECS

    云服务器

    VCM_veDB_MySQL

    云数据库veDB MySQL版

    VCM_RDS_PostgreSQL

    云数据库PostgreSQL版

    VCM_BandwidthPackage

    共享带宽包

    VCM_InternetTunnelBandwidth

    互联网通道-公网带宽

    VCM_InternetTunnelVirtualInterface

    互联网通道虚拟接口

    VCM_Kafka

    消息队列Kafka版

    VCM_BMQ

    云原生消息引擎

  • 给定Namespace、SubNamespace、MetricName才能唯一标识一个指标,因为指标名在不同云产品下可以重名。

步骤一:安装Exporter

根据实际情况配置yaml文件,然后在您的k8s集群中安装。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: volc-cloud-monitor-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: volc-cloud-monitor-exporter
  template:
    metadata:
      labels:
        app: volc-cloud-monitor-exporter
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9988"
    spec:
      containers:
      - name: volc-cloud-monitor-exporter
        image: cloud-monitor-cn-beijing.cr.volces.com/cm/cloud-monitor-exporter:1.0.16.1
        args:
          - "--config=/conf/conf.yaml"
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 9988
        volumeMounts:
          - name: conf
            mountPath: /conf
      volumes:
        - name: conf
          configMap:
            name: cloud-monitor-exporter-conf

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: cloud-monitor-exporter-conf
data:
  conf.yaml: |
    Region: 'cn-beijing' #【字符串】想导出的指标所在region,默认为cn-beijing
    Credentials:
      AccessKey: '填您的火山AK' #需要有 CloudMonitorReadOnlyAccess 权限
      SecretKey: '填您的火山SK'
    DelaySeconds: 120
    DataConcurrency: 2
    DataQueueSize: 100
    MetaFreshIntervalSeconds: 120
    DataFreshIntervalSeconds: 60
    MaxRetries: 2
    Limiter:
      LimitQPSGetMetricData: 5
      LimitQPSMonitorObjectList: 5
    Namespaces: #需要导出的云产品,必填,参见使用说明中"支持的Namespace",建议按需选择,可能影响性能
      - '需要导出的云产品1'
      - '需要导出的云产品2'

步骤二:配置采集job

以下仅为一个示例,具体配置方式请您视部署情况而定。

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9988"] #指向部署的ip

步骤三:验证数据

Exporter导出的指标名为metricName_subNamespace_namespace。
例如,Namespace为VCM_ECS,SubNamespace为GPU,MetricName为GpuTemperature,那么实际导出的指标名则是GpuTemperature_GPU_VCM_ECS

(可选)步骤四:完成更多配置

启动参数

Usage of ./exporter:
  -config string
        配置文件路径 (default "/conf/config.yaml")
  -enable-self-metrics
        是否启用自监控指标, 可选true/false (default true)
  -log-level string
        日志级别, 可选debug/info (default "info")
  -metric-meta-path string
        metric元信息接口 (default "/meta")
  -metric-monitor-objects-path string
        metric监控对象接口 (default "/monitor_objects")
  -metric-path string
        exporter的metrics路径 (default "/metrics")
  -port int
        exporter的端口 (default 9988)

配置文件

注意

如果云产品是全域产品,没有地域限制,Exporter配置中的Region必须设置为no-region

## Region 地域配置
## 地域配置, 默认为 "cn-beijing", 不支持多选, 如果有多个 Region 需要配置, 对每个 Region 启动一个
##   Cloud-Monitor-Exporter 实例.
##
## 可选地域列表:
##   cn-beijing
##   cn-guangzhou
##   no-region
##   cn-shanghai
##   cn
##   ...
Region: ""

## 权限认证
##
## 用户 AKSK 配置, 请确保该 AKSK 代表的账号(或子账号)拥有 CloudMonitorReadOnlyAccess 权限.
##
## AccessKey, SecretKey 均为火山平台的权限管控中的 AccessKey, SecretKey. 如果相关 AKSK 没有
##   CloudMonitorReadOnlyAccess, 在获取数据信息时将会报错:无权限. 具体失败原因可通过 Export 
##   日志获取. 对于报错信息请参考 Exporter 常见错误处置方式.
##
## 如果 AccessKey, SecretKey 的内容或格式错误, 将会报错: 错误的认证请求头. 对于报错信息请参考 
##   Exporter 常见错误处置方式.
Credentials: 
  ## 用户 AccessKey
  AccessKey: "" 
  ## 用户 SecretKey
  SecretKey: ""
  
## 请求重试
##
## 云监控 Exporter 在请求接口报错后, 会进行指定次数的重试. 最大值为 3. 默认为 1.
MaxRetries: 1 #

## 主动限制
##
## 云监控获取数据的接口存在一定量的 QPS 限制, 限制与 AccountID 对应. 是指某个账号下, 每秒最大请求
##   次数. 此限制无法通过启动多个 Exporter 进行逃逸. 而且如果账号有存在其他调用相关 API 的情况, 也
##   会被计算在 QPS 限制内. 如果有此类需求, 可以通过主动限制 Exporter 的 QPS, 降低其他场景的 QPS
##   限制触发的概率.
##
## 例如: 存在业务场景, 调用云监控 API 获取某类数据指标(GetMetricData), 并且预计调用 QPS 为 6, 
##   则 Exporter 最高 QPS 不可以超过 4, 此种场景下可以通过设置:
##   Limiter.LimitQPSGetMetricData: 3 限制. 不设置为 4 的原因是保留一定的容错. Exporter 的 QPS
##   计算请参考 Exporter 配置项中的 DataFreshIntervalSeconds 参数.
##
## Exporter 对 QPS 限制触发的处理方式:
##   Exporter 对暂停本轮次数据获取, 并等待 QPS 数据满足要求后继续执行. 然后根据上次暂停的时间重新
##   开始获取. 在暂停恢复后, 并不会导致数据断连, 云监控会依次请求数据.
Limiter:
  ## API: GetMetricData QPS 限制
  LimitQPSGetMetricData: 9
  ## API: ListMonitorObject QPS 限制 
  LimitQPSMonitorObjectList: 9
  
## 火山引擎 OpenAPI 请求域名地址.
##
## 默认为线上默认域名: open.volcengineapi.com
Host: ""

# 行为控制

## 延迟配置
##
## 由于时序流的特性, 往往数据点写入时间有一定的延迟. 因此需要配置一定量的时间偏移, 一次保证每次拉取的
##   数据是稳定有效的. 比如写入时间为 2023-12-01 10:00:00, 但是指标的实际时间(表示指标实际表达的
##   时间) 为: 2023-12-01 09:58:00 (不同产品\指标的具体时间含义不同). 如果在 09:58:00 时间点
##   查询该时间点数据是无效的, 至少需要在 10:00:00 时间点查询 09:58:00 的数据. 此延迟为 120(秒).
##
## 单位: 秒
##
## 支持针对不同产品单独配置延迟时间, 如果在 'Namespaces' 配置块中没有声明 DelaySeconds, 则使用该值. 
DelaySeconds: 120 

## EnableDynamicDelaySecond 是否允许 Exporter 根据具体产品动态判断 DelaySeconds.
##
## 开启后, 其优先级高于产品配置中的 DelaySeconds.
EnableDynamicDelaySecond: true

## 元数据刷新间隔.
##
## 每间隔 MetaFreshIntervalSeconds 进行元数据刷新, 最小为 30 秒.
MetaFreshIntervalSeconds: 30

## 指标数据刷新间隔
##
## 每间隔 DataFreshIntervalSeconds 进行数据刷新, 每次获取 DataFreshIntervalSeconds 时间长度
##   的数据.
## 
## 最小为 30 秒.
DataFreshIntervalSeconds: 30 

## 每次获取元数据的最大数量.
##
## 最大为 50. Exporter 会自动拆分请求, 使每次请求最大元数据不超过该值. QPS 限制会导致每次刷新元数据
##   的耗费时间不同.
BatchInstanceCount: 50

## 数据查询队列长度
##
## 该值影响 Exporter 的内存\CPU 消耗. 最大不超过 10000, 默认为 0.
DataQueueSize: 0

## 并发请求量
##
## 受 QPS 限制. 最大不超过 5, 建议使用默认 1.
DataConcurrency: 1

## 需要获取的产品列表
##
## 支持多种数据格式(可同时存在):
##   字符串: "namespace1"
##   结构体:
##   Namespace: "namespace1"
##   DelaySeconds: 100
##
# 样例:
# Namespaces:
# - "VCM_ECS"
# - Namespace: "VCM_EIP"
#   DelaySeconds: 60
## 如果 DelaySeconds 配置为 0,则使用全局的 DelaySeconds. DelaySeconds 参考 DelaySeconds 字段.
##
## 如果开启了 EnableDynamicDelaySecond 则 Exporter 尝试自动处理, 当处理失败后, 使用 Namespace 中的
##   DelaySeconds 字段值.
Namespaces:
  - "namespace1"
  - "namespace2"
  - Namespace: "namespace3"
    DelaySeconds: 50
  
## 产品维度配置
##
## 根据 Namespaces 配置项配置.  
SubNamespaces: 
  namespace1: # namespace1 字段来源于配置中 Namespaces 配置块.
    - subNamespace1-1
    - subNamespace1-2
    
  namespace2:
    - subNamespace2-1
    - subNamespace2-2
    
## 排除维度配置, 可省略
ExcludeSubNamespaces:
  namespace1:
  -  subNamespace1-3

## 指标配置
Metrics: 
  namespace1:
    subNamespace1-1:
      - metric1-1-1
      - metric1-1-2
    subNamespace1-2:
      - metric1-2-1
  namespace2:
    subNamespace2-1:
      - metric2-1-1
      
## ProjectName 产品配置, 表示仅获取火山某个项目下的资源数据. 如果某些产品不支持 Project, 则直接获取
##   全部数据. 如果配置了产品, 每个 Exporter 实例仅获取一个项目的数据.
ProjectName: ""   
     

说明

  • subnamespace的取值请参见各云产品指标文档的SubNamespace列。详情请参见云产品监控指标
  • metricname的取值请参见各云产品指标文档的MetricName列。详情请参见云产品监控指标

异常排查方案

查看配置文件

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;如果还是会超,那么可以适当再调小参数。

Exporter更新日志

下文记录Exporter的版本更新记录。

2023-12

Exporter版本cloud-monitor-cn-beijing.cr.volces.com/cm/cloud-monitor-exporter:1.0.16.1

  • 功能更新
    • 支持给不同的云产品配置不同的延迟时间,解决极端情况下由于未配置不同的延迟时间导致无数据的情况。
    • 支持动态延迟和时间偏移,Exporter动态调整查询数据的时间,保证每次拉取数据都是有效和完整的。