You need to enable JavaScript to run this app.
导航
导出监控数据到Prometheus
最近更新时间:2024.09.18 11:46:54首次发布时间:2023.07.12 14:38:19

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

导出监控数据到托管Prometheus

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

导出监控数据到自建Prometheus

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

注意

  • 该功能处于公测阶段,暂时免费使用。如需使用该功能,请先开通按量计费,然后联系对应销售或售后人员进行开白。
  • Exporter 运行时使用的 AK/SK 需要至少拥有云监控的读权限CloudMonitorReadOnlyAccess,否则可能因权限不足导致请求失败,无法获取实例与监控数据。
    此外,如果您需要调用的指标和对象较多,可能会因为限频导致拉取失败,建议尽量将请求按照时间维度均摊。
  • Exporter 通过请求GetMetricData接口获取监控数据,会占用接口Quota,超限后获取指标会被限制。

使用说明

  • 安装Exporter需要将AK、SK作为运行参数。详情请参见访问密钥使用指南

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

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

    说明

    • 云产品的资源及其元信息发生变化后,在Exporter侧导出数据对应信息生效延迟大约在10分钟。
    • 可导出实例元信息字段,以实际Exporter的/meta/object返回字段为准。
    • 支持导出ProjectName的云产品,也支持按照ProjectName在导出时进行过滤,只导出指定Project下的云产品指标。

    产品分类

    产品名称

    Namespace

    导出ProjectName

    导出Tag

    可导出元信息字段
    (实际以/meta/objects返回为准)

    网络

    NAT网关

    VCM_NAT

    支持

    支持

    ProjectName,Name,Status,Spec,NetworkType

    负载均衡

    VCM_CLB

    支持

    支持

    ProjectName,Name,Status,Spec,VpcID,PrivateIP,PublicIP,Type,LoadBalancerBillingType

    应用型负载均衡

    VCM_ALB

    支持

    支持

    Name,Status,VpcID,PrivateIP,PublicIP,Type

    公网IP

    VCM_EIP

    支持

    支持

    ProjectName,Name,EipAddress,Status,Bandwidth

    共享带宽包

    VCM_BandwidthPackage

    支持

    支持

    ProjectName,Name,Bandwidth,Protocol

    云企业网

    注意

    该产品region需要配置为no-region

    VCM_CEN

    支持

    支持

    Name,Status

    专线连接-专线网关

    VCM_DirectConnectGateway

    -

    支持

    Name,Status

    专线连接-虚拟接口

    VCM_DirectConnectVIF

    -

    支持

    Name,Status,DirectConnectGatewayId,DirectConnectConnectionId,RouteType,VlanId

    互联网通道-公网带宽

    VCM_InternetTunnelBandwidth

    -

    -

    Name,Status,ISP,Bandwidth

    互联网通道虚拟接口

    VCM_InternetTunnelVirtualInterface

    -

    -

    Name,Status,InternetTunnelGatewayId,DirectConnectConnectionId,VlanId

    私网连接-私网连接网关

    注意

    该产品region需要配置为no-region

    VCM_PrivateLinkGateway

    -

    -

    Name,Status,VPC

    中转路由器

    VCM_TransitRouter

    支持

    -

    ProjectName,Name,Status

    中转路由器带宽包

    VCM_TransitRouterBandwidthPackage

    支持

    -

    ProjectName,Name,Status

    Anycast公网IP

    注意

    该产品region需要配置为no-region

    VCM_AnycastEIP

    -

    -

    Name,AnycastEipAddress,Status,Bandwidth

    存储

    对象存储

    注意

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

    VCM_TOS

    支持

    支持

    ProjectName,Name,Region

    文件存储vePFS

    VCM_vePFS

    -

    -

    Name,Status,StoreType,AZ

    弹性块存储

    VCM_EBS

    支持

    支持

    ProjectName,Name,Kind,Size,Status,VolumeType,ZoneId

    数据库

    云数据库MySQL版

    VCM_RDS_MySQL

    支持

    支持

    ProjectName,Name,Status,InstanceSpecStr,InstanceType,Zone,DBProxyStatus,DisplayIopsMetrics,DisplayNewMetrics,Display282Metrics,InstanceSubCategory

    云数据库veDB MySQL版

    VCM_veDB_MySQL

    -

    -

    Name,Status,NodeClass,DatabaseType,ZoneId,ShowChartType,Version,ShowIOPS

    云数据库PostgreSQL版

    VCM_RDS_PostgreSQL

    支持

    支持

    Name,Status,InstanceSpecStr,InstanceType,Zone,ShowCondition,ReadWriteSplitting

    缓存数据库Redis版

    VCM_Redis

    支持

    支持

    ProjectName,Name,Status,ZoneIds,EngineVersion,ProxyVersion,ServerVersion

    文档数据库MongoDB版-副本集

    VCM_MongoDB_Replica

    支持

    支持

    ProjectName,Name,Status,InstanceType,Zone

    文档数据库MongoDB版-分片集

    VCM_MongoDB_Sharded_Cluster

    支持

    支持

    ProjectName,Name,Status,InstanceType,Zone

    数据库传输服务 DTS

    VCM_DTS

    -

    -

    Name,TaskType,Status,TrafficSpec,SrcEndpointType,DestEndpointType

    表格数据库 HBase 版

    VCM_HBase

    -

    -

    Name,Status,ZoneId,EngineVersion

    弹性计算

    云服务器

    VCM_ECS

    支持

    支持

    ProjectName,Name,Status,AvailableZone

    CDN与加速

    内容分发网络

    注意

    该产品region需要配置为no-region

    VCM_CDN

    支持

    -

    ProjectName,Name,ServiceType,ServiceRegion,Status

    边缘计算-边缘智能

    注意

    该产品region需要配置为no-region

    VCM_VEI

    支持

    -

    ProjectName,Name

    中间件

    消息队列Kafka版

    VCM_Kafka

    -

    -

    Name,Status,TopicCount,GroupCount,EnableConnector,EnableDataSync

    消息队列RocketMQ版

    VCM_RocketMQ

    -

    -

    Name,Status,TopicCount,GroupCount,EnableConnector,Version

    消息队列RabbitMQ版

    VCM_RabbitMQ

    -

    -

    Name,Status,QueueCount

    云原生消息引擎

    VCM_BMQ

    -

    -

    Name,Status

    云搜索服务

    VCM_ESCloud

    -

    -

    Name,Zone,Status,ESVersion,MetricsVersion,SubInstanceEnable

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

