著者は、技術教育基金を選択して、 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をインストールします。
  • ポートでリッスンしているNginxサーバーブロック 8080 Ubuntu 16.04 チュートリアルでNginxサーバーブロック(仮想ホスト)を設定する方法に従って構成できます。 このチュートリアルでは、これを監視するエンドポイントとして使用します。
    • を変更してポートを変更します listen からの指令 808080. ドメインまたはサブドメインを使用できますが、チュートリアルを通じてエンドポイントアドレスを必ず置き換えてください。
  • チュートリアルUbuntu16.04にPrometheusをインストールする方法に従ってインストールされたPrometheus2.x。
  • 電子メールを送信するためのSMTPサーバー。 任意のSMTPサーバーを使用することも、チュートリアル Ubuntu16.04でPostfixを送信専用SMTPサーバーとしてインストールおよび構成する方法]に従って独自にセットアップすることもできます。
  • オプションで、Slackを介してAlertmanagerからアラートを受信する場合は、Slackアカウントとワークスペース。

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

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

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

  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

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

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

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

このチュートリアルでは、 http ポートで実行されているエンドポイントをプローブするプローバー 8080 HTTP経由 GET 方法。 デフォルトでは、プローバーは、 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

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

  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 BlackboxExporterをblackbox_exporterユーザーとして実行するには、構成ファイルは次の場所にあります。 /etc/blackbox_exporter/blackbox.yml. の詳細 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—BlackboxExporterをスクレイプするためのPrometheusの構成

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

エディターで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はローカルポートで実行されているエンドポイントをプローブするようになります。 8080 BlackboxExporterのモジュールを使用する http_2xx、ステップ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 終点。

The scrape_configs Blackbox Exporterの構成は、他のエクスポーターの構成とは異なります。 最も顕著な違いは 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は、受信したアラートを管理し、構成に応じて適切な受信者に送信します。

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

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

  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

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

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

rule_files:
  - alert.rules.yml

scrape_configs:
...

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

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

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

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

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

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

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

まず、と呼ばれるアラートルールを作成します EndpointDown かどうかを確認するには probe_sucess メトリックは0に等しく、期間は10秒です。 これにより、エンドポイントが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

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

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を使用してEメールを送信するようにAlertmanagerを設定します。 を使用してSMTPサーバーのアドレスを提供する必要があります smtp_smarthost ディレクティブ、およびメールの送信元のアドレス smtp_from 指令。 PostfixはAlertmanagerと同じサーバーで実行されているため、サーバーのアドレスは localhost:25. メールの送信にはalertmanagerユーザーを使用します。

デフォルトでは、PostfixにはTLSが設定されていないため、AlertmanagerにTLS以外のSMTPサーバーを使用することを許可するように指示する必要があります。 smtp_require_tls 指令。

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

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

注:必ず交換してください your_domin の中に smtp_from ドメイン名を使用したディレクティブ。

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

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

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

この場合、Blackboxでのみグループ化されます instance ラベルと severity 手順6でアラートに付けたラベルを付けて、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

特定のアラートについてのみ一致して通知を送信する場合は、 matchmatch_re ラベルの値でアラートを除外するサブディレクティブ。 The match サブディレクティブは平等一致を表します。ここで、 match_re サブディレクティブは、正規表現によるマッチングを表します。

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

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

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: '[email protected]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を作成します。

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

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

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

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

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

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

Alertmanager設定ファイルパート1-/etc/alertmanager/alertmanager.yml
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: '[email protected]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: '[email protected]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

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

/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にURLを使用するように指示します http://your_server_ip:9093 そのWebUIの場合、 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にサーバーのIPアドレスまたはドメイン名を使用して通知する必要があります。 -web.external-url Prometheusを起動するときにフラグを立てます。

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

  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

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

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、アラートを監視、管理、および無音化できます。

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

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

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

まず、ディレクトリを作成します。 The -p フラグが伝えます mkdir 途中で必要な親ディレクトリを作成するには:

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

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

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

次の行を追加して伝えます amtool Alertmanagerをで使用するには http://localhost:9093 URL:

〜/ .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

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

重大度ラベルが添付されているすべてのアラートを一覧表示する場合は、 severity=critical のマッチャー alert query 指図:

  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通知は届きません。

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

アラートの有効期限を定義するには、 --expires 沈黙の望ましい期間を示すフラグ(次のような) 1h または --expire-on RFC3339形式の無音の有効期限のフラグ。 たとえば、フォーマット 2018-10-04T07:50:00+00:00 2018年10月4日の午前7時50分を表します。

の場合 --expires または --expires-on フラグが提供されていない場合、アラートは1時間の間無音になります。

のすべてのアラートを消音するには http://localhost:8080 3時間のインスタンスの場合、次のコマンドを使用します。

  1. amtool silence add instance=http://localhost:8080 --expires 3h

出力には無音の識別番号が含まれているため、無音を削除する場合に必要になるので、必ずメモしておいてください。

Output
4e89b15b-0814-41d3-8b74-16c513611732

沈黙を作成するときに、作成者やコメントなどの追加情報を提供する場合は、 --author--comment フラグ:

  1. amtool silence add severity=critical --expires 3h --author "Sammy The Shark" --comment "Investigating the progress"

前と同様に、出力には無音のIDが含まれます。

Output
12b7b9e1-f48a-4ceb-bd85-65ac882ceed1

コマンド amtool silence query 有効期限が切れていないすべての無音のリストが表示されます。

  1. amtool silence query

出力には、無音のID、マッチャーのリスト、有効期限のタイムスタンプ、作成者、およびコメントが含まれます。

Output
ID Matchers Ends At Created By Comment 12b7b9e1-f48a-4ceb-bd85-65ac882ceed1 severity=critical 2018-04-04 08:02:58 UTC Sammy The Shark Investigating in the progress 4e89b15b-0814-41d3-8b74-16c513611732 instance=http://localhost:8080 2018-04-04 08:14:21 UTC sammy

に似ています alert query コマンドでは、ラベルマッチャーを使用して、作成時に添付されたラベルで出力をフィルタリングできます。

  1. amtool silence query instance=http://localhost:8080

以前と同様に、出力にはID番号とアラートの詳細が含まれます。

Output
ID Matchers Ends At Created By Comment 4e89b15b-0814-41d3-8b74-16c513611732 instance=http://localhost:8080 2018-04-04 08:14:21 UTC sammy

最後に、沈黙を期限切れにするには、 amtool silence expire 期限切れにしたい沈黙のIDを使用して:

  1. amtool silence expire 12b7b9e1-f48a-4ceb-bd85-65ac882ceed1
  2. amtool silence expire 4e89b15b-0814-41d3-8b74-16c513611732

コマンドが正常に実行されたことを示す出力はありません。 エラーが表示された場合は、無音の正しいIDを指定したことを確認してください。

結論

このチュートリアルでは、Blackbox ExporterとAlertmanagerをPrometheusと連携するように構成して、電子メールとSlackを介してアラートを受信できるようにしました。 また、Alertmanagerのコマンドラインインターフェイスを使用しました。 amtool、アラートを管理および沈黙させるため。

他のAlertmanager統合について詳しく知りたい場合は、AlertmanagerのドキュメントのConfigurationの部分を参照してください。

また、PrometheusAlertsをGrafanaなどの他のサービスと統合する方法を確認することもできます。