实践背景
通常来说,监控系统的四个黄金指标(Four Golden Signals,参考Goole运维解密)是错误类指标、延迟类指标、流量指标、和饱和度指标,可以在服务级别衡量终端用户体验、服务质量、业务影响等层面的问题。以一个典型的电商服务关键路径(登录->产品浏览详情页->下单)举例。
针对图中三个服务,需要设定成功率等监控指标。传统的以实例(比如 IP )为监控对象的场景下,通常会对每个服务的实例都配置告警策略,用于满足最细粒度的告警对象质量监测,但也会带来一系列痛点:
- 需要针对每个实例都配置一条告警策略,告警策略太多,维护成本高。
- 缺乏整个业务层面的监控(监控对象是3个业务,而不是每个实例)。
- 业务异常时,多个实例同时触发告警,容易引起告警风暴。
- 对于其他维度的业务质量监控能力不足,比如业务分区部署,需要看某个区的质量情况等。
针对上述痛点,Prometheus 监控服务可以提供“优雅”的解决方案。通过将监控对象从实例扩展为不同标签(label),利用Prometheus 监控服务的多维能力,可以聚合出服务层面的宏观监控指标。详见下文。
监控场景
01
服务指标的宏观维度监控&告警场景
以上述电商服务关键路径举例。服务上报指标为成功率,上报标签为:服务名、IP 和区域。
相比传统只上报实例(IP)的单一标签,这里还扩展了服务名等其他标签。
在设置告警策略时,通过不同标签聚合,来解决上述提到的传统实例监控中碰到的痛点。具体步骤如下:
- 按服务维度的成功率看整体情况。
- 按服务&地区维度聚合,查看某个更细维度的质量 情况。
- 利用 PromQL 可以大幅降低告警策略数量(对比传统实例监控)。
02
服务指标的宏观维度监控&告警场景
一、指标定义&服务部署
1. 指标定义
定义服务需要上报的指标和标签。举例,这里上报指标为:成功率(svcSuccessRate)。标签为:服务名(svc),IP(ip),区域(region)。
2. 服务部署
服务可以通过虚拟机(CVM)的形式部署在云上(本文采用 CVM 的部署形式),也可以通过容器(TKE)的形式部署。
部署到 CVM 上,并检查是否正常暴露指标(示例中通过8581端口暴露指标)。
注:
1.Prometheus go client 提供了完善的指标接入库:https://github.com/prometheus/client_golang
2.更多语言 SDK 可参考:
https://cloud.tencent.com/document/product/1416/56027
二、配置抓取任务
1. 新建 Prometheus 实例后,可以通过标签来抓取部署在 CVM 上服务暴露的指标。
详见 cvm_sd_config 配置:https://cloud.ten
cent.com/document/product/1416/55995
2. 验证数据是否抓取成功。通过 Grafana 查询对应的指标和标签。
三、配置告警策略
1. 配置服务宏观层面的告警
当服务的成功率低于两个9(0.99)时告警。
效果如下图所示,当上报的三个服务(登录,查看产品详情页,下单)成功率低于0.99时,就会触发告警。
2. 配置服务更细维度的告警
当服务某个区域的成功率低于0.99时,触发告警。
效果如下图所示,当上报的三个服务(登录,查看产品详情页,下单)在某个地区的成功率低于0.99时,就会触发告警。
结 语
本文讨论了基于 Prometheus 监控服务多维能力的告警优化,以及在托管 Prometheus中的实现。欢迎您关注云原生,关注云监控,提升业务质量。
联系方式
如果您有任何疑问,欢迎添加云监控团队微信号,回复 Prometheus,进入专属用户群。