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

スポンサーリンク

はじめに

ローカルで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で記述

参考

タイトルとURLをコピーしました