alertmanger使用の詳細

38074 ワード

1.配置
$ vim /root/alertmanager/config.yml
global:
  # resolve_timeout:      
  resolve_timeout: 5m
  # smtp_smarthost:   email      
  smtp_smarthost: 'smtp.126.com:465'
  # smtp_from:         
  smtp_from: '[email protected]'
  # smtp_auth_username:     
  smtp_auth_username: '[email protected]'
  # smtp_auth_password:    
  smtp_auth_password: 'xsk123'
  # smtp_require_tls:    tls
  smtp_require_tls: false

# route  :        
route:
  # group_by:             
  group_by: ['alertname']
  # group_wait:       
  group_wait: 10s
  # group_interval:             
  group_interval: 10s
  # repeat_interval:        。  1h
  repeat_interval: 1m
  # receiver         
  receiver: 'mail'

# receiver  :      
receivers:
# name:         
- name: 'mail'
  # email_configs:        
  email_configs:
    # to:     email
    - to: '[email protected]'

# inhibit_rules  :      ,    ,      
#inhibit_rules:
#  - source_match:
#      severity: 'critical'
#    target_match:
#      severity: 'warning'
#    equal: ['alertname', 'dev', 'instance']

svEdlmtIA-6joL79FCaL7ZYO27lYt_D6DbDgm6P_128
コンテナの実行

$ docker run -d -p 9093:9093 --name alertmanager docker.io/prom/alertmanager:latest
$ docker run -d -p 9093:9093 -v /root/alertmanager/config.yml:/etc/alertmanager/config.yml --name alertmanager docker.io/prom/alertmanager:latest #       

2.プロファイルの説明
Alertmanagerは主にPrometheusで発生したアラートの統一処理を担当するため、Alertmanager構成には一般的に以下の主要部分が含まれている:グローバル構成(global):グローバルのSMTP構成、Slack構成などのグローバルの共通パラメータを定義するために使用される.
  • テンプレート(templates):HTMLテンプレート、メールテンプレートなどのアラート通知を定義するテンプレート.
  • アラームルーティング(route):ラベルマッチングに基づいて、現在のアラームがどのように処理されるべきかを決定します.
  • 受信者(receivers):受信者は抽象的な概念であり、メールボックスでも微信でもよい.
  • SlackやWebhookなど、受信者は一般的に警報ルートに合わせて使用される.
  • 抑制ルール(inhibit_rules):抑制ルールを合理的に設定ことで、ゴミ警報の発生を減らすことができる
  • .
    global:
  • smtp_smarthost、smtp_from、smtp_auth_username、smtp_auth_password
  • の設定に使用
  • smtpメールのアドレスおよびユーザ情報
  • hipchat_auth_tokenはセキュリティ認証に関連する
  • resolve_Alertmanagerがアラートを受信しない時間がどれくらい続くかを定義するtimeout.このパラメータの定義は、アラートリカバリ通知の受信時間に影響を与える可能性があります.読者は、自分の実際のシーンに基づいて定義できます.デフォルトは5分です.

  • templates:
  • アラーム情報表示のテンプレート
  • を指定
    route:複数のRouteが存在し、1つのRouteに複数のGroupがあり、1つのGroupに複数のAlertがある
  • group_by:指定された次元を指定してアラートをグループ化する
  • group_wait:アラームの送信待ち時間を指定し、resolve_timeoutに基づいてAlertが解決するか否かを判断し、通知
  • を送信する.
  • group_interval:アラームスケジューリングの間隔を指定し、Alertが解決したかどうかを判断し、前回通知が現在に送信された間隔がrepeat_より大きい場合intervalまたはGroupが更新された場合に通知
  • が送信されます.
  • repeat_interval:連続アラームトリガの場合、アラームを繰り返す間隔
  • .
    routes
  • match_re:アラーム受信者のマッチング方法
  • を定義する
  • service:マッチングを定義する方法で、緯度service値はfoo 1またはfoo 2またはbazの開始/終了時にマッチング成功
  • を表す.
  • receiver:マッチングに成功した場合の受信者
  • を定義する
    receiver
  • アラートのデフォルトの受信者を指定する
  • receivers
  • は、具体的な受信者、すなわち、アラームの具体的な方式
  • を定義する.
    inhibit_rules
  • アラームの抑制条件を定義し、不要なアラーム
  • をフィルタリングする.
    3.構成例:
    3.1 receiver受信
    3.1.1微信受信
    receivers:
    - name: 'wechat'
      wechat_configs:
      - send_resolved: true
        api_secret: 'svEdlmtIA-6joL79FCaL7ZYO27lYt_D6DbDgm6P_128'
        corp_id: 'ww906049af7aae6271'
        api_url: "https://qyapi.weixin.qq.com/cgi-bin/"
        to_party: "1"
        to_user: '@all'
        agent_id: "1000002"
    

    3.1.2メールボックスの受信
    templates:
      [ - <filepath> ... ]
    receivers:
    - name: 'mengyuan'
      email_configs:
      - to: '[email protected]'
        html: '{{ template "email.mengyuan.html" . }}'
        headers: { Subject: "[WARN]     test" }
    

    3.2 inhibit_rules抑制' 'の警告がトリガーされると、' 'は抑制されます.
    inhibit_rules:
      - source_match:
          alertname: '      '
        target_match:
          alertname: '           '
        equal: ['ip']
    
      - source_match:
          alertname: '         '
        target_match:
          alertname: '          '
        equal: ['ip']
    

    alertnameはどこから来たのですか?Prometheusからのアラートプロファイルblackbox.rules.yaml
      - alert:          
        expr: probe_success{group=~"test"} == 0
        for: 2m
        labels:
          severity: "  "
        annotations:
          info: |
            {{ with query "time()+8*3600" }}{{ . | first | value | humanizeTimestamp | reReplaceAll "(.+)\\.(.*)" "$1" }} {{ end }} {{$labels.group}} {{$labels.ip}}        
          summary: "              ,         ,      。"
    

    4アラームテンプレート
    4.1微信テンプレート
    test1.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.message }}
        : {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
    ===    ===
    {{ if gt (len $alert.Labels.instance) 0 -}}    ip: {{ $alert.Labels.instance }};{{- end -}}
    {{- if gt (len $alert.Labels.namespace) 0 -}}      namespace: {{ $alert.Labels.namespace }};{{- end -}}
    {{- if gt (len $alert.Labels.node) 0 -}}     ip: {{ $alert.Labels.node }};{{- end -}}
    {{- if gt (len $alert.Labels.pod_name) 0 -}}  pod  : {{ $alert.Labels.pod_name }}{{- 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.message }}
        : {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
        : {{ $alert.EndsAt.Format "2006-01-02 15:04:05" }}
    ===    ===
    {{ if gt (len $alert.Labels.instance) 0 -}}    ip: {{ $alert.Labels.instance }};{{- end -}}
    {{- if gt (len $alert.Labels.namespace) 0 -}}      namespace: {{ $alert.Labels.namespace }};{{- end -}}
    {{- if gt (len $alert.Labels.node) 0 -}}     ip: {{ $alert.Labels.node }};{{- end -}}
    {{- if gt (len $alert.Labels.pod_name) 0 -}}  pod  : {{ $alert.Labels.pod_name }};{{- end }}
    =====================
    {{- end }}
    {{- end }}
    {{- end }}
    

    test2.tmpl
    {{ define "wechat.default.message" }}
    {{ range .Alerts }}{{ .Labels.severity }}{{ .Labels.alertname }}
        : {{ .Labels.instance }}
        : {{ .Annotations.summary }}
        : {{ .Annotations.description }}
        : {{ .StartsAt.Format "2006-01-02 15:04:05" }}
    {{ end }}
    {{ end }}
    

    4.2メールボックステンプレート
    最初の
        email.tmpl
    {{ define "email.mengyuan.html" }}
    <table>
        <tr><td>   </td><td>    </td></tr>
        {{ range $i, $alert := .Alerts }}
            <tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ $alert.StartsAt }}</td></tr>
        {{ end }}
    </table>
    {{ end }}
    

    2番目
    {{ define "test.html" }}
    <table border="1">
            <tr>
                    <td>   </td>
                    <td>  </td>
                    <td>    </td>
                    <td>    </td>
            </tr>
            {{ range $i, $alert := .Alerts }}
                    <tr>
                            <td>{{ index $alert.Labels "alertname" }}</td>
                            <td>{{ index $alert.Labels "instance" }}</td>
                            <td>{{ index $alert.Annotations "value" }}</td>
                            <td>{{ $alert.StartsAt }}</td>
                    </tr>
            {{ end }}
    </table>
    {{ end }}
    

    5. alertmanger API
    /api/v1/alerts
    /api/v1/status
    /api/v1/silences
    /silence/{silenceID}  get delete
    /api/v2/receivers
     /alerts/groups
    
    #       ,            (    30  3  ),            
    curl http://180.76.154.185:9093/api/v1/alerts
    [
      {
        "labels": {
          "": "",
          ...
        },
        "annotations": {
          "": "",
        },
        "startsAt": "",
        "endsAt": ""  #endsAt                 。  ,                       。
        "generatorURL": "" # generatorURL          ,                。
      },
      ...
    ]
    
    #      
    $ curl -H "Content-Type: application/json" -d ‘[{"labels":{"alertname":"TestAlert1"}}]’ http://180.76.154.185:9093/api/v1/alerts
    
    #      
    $ curl -H "Content-Type: application/json" -X POST -d '{"comment": "test1","createdBy": "test1","endsAt": "2019-02-20T18:00:59.46418637Z","matchers": [{"isRegex": false,"name": "severity","value": "critical"},{"isRegex": false,"name": "job","value": "prometheus"},{"isRegex": false,"name": "instance","value": "localhost:9090"},{"isRegex": false,"name": "alertname","value": "InstanceDown"}]}' http://alerts.example.org:9093/api/v1/silences
    
      silences
    $ curl -X DELETE http://alerts.example.org:9093/api/v1/silence/<silenceId>
    

    6.amtoolツール
    コマンドラインは、アラームの抑制、クエリーなどの操作を行うことができます.
    amtool check-config /monitor/alertmanager/config/alertmanager/alertmanager.yml
    #          
    amtool alert --alertmanager.url="http://127.0.0.1:9093"
    
    #      
    amtool silence query --alertmanager.url="http://127.0.0.1:9093"
    
    #       
    amtool silence query alertname=PodMemory  --alertmanager.url="http://127.0.0.1:9093"
    #    ,  comment_required   true,  comment       
    #alertname  Prometheus     alert
    #--start     
    #--end       
    amtool silence add alertname="PodMemory" container_name="elasticsearch" --start="2019-01-02T15:04:05+08:00" --end="2019-01-02T15:05:05+08:00" --comment="test"  -a "wuchen" --alertmanager.url="http://127.0.0.1:9093"
    
    #  
    amtool silence update --end="2019-02-02T15:05:05+08:00"  6cac2b37-4ce2-4af5-8305-9f47850d72a4  --alertmanager.url="http://127.0.0.1:9093"
    
    
    #docker    ,        /alertmanager,        ,           
    
    #           ,          ,    
    amtool silence query -o json --alertmanager.url="http://127.0.0.1:9093"
    #     json  
    amtool silence query -o json PodMemory > 1.json --alertmanager.url="http://127.0.0.1:9093"
    
    #    
    amtool silence expire 8188b168-1332-4398-83a5-a9df4263c60d --alertmanager.url="http://127.0.0.1:9093"
    
    #      
    amtool silence expire $(amtool silence query -q --alertmanager.url="http://127.0.0.1:9093") --alertmanager.url="http://127.0.0.1:9093"