【Prometheus】Alertmanagerをローカルで使ってみる
はじめに
ローカルでPrometheusのAlertmanagerを使って実際にアラートを出すまでを試してみたいと思います。
Prometheusについては下記を参照してください。
【監視入門】とりあえず使ってみるPrometheus
はじめに 本記事では、Promethesについてざっくり解説して、実際に簡単な監視をしてみたいと
Alertmanager
Alertmanagerは、特定の条件を満たした場合にアラートを出すPrometheusのコンポーネントになります。
Prometheusのドキュメントより
Alertmanager | Prometheus
An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.
条件はPromQLというクエリ言語で記述します。
ローカルで動かしてみる
ここからDocker Composeを使ってPrometheusとAlertmanagerを構築して、実際にslackにアラートを飛ばしてみたいと思います。
用意するファイルとディレクトリ構造は下記の通りです。
1.
2├── docker-compose.yml
3├── alertmanager
4│ └── alertmanager.yml
5└── prometheus
6 ├── alert.rules
7 └── prometheus.yml
docker-compose.yml
まずはdocker-compose.yml
を作成します。
構築するのはPrometheusとAlertmanager、そして監視対象となるnode-exporterになります。
1version: '3'
2services:
3 prometheus:
4 image: prom/prometheus
5 container_name: prometheus
6 volumes:
7 - ./prometheus:/etc/prometheus
8 command:
9 - "--config.file=/etc/prometheus/prometheus.yml"
10 ports:
11 - '9090:9090'
12 alertmanager:
13 image: prom/alertmanager
14 container_name: alertmanager
15 volumes:
16 - ./alertmanager:/etc/alertmanager
17 command:
18 - "--config.file=/etc/alertmanager/alertmanager.yml"
19 ports:
20 - '9093:9093'
21 node-exporter:
22 image: prom/node-exporter
23 container_name: node-exporter
24 ports:
25 - 9100:9100
Prometheus
次にPrometheus用の設定ファイルを作成します。
prometheus.yml
は下記の通りです。
1global:
2 scrape_interval: 15s
3 evaluation_interval: 15s
4 external_labels:
5 monitor: 'codelab-monitor'
6rule_files: # アラートのルールに関する設定ファイル
7 - /etc/prometheus/alert.rules
8alerting: # アラートに関する設定
9 alertmanagers:
10 - scheme: http
11 static_configs:
12 - targets:
13 - alertmanager:9093
14scrape_configs:
15 - job_name: 'node'
16 static_configs:
17 - targets:
18 - node-exporter:9100
Configuration | Prometheus
An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.
アラートの条件に関するalert.rules
は下記の通りです。
1groups:
2- name: example
3 rules:
4 - alert: InstanceDown # インスタンスダウンのアラート
5 expr: up == 0 # アラート条件(PromQL)
6 for: 1m # 1分間条件を満たしていた場合にアラートを出す
7 labels:
8 severity: page
9 annotations:
10 summary: "Instance {{ $labels.instance }} down"
11 description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
12 - alert: HighMemory # メモリ使用率のアラート
13 expr: ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes) * 100 >= 50 # アラート条件(PromQL)
14 for: 1m # 1分間条件を満たしていた場合にアラートを出す
15 labels:
16 severity: warning
17 annotations:
18 summary: "High Memory Usage"
19 description: "{{ $labels.instance }} of job {{ $labels.job }} use High Memory"
インスタンスがダウンした場合とメモリの使用率が50%を超えた場合にアラートを飛ばすルールにしています。どちらもアラートが出るのは1分間条件を満たした場合になります。
Alerting rules | Prometheus
An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.
Alertmanager
Alertmanagerの設定ファイルを作成します。
alertmanager.yml
は下記の通りです。
1global:
2 slack_api_url: 'slackのwebhook URL'
3route:
4 receiver: 'slack'
5receivers:
6 - name: 'slack'
7 slack_configs:
8 - channel: '#alert-test'
Configuration | Prometheus
An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.
slackのwebhook URLの取得はこちらからできます。
コンテナ起動
必要なファイルが揃ったのでDocker Composeでコンテナを起動します。
1docker-compose up -d
アラート確認
下記で監視対象のコンテナを停止させます。
1docker container stop node-exporter
コンテナを停止した場合、そしてメモリの使用率が高まるとそれぞれのアラートがslackに送られます。
まとめ
- Alertmanagerでアラートを出せる
- 条件はPromQLで記述
参考
- Alertmanager | Prometheus
- Alerting rules | Prometheus
- Prometheus Configuration | Prometheus
- Alertmanager Configuration | Prometheus
- Slack での Incoming Webhook の利用 | Slack