はじめに
ローカルでPrometheusのAlertmanagerを使って実際にアラートを出すまでを試してみたいと思います。
Prometheusについては下記を参照してください。

【監視入門】とりあえず使ってみるPrometheus
はじめに本記事では、Promethesについてざっくり解説して、実際に簡単な監視をしてみたいと思います。実際に試す際は、ローカルにDocker Composeで構築します。PrometheusとはPrometheusとは、メトリクスに基づい...
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にアラートを飛ばしてみたいと思います。
用意するファイルとディレクトリ構造は下記の通りです。
.
├── docker-compose.yml
├── alertmanager
│ └── alertmanager.yml
└── prometheus
├── alert.rules
└── prometheus.yml
docker-compose.yml
まずはdocker-compose.yml
を作成します。
構築するのはPrometheusとAlertmanager、そして監視対象となるnode-exporterになります。
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
ports:
- '9090:9090'
alertmanager:
image: prom/alertmanager
container_name: alertmanager
volumes:
- ./alertmanager:/etc/alertmanager
command:
- "--config.file=/etc/alertmanager/alertmanager.yml"
ports:
- '9093:9093'
node-exporter:
image: prom/node-exporter
container_name: node-exporter
ports:
- 9100:9100
Prometheus
次にPrometheus用の設定ファイルを作成します。
prometheus.yml
は下記の通りです。
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'codelab-monitor'
rule_files: # アラートのルールに関する設定ファイル
- /etc/prometheus/alert.rules
alerting: # アラートに関する設定
alertmanagers:
- scheme: http
static_configs:
- targets:
- alertmanager:9093
scrape_configs:
- job_name: 'node'
static_configs:
- targets:
- 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
は下記の通りです。
groups:
- name: example
rules:
- alert: InstanceDown # インスタンスダウンのアラート
expr: up == 0 # アラート条件(PromQL)
for: 1m # 1分間条件を満たしていた場合にアラートを出す
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
- alert: HighMemory # メモリ使用率のアラート
expr: ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes) * 100 >= 50 # アラート条件(PromQL)
for: 1m # 1分間条件を満たしていた場合にアラートを出す
labels:
severity: warning
annotations:
summary: "High Memory Usage"
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
は下記の通りです。
global:
slack_api_url: 'slackのwebhook URL'
route:
receiver: 'slack'
receivers:
- name: 'slack'
slack_configs:
- 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でコンテナを起動します。
docker-compose up -d
アラート確認
下記で監視対象のコンテナを停止させます。
docker container stop node-exporter
コンテナを停止した場合、そしてメモリの使用率が高まるとそれぞれのアラートがslackに送られます。
まとめ
- Alertmanagerでアラートを出せる
- 条件はPromQLで記述