著者は、技術教育基金を選択して、 Write forDOnationsプログラムの一環として300ドルの寄付を受け取りました。

序章

問題が発生した場合、適切なチームにアラートを送信すると、問題の根本原因の特定が大幅にスピードアップし、チームがインシデントを迅速に解決できるようになります。

Prometheus は、サービスからメトリックを収集し、それらを時系列データベースに保存するオープンソースの監視システムです。 Alertmanager は、アラートを処理するためのツールであり、アラートを重複排除し、グループ化し、適切な受信者に送信します。 Prometheusなどのクライアントアプリケーションからのアラートを処理でき、電子メール、 PagerDuty OpsGenie Slackを含む多くの受信者をサポートします。

利用可能な多くのPrometheusエクスポーターのおかげで、ウェブおよびデータベースサーバーメッセージングシステムまたは APIを含む、インフラストラクチャのすべての部分のアラートを構成できます

Blackbox Exporter は、HTTP、HTTPS、DNS、TCP、またはICMPプロトコルを介してエンドポイントをプローブし、成功したかどうかや応答の受信にかかった時間など、要求に関する詳細なメトリックを返します。

このチュートリアルでは、AlertmanagerとBlackbox Exporterをインストールして構成し、NginxWebサーバーの応答性を監視します。 次に、サーバーが応答しない場合に電子メールとSlackで通知するようにAlertmanagerを構成します。

前提条件

このチュートリアルでは、次のものが必要です。

  • sudo非rootユーザーとファイアウォールを含むUbuntu16.04チュートリアルを使用した初期サーバーセットアップに従ってセットアップされた1つのUbuntu16.04サーバー。
  • Ubuntu 16.04にNginxをインストールする方法チュートリアルの最初の2つの手順に従って、Nginxをインストールします。
  • ポート8080でリッスンしているNginxサーバーブロック。これは、 Ubuntu 16.04 チュートリアルでNginxサーバーブロック(仮想ホスト)を設定する方法に従って構成できます。 このチュートリアルでは、これを監視するエンドポイントとして使用します。 listenディレクティブを80から8080に変更して、ポートを変更します。 ドメインまたはサブドメインを使用できますが、チュートリアルを通じてエンドポイントアドレスを必ず置き換えてください。
  • チュートリアルUbuntu16.04にPrometheusをインストールする方法に従ってインストールされたPrometheus2.x。
  • 電子メールを送信するためのSMTPサーバー。 任意のSMTPサーバーを使用することも、チュートリアル Ubuntu16.04でPostfixを送信専用SMTPサーバーとしてインストールおよび構成する方法]に従って独自にセットアップすることもできます。
  • オプションで、Slackを介してAlertmanagerからアラートを受信する場合は、Slackアカウントとワークスペース。

ステップ1—サービスユーザーの作成

セキュリティ上の理由から、blackbox_exporteralertmanagerの2つの新しいユーザーアカウントを作成します。 チュートリアル全体でこれらのアカウントを使用して、Blackbox ExporterとAlertmanagerを実行し、適切なコアファイルとディレクトリの所有権を分離します。 これにより、Blackbox ExporterとAlertmanagerは、所有していないデータにアクセスして変更することができなくなります。

--no-create-homeおよび--shell /bin/falseフラグを使用して、useraddコマンドでこれらのユーザーを作成し、これらのユーザーがサーバーにログインできないようにします。

  1. sudo useradd --no-create-home --shell /bin/false blackbox_exporter
  2. sudo useradd --no-create-home --shell /bin/false alertmanager

ユーザーを配置したら、BlackboxExporterをダウンロードして構成しましょう。

ステップ2—BlackboxExporterのインストール

まず、BlackboxExporterの最新の安定バージョンをホームディレクトリにダウンロードします。 最新のバイナリとそのチェックサムは、Prometheusダウンロードページで見つけることができます。

  1. cd ~
  2. curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.12.0/blackbox_exporter-0.12.0.linux-amd64.tar.gz

アーカイブを解凍する前に、次のsha256sumコマンドを使用してファイルのチェックサムを確認してください。

  1. sha256sum blackbox_exporter-0.12.0.linux-amd64.tar.gz

このコマンドの出力をPrometheusダウンロードページのチェックサムと比較して、ファイルが本物であり、破損していないことを確認します。

Output
c5d8ba7d91101524fa7c3f5e17256d467d44d5e1d243e251fd795e0ab4a83605 blackbox_exporter-0.12.0.linux-amd64.tar.gz

チェックサムが一致しない場合は、ダウンロードしたファイルを削除し、前の手順を繰り返してファイルを再ダウンロードします。

チェックサムが一致することを確認したら、アーカイブを解凍します。

  1. tar xvf blackbox_exporter-0.12.0.linux-amd64.tar.gz

これにより、blackbox_exporter-0.12.0.linux-amd64というディレクトリが作成され、blackbox_exporterバイナリファイル、ライセンス、およびサンプルファイルが含まれます。

バイナリファイルを/usr/local/binディレクトリにコピーします。

  1. sudo mv ./blackbox_exporter-0.12.0.linux-amd64/blackbox_exporter /usr/local/bin

バイナリのユーザーとグループの所有権をblackbox_exporterユーザーに設定し、root以外のユーザーがファイルを変更または置換できないようにします。

  1. sudo chown blackbox_exporter:blackbox_exporter /usr/local/bin/blackbox_exporter

最後に、アーカイブと解凍されたディレクトリは不要になったため、削除します。

  1. rm -rf ~/blackbox_exporter-0.12.0.linux-amd64.tar.gz ~/blackbox_exporter-0.12.0.linux-amd64

次に、HTTPプロトコルを介してエンドポイントをプローブし、それを実行するようにBlackboxExporterを構成しましょう。

ステップ3—BlackboxExporterの構成と実行

BlackboxExporterがエンドポイントをチェックする方法を定義する構成ファイルを作成しましょう。 systemdを使用してBlackboxのサービスを管理できるように、systemdユニットファイルも作成します。

次のステップで、Prometheus構成でプローブするエンドポイントのリストを指定します。

まず、BlackboxExporterの構成用のディレクトリを作成します。 Linuxの規則に従い、構成ファイルは/etcディレクトリに配置されるため、このディレクトリを使用してBlackboxExporter構成ファイルも保持します。

  1. sudo mkdir /etc/blackbox_exporter

次に、このディレクトリの所有権を、手順1で作成したblackbox_exporterユーザーに設定します。

  1. sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter

新しく作成したディレクトリに、BlackboxExporterの構成設定を保持するblackbox.ymlファイルを作成します。

  1. sudo nano /etc/blackbox_exporter/blackbox.yml

デフォルトのhttpプローバーを使用してエンドポイントをプローブするようにBlackboxExporterを構成します。 Probers は、BlackboxExporterがエンドポイントが実行されているかどうかを確認する方法を定義します。 httpプローバーは、エンドポイントにHTTPリクエストを送信し、その応答コードをテストすることでエンドポイントをチェックします。 プローブに使用するHTTPメソッドと、成功した応答として受け入れるステータスコードを選択できます。 その他の一般的なプローバーには、TCPプロトコルを介してプロービングするためのtcpプローバー、ICMPプロトコルを介してプロービングするためのicmpプローバー、DNSエントリをチェックするためのdnsプローバーがあります。

このチュートリアルでは、httpプローバーを使用して、HTTPGETメソッドを介してポート8080で実行されているエンドポイントをプローブします。 デフォルトでは、プローバーは2xx範囲の有効なステータスコードが有効であると想定しているため、有効なステータスコードのリストを提供する必要はありません。

5 秒のタイムアウトを構成します。これは、BlackboxExporterが応答を5秒待ってから障害を報告することを意味します。 アプリケーションの種類に応じて、ニーズに合った値を選択してください。

注: BlackboxExporterの構成ファイルはYAML形式を使用します。これはタブの使用を禁止し、インデントに2つのスペースを使用する必要があります。 構成ファイルの形式が正しくない場合、BlackboxExporterは起動に失敗します。

次の構成をファイルに追加します。

/etc/blackbox_exporter/blackbox.yml
modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:      
      valid_status_codes: []
      method: GET

構成オプションの詳細については、BlackboxExporterのドキュメントを参照してください。

ファイルを保存して、テキストエディタを終了します。

サービスファイルを作成する前に、構成ファイルのユーザーとグループの所有権を、手順1で作成したblackbox_exporterユーザーに設定します。

  1. sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter/blackbox.yml

次に、systemdを使用してBlackboxExporterを管理できるように、サービスファイルを作成します。

  1. sudo nano /etc/systemd/system/blackbox_exporter.service

次のコンテンツをファイルに追加します。

/etc/systemd/system/blackbox_exporter.service
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=blackbox_exporter
Group=blackbox_exporter
Type=simple
ExecStart=/usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml

[Install]
WantedBy=multi-user.target

このサービスファイルは、systemdに、/etc/blackbox_exporter/blackbox.ymlにある構成ファイルを使用してblackbox_exporterユーザーとしてBlackboxExporterを実行するように指示します。 systemdサービスファイルの詳細はこのチュートリアルの範囲を超えていますが、詳細については、Systemdユニットとユニットファイルについてチュートリアルを参照してください。

ファイルを保存して、テキストエディタを終了します。

最後に、systemdをリロードして、新しく作成したサービスファイルを使用します。

  1. sudo systemctl daemon-reload

次に、BlackboxExporterを起動します。

  1. sudo systemctl start blackbox_exporter

サービスのステータスを確認して、正常に開始されたことを確認します。

  1. sudo systemctl status blackbox_exporter

出力には、メインプロセス識別子(PID)、メモリ使用量、ログなど、BlackboxExporterのプロセスに関する情報が含まれます。

Output
● blackbox_exporter.service - Blackbox Exporter Loaded: loaded (/etc/systemd/system/blackbox_exporter.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2018-04-05 17:48:58 UTC; 5s ago Main PID: 5869 (blackbox_export) Tasks: 4 Memory: 968.0K CPU: 9ms CGroup: /system.slice/blackbox_exporter.service └─5869 /usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml

サービスのステータスがactive (running)でない場合は、チュートリアルを続行する前に、画面上のログに従い、前の手順をたどって問題を解決してください。

最後に、サービスを有効にして、サーバーの再起動時にBlackboxExporterが起動することを確認します。

  1. sudo systemctl enable blackbox_exporter

Blackbox Exporterが完全に構成されて実行されたので、エンドポイントへのプロービング要求に関するメトリックを収集するようにPrometheusを構成できるため、これらのメトリックに基づいてアラートを作成し、Alertmanagerを使用してアラートの通知を設定できます。

ステップ4—ブラックボックスエクスポーターをスクレイプするためのPrometheusの構成

手順3で説明したように、プローブされるエンドポイントのリストは、BlackboxExporterのtargetsディレクティブの一部としてPrometheus構成ファイルにあります。 このステップでは、Blackbox Exporterを使用して、前提条件のチュートリアルで構成したポート8080で実行されているNginxWebサーバーをスクレイプするようにPrometheusを構成します。

エディターでPrometheus構成ファイルを開きます。

  1. sudo nano /etc/prometheus/prometheus.yml

この時点で、次のようになります。

/etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']

scrape_configsディレクティブの最後に、次のエントリを追加します。これにより、Prometheusは、構成されたBlackboxExporterのモジュールhttp_2xxを使用して、ローカルポート8080で実行されているエンドポイントをプローブします。ステップ3で。

/etc/prometheus/prometheus.yml
...
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://localhost:8080
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9115

デフォルトでは、BlackboxExporterはポート9115で実行され、メトリックは/probeエンドポイントで使用できます。

BlackboxExporterのscrape_configs構成は、他のエクスポーターの構成とは異なります。 最も顕著な違いは、targetsディレクティブです。これは、エクスポーターのアドレスの代わりに、プローブされているエンドポイントを一覧表示します。 エクスポータのアドレスは、__address__ラベルの適切なセットを使用して指定されます。

relabelディレクティブの詳細な説明は、Prometheusドキュメントにあります。

Prometheus構成ファイルは次のようになります。

Prometheus設定ファイル-/etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://localhost:8080
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9115

ファイルを保存して、テキストエディタを閉じます。

Prometheusを再起動して、変更を有効にします。

  1. sudo systemctl restart prometheus

Prometheusサービスのステータスを確認して、期待どおりに実行されていることを確認します。

  1. sudo systemctl status prometheus

サービスのステータスがactive (running)でない場合は、チュートリアルを続行する前に、画面上のログに従い、前の手順をたどって問題を解決してください。

この時点で、BlackboxExporterからメトリックを取得するようにPrometheusを構成しました。 Alertmanagerからアラートを受信するには、次のステップで適切なPrometheusアラートルールのセットを作成します。

ステップ5—アラートルールの作成

PrometheusAlertingは2つの部分に分かれています。 最初の部分はPrometheusサーバーによって処理され、アラートルールに基づいてアラートを生成してAlertmanagerに送信します。 2番目の部分は、Alertmanagerによって実行されます。Alertmanagerは、受信したアラートを管理し、構成に応じて適切な受信者に送信します。

このステップでは、サーバーが使用可能かどうかを確認するアラートルールを作成するときに、アラートルールの基本的な構文を学習します。

まず、アラートを保存するファイルを作成します。 /etc/prometheusディレクトリにalert.rules.ymlという名前の空のファイルを作成します。

  1. sudo touch /etc/prometheus/alert.rules.yml

このファイルはPrometheus構成の一部であるため、所有権が、前提条件のPrometheusチュートリアルで作成したprometheusユーザーに設定されていることを確認してください。

  1. sudo chown prometheus:prometheus /etc/prometheus/alert.rules.yml

アラートファイルを配置したら、構成ファイルに適切なディレクティブを追加して、Prometheusに通知する必要があります。

エディターでPrometheus構成ファイルを開きます。

  1. sudo nano /etc/prometheus/prometheus.yml

globalディレクティブの後にrule_filesディレクティブを追加して、Prometheusの起動時に新しく作成されたアラートファイルをPrometheusにロードさせます。

/etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s

rule_files:
  - alert.rules.yml

scrape_configs:
...

ファイルを保存して、テキストエディタを終了します。

次に、エンドポイントがダウンしているかどうかをチェックするルールを作成しましょう。

アラートルールを作成するには、BlackboxExporterのprobe_successメトリックを使用します。このメトリックは、エンドポイントが稼働している場合は 1 を返し、稼働していない場合は0を返します。

probe_successメトリックには、エンドポイントのアドレスが記載されたinstanceラベルと、メトリックを収集したエクスポーターの名前が記載されたjobラベルの2つのラベルが含まれています。

エディターでアラートルールファイルを開きます。

  1. sudo nano /etc/prometheus/alert.rules.yml

Prometheus構成ファイルと同様に、アラートルールファイルはYAML形式を使用します。これは、タブを厳密に禁止し、インデントのために2つのスペースを必要とします。 ファイルの形式が正しくないと、Prometheusの起動に失敗します。

まず、EndpointDownというアラートルールを作成して、probe_sucessメトリックが010秒の期間で等しいかどうかを確認します。 これにより、エンドポイントが10秒未満使用できない場合に、Prometheusがアラートを送信しないことが保証されます。 アプリケーションの種類とニーズに応じて、任意の期間を自由に選択できます。

また、重大度とアラートの概要を示す2つのラベルを添付して、アラートを簡単に管理およびフィルタリングできるようにします。

アラートのラベルと注釈に詳細を含める場合は、{{ $labels.metrics_label }}構文を使用してラベルの値を取得できます。 これを使用して、メトリックのinstanceラベルからエンドポイントのアドレスを含めます。

次のルールをアラートファイルに追加します。

/etc/prometheus/alert.rules.yml
groups:
- name: alert.rules
  rules:
  - alert: EndpointDown
    expr: probe_success == 0
    for: 10s
    labels:
      severity: "critical"
    annotations:
      summary: "Endpoint {{ $labels.instance }} down"

ファイルを保存して、テキストエディタを終了します。

Prometheusを再起動する前に、次のpromtoolコマンドを使用して、アラートファイルが構文的に正しいことを確認してください。

  1. sudo promtool check rules /etc/prometheus/alert.rules.yml

出力には、ファイルで見つかったルールの数と、ルールが構文的に正しいかどうかに関する情報が含まれています。

Output
Checking /etc/prometheus/alert.rules.yml SUCCESS: 1 rules found

最後に、Prometheusを再起動して、変更を適用します。

  1. sudo systemctl restart prometheus

statusコマンドを使用して、サービスが実行されていることを確認します。

  1. sudo systemctl status prometheus

サービスのステータスがactiveでない場合は、チュートリアルを続行する前に、画面上のログに従い、前の手順をたどって問題を解決してください。

アラートルールを設定すると、Alertmanagerをダウンロードしてインストールできます。

ステップ6—Alertmanagerのダウンロード

Blackbox Exporterが構成され、アラートルールが設定されています。 Alertmanagerをダウンロードしてインストールし、Prometheusが受信したアラートを処理しましょう。

最新のバイナリとそのチェックサムは、Prometheusダウンロードページで見つけることができます。 Alertmanagerの現在の安定バージョンをホームディレクトリにダウンロードして解凍します。

  1. cd ~
  2. curl -LO https://github.com/prometheus/alertmanager/releases/download/v0.14.0/alertmanager-0.14.0.linux-amd64.tar.gz

アーカイブを解凍する前に、次のsha256sumコマンドを使用してファイルのチェックサムを確認してください。

  1. sha256sum alertmanager-0.14.0.linux-amd64.tar.gz

このコマンドの出力をPrometheusダウンロードページのチェックサムと比較して、ファイルが本物であり、破損していないことを確認します。

Output
caddbbbe3ef8545c6cefb32f9a11207ae18dcc788e8d0fb19659d88c58d14b37 alertmanager-0.14.0.linux-amd64.tar.gz

チェックサムが一致しない場合は、ダウンロードしたファイルを削除し、前の手順を繰り返してファイルを再ダウンロードします。

ダウンロードを確認したら、アーカイブを解凍します。

  1. tar xvf alertmanager-0.14.0.linux-amd64.tar.gz

これにより、2つのバイナリファイル(alertmanageramtool)、ライセンス、および設定ファイルの例を含むalertmanager-0.14.0.linux-amd64というディレクトリが作成されます。

2つのバイナリファイルを/usr/local/binディレクトリに移動します。

  1. sudo mv alertmanager-0.14.0.linux-amd64/alertmanager /usr/local/bin
  2. sudo mv alertmanager-0.14.0.linux-amd64/amtool /usr/local/bin

バイナリファイルのユーザーとグループの所有権を、手順1で作成したalertmanagerユーザーに設定します。

  1. sudo chown alertmanager:alertmanager /usr/local/bin/alertmanager
  2. sudo chown alertmanager:alertmanager /usr/local/bin/amtool

残ったファイルは不要になったので、ホームディレクトリから削除します。

  1. rm -rf alertmanager-0.14.0.linux-amd64 alertmanager-0.14.0.linux-amd64.tar.gz

必要なファイルが適切な場所にあるので、アラートの通知を電子メールで送信するようにAlertmanagerを構成できます。

ステップ7—電子メールでアラートを送信するようにAlertmanagerを構成する

この手順では、Alertmanagerのデータと構成設定を格納するディレクトリとファイルを作成してから、アラートを電子メールで送信するようにAlertmanagerを構成します。

標準のLinux規則に従って、/etcにディレクトリを作成し、Alertmanagerの構成ファイルを保存します。

  1. sudo mkdir /etc/alertmanager

新しく作成されたディレクトリのユーザーとグループの所有権をalertmanagerユーザーに設定します。

  1. sudo chown alertmanager:alertmanager /etc/alertmanager

構成ファイルはalertmanager.ymlファイルに保存されるので、このファイルを作成してエディターで開きます。

  1. sudo nano /etc/alertmanager/alertmanager.yml

他のPrometheus関連のファイルと同様に、これもYAML形式を使用しているため、インデントにはタブではなく2つのスペースを使用してください。

前提条件のチュートリアルに従ってインストールしたPostfixを使用してメールを送信するようにAlertmanagerを設定します。 smtp_smarthostディレクティブを使用してSMTPサーバーのアドレスを指定する必要があります。また、smtp_fromディレクティブを使用して電子メールの送信元のアドレスを指定する必要があります。 PostfixはAlertmanagerと同じサーバーで実行されているため、サーバーのアドレスはlocalhost:25です。 メールの送信にはalertmanagerユーザーを使用します。

デフォルトでは、PostfixにはTLSが設定されていないため、smtp_require_tlsディレクティブを使用して非TLSSMTPサーバーを許可するようにAlertmanagerに指示する必要があります。

SMTP構成をglobalディレクティブの下に置きます。これは、他のすべての構成コンテキストで有効なパラメーターを指定するために使用されるためです。 これには、この場合のSMTP構成が含まれ、さまざまな統合用のAPIトークンを含めることもできます。

Alertmanager設定ファイルパート1-/etc/alertmanager/alertmanager.yml
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@your_domain'
  smtp_require_tls: false

注:smtp_fromディレクティブのyour_dominをドメイン名に置き換えてください。

この時点で、Alertmanagerは電子メールの送信方法を知っていますが、routeディレクティブを使用して着信アラートを処理する方法を定義する必要があります。 routeディレクティブはすべての着信アラートに適用され、Alertmanagerがアラートをグループ化する方法、デフォルトの受信者、またはAlertmanagerが最初のアラートを送信するまで待機する時間などのプロパティを定義します。

アラートをグループ化するには、group_byサブディレクティブを使用します。これは、ラベルのインライン配列(['label-1', 'label-2']など)を取ります。 グループ化により、同じラベルを含むアラートがグループ化され、同じバッチで送信されます。

すべてのrouteディレクティブには、receiverサブディレクティブを使用して定義された単一のレシーバーがあります。 複数のレシーバーを追加する場合は、同じディレクティブで複数のレシーバーを定義するか、routesサブディレクティブを使用して複数のrouteディレクティブをネストする必要があります。 このチュートリアルでは、Slackアラートを構成するための最初のアプローチについて説明します。

この場合、手順6でアラートに添付したBlackboxのinstanceラベルとseverityラベルのみでグループ化し、重大度が重大なエンドポイントに対して複数のアラートを取得できるようにします。 1通のメール。

次のgroup_byディレクティブを追加します。

Alertmanager設定ファイルパート2-/etc/alertmanager/alertmanager.yml
...
route:
  group_by: ['instance', 'alert']

次に、Alertmanagerが最初のアラートと新しいアラートを送信するまで待機する時間などの間隔を定義します。

group_waitサブディレクティブを使用して、Alertmanagerが最初のアラートを送信するまで待機する時間を定義します。 この期間中、Alertmanagerは、Prometheusが他のアラートを送信するのを待ちます(存在する場合)。これにより、同じバッチで送信できるようになります。 アラートは1つしかないため、30秒の任意の値を選択します。

次に、group_interval間隔を使用して、同じグループに新しいアラートがある場合にAlertmanagerがアラートの次のバッチを送信するまで待機する時間を定義します。 必要に応じて任意の値を自由に選択できますが、これは5分ごとに設定されます。

構成する最後の間隔はrepeat_intervalです。これは、アラートがまだ解決されていない場合にAlertmanagerが通知を送信するまで待機する時間を定義します。 ニーズに合った値を選択できますが、3時間の任意の値を使用します。

最後に、receiverサブディレクティブを使用して、アラートの通知を受信するユーザーを定義します。 team-1というレシーバーを使用します。これは、後で定義します。

ルートディレクティブを次のように変更します。

Alertmanager設定ファイルパート2-/etc/alertmanager/alertmanager.yml
route:
  group_by: ['instance', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: team-1

特定のアラートについてのみ一致して通知を送信する場合は、matchおよびmatch_reサブディレクティブを使用して、ラベルの値でアラートを除外できます。 matchサブディレクティブは等式一致を表し、match_reサブディレクティブは正規表現による一致を表します。

次に、team-1レシーバーを構成して、アラートの通知を受信できるようにします。 receiversディレクティブの下で、名前と適切な構成サブディレクティブを含むレシーバーを定義できます。 使用可能なレシーバーのリストとそれらの構成方法の説明は、Alertmanagerのドキュメントの一部として入手できます。

team-1電子メール受信者を構成するために、receiversディレクティブの下でemail_configsサブディレクティブを使用します。

Alertmanager設定ファイルパート3-/etc/alertmanager/alertmanager.yml
receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'

この時点で、アラートの通知を電子メールアドレスに送信するようにAlertmanagerを構成しました。 構成ファイルは次のようになります。

Alertmanager構成ファイル-/etc/alertmanager/alertmanager.yml
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@example.com'
  smtp_require_tls: false

route:
  group_by: ['instance', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: team-1

receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'

次のステップでは、Slackチャネルにアラートを送信するようにAlertmanagerを構成します。 Slackを構成したくない場合は、ステップ10に直接スキップして、サービスファイルを作成し、Alertmanagerと連携するようにPrometheusを構成します。

ステップ8—Slackを介してアラートを送信するようにAlertmanagerを構成する

この手順に進む前に、Slackアカウントを作成し、Slackワークスペースを使用できることを確認してください。

Slackにアラートを送信するには、最初に着信Webhookを作成します。

ブラウザで、https://workspace-name.slack.com/services/new/incoming-webhook/にある着信Webhook作成ページにアクセスします。 着信Webhookの詳細と、アラートを送信するチャネルを選択するために必要なドロップダウンを含むページが表示されます。

Slack Incoming Webhook

チャネルを選択したら、着信WebHooks統合の追加ボタンをクリックします。

Webhookが正常に作成されたことを確認する新しいページが表示されます。 このページに表示されているWebhookURL をコピーします。これを使用して、AlertmanagerのSlack通知を構成します。

エディターでAlertmanager構成ファイルを開き、Slack通知を構成します。

  1. sudo nano /etc/alertmanager/alertmanager.yml

まず、Slack Incoming Webhookの作成時に取得したURLを使用して、構成のglobal部分にslack_api_urlサブディレクティブを追加します。

Alertmanager設定ファイルパート1-/etc/alertmanager/alertmanager.yml
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@example.com'
  smtp_require_tls: false
  
  slack_api_url: 'your_slack_webhook_url'

複数の受信者にアラートを送信するには、次の2つの方法があります。

  1. 同じエントリの下に複数のレシーバー構成を含めます。 これは、エラーが発生しにくいソリューションであり、最も簡単な方法です。
  2. 複数のレシーバーエントリを作成し、複数のrouteディレクティブをネストします。

このチュートリアルでは2番目のアプローチについては説明しませんが、興味がある場合は、Alertmanagerドキュメントのルート構成の部分を参照してください。

team-1レシーバーで、 slack_configs という新しいサブディレクティブを追加し、アラートを受信するチャネルの名前を指定します。 この場合、generalチャネルを使用します。

Alertmanager設定ファイルパート2-/etc/alertmanager/alertmanager.yml
receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'
    slack_configs:
      - channel: 'general<^>'

完成した構成ファイルは次のようになります。

Alertmanager構成ファイル-/etc/alertmanager/alertmanager.yml
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@example.com'
  smtp_require_tls: false
  
  slack_api_url: 'your_slack_webhook_url'

route:
  group_by: ['instance', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: team-1
  
receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'
    slack_configs:
      - channel: 'general'

ファイルを保存して、エディターを終了します。

これで、Alertmanagerを初めて実行する準備が整いました。

ステップ9—Alertmanagerを実行する

Alertmanagerを起動して実行してみましょう。 まず、Alertmanagerがsystemdを使用してサービスを管理するためのsystemdユニットファイルを作成します。 次に、Alertmanagerを使用するようにPrometheusを更新します。

新しいsystemdユニットファイルを作成し、テキストエディタで開きます。

  1. sudo nano /etc/systemd/system/alertmanager.service

以下をファイルに追加して、/etc/alertmanager/alertmanager.ymlにある構成ファイルとサーバーのIPアドレスを使用するように構成されたAlertmanagerのURLを使用して、Alertmanagerをalertmanagerユーザーとして実行するようにsystemdを構成します。

/etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target

[Service]
User=alertmanager
Group=alertmanager
Type=simple
WorkingDirectory=/etc/alertmanager/
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --web.external-url http://your_server_ip:9093

[Install]
WantedBy=multi-user.target

これにより、Alertmanagerがalertmanagerユーザーとして実行されます。 また、AlertmanagerにWebUIにURLhttp://your_server_ip:9093を使用するように指示します。ここで、9093はAlertmanagerのデフォルトポートです。 プロトコル(http://)を含めるようにしてください。そうしないと、機能しません。

ファイルを保存して、テキストエディタを閉じます。

次に、適切なAlertmanagerサービス検出ディレクトリをPrometheus構成ファイルに追加して、AlertmanagerについてPrometheusに通知する必要があります。 デフォルトでは、Alertmanagerはポート9093で実行されており、Prometheusと同じサーバー上にあるため、アドレスlocalhost:9093を使用します。

Prometheus構成ファイルを開きます。

  1. sudo nano /etc/prometheus/prometheus.yml

rule_filesディレクティブの後に、次のalertingディレクティブを追加します。

Prometheus構成ファイル-/etc/prometheus/prometheus.yml
...
rule_files:
  - alert.rules.yml

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093
...

完了したら、ファイルを保存してテキストエディタを閉じます。

受信したアラートからURLを追跡できるようにするには、Prometheusの起動時に-web.external-urlフラグを使用して、サーバーのIPアドレスまたはドメイン名をPrometheusに通知する必要があります。

Prometheusのsystemdユニットファイルを開きます。

  1. sudo nano /etc/systemd/system/prometheus.service

既存のExecStart行を次の行に置き換えます。

ExecStart=/usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml \
	--storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \ 
    --web.external-url http://your_server_ip

新しいPrometheusユニットファイルは次のようになります。

Prometheusサービスファイル-/etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml \
	--storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \ 
    --web.external-url http://your_server_ip

[Install]
WantedBy=multi-user.target

ファイルを保存して、テキストエディタを閉じます。

systemdをリロードし、Prometheusを再起動して変更を適用します。

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart prometheus

サービスのステータスをチェックして、Prometheusが意図したとおりに機能していることを確認します。

  1. sudo systemctl status prometheus

サービスのステータスがactive (running)でない場合は、チュートリアルを続行する前に、画面上のログに従い、前の手順をたどって問題を解決してください。

最後に、Alertmanagerを初めて起動します。

  1. sudo systemctl start alertmanager

サービスのステータスをチェックして、Alertmanagerが意図したとおりに機能していることを確認します。

  1. sudo systemctl status alertmanager

サービスのステータスがactive (running)でない場合は、チュートリアルを続行する前に、画面上のメッセージに従い、前の手順に戻って問題を解決してください。

最後に、サービスを有効にして、システムの起動時にAlertmanagerが起動することを確認します。

  1. sudo systemctl enable alertmanager

AlertmanagerのWebUIにアクセスするには、ファイアウォールを介したポート9093へのトラフィックを許可します。

  1. sudo ufw allow 9093/tcp

Alertmanagerは、電子メールとSlackを介してアラートの通知を送信するように構成されました。 それが機能することを確認しましょう。

ステップ10—Alertmanagerのテスト

Alertmangerが正しく機能し、メールとSlack通知を送信していることを確認しましょう。 前提条件のチュートリアルで作成したNginxサーバーブロックを削除して、エンドポイントを無効にします。

  1. sudo rm /etc/nginx/sites-enabled/your_domain

Nginxをリロードして、変更を適用します。

  1. sudo systemctl reload nginx

実際に無効になっていることを確認したい場合は、Webブラウザでサーバーのアドレスを指定できます。 サイトにアクセスできなくなったことを示すメッセージが表示されます。 そうでない場合は、前の手順をたどって、正しいサーバーブロックを削除し、Nginxをリロードしたことを確認してください。

group_waitの間隔(この場合は 30秒)に応じて、30秒後にメールとSlackの通知を受信する必要があります。

そうでない場合は、次のstatusコマンドを使用してサービスのステータスを確認し、画面上のログに従って問題の原因を見つけてください。

  1. sudo systemctl status alertmanager
  2. sudo systemctl status prometheus

Webブラウザでhttp://your_server_ip/alertsを指定することにより、PrometheusWebUIからアラートのステータスを確認することもできます。 Prometheusチュートリアルに従って、選択したユーザー名とパスワードを入力するように求められます。 アラート名をクリックすると、ステータス、アラートルール、および関連するラベルが表示されます。

Prometheus UI - alerts

Alertmanagerが機能していることを確認したら、sites-availableディレクトリからsites-enabledディレクトリへのシンボリックリンクを再作成して、エンドポイントを有効にします。

  1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled

Nginxをもう一度リロードして、変更を適用します。

  1. sudo systemctl reload nginx

次のステップでは、Alertmanagerのコマンドラインインターフェイスの使用方法を見ていきます。

ステップ11—CLIを使用したアラートの管理

Alertmanagerには、アラートを監視、管理、および無音化できるコマンドラインツールamtoolが付属しています。

amtoolツールでは、コマンドを実行するたびに、--alertmanager.urlフラグを使用してAlertmanagerのURLを指定する必要があります。 URLを指定せずにamtoolを使用するには、まず構成ファイルを作成します。

構成ファイルのデフォルトの場所は、現在のユーザーのみが構成を使用できるようにする$HOME/.config/amtool/config.ymlと、サーバー上のすべてのユーザーが構成を使用できるようにする/etc/amtool/config.ymlです。

ニーズに合ったものを自由に選択できますが、このチュートリアルでは、$HOME/.config/amtool/config.ymlファイルを使用します。

まず、ディレクトリを作成します。 -pフラグは、mkdirに、途中で必要な親ディレクトリを作成するように指示します。

  1. mkdir -p $HOME/.config/amtool

config.ymlファイルを作成し、テキストエディタで開きます。

  1. nano $HOME/.config/amtool/config.yml

次の行を追加して、amtoolhttp://localhost:9093URLでAlertmanagerを使用するように指示します。

〜/ .config / amtool / config.yml
alertmanager.url: http://localhost:9093

ファイルを保存して、テキストエディタを終了します。

次に、amtoolコマンドラインツールで何ができるかを見ていきます。

amtool alert queryコマンドを使用すると、Alertmanagerに送信されたすべてのアラートを一覧表示できます。

  1. amtool alert query

出力には、アラートの名前、アラートが最初に発生した時刻、および構成時に提供したアラートの要約が表示されます。

Output
Alertname Starts At Summary EndpointDown 2018-04-03 08:48:47 UTC Endpoint http://localhost:8080 down

適切なマッチャーを使用して、ラベルでアラートをフィルタリングすることもできます。 マッチャーには、ラベル名、完全一致の場合は=、部分一致の場合は=~の適切な操作、およびラベルの値が含まれます。

クリティカル重大度ラベルが添付されているすべてのアラートを一覧表示する場合は、alert queryコマンドでseverity=criticalマッチャーを使用します。

  1. amtool alert query severity=critical

以前と同様に、出力にはアラートの名前、アラートが最初に発生した時刻、およびアラートの要約が含まれます。

Output
Alertname Starts At Summary EndpointDown 2018-04-03 08:48:47 UTC Endpoint http://localhost:8080 down

正規表現を使用して、=~演算子でラベルを照合できます。 たとえば、ポートに依存しないhttp://localhostエンドポイントのすべてのアラートを一覧表示するには、instance=~http://localhost.*マッチャーを使用できます。

  1. amtool alert query instance=~http://localhost.*

アラートとエンドポイントが1つしかないため、出力は前の例と同じになります。

Alertmanagerの設定を確認するには、amtool configコマンドを使用します。

  1. amtool config

出力には、/etc/alertmanager/alertmanager.ymlファイルの内容が含まれます。

次に、amtoolを使用してアラートを消音する方法を見てみましょう。

アラートをサイレンシングすると、特定の時間のマッチャーに基づいてアラートをミュートできます。 その期間中、無音アラートのメールやSlack通知は届きません。

amtool silence addコマンドは、マッチャーを引数として取り、マッチャーに基づいて新しいsilenceを作成します。

アラートの有効期限を定義するには、1h--expire-onフラグなど、必要な無音期間の--expiresフラグを使用し、[ X182X]RFC3339フォーマット