prometheus自己不支持告警功能,主要經過插件alertmanage來實現告警。AlertManager用於接收Prometheus發送的告警並對於告警進行一系列的處理後發送給指定的用戶。node
prometheus觸發一條告警的過程:linux
prometheus--->觸發閾值--->超出持續時間--->alertmanager--->分組|抑制|靜默--->媒體類型--->郵件|釘釘|微信等。git
配置alertmanagergithub
global: resolve_timeout: 5m smtp_smarthost: 'smtp.163.com:25' smtp_from: 'xxx@163.com' smtp_auth_username: 'xxx@163.com' smtp_auth_password: 'xxxxxx' smtp_require_tls: false route: # route用來設置報警的分發策略 group_by: ['alertname'] # 採用哪一個標籤來做爲分組依據 group_wait: 10s # 組告警等待時間。也就是告警產生後等待10s,若是有同組告警一塊兒發出 group_interval: 10s # 兩組告警的間隔時間 repeat_interval: 20m # 重複告警的間隔時間,減小相同郵件的發送頻率 receiver: 'default-receiver' # 設置默認接收人 routes: # 能夠指定哪些組接手哪些消息 - receiver: 'default-receiver' continue: true group_wait: 10s - receiver: 'fping-receiver' group_wait: 10s match_re: #根據標籤分組,匹配標籤dest=szjf的爲fping-receiver組 dest: szjf receivers: - name: 'default-receiver' email_configs: - to: 'xxxxxxxx@qq.com' - name: "fping-receiver" webhook_configs: - url: 'http://127.0.0.1:9095/dingtalk' send_resolved: true
注意:以前報警了可是郵件一直沒有發送出去,# telnet smtp.163.com 25發現也不通,發現是騰訊雲作了限制,須要點擊25端口解封。 web
啓動alertmanagevim
# ./amtool check-config alertmanager.yml # 檢查配置
Checking 'alertmanager.yml' SUCCESS
Found:
- global config
- route
- 0 inhibit rules
- 1 receivers
- 0 templates服務器
# ./alertmanager --config.file='alertmanager.yml' # 啓動微信
web ui查看 : http://alertmanager_ip:9093工具
# vim prometheus.ymlui
alerting:
alertmanagers: # 配置alertmanager
- static_configs: - targets: - 127.0.0.1:9093 #alertmanager服務器ip端口 rule_files: # 告警規則文件 - 'rules/*.yml'
# vim rules/node.yml
groups:
- name: test rules: - alert: 內存使用率太高 expr: 100-(node_memory_Buffers_bytes+node_memory_Cached_bytes+node_memory_MemFree_bytes)/node_memory_MemTotal_bytes*100 > 30 for: 1m # 告警持續時間,超過這個時間纔會發送給alertmanager 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 }}]."
# 儘量把詳細告警信息寫入summary標籤值,由於告警短信/郵件/釘釘發送的內容使用了summary標籤中的值。
檢查告警規則,重啓prometheus
# ./promtool check rules rules/node.yml
Checking rules/node.yml
SUCCESS: 2 rules found
amtool 管理工具能夠查看:
# ./amtool alert --alertmanager.url=http://localhost:9093 Alertname Starts At Summary 內存使用率太高 2019-04-09 13:14:45 CST Instance 192.168.1.12:9100 內存使用率太高
在prometheus界面的alert能夠看到告警狀態。
收到郵件:
告警收斂(分組,抑制,靜默)
group_by: ['alertname'] # 以標籤做爲分組依據 group_wait: 10s # 分組報警等待時間 group_interval: 10s # 發送組告警間隔時間 repeat_interval: 1h # 重複告警發送間隔時間
inhibit_rules: - source_match: # 當此告警發生,其餘的告警被抑制 severity: 'critical' target_match: # 被抑制的對象 severity: 'warning' equal: ['id', 'instance']
靜默在alertmanager的web界面silence裏面配置,create silence。
配置完成後能夠看到
在這期間就收不到報警郵件了。