AlertManager 之微信告警模板,UTC時間錯8個小時的解決辦法


注意事項:
alertmanager中的web頁面顯示的報警時間是UTC時間,錯8個小時,企業微信報警模板中已經修改過來了

下面配置可以作為參考:
1.prometheus操作
1.1 配置告警規則,參考地址:https://www.cnblogs.com/sanduzxcvbnm/p/13589792.html,https://www.cnblogs.com/sanduzxcvbnm/p/14759693.html
1.2 修改告警通知發送的alertmanager地址

# 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).
  #external_labels: 
  #  origin_prometheus: prometheus
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "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: 'node'
    static_configs:
    - targets: ['localhost:9100']


  - job_name: 'mysql'
    static_configs:
    - targets: ['localhost:9104']
      labels:
        instance: park_single_db

2.配置alertmanager
2.1 修改配置文件,設置告警參數

# vim /etc/alertmanager/alertmanager.yml
global:
  resolve_timeout: 10m

templates:
  - 'config/*.tmpl'

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
  receiver: 'wechat'

receivers:
- name: 'wechat'
  wechat_configs:
  - send_resolved: true
    wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
    wechat_api_corp_id: '企業id,在企業的配置頁面可以看到'
    agent_id: '應用的AgentId,在應用的配置頁面可以看到'
    api_secret: '應用的secret,在應用的配置頁面可以看到'
    # 接收者或者是用戶或者是部門,選一個就行
    to_user: '@all' 
    #to_party: ' PartyID1 | PartyID2 '
# 抑制作用可以不要
#inhibit_rules:
#  - source_match:
#      severity: 'critical'
#    target_match:
#      severity: 'warning'
#    equal: ['alertname', 'instance','job']

2.2 設置企業微信告警模板
如果不配置自定義模板,發出的消息會非常雜亂,我們自定義的配置模板示例如下:
vim /usr/local/alertmanager/config/wechat.tmpl

{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********告警通知**********
告警類型: {{ $alert.Labels.alertname }}
告警級別: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主題: {{ $alert.Annotations.summary }}
告警詳情: {{ $alert.Annotations.description }}
故障時間: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} # 注意這行,時間默認UTC 所以后邊加入28800e9 也就是多了8個小時 
{{ if gt (len $alert.Labels.instance) 0 -}}故障實例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}

{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********恢復通知**********
告警類型: {{ $alert.Labels.alertname }}
告警級別: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主題: {{ $alert.Annotations.summary }}
告警詳情: {{ $alert.Annotations.description }}
故障時間: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} # 注意這行
恢復時間: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} # 注意這行
{{ if gt (len $alert.Labels.instance) 0 -}}故障實例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}
{{- end }}

另一種解決UTC時間的辦法

{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********告警通知**********
告警類型: {{ $alert.Labels.alertname }}
告警級別: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主題: {{ $alert.Annotations.summary }}
告警詳情: {{ $alert.Annotations.description }}
故障時間: {{ $alert.StartsAt.Local.Format "2006-01-02 15:04:05" }} # 注意這行
{{ if gt (len $alert.Labels.instance) 0 -}}故障實例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}

{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********恢復通知**********
告警類型: {{ $alert.Labels.alertname }}
告警級別: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主題: {{ $alert.Annotations.summary }}
告警詳情: {{ $alert.Annotations.description }}
故障時間: {{ $alert.StartsAt.Local.Format "2006-01-02 15:04:05" }}
恢復時間: {{ $alert.EndsAt.Local.Format "2006-01-02 15:04:05" }}
{{ if gt (len $alert.Labels.instance) 0 -}}故障實例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}
{{- end }}

兩者比較

重啟應用

分析:
1.報警分組
根據告警規則中設置的規則,進行告警,相同的告警進行分組

  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h


2.默認接收告警
receiver: 'wechat'
接收告警的可以根據告警來源,告警嚴重程度等進行分別發送告警,這個屬於路由分組功能,具體參考:https://www.cnblogs.com/sanduzxcvbnm/p/14247590.html

3.receivers
這個是實際執行告警的,名稱要跟上一步的保持一致

4.抑制器

# 抑制器配置
inhibit_rules: # 抑制規則
  - source_match: # 源標簽警報觸發時抑制含有目標標簽的警報
      severity: 'critical'  # 此處的抑制匹配一定在最上面的route中配置不然,會提示找不key。
    target_match:
      everity: 'warning' # 目標標簽值正則匹配,可以是正則表達式如: ".*MySQL.*"
    equal: ['alertname', 'instance',"job"] # 確保這個配置下的標簽內容相同才會抑制,也就是說警報中必須有這三個標簽值才會被抑制。

效果
1.單獨的一個告警通知

2.有多條告警通知,但是分組合並在一個通知里發送


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM