AlertManager和Prometheus Server一样,均采用Golang实现。并且没有第三方依赖。
AlertManager 下载地址如下
https://prometheus.io/download/

解压下载的amd64 zip文件

使用nssm.exe 把alertmanager.exe注册成系统服务

在浏览器打开127.0.0.1:9093 验证服务是否启动

Alert菜单下可以查看Alertmanager接收到的告警内容
Silences菜单下则可以通过UI创建静默规则
Status菜单,可以看到当前系统的运行状态以及配置信息
我们来配置 alertmanager.yml 文件 (主要配置SMTP信息和email接收方信息)
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.notepad.com.cn:25'
smtp_from: 'test@notepad.com.cn'
smtp_auth_username: ''
smtp_auth_password: ''
smtp_require_tls: false
templates:
- 'email.tmpl'
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'user@notepad.com.cn'
html: '{{ template "email.to.html" . }}'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname']
接着我们创建一个 email.tmpl 文件 代码如下:
{{ define "email.to.html" }}
{{ if gt (len .Alerts.Firing) 0 }}{{ range .Alerts }}
@告警: <br>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Local }} <br>
{{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}{{ range .Alerts }}
@恢复: <br>
告警主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
恢复时间: {{ .EndsAt.Local }} <br>
{{ end }}
{{ end }}
{{ end }}
然后去修改普罗米修斯程序的prometheus.yml 文件 Alertmanager configuration 中写上127.0.0.1:9093 rule_files: 写上first_rules.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
- job_name: "Windows"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["127.0.0.1:9182"]
再次在普罗米修斯目录新建一个配置文件 名为 first_rules.yml 其中expr: up 为你需要报警的job_name: “Windows”
groups:
- name: node-rules
rules:
- alert: node-up
expr: up{job="Windows"} == 0
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{$labels.instance}}Instance has been down for more than 15 seconds"
alert:告警规则的名称。
expr:基于 PromQL 表达式告警触发条件,用于计算是否有时间序列满足该条件。
for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在 等待期间新产生告警的状态为 pending。
labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations 的内容在告警产生时会一同作为参数发送到 Alertmanager。
summary 描述告警的概要信息,description 用于描述告警的详细信息。
同时 Alertmanager 的 UI 也会根据这两个标签值,显示告警信息。
Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing
第一种:Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。
第二种:Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所 以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。
第三种:Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警 报解除,则将状态转到 Inactive,如此循环。