一、准备工作
1.1 安装或关闭以下服务
关闭防火墙等
linux时间校对
prometheus+grafana安装文档
1.2 本次安装环境
配置信息 | 说明 |
---|---|
服务器IP地址 | 192.168.1.10 |
系统版本 | CentOS7.4 |
内核 | ml-3.10.0 |
go版本 | 1.19.4 |
接上篇prometheus blackbox_exporter安装接着写。完成数据采集后,需要搭配上告警。
prometheus blackbox_exporter安装
二、安装alertmanager
2.1下载并解压
tar xf alertmanager-0.25.0.linux-amd64.tar.gz
2.2配置
mv alertmanager-0.25.0.linux-amd64 /home/alermanager #修改文件名称,并移动到指定位置
cd /home/alermanager
./alertmanager #启动
测试访问192.168.1.10:9093
三、告警配置
3.1创建文件
mkdir /usr/local/prometheus/rules #告警规则目录
mkdir /home/alermanager/tmplates #告警模版目录
3.2告警规则配置
编辑prometheus文件
vim /usr/local/prometheus/prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets: ["192.168.1.10:9093"]
rule_files: #告警规则位置
- "/usr/local/prometheus/*.yml"
编辑告警规则
vim /usr/local/prometheus/rules/http.yml
groups:
- name: 告警 #名称
rules:
- alert: google.com无法访问 #告警名称
expr: probe_success{job="http", instance="https://google.com"} == 0
for: 1m
labels:
severity: 紧急
annotations:
summary: "访问失败 {{ $labels.instance }}"
description: "检测到 {{ $labels.instance }} 访问失败已经超过1分钟."
- alert: baidu.com无法访问
expr: probe_success{job="http", instance="https://baidu.com"} == 0
for: 1m
labels:
severity: 紧急
annotations:
summary: "访问失败 {{ $labels.instance }}"
description: "检测到 {{ $labels.instance }} 访问失败已经超过1分钟."
3.3告警模版配置
编辑alertmanager文件
vim /home/alermanager/alertmanager.yml
global:
resolve_timeout: 5m
# 邮箱告警配置
smtp_hello: 'prometheus'
smtp_from: 'xxx@qq.com' #发送邮箱名称
smtp_smarthost: 'smtp.qq.com:465' # 其它邮箱请填写相应的host
smtp_auth_username: 'xxx@qq.com' #邮箱名称
smtp_auth_password: 'x' #邮箱密码
smtp_require_tls: false # qq邮箱需要设定
templates:
- '/home/alermanager/tmplates/*.tmpl' # 指定告警模板路径
receivers:
- name: email
email_configs:
- to: 'x@qq.com' #接收报警邮箱地址
headers: {"subject":'{{ template "email.header" . }}'}
html: '{{ template "email.html" . }}'
send_resolved: true # 发送报警解除邮件
route:
group_wait: 5s # 分组等待时间
group_interval: 5s # 上下两组发送告警的间隔时间
receiver: email
repeat_interval: 5m # 重复发送告警时间
inhibit_rules: # 告警抑制:当多级别规则同时生效时,只发送最高级别的告警
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname']
编辑告警模板
vim /home/alermanager/tmplates/test.tmpl # 告警模版
test.tmpl: |-
{{ define "email.header" }}
{{ if eq .Status "firing"}}[Warning]: {{ range .Alerts }}{{ .Annotations.summary }} {{ end }}{{ end }}
{{ if eq .Status "resolved"}}[Resolved]: {{ range .Alerts }}{{ .Annotations.resolve_summary }} {{ end }}{{ end }}
{{ end }}
{{ define "email.html" }}
{{ if gt (len .Alerts.Firing) 0 -}}
<font color="#FF0000"><h3>[Warning]:</h3></font>
{{ range .Alerts }}
告警级别:{{ .Labels.severity }} <br>
告警类型:{{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
{{- end }}
{{- end }}
{{ if gt (len .Alerts.Resolved) 0 -}}
<font color="#66CDAA"><h3>[Resolved]:</h3></font>
{{ range .Alerts }}
告警级别:{{ .Labels.severity }} <br>
告警类型:{{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.resolve_summary }} <br>
告警详情: {{ .Annotations.resolve_description }} <br>
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
恢复时间: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
{{- end }}
{{- end }}
{{- end }}
四、测试
将告警数值设置低,查看是否有告警和到时间后是否发邮件。不过文章中,关于告警内容太少,后续慢慢添加。
收到的邮件
[Warning]:
告警级别:紧急
告警类型:google.com无法访问
故障主机: https://google.com
告警主题: 访问失败 https://google.com
告警详情: 检测到 https://google.com 访问失败已经超过1分钟.
触发时间: 2023-08-20 14:23:31