将 Cloudprober 指标接入 AWS CloudWatch 与 Google Cloud Monitoring
将 Cloudprober 指标接入 AWS CloudWatch 与 Google Cloud Monitoring
【免费下载链接】cloudproberAn active monitoring software to detect failures before your customers do.项目地址: https://gitcode.com/gh_mirrors/clo/cloudprober
Cloudprober 是一款开源的主动监控(active monitoring)工具,能在真实用户发现问题之前,主动探测你的网站、API 与内部服务,提前发现故障。而它最强大的能力之一,就是通过内置的surfacer(指标导出器)机制,把采集到的监控指标一键导出到AWS CloudWatch与Google Cloud Monitoring(原 Stackdriver)等主流监控平台。本文将用最简单的方式,带你完成 Cloudprober 指标接入两大云监控平台的全过程。
什么是 Cloudprober 的 Surfacer(指标导出机制)
Cloudprober 的核心优势在于"一套探测、多处输出":它支持 Prometheus、OpenTelemetry、AWS CloudWatch、Google Cloud Monitoring、Google Pub/Sub、Postgres 等十余种输出方式,而且可以同时启用多个,互不干扰。这个负责导出的内置机制就叫 surfacer,你只需在配置文件中添加一段surfacer配置块,即可把指标实时推送过去。整体架构可参考上方的 Cloudprober 架构图:左侧是各类主动探测目标,右侧则是 Dashboards、SLOs、告警等下游消费方。
如果你不配置任何 surfacer,Cloudprober 会默认启用 Prometheus 与文件两种导出方式,方便本地调试。
一、把 Cloudprober 指标接入 AWS CloudWatch
1. 快速配置步骤
在 Cloudprober 配置文件中加入以下内容,即可启用 CloudWatch 导出:
surfacer { type: CLOUDWATCH }就这么简单!默认情况下,指标会发布到名为cloudprober的 CloudWatch 命名空间(namespace)下,指标维度(Dimensions)会自动携带探针名称、目标地址、协议类型等标签,方便你在 CloudWatch 控制台按维度筛选。相关实现可参考源码模块 internal/surfacers/cloudwatch/cloudwatch.go。
2. AWS 认证与 IAM 权限配置
CloudWatch surfacer 基于 AWS Go SDK,支持默认凭证链,按以下顺序自动寻找凭证:
- 环境变量;
- 共享凭证文件(~/.aws/credentials);
- ECS 任务 IAM 角色;
- EC2 实例 IAM 角色。
为了让 Cloudprober 有权限写入指标,你需要为对应角色配置如下 IAM 策略(注意命名空间要与下方配置一致):
{ "Version": "2012-10-17", "Statement": [ { "Condition": { "StringEqualsIgnoreCase": { "cloudwatch:namespace": "cloudprober" } }, "Action": ["cloudwatch:PutMetricData"], "Resource": ["*"], "Effect": "Allow", "Sid": "PutMetrics" } ] }3. 指定 AWS 区域
Cloudprober 确定写入区域的优先级为:配置中的 region 字段 → EC2 元数据 →AWS_REGION环境变量 →AWS_DEFAULT_REGION环境变量。推荐直接在配置里写死,避免歧义:
surfacer { type: CLOUDWATCH cloudwatch_surfacer { namespace: "/cloudprober/website/probes" region: "us-east-1" resolution: 60 } }4. 更细粒度的 CloudWatch 配置项
CloudWatch surfacer 的完整配置项定义在 internal/surfacers/cloudwatch/proto/config.proto 中,常用参数如下:
| 配置项 | 默认值 | 说明 |
|---|---|---|
namespace | cloudprober | CloudWatch 指标命名空间 |
resolution | 60 | 指标存储分辨率(秒),低于 60 会产生高分辨率计费 |
region | 自动检测 | 目标 AWS 区域 |
metrics_batch_size | 1000 | 单次批量写入的指标数上限(API 上限 1000) |
batch_timer_sec | 30 | 缓冲区最长保留时间,满批或超时即写入 |
5. 用 CloudWatch Metric Maths 计算差值
Cloudprober 导出的指标是累积值(counter),而 CloudWatch 大多展示快照值。要还原每个时间段的增量,可以借助 CloudWatch Metric Maths 的RATE与PERIOD函数:
RATE(m1) * PERIOD(m1)其中m1是 Cloudprober 指标的数学表达式 ID,例如namespace: cloudprober、metric name: latency、probe: 探针名。这样你就能在 CloudWatch 上得到与 Prometheusrate()等价的增量曲线。
二、把 Cloudprober 指标接入 Google Cloud Monitoring
1. 快速配置步骤
Google Cloud Monitoring(前身 Stackdriver)的接入同样简单,只需一行配置:
surfacer { type: STACKDRIVER }如果你运行在 GCP 上(VM 或 GKE Pod 具备 Cloud Monitoring 写入权限),这一句配置即可直接生效;否则需要额外指定 GCP 项目,并配置Google Application Default Credentials(应用默认凭证)。
2. 指标命名与监控前缀
默认情况下,指标会以custom.googleapis.com/cloudprober/<探针类型>/<探针名>为前缀导出。例如名为google_com的 HTTP 探针会生成:
custom.googleapis.com/cloudprober/http/google_com/total custom.googleapis.com/cloudprober/http/google_com/success custom.googleapis.com/cloudprober/http/google_com/latency你还可以通过monitoring_url自定义前缀,或用metrics_prefix调整层级(NONE/PROBE/PTYPE_PROBE)。完整参数见 internal/surfacers/stackdriver/proto/config.proto,示例配置可参考 examples/surfacers/stackdriver_surfacer.cfg。
3. 用 MQL 计算失败率与平均延迟
由于导出的都是计数类指标,直接看图意义不大。Google Cloud Monitoring 提供了强大的MQL(Monitoring Query Language),可以轻松算出更有价值的指标。比如计算失败率:
fetch global || { metric 'custom.googleapis.com/cloudprober/http/google_com/failure' ; metric 'custom.googleapis.com/cloudprober/http/google_com/total' } || align delta(1m) || join || div计算某个探针的平均延迟:
fetch global || { metric 'custom.googleapis.com/cloudprober/http/google_com/latency' ; metric 'custom.googleapis.com/cloudprober/http/google_com/success' } || align delta(1m) || join || div以上查询既可用于 Metrics Explorer 绘图,也能直接用来创建告警规则。
三、同时接入多个监控系统
Surfacer 的另一个亮点是可以同时配置多个。例如下面的配置同时启用了 Prometheus 与 Google Cloud Monitoring,且只把特定探针的指标导出到云平台:
surfacer { type: PROMETHEUS } surfacer { type: STACKDRIVER ignore_metrics_with_label { key: "probe" value: "sysvars" } }注意:一旦你显式声明了任一 surfacer,默认的 Prometheus 与文件导出就不会再自动生效,需要按需自行补齐。
四、进阶技巧:指标过滤与导出为 Gauge
- 按标签过滤:通过
allow_metrics_with_label/ignore_metrics_with_label控制导出范围,例如只导出ptype: http的指标,既能降低云监控费用,也让面板更干净。 - 按名称过滤:用
ignore_metrics_with_name: "validation_failure"屏蔽无用指标。 - 导出为 Gauge:设置
export_as_gauge: true后,指标以瞬时值而非累积值导出,计算平均延迟等场景会更直观(代价是丢失部分历史信息)。 - 增加失败指标:
add_failure_metric: true会额外导出 failure 计数,目前除 FILE 和 PUBSUB 外默认开启。
更多 Surfacer 机制与过滤说明可查阅官方文档 docs/content/docs/surfacers/overview.md、docs/content/docs/surfacers/cloudwatch.md 与 docs/content/docs/surfacers/stackdriver.md。
结语
通过 Cloudprober 内置的 surfacer 机制,把主动监控指标接入AWS CloudWatch与Google Cloud Monitoring只需寥寥数行配置,无需编写任何代码,即可把探测数据沉淀到云原生监控体系中,与既有告警、看板无缝衔接。再加上指标过滤、Gauge 导出、MQL / Metric Maths 等技巧,你完全可以把 Cloudprober 打造成多云环境下的统一主动监控底座。现在就动手把指标接入你的云监控平台,让故障暴露在真实用户之前吧!
【免费下载链接】cloudproberAn active monitoring software to detect failures before your customers do.项目地址: https://gitcode.com/gh_mirrors/clo/cloudprober
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