步骤一:安装Exporter

  1. 在k8s集群中创建配置项。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cloud-monitor-exporter-conf
    data:
      conf.yaml: |
        Region: "cn-beijing"
        Credentials:
          AccessKey: "********"
          SecretKey: "********"
        ExtraLabels: ["Name"]  
        Products:
          - Namespace: "VCM_ECS"
    
  2. 根据实际情况配置yaml文件,然后在您的k8s集群中安装Exporter。

    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: "9898"
        spec:
          containers:
          - name: volc-cloud-monitor-exporter
            image: cloud-monitor-cn-beijing.cr.volces.com/cm/cloud-monitor-exporter:1.0.19
            args:
              - "--config=/conf/conf.yaml"
              - "--port=9898"
            resources:
              limits:
                memory: "128Mi"
                cpu: "500m"
            ports:
            - containerPort: 9898
            volumeMounts:
              - name: conf
                mountPath: /conf
          volumes:
            - name: conf
              configMap:
                name: cloud-monitor-exporter-conf
    

步骤二:配置Prometheus采集任务

以下配置示例仅供参考,具体配置方式请根据部署情况酌情修改。

普通采集任务

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:9898"] # 指向Exporter部署的IP:Port
        scrape_interval: 5s # 建议设置为数据刷新的1/5,exporter返回的数据带时间戳,一般不会增加云产品的指标存储数据量

(可选)允许RemoteWrite并开启乱序写入

Prometheus限制了数据的写入规则,不允许写入早于Prometheus最后采集的数据点的数据。因此数据补点和BackFilling需要通过乱序写入来完成。

  1. 打开乱序写入的窗口。

    storage:
      tsdb:
        out_of_order_time_window: 10m
    
  2. 开启Prometheus的RemoteWrite能力。

    # 在Prometheus的启动项中增加: --web.enable-remote-write-receiver参数
    ./prometheus --web.enable-remote-write-receiver
    

步骤三:验证数据

图片
参数说明:

参数

说明

指标名

Exporter导出的指标名为metricName_subNamespace_namespace
示例中Namespace为VCM_Redis,SubNamespace为aggregated_server,MetricName为AggregatedMemUtil,所以实际导出的指标名是AggregatedMemUtil_aggregated_server_VCM_Redis

指标数值

数值对应的value是Float类型,如果需要显示小数点后两位,请手动处理。

时间戳

GetMetricData动作返回的时间。产品当前指标的时间=GetMetricData返回的时间-DelaySeconds时间。
例如,调用GetMetricData接口查询指标的时间是10:00:00,用户配置的DelaySeconds为300秒(5分钟),那么10:05:00时才会查询到10:00:00的数据。

步骤四:完成更多配置

启动参数

-config string
        配置文件路径 (default "/conf/config.yaml")
  -enable-self-metrics
        是否启用自监控指标, 可选true/false (default true)
  -host string
        exporter 监听 EntPoint (default "0.0.0.0")
  -log-level string
        日志级别, 可选:
        - panic
        - fatal
        - error
        - warn/warning
        - info
        - debug
        - trace
        对大小写不敏感 (default "info")
  -port int
        exporter 监听端口 (default 9898)

配置文件

Exporter提供了高度自定义的配置,不仅提供了简单场景下的简易配置能力,还可以适配多种极端场景。

全量配置
Credentials:
  AccessKey: "********"
  SecretKey: "********"
Region: "cn-beijing"
Host: open.volcengineapi.com
MaxRetries: 3
BatchInstanceCount: 50
DataQueueSize: 100
DataConcurrency: 10
MetaFreshIntervalSeconds: 60
DataFreshIntervalSeconds: 60
Limiter:
  LimitQPSGetMetricData: 9
  LimitQPSMonitorObjectList: 9
EnableDynamicDelaySeconds: false
BehaviorWhenPullTimeout: WaitAndSkip
StatisticsType: "FIRST"
Products:
  - Namespace: "VCM_Kafka"
  - Namespace: "VCM_ECS"

config配置说明

注意

  • 如果云产品是全域产品,没有地域限制,Exporter配置中的Region必须设置为no-region
  • subnamespace的取值请参见各云产品指标文档的SubNamespace列。详情请参见云监控指标查询
  • metricname的取值请参见各云产品指标文档的MetricName列。详情请参见云监控指标查询
# 用户的认证信息
Credentials: <Credentials>

# 指定 Exporter 发起 API 请求的域名
[ Host: <String> | default = "open.volcengineapi.com" ]

# 获取指定 Region 的数据
[ Region: <String> | default = "cn-beijing"]

# 调用 API 的 5xx 状态码以及限流的重试次数.
[ MaxRetries: <Integer> | default = 3, range = [1, 3] ]

# 每次拉取指标的请求最大实例数量
[ BatchInstanceCount: <Integer> | default = 50, range = [1, 50] ]

# 内部请求体的队列长度
[ DataQueueSize: <Integer> | default = 100, range = [1, +] ]

# 执行拉取的线程数
[ DataConcurrency: <Integer> | default = 10, range = [1, +] ]

# 元数据拉取的刷新间隔
[ MetaFreshIntervalSeconds: <Seconds> | default = 60, range = [30, +] ]

# 指标数据拉取的间隔
[ DataFreshIntervalSeconds: <Seconds> | default = 60, range = [30, +] ]

# 对请求的限制配置
[ Limiter: <Limiter> ]

#
# 轮次超时: 是指指标拉取的时间超过了配置的 DataFreshIntervalSeconds. 
#
# 此配置描述 Exporter 在发生轮次超时后, 应该如何处理当前轮次和下一轮次的数据拉取.
#
# - SkipMissExecute: 本次拉取完成后, 跳过没有执行的轮次, 直接执行最新拉取.
# - ContinueMissExecute: 本次拉取完成后, 继续执行没有执行的轮次.
# - StopAndBackFilling: 停止本次拉取, 直接开始下一次拉取, 并把当前未完成的拉取请求放在离线队列中, 
#   然后通过 RemoteWrite 的方式写入 Prometheus.
[ BehaviorWhenPullTimeout: <String> | default = "" ]

# 回填配置, 仅在 BehaviorWhenPullTimeout = StopAndBackFilling 的时候, 才会生效.
[ OfflinePullConfig: <OfflinePullConfig> ]

#选填,拉取N个数据点, 再进行max、min、avg、last等计算, 默认FIRST取最早的值。只能是MAX/MIN/AVG/LAST/FIRST/COUNT/SUM其中的1个,不区分大小写
StatisticsType: <String>

#选填,产品数据延迟时间,对应exporter的查询结束时间=now-QueryDelaySeconds
QueryDelaySeconds: <Seconds | [0, +]>

#选填,产品数据查询范围时间,默认2分钟,查询的开始时间=查询的结束时间-QueryRangeSeconds
QueryRangeSeconds: <Seconds | [0, +]>

#选填,查询的Period,最小30s
QueryPeriodSeconds: <Seconds | [0, +]>

#选填,产品额外静态标签,最终会与全局配置的ExtraLabels合并去重,key为label name,value为label的value
[ StaticLabels: <String>:<String> ]

#选填,是否使用新的指标来打点实例元信息,默认为false,直接追加到原始指标上
MetaLabelWithNewMetric: <true|false>

#选填,元数据打点指标名称,若MetaLabelWithNewMetric为true该参数才有意义,默认为volc_resource_info
MetaLabelWithNewMetricName: <String>

#选填,产品额外标签,最终会与全局配置的ExtraLabels合并去重
ExtraLabels: <StringArray>

#选填,产品额外元信息Tag过滤正则规则,使用golang 正则,遵循RE2规范匹配Tag name,tag标签会默认增加tag_前缀
ExtraLabelsWithTagNameRegex:  <StringArray>

#必填 需要导出的产品列表, 如果没有声明产品列表, Exporter 不会导出指标. 
Products: <ProductConfig ...>

#选填,指标采集配置
Metrics: 
  <Namespace>
     <SubNamespace>: <MetricConfig ...>

Credentials配置说明
# 用户认证的 AccessKey
AccessKey: <String>

# 用户认证的 SecretKey
SecretKey: <String>

Limiter配置说明
# 调用云监控指标接口的 QPS
[ LimitQPSGetMetricData: <Integer> | default = ]

# 获取云监控指标元数据的 QPS
[ LimitQPSMonitorObjectList: <Integer> | default = ]

OfflinePullConfig配置说明
# 回填线程的请求 QPS 占总请求的比例.
[ RequestQPSRatio: <Float> | default = 0.3, range = [0.1, 0.9] ]
  
# 回填数据的并发数, 如果设置为 0, 则会被设置为 Config.DataConcurrency
[ Concurrency: <Integer> | default = 0, range = [0, +] ]
  
# 回填数据的请求池大小, 如果设置为 0, 则会被设置为 Config.DataQueueSize
[ DataQueueSize: <Integer> | default = 0, range = [0, +] ]

# 最大有效时间, 超过该时间的请求会被丢弃.
#
# 指标数据的拉取都会携带时间范围, 数据拉取的结果是请求的时间范围中的, 如果预估指标拉取的时间落
# 后于当前时间 - MaxAllowedOfflineDelayTime, 该请求会被丢弃. 
# MaxAllowedOfflineDelayTime 必须小于 Prometheus 配置的乱序写入时间范围, 否则会出现写入
# 失败的问题. Prometheus 乱序写入需要高版本的 Prometheus 支持.
#
# Prometheus OTLP: 
# https://prometheus.io/docs/prometheus/latest/querying/api/#otlp-receiver 
#
# Prometheus 提供了乱序写入的能力, 需要配置开启, 另外需要信任Exporter导出指标的时间戳
# > --------- prometheus.yml ---------------
# > scrape_config:
# >   honor_timestamps: true
# >
# > storage:
# >   tsdb:
# >     out_of_order_time_window: <Duration>
# > --------- prometheus.yml ---------------
[ PromOutOfOrderTimeWindow: <Duration> | default = ? ]
  
# Prometheus 的 RemoteWrite 地址.
#
# Exporter 通过 RemoteWrite 的方式进行数据回填, 如果 Prometheus RemoteWrite 地址为空, 
# 则数据无法回填到 Prometheus 中.
# 
# Prometheus 开启回填的方式:
# prometheus 开启 WriteAPI EndPoint:
# > ------- Prometheus start command -------
# > prometheus \
# >   --web.enable-remote-write-receiver \
# >   --config.file={FilePATH} \
# >   {其他参数}
# > ----------------------------------------
PromWriteAddress: <String>

[ PromBasicAuth: <PromBasicAuth>]

PromBasicAuth配置说明
# Prometheus 基础认证信息

# Prometheus web basic auth username.
Username: <String>

# Prometheus web basic auth password.
Password: <String>

ProductConfig配置说明
#必填,产品的命名空间
Namespace: <String>

#选填,仅采集指定project下的实例,如果为空,则采集所有project,会使用全局产品ProjectName,
ProjectName: <String>

#选填,产品额外标签,最终会与全局配置的ExtraLabels合并去重
ExtraLabels: <StringArray>

# 选填,产品额外元信息Tag过滤正则规则,使用golang 正则,遵循RE2规范匹配Tag name,tag标签会默认增加tag_前缀
ExtraLabelsWithTagNameRegex:  <StringArray>

#选填,拉取N个数据点, 再进行max、min、avg、last等计算, 默认FIRST取最早的值。只能是MAX/MIN/AVG/LAST/FIRST/COUNT/SUM其中的1个,不区分大小写
StatisticsType: <String>

#选填,产品数据延迟时间,对应exporter的查询结束时间=now-QueryDelaySeconds
QueryDelaySeconds: <Seconds | [0, +]>

#选填,产品数据查询范围时间,默认2分钟,查询的开始时间=查询的结束时间-QueryRangeSeconds
QueryRangeSeconds: <Seconds | [0, +]>

#选填,查询的Period,
QueryPeriodSeconds: <Seconds | [0, +]>

#选填,仅需要采集的子命名空间,默认导出所有子命名空间
OnlyIncludeSubNamespaces:
  [ - <SubNamespace> ]

#选填,排除采集子命名空间下的指标,默认导出所有指标
ExcludeSubNamespaces:
  [ - <SubNamespace> ]

#选填,仅需要采集的指标,key=子命名空间,默认导出所有指标
OnlyIncludeMetrics:
  [- <SubNamespace>: '[' <MetricName> [, ...] ']' ]

#选填,排除指标列表,key=sub-namespace,默认导出所有指标
ExcludeMetrics: <SubNamespace: StringArray...>
  [- <SubNamespace>: '[' <MetricName> [, ...] ']' ]

#选填,仅采集指定实例ID列表,默认导出所有实例
OnlyIncludeInstances: <StringArray>

#选填,排查采集实例ID列表,默认导出所有实例
ExcludeInstances: <StringArray>

MetricConfig配置说明
#必填,指标名称
MetricName: <String>

#选填,产品额外元信息Tag过滤正则规则,使用golang 正则,遵循RE2规范匹配Tag name,tag标签会默认增加tag_前缀
ExtraLabelsWithTagNameRegex:  <StringArray>

#选填,拉取N个数据点, 再进行max、min、avg、last等计算, 默认FIRST取最早的值。只能是MAX/MIN/AVG/LAST/FIRST/COUNT/SUM其中的1个,不区分大小写
StatisticsType: <String>

#选填,产品数据延迟时间,对应exporter的查询结束时间=now-QueryDelaySeconds
QueryDelaySeconds: <Seconds | [0, +]>

#选填,产品数据查询范围时间,默认2分钟,查询的开始时间=查询的结束时间-QueryRangeSeconds
QueryRangeSeconds: <Seconds | [0, +]>

#选填,查询的Period,最小30s
QueryPeriodSeconds: <Seconds | [0, +]>

StatisticsType配置说明

Exporter默认周期性从服务端拉取指标数据,每次拉取的时间范围默认为2分钟(可以通过QueryRangeSeconds参数自定义),一般包含N个数据点并默认会以其中时间戳最早的一个点作为当前轮次采集的数据点。对于部分稀疏打点或者指标数据有毛刺的场景,您可以选择每次拉取过去一段时间范围N个点的最大值/最小值或者其他采样方式(MAX/MIN/AVG/LAST/FIRST/COUNT/SUM中的一种),作为当前轮次的采样点。该参数支持指标粒度的配置。

特性

1. 健康检查与就绪探针

Exporter 提供了 /ready/health 接口用于存活和就绪检查。

健康检查

访问/health 接口会返回 content-type: text/plain; charset=utf-8 的响应信息:
状态码始终为 200

ok
  1. 在 Exporter 启动后, /health 接口就会开始工作, 并在 Exporter 停止运行前, 始终返回 ok
  2. 如果出现异常, /health 接口可能会出现超时、无响应等非预期返回。

就绪接口

Exporter 在完成第一次数据采集后,/ready 接口会返回 content-type: text/plain; charset=utf-8 的响应信息:
状态码始终为 200

ready
  • 如果 Exporter 没有完成第一次数据采集,/ready 接口会返回 not ready 信息。
  • 如果 /health 接口没有返回预期结果, 则 /ready 接口的返回不可信。

相关文档