一、Prometheus 指标收集
下图是 Prometheus WebUI 界面,里面展示了 Targets 和 Endpoint,说明了当前哪些目标服务是可以被 Prometheus 抓取的。
-
Endpoint:端点,可以抓取的指标来源。
-
Target:目标,包含了端点地址,端口的状态等信息
下面是 Prometheus 抓取目标的配置:
- job_name: mysqld
static_configs:
- targets: ['192.168.0.100:9104']
labels:
instance: mysql-exporter
-
Job:代表了一组相同角色或功能的目标。
-
Instance:在当前主机上运行的 exporter 监控程序被称为一个实例。
抓取到目标的指标数据后,会生成时间序列数据,然后存储在 Prometheus 服务器本地,也可以设置从服务器发送数据到外部存储器或其他时间序列数据库。
二、 Prometheus定义告警规则
groups:
- name: mysql_exporter
rules:
- alert: MySQL Down
expr: mysql_up==0
for: 1m
labels:
job: "{
{$labels.job}}"
group: "{
{$labels.group}}"
project: "{
{$labels.project}}"
env: "{
{$labels.env}}"
instance: "{
{$labels.instance}}"
hostIp: "{
{$labels.hostIp}}"
target: "{
{$labels.target}}"
level: 4
threshold_duration: "1分钟"
annotations:
role: "{
{$labels.role}}"
- alert: MySQL服务已重启
expr: mysql_global_status_uptime < 60
labels:
job: "{
{$labels.job}}"
group: "{
{$labels.group}}"
project: "{
{$labels.project}}"
env: "{
{$labels.env}}"
instance: "{
{$labels.instance}}"
hostIp: "{
{$labels.hostIp}}"
target: "{
{$labels.target}}"
level: 3
annotations:
role: "{
{$labels.role}}"
在告警规则文件中,我们可以将一组相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)。一条告警规则主要由以下几部分组成:
- alert:告警规则的名称。
- expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
- for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警,在等待期间新产生告警的状态为pending。
- labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
- annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。