一.Prometheus:配置获取node_export的JOB
我们可以修改 Prometheus 的配置文件,将服务器加到 scrape_configs 中:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'server'
static_configs:
- targets: ['xx.xx.xx.xx:9100']
增加你要监控的node_export
地址
- job_name: 'node_export_20'
static_configs:
- targets: ['10.3.3.20:9100']
- 修改配置后,需要重启 Prometheus 服务
- 在 Prometheus Web UI 的 Status -> Targets 中,可以看到新加的服务器
二.Prometheus:整合Prometheus-rule
- 编写Prometheus规则文件
# vim /opt/monitor/soft/prometheus-2.13.0.linux-amd64/rule.yml
groups:
- name: alert-rules #告警的分组,后续告警优化时,可通过分组做优化配置
rules:
- alert: InstanceStatus #告警规则名称
expr: up{job="node_export_6"} == 0 #1是服务正常 ,0服务挂了
for: 10s #评估等待10s,等待期间报警状态为pending
labels: #此标签可用于match之后的通知操作
severity: 'critical'
annotations: #描述告警信息
summary: "实例: {{ $labels.instance }} 服务挂了"
description: "job: {{ $labels.job }} 服务挂了,请检查服务."
- 这里的
expr
需要熟悉PromQL语法 -
severity
跟下面的alertmanager模块路由相关
- Prometheus配置文件读取规则文件
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:19093']
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "/opt/monitor/soft/prometheus-2.13.0.linux-amd64/rule.yml"
# - "first_rules.yml"
# - "second_rules.yml"
其中:
-
targets: ['localhost:19093']
写alertmanagers的服务地址 -
rule_files
配置对应的规则文件,重新启动Prometheus
三.AlertManager模块告警配置
上面配置好规则,接下来我们需要在alertmanager模块进行配置。
3.1 自定义消息模版
告警通知使用的是默认模版,因为它已经编译到二进制包了,所以我们不需要额外配置。如果我们想自定义模版,这又该如何配置呢?
步骤一: 下载官方默认模版
$ wget https://raw.githubusercontent.com/prometheus/alertmanager/master/template/default.tmpl
步骤二: 根据自己的需求修改模版,主要是下面这一段
其中:node_export.html
为自定义,跟后面配置alertmanager.yml
要一致。
{{ define "node_export.html" }}
.... // 修改内容
{{ end }}
步骤三: 修改 alertmanger.yml,添加 templates 配置参数
templates: #默认Alertmanager使用系统自带的默认通知模板 ,用户也可在此自定义模板
#- '/opt/monitor/soft/alertmanager-0.19.0.linux-amd64/template/*.tmpl'
- './template/*.tmpl'
最后保存重新加载配置即可。
步骤四: 创建一个自定义模板文件
样例
{{ define "node_export.html" }}
{{ if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:
<br/>
{{ range .Alerts}}
告警级别: {{ .Labels.severity }}
<br/>
告警类型: {{ .Labels.alertname }}
<br/>
故障主机: {{ .Labels.instance }}
<br/>
告警主题: {{ .Annotations.summary }}
<br/>
告警详情: {{ .Annotations.description }}
<br/>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
Alerts Resolved:
{{ range .Alerts}}
告警级别: {{ .Labels.severity }}
<br/>
告警类型: {{ .Labels.alertname }}
<br/>
故障主机: {{ .Labels.instance }}
<br/>
告警主题: {{ .Annotations.summary }}
<br/>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
<br/>
恢复时间: {{ .EndsAt.Format "2006-01-02 15:04:05" }}
{{- end }}
{{- end }}
{{- end }}
3.2 配置文件alertmanager.yml
路由和email模板引用
下面需要配置文件alertmanager.yml
进行配置
- 配置email地址和引用的模板
receivers:
- name: 'node-export'
email_configs:
- to: 'xxx@xxx.cn'
send_resolved: false #告警解除发送恢复通知
html: '{{ template "node_export.html" . }}' #应用哪个模板
headers: { Subject: "node-export服务告警" } #邮件主题信息 如果不写headers也可以在模板中定义默认加载email.default.subject这个模板
不同报警发送不同的邮箱,每个邮箱的模板都可以自定义。
- 配置路由
route: #顶级路由必须匹配所有报警,因为他要接受所有报警,再分匹配到分支路由上
group_by: ['alertname'] ##将传入警报分组在一起的标签。例如,cluster=A和alertname=LatencyHigh的多个警报将批处理为单个组。
group_wait: 30s #当传入的警报创建新的警报组时,至少等待"30s"发送初始通知。
group_interval: 5m #当发送第一个通知时,等待"5m"发送一批新的警报,这些警报开始针对该组触发。 (如果是group_by里的内容为新的如:alertname=1,alertname=2 会马上发送2封邮件, 如果是group_by之外的会等待5m触发一次)
repeat_interval: 10m #如果警报已成功发送,请等待"4h"重新发送,重复发送邮件的时间间隔
receiver: 'default-receiver'
routes: #分支路由,可设置不同的匹配规则
- receiver: 'default-receiver'
match: #匹配告警规则的key:value
severity: 'critical'
- receiver: 'node-export'
match: #匹配告警规则的key:value
severity: 'node-export'
其中的这一段匹配路由
- receiver: 'node-export'
match: #匹配告警规则的key:value
severity: 'node-export'
- 重启alertmanager模块