alertmanger使用の詳細
38074 ワード
1.配置
svEdlmtIA-6joL79FCaL7ZYO27lYt_D6DbDgm6P_128
コンテナの実行
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:アラームの送信待ち時間を指定し、 を送信する. 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微信受信
3.1.2メールボックスの受信
3.2 inhibit_rules抑制
alertnameはどこから来たのですか?Prometheusからのアラートプロファイル
4アラームテンプレート
4.1微信テンプレート
test1.tmpl
test2.tmpl
4.2メールボックステンプレート
最初の
2番目
5. alertmanger API
6.amtoolツール
コマンドラインは、アラームの抑制、クエリーなどの操作を行うことができます.
$ 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構成などのグローバルの共通パラメータを定義するために使用される.
global:
templates:
route:複数のRouteが存在し、1つのRouteに複数のGroupがあり、1つのGroupに複数のAlertがある
resolve_timeout
に基づいてAlertが解決するか否かを判断し、通知routes
receiver
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"