Prometheus
Prometheus是一套开源的监控&报警&时间序列数据库的组合。对我来说,它跟 zabbix 最大的区别就是它没有模板,所有的告警规则都得自己写。。。
它有一套查询命令(promQL)可以进行很多的运算。
组成及架构
介绍以下几个常用的组件:
- Prometheus Server: 用于收集和存储时间序列数据。
exporters: 用于暴露已有的第三方服务的
metrics
给 Prometheus。Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,微信、钉钉等。
大概流程:
- Prometheus Server 定时去目标上抓取
metrics
,如配置好的 jobs、exporters ,每个目标需要暴露一个 http 接口给它定时抓取。 - Prometheus Server 存储收集到的
metrics
,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。 - Alertmanager 根据配置文件,对接收到的告警进行处理,并发出告警。
- Grafana 使用 Prometheus 作为数据源,根据收集到的
metrics
生成可视化数据
概念
数据模型
Prometheus 存储的数据为时间序列,由 metrics (指标名称) 和 label (一个或多个标签)组成。不同的 label 表示不同的时间序列。
每条时间序列是由唯一的指标名称和一组标签(key=value)的形式组成。
- 指标名称: 一般用于表示 metrics 的功能,例如 probe_http_status_code 这样
- 标签: 就是对一条时间序列不同维度的识别了。例如probe_http_status_code{instance="https://baidu.com",job="blackbox_http"}
四种数据类型(抄的)
- Counter
一种累加的 metric,典型的应用如:请求的个数,结束的任务数, 出现的错误数等等。
例如,查询 http_requests_total{method="get", job="Prometheus", handler="query"} 返回 8,10 秒后,再次查询,则返回 14。
- Gauge
一种常规的 metric,典型的应用如:温度,运行的 goroutines 的个数。
可以任意加减。
例如:go_goroutines{instance="172.17.0.2", job="Prometheus"} 返回值 147,10 秒后返回 124。
- Histogram
可以理解为柱状图,典型的应用如:请求持续时间,响应大小。
可以对观察结果采样,分组及统计。
例如,查询 http_request_duration_microseconds_sum{job="Prometheus", handler="query"} 返回的结果
Summary
类似于 Histogram, 典型的应用如:请求持续时间,响应大小。
提供观测值的 count 和 sum 功能。
提供百分位的功能,即可以按百分比划分跟踪结果。
instance 和 jobs
instance: 一个单独 scrape 的目标, 一般对应于一个进程。
jobs: 一组同种类型的 instances(主要用于保证可扩展性和可靠性),例如:
job 和 instance 的关系
- job_name: 'pxc' static_configs: - targets: ['172.18.201.66:9100', '172.18.201.67:9100', '172.18.201.68:9100']