Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB),使用Go语言开发,比Heapster功能更完善、更全面,其性能也足够支撑上万台规模的集群。
AlertManager主要用于接收Prometheus发送的告警信息,支持丰富的告警通知渠道,例如邮件、微信、钉钉、Slack等常用的沟通工具,而且很容易实现对告警信息进行去重、降噪、分组等,是一款非常好用的告警通知系统。
部署AlertManager
下载
访问Prometheus官方下载页面,下载对应的版本。
wget https://github.com/prometheus/alertmanager/releases/download/v0.22.1/alertmanager-0.22.1.linux-amd64.tar.gz tar zxvf alertmanager-0.22.1.linux-amd64.tar.gz mv alertmanager-0.22.1.linux-amd64 /usr/local/alertmanager cd /usr/local/alertmanager
配置
AlertManager的默认配置文件是alertmanager.yml,配置如下(自带webhook告警):
route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - url: 'http://127.0.0.1:5001/' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
启动
# 启动前检查配置 ./amtool check-config alertmanager.yml # 默认启动 ./alertmanager # 后台启动 ./alertmanager &
配置开机自启
创建/etc/systemd/system/alertmanager.service,添加以下内容:
[Unit] Description=alertmanager After=network.target [Service] WorkingDirectory=/usr/local/alertmanager ExecStart=/usr/local/alertmanager/alertmanager --config.file=alertmanager.yml --log.level=debug --log.format=json Restart=on-failure [Install] WantedBy=multi-user.target
重载服务并设置开机启动:
systemctl daemon-reload systemctl enable alertmanager systemctl start alertmanager
配置Prometheus
修改prometheus.yml启动告警系统:
alerting: # 配置alertmanager alertmanagers: - static_configs: # AlertManager服务器列表 - targets:['localhost:9093'] # 指定告警规则文件 rule_files: - 'rules/*.yml'
告警规则
创建一个告警规则rules/node_exporter.yml,并加载至prometheus.yml中。
groups: - name: node-resource rules: - alert: 内存使用率过高 expr: 100-(node_memory_Buffers_bytes+node_memory_Cached_bytes+node_memory_MemFree_bytes)/node_memory_MemTotal_bytes*100 > 30 # 告警持续时间,超过这个时间才会发送给alertmanager for: 1m labels: severity: warning annotations: summary: "Instance {{ $labels.instance }} 内存使用率过高" description: "{{ $labels.instance }} of job {{$labels.job}}内存使用率超过80%,当前使用率[{{ $value }}]." - alert: cpu使用率过高 expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)*100 > 0 for: 1m labels: severity: warning annotations: summary: "Instance {{ $labels.instance }} cpu使用率过高" description: "{{ $labels.instance }} of job {{$labels.job}}cpu使用率超过80%,当前使用率[{{ $value }}]."
告警状态
状态 | 说明 |
inactive | 表示当前报警信息即不是firing状态也不是pending状态 |
pending | 表示在设置的阈值时间范围内被激活的 |
firing | 表示超过设置的阈值时间被激活的,此时将正式发送告警通知至接收者 |
示例
因为AlertManager支持丰富的告警通知渠道,因此参数配置远不止默认配置那么简单,至少包含email_config、hipchat_config、pagerduty_config、pushover_config、slack_config、opsgenie_config、victorops_config,本文以配置邮件和微信告警为例,详细讲述相应参数:
# 全局配置项 global: # 可在自定义模板中获取 # smtp_from: '{{ template "email.from" . }}' # smtp_auth_username: '{{ template "email.from" . }}' smtp_from: 'xxx@olzl.cn' smtp_smarthost: 'smtp.olzl.cn:465' smtp_auth_username: 'fw1@olzl.cn' smtp_auth_password: '*********' smtp_require_tls: false wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 定义模板信息 templates: - 'template/*.tmpl' # 定义路由树信息 route: group_by: ['alertname'] # 告警分组依据 group_wait: 10s # 发送第一次告警的等待时间 group_interval: 10s # 发送新一组告警的等待时间 repeat_interval: 3m # 发送重复告警的周期 receiver: 'email' # 告警接收者的组名称 # 定义警报接收者信息 receivers: # 邮箱报警配置 - name: 'email' # 告警接收者的名称 email_configs: # 配置邮箱告警 - to: 'xxx@olzl.net' # 告警接收者的邮箱 html: '{{ template "email.html" . }}' # 邮箱内容的模板 headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题 # Webhook报警配置 webhook_configs: - url: 'http://127.0.0.1:5001' send_resolved: true # 企业微信报警配置 wechat_configs: - send_resolved: true to_party: '1' # 告警接收组的ID agent_id: '1000002' # 企业微信→自定应用→AgentId corp_id: '******' # 企业信息(我的企业→CorpId) api_secret: '******' # 企业微信(企业微信→自定应用→Secret) message: '{{ template "wechat.html" . }}' # 微信消息的内容模板 inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
模板
在启动AlertManager时,会自动加载在配置文件中由templates模块指定的模板。
邮件告警模板示例template/email.tmpl:
{{ define "email.from" }}xxx@olzl.cn{{ end }} {{ define "email.to" }}xxx@olzl.net{{ end }} {{ define "email.tmpl" }} {{ range .Alerts }} =========start==========<br> 告警程序:prometheus_alert <br> 告警级别:{{ .Labels.severity }} 级 <br> 告警类型:{{ .Labels.alertname }} <br> 故障主机:{{ .Labels.instance }} <br> 告警主题:{{ .Annotations.summary }} <br> 告警详情:{{ .Annotations.description }} <br> 触发时间:{{ .StartsAt.Format "2021-06-01 12:00:00" }} <br> =========end==========<br> {{ end }} {{ end }}
微信告警模板示例template/wechat.tmpl:
{{ define "wechat.tmpl" }} {{ range $i, $alert := .Alerts.Firing }} [报警名称]:{{ index $alert.Labels "alertname" }} [实例名称]:{{ index $alert.Labels "instance" }} [报警阀值]:{{ index $alert.Annotations "value" }} [开始时间]:{{ $alert.StartsAt }} {{ end }} {{ end }}
原创文章禁止转载:技术学堂 » Prometheus部署AlertManager告警(附邮件和微信示例)