【Prometheus】Alertmanagerをローカルで使ってみる

2021.12.28
2024.03.24
監視
AlertmanagerDocker ComposePrometheus

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

ローカルでPrometheusのAlertmanagerを使って実際にアラートを出すまでを試してみたいと思います。

Prometheusについては下記を参照してください。

【監視入門】とりあえず使ってみるPrometheus

【監視入門】とりあえず使ってみるPrometheus

はじめに 本記事では、Promethesについてざっくり解説して、実際に簡単な監視をしてみたいと

Alertmanager

Alertmanagerは、特定の条件を満たした場合にアラートを出すPrometheusのコンポーネントになります。

Prometheusのドキュメントより

Alertmanager | 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

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

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

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で記述

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee