云监控支持导出监控数据到托管Prometheus和自建Prometheus。
云监控是火山引擎云上一站式监控告警解决方案,可以帮助您收集并可视化展示火山引擎上多种类型云产品的资源状态和监控信息,包括云服务器、集群、网关、专线连接、云存储等。
您可以通过云监控提供的监控数据导出工具Exporter,将云监控中的云产品监控数据实时导出到托管Prometheus,与集群中的业务监控数据进行汇聚,实现业务数据和基础资源数据的统一监控。
同时,还可以借助托管Prometheus与Grafana的天然兼容性,使用Grafana搭建业务相关的大盘。详情请参见导出云监控数据到托管Prometheus。
导出数据到托管Prometheus的详细操作,请参见云监控接入。
如果您在云下已有完善的企业管理系统,可以通过云监控提供的监控数据导出工具Exportēr,将云上数据实时导出到线下进行统一监控,并持续写入Prometheus。Exporter安装在客户集群,通过OpenAPI调用云监控指标数据,以Prometheus协议对外吐出指标,您可以配置Prometheus采集任务进行采集。
注意
CloudMonitorReadOnlyAccess
,否则可能因权限不足导致请求失败,无法获取实例与监控数据。GetMetricData
接口获取监控数据,会占用接口Quota,超限后获取指标会被限制。安装Exporter需要将AK、SK作为运行参数。详情请参见访问密钥使用指南。
Exporter导出的数据是Gauge类型。
目前仅支持导出部分云产品。支持的Namespace:
说明
产品分类 | 产品名称 | Namespace | 导出ProjectName | 导出Tag | 可导出元信息字段 |
---|---|---|---|---|---|
网络 | 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需要配置为 | 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需要配置为 | VCM_PrivateLinkGateway | - | - | Name,Status,VPC | |
中转路由器 | VCM_TransitRouter | 支持 | - | ProjectName,Name,Status | |
中转路由器带宽包 | VCM_TransitRouterBandwidthPackage | 支持 | - | ProjectName,Name,Status | |
Anycast公网IP 注意 该产品region需要配置为 | VCM_AnycastEIP | - | - | Name,AnycastEipAddress,Status,Bandwidth | |
存储 | 对象存储 注意 Subnamespace为 | 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需要配置为 | VCM_CDN | 支持 | - | ProjectName,Name,ServiceType,ServiceRegion,Status |
边缘计算-边缘智能 注意 该产品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才能唯一标识一个指标,因为指标名在不同云产品下可以重名。
在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"
根据实际情况配置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
以下配置示例仅供参考,具体配置方式请根据部署情况酌情修改。
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返回的数据带时间戳,一般不会增加云产品的指标存储数据量
Prometheus限制了数据的写入规则,不允许写入早于Prometheus最后采集的数据点的数据。因此数据补点和BackFilling需要通过乱序写入来完成。
打开乱序写入的窗口。
storage: tsdb: out_of_order_time_window: 10m
开启Prometheus的RemoteWrite能力。
# 在Prometheus的启动项中增加: --web.enable-remote-write-receiver参数 ./prometheus --web.enable-remote-write-receiver
参数说明:
参数 | 说明 |
---|---|
指标名 | Exporter导出的指标名为metricName_subNamespace_namespace。 |
指标数值 | 数值对应的value是Float类型,如果需要显示小数点后两位,请手动处理。 |
时间戳 |
|
-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"
注意
# 用户的认证信息 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 ...>
# 用户认证的 AccessKey AccessKey: <String> # 用户认证的 SecretKey SecretKey: <String>
# 调用云监控指标接口的 QPS [ LimitQPSGetMetricData: <Integer> | default = ] # 获取云监控指标元数据的 QPS [ LimitQPSMonitorObjectList: <Integer> | default = ]
# 回填线程的请求 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>]
# Prometheus 基础认证信息 # Prometheus web basic auth username. Username: <String> # Prometheus web basic auth password. Password: <String>
#必填,产品的命名空间 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>
#必填,指标名称 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, +]>
Exporter默认周期性从服务端拉取指标数据,每次拉取的时间范围默认为2分钟(可以通过QueryRangeSeconds参数自定义),一般包含N个数据点并默认会以其中时间戳最早的一个点作为当前轮次采集的数据点。对于部分稀疏打点或者指标数据有毛刺的场景,您可以选择每次拉取过去一段时间范围N个点的最大值/最小值或者其他采样方式(MAX/MIN/AVG/LAST/FIRST/COUNT/SUM中的一种),作为当前轮次的采样点。该参数支持指标粒度的配置。
Exporter 提供了 /ready
和 /health
接口用于存活和就绪检查。
访问/health
接口会返回 content-type: text/plain; charset=utf-8
的响应信息:
状态码始终为 200
。
ok
/health
接口就会开始工作, 并在 Exporter 停止运行前, 始终返回 ok
。/health
接口可能会出现超时、无响应等非预期返回。Exporter 在完成第一次数据采集后,/ready
接口会返回 content-type: text/plain; charset=utf-8
的响应信息:
状态码始终为 200
。
ready
/ready
接口会返回 not ready
信息。/health
接口没有返回预期结果, 则 /ready
接口的返回不可信。