【Techo Day腾讯技术开放日】图解云原生监控系统 Prometheus 的原理
浅析监控系统 Prometheus 的原理
你好,我是悟空。
最近公司正在往云原生进行转型,想拥有一套适合当前项目的监控系统,基于这个出发点,我们团队考虑使用 Prometheus 和 Grafana 组件。本篇将会以图解的方式剖析 Prometheus 的原理。
本文主要内容如下:
一、Prometheus 是什么?
ELK Stack 日志收集和检索平台想必大家应该比较熟悉,Elasticsearch + Filebeat + Logstash + Kibana。
- Endpoint:端点,可以抓取的指标来源。
- Target:目标,包含了端点地址,端口的状态等信息。
下面是 Prometheus 抓取目标的配置:
- job\\_name: prometheus
static\\_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- Job:代表了一组相同角色或功能的目标。
- Instance:在当前主机上运行的 exporter 监控程序被称为一个实例。
抓取到目标的指标数据后,会生成时间序列数据,然后存储在 Prometheus 服务器本地,也可以设置从服务器发送数据到外部存储器或其他时间序列数据库。
三、Prometheus 采集方式
Prometheus 抓取数据可以通过**直接采集**和**间接采集**两种。
https://prometheus.io/docs/instrumenting/exporters/
五、PromQL
PromQL 看名字很 SQL 很像,它其实是另外一种查询语言。
Prometheus提供了一种功能强大的表达式语言 PromQL(Prometheus Query Language)。PromQL允许用户实时选择和汇聚时间序列数据,是 Prometheus 自己开发的数据查询 DSL(领域特定语言),使用这个查询语言能够进行各种聚合、分析和计算,使管理员能够根据指标更好地了解系统性能。
如下图所示,PromQL 内置在 Prometheus 中。通过 Prometheus WebUI、Grafana 和 API Clients 来进行查询。
下面是 Prometheus WebUI 界面:
下面是 Grafana 的界面:
六、监控告警
发送告警
Prometheus 告警规则触发后,告警规则被触发后,才会将信息发送给独立组件 Alertmanager 上,经过对告警的处理后,最终通过接收器(如Email)通知用户。(告警规则是在 Prometheus server 端定义的)
- 在 Prometheus 监控体系中,指标的采集存储与告警是分开的。
- 我们使用 Prometheus server 采集各类监控指标,然后基于PromQL对这些指标定义阈值告警规则(Rules)。
- Prometheus server对告警规则周期性地进行计算,如果满足告警触发条件,便生成一条告警信息,并将其推送到Alertmanager组件。
- 收到告警信息后,Alertmanager会处理告警,进行分组(grouping)并将它们路由(routing)到正确的接收器(receiver),如Email、钉钉等,最终把异常事件的通知发送给接收者。
七、总结
通过图解的方式,分别介绍了 Prometheus 的优势和劣势、指标收集、采集方式、Exporter、PromQL、监控告警,希望能给大家云原生的监控之路上带来一些启发~