概要
Prometheus には蓄積したデータからアラートを発泡することができます
アラートの種類はさまざまあり Slack や Gmail などに通知することができます
アラートを通知するには AlertManager というプロセスを立ち上げる必要があります
今回は AlertManager の構築方法と構築した Prometheus サーバとの連携方法を紹介します
また簡単な通知のテストを Slack を使ってやってみました
環境
- Ubuntu 16.04 LTS
- Prometheus 2.4.2
- Prometheus AlertManager v0.15.2
- docker 18.03.1-ce
事前準備
Prometheus サーバの構築と Slack の Incomming Webhook のインテグレーションの設定は済ませておいてください
Prometheus サーバに AlertManager を登録する
まずは Prometheus サーバに通知を依頼する AlertManager を登録します
登録するには YAML ファイルを編集して Prometheus サーバを再起動します
- vim prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- '192.168.100.20:9093'
alertmanagers ディレクティブを使います
192.168.100.20
は AlertManager です
あとでこのサーバ上で AlertManager を構築します
ポートは AlertManager デフォルトの 9093 を使用します
Prometheus サーバに監視ルールを登録する
Prometheus に蓄積データを使って通知を飛ばすには監視ルールを作成する必要があります
ここで言う監視ルールとは単純に「CPU 使用率 80%」などのルールになります
ルールを登録するには例のごとく YAML ファイルを編集します
ちなみにルールを UI から追加することはできないので新規で監視ルールを追加する場合はルール用の設定ファイルを毎度編集する必要があります
- vim prometheus.yml
rule_files:
- 'alerts.rule'
alerts.rule ファイルを別途作成しここに監視のルールを記載します
ルールも YAML で定義します
Prometheus のバージョン 2 からルールも YAML で定義できるようになりました
バージョン 1 を使っている場合は監視ルールの YAML 定義が使えないので注意してください
groups:
- name: 'Containers monitoring'
rules:
- alert: 'container_1 cpu usage alert'
expr: container_cpu_usage_seconds_total{name=~"container_1",cpu="cpu01"} > 80
for: 5s
annotations:
summary: 'container_cpu_usage_seconds_total:container_1 > 80'
ポイントは expr
と for
と annotatins.summary
になります
expr
は監視する式を記載します
container_cpu_usage_seconds_total
は cAdvisor の exporter を使って取得できるデータになります
cAdvisor と Prometheus を連携する方法はこちらを参照してください
あとは引数に監視するコンテナ名と CPU が複数あるので 1 つ分の CPU を指定します
この値が > 80
になったときにアラートが発泡されます
> 80
は単純に CPU 使用率が 80% を越えたらという条件になります
for
は > 80
の条件がどれだけの期間続いたらアラートを発泡するかの指定になります
つまり 5s を指定した場合は 1 秒や 2 秒だけ 80% を越えてもアラートは来ません
annotations.summary
はアラート時のメッセージになります
今回は使っていませんが $value
などの変数が使えます
CPU の使用率などが変数に展開されるのでそれを通知内容に含めることができます
AlertManager 用の設定ファイルを作成する
AlertManager 用の設定ファイルには主に通知先の設定を記載します
今回は Slack に通知するので Slack の Incomming Webhook の URL やチャネルなどを定義します
- vim alertmanager.yml
route:
receiver: 'containers_notification'
receivers:
- name: 'containers_notification'
slack_configs:
- api_url: 'https://hooks.slack.com/services/xxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx'
channel: '#general'
text: "{{ .CommonAnnotations.summary }}"
send_resolved: true
api_url
や channel
に関しは Slack の情報を入力してください
ポイントは {{ .CommonAnnotations.summary }}
でルールで定義した annotatins.summary
の内容を参照することができます
AlertManager を起動する
今回は Docker で起動します
docker run -d -p 9093:9093 --name alertmanager -v $(pwd):/alertmanager prom/alertmanager --config.file=/alertmanager/alertmanager.yml
で 9093 で LISTEN すれば OK です
ブラウザでアクセスすると簡単な管理画面を確認することができます
alertmanager: error: unknown short flag '-c', try --help
というエラーが出る場合は引数を見直してください
--config.file
でハイフンが 2 つ指定が必要です
-config.file
でハイフンが 1 つだと上記のエラーが発生します
Prometheus サーバを起動する
すでにコンテナが起動している場合は docker restart だけで OK です
まだコンテナが起動していない場合は以下で起動します
docker run -d -p 9090:9090 --name prometheus -v $(pwd):/prometheus-data prom/prometheus --config.file=/prometheus-data/prometheus.yml
9090 にアクセスすると管理画面が確認できます
動作確認
まずはちゃんと監視ルールが Prometheus サーバに認識されているか確認しましょう
Alert を開いて監視ルールが存在するか確認します
現状は CPU 使用率が 80% 以下なのでアラートが飛びません
適当にコンテナの CPU 使用率を上げると AlertManager に対して通知依頼おリクエストが飛びます
Slack には以下のようにアラートが来ると思います
最後に
Prometheus のアラート機能を試してみました
ポイントは監視ルールの定義と AlertManager の通知設定かなと思います
まずは監視ルールだけ追加して問題なくルールが動作しているようであれば AlertManager を追加する流れが良いかなと思います
通知先と AlertManager の登録は一度行えば OK なので後は監視ルールの変更をチューニングしましょう
0 件のコメント:
コメントを投稿