跳到正文

指标与告警规则 ​

Beacon 判断所依据的一切都是 VictoriaMetrics 里的指标,每条告警都是在其上计算的 vmalert 规则(数据来源)。本页按家族列出指标,以及参考部署在 deploy/rules/ 里自带的每条告警规则——每条都指向 deploy/runbooks/ 里它的手册。自己的规则也照这样写:vmalert 的格式,像发给 Alertmanager 一样发给网关,带上标签 severity 和 service、注释 summary。

每个指标从哪来 ​

  • 检测点推送检测结果和各位置的主机指标到网关,网关按目录打标签(数据来源)。
  • 中心导出自己的状态,在 /metrics、17001 端口,只应答直连:VictoriaMetrics 每分钟抓取一次,按 deploy/metrics/scrape.yml 的配置,连同 vmalert 和 VictoriaMetrics 自己。
  • 检测程序随每次推送报告它自己,所以每个位置的队列和推送错误按位置可见。

中心自己的指标 ​

在 /metrics 上(参考抓取配置里的 job beacon):

指标标签含义
beacon_build_infoversion、go运行中的构建
beacon_start_time_seconds服务何时启动
beacon_bridge_ready此刻告警能否送到人,1 表示能
beacon_alert_groups_firingseverity触发中的告警群,按级别
beacon_alerts_firing路由器持有的触发中告警
beacon_notifications_totalchannel、result已发送的通知,按渠道和结果
beacon_feishu_api_calls本月飞书应用 API 调用,对着预算
beacon_gateway_requests_totalroute、code指标网关的请求,按路径和状态码
beacon_gateway_changes_limited_total因令牌每分钟发送超过 60 个而被拒的变更事件
beacon_probe_now_requests_open等检测点应答的按需检测请求
beacon_probe_now_requests_totalAgent 发起的按需检测请求
beacon_probe_now_answers_totallocation检测点对按需检测请求的应答
beacon_probe_now_missing_totallocation没有按时应答的位置
beacon_expected_locationlocation、region、network此刻应该上报的每个位置为 1:谁没了声音一条规则就能查出
beacon_heartbeat_max_age_secondsheartbeat、severity、machine心跳多久没上报就告警,来自目录
beacon_resource_expiry_timestamp_secondsresource、kind服务器、域名、证书或令牌何时到期,来自目录
beacon_rotation_resolve_successrotationCDN 集群的 DNS 名是否解析成功
beacon_rotation_membersrotationCDN 集群的 DNS 名解析出几个地址
beacon_location_in_rotationlocation、rotation、role位置的 CDN 节点是否在其集群的 DNS 应答里
beacon_rotation_unknown_addressrotation、address目录里没有位置认领的一个应答地址
beacon_token_expiry_timestamp_secondstoken、subjectAPI 或网关令牌何时过期
go_goroutines、go_memstats_heap_inuse_bytes、go_memstats_sys_bytes、process_resident_memory_bytes进程本身

检测结果 ​

沿用 Blackbox Exporter 的指标名,为谁写的规则都能用:probe_success、probe_duration_seconds、probe_http_status_code、probe_ssl_earliest_cert_expiry,另有两者:probe_failure_info{reason} 说明失败原因,beacon_probe_attempts 说明试了几次。网关给每个结果打上目录里的 location、region、network 和 host 标签,目标自己的标签——service、severity、failure_domain、module——直达规则和卡片。

主机以 node_* 指标上报,读自 /proc(node_cpu_seconds_total、node_memory_*_bytes、node_disk_*_total、node_network_*_total、node_time_seconds);心跳是一个样本:beacon_heartbeat_last_success_timestamp_seconds{heartbeat}。

检测程序自己 ​

随每次推送上报,因此按位置可见:beacon_probe_build_info、beacon_probe_targets、beacon_probe_queue_batches 和 beacon_probe_queue_bytes(磁盘上等着发给网关的内容)、beacon_probe_push_errors_total、beacon_probe_last_push_timestamp_seconds。

告警规则 ​

参考规则是四个文件;每组说明自己看哪个指标。deploy/rules/probes.yml 里的记录规则(beacon: 系列)承载中间步骤——一个位置持续失败 3 分钟才算失败,一个服务一天的可用率是 avg_over_time(beacon:service_up[1d])——告警建立在它们之上。

服务可用性 ​

deploy/rules/probes.yml,基于 probe_success{job="probe"}。一个位置说了不算:至少两个位置失败、且不少于上报位置的一半,才算服务中断。

告警级别持续何时
ServiceDown目标的 severity;没有则 critical1m服务在至少一半上报位置(且至少两个)失败 3 分钟
ServiceDegradedwarning5m至少两个位置失败,但不到一半:部分故障,通常是一个 CDN 节点或一条网络路径
MainlandPathDegradedwarning5m所有大陆位置失败而海外成功:是从中国大陆出去的路径,不是服务
ProbeLocationDownwarning5m一个位置 10 分钟没有上报(beacon_expected_location 对 probe_success)

会到期的东西 ​

deploy/rules/expiry.yml,基于目录的导出、检测点看到的证书和心跳的样本。

告警级别持续何时
ResourceExpiringwarning,之后 critical—目录里的资源 30 天内到期;7 天内转紧急
CertificateExpiringwarning,之后 critical—各位置看到的最早证书到期时间在 14 天内;7 天内转紧急(Let's Encrypt 提前 30 天续期,14 天意味着续期已两次落空)
HeartbeatStale心跳自己的 severity—任务没有在它的 max_age 内上报成功
HeartbeatMissing心跳自己的 severity1d目录里的心跳从未上报(新的心跳有一天先成功一次)

DNS 轮换 ​

deploy/rules/cdn.yml,基于 beacon_location_in_rotation 及其同类,面向写了地址和轮换的 CDN 节点。

告警级别持续何时
CDNNodeOutOfRotationwarning15m主节点活着,集群 DNS 却不回答它的地址:它不服务任何人
CDNStandbyInRotationinfo5m备用节点在服务:某个主节点故障或被摘除
CDNRotationUnknownAddresswarning30m轮换回答了一个目录里没有位置认领的地址:没人在看的节点
CDNRotationResolveFailingwarning10m轮换的 DNS 名从监控主机解析不出来

监控本身 ​

deploy/rules/meta.yml,基于对中心、vmalert 和 VictoriaMetrics 的抓取(deploy/metrics/scrape.yml)。「监控挂了」不是这里的规则:Watchdog 一直在触发,Beacon 收到它且告警能送达时每分钟 ping 一次 healthchecks.io;整台机器停下时 ping 停下,healthchecks.io 从外部报警。

告警级别持续何时
Watchdognone(从不展示)—链路正常时一直在触发;Beacon 把它计入就绪判断
VMAlertRuleErrorswarning5mvmalert 评估某个规则组失败;组里的告警可能不触发
VictoriaMetricsDiskLowwarning10m数据卷可用空间低于 5 GB;低于下限后 VictoriaMetrics 不再收数据
GatewayErrorswarning10m网关某条路径连续 10 分钟答服务器错误,通常是 VictoriaMetrics 拒写
ProbeQueueBacklogwarning15m某位置的检测程序磁盘队列超过 8 MB;到 64 MB 会丢最老的批次