AlertManagerとBlackbox Exporterを使用してUbuntu 16.04でWebサーバーを監視する方法

著者はhttps://www.brightfunds.org/funds/tech-education[Tech Education Fund]を選択し、https://do.co/w4do-cta [Donationsの書き込み]プログラムの一環として300ドルの寄付を受け取りました.

前書き

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

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

利用可能な多くのPrometheusエクスポーターのおかげで、https://prometheus.io/docs/instrumenting/exporters/#http [web]やhttps://prometheus.io/docs/など、インフラストラクチャのすべての部分に対してアラートを構成できます。 instrumenting / exporters /#databases [データベースサーバー]、https://prometheus.io/docs/instrumenting/exporters/#messaging-systems [messaging systems]またはhttps://prometheus.io/docs/instrumenting/exporters/#apis [API]。

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

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

前提条件

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

  • 1つのUbuntu 16.04サーバー。sudoを含むhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04[Ubuntu 16.04での初期サーバーセットアップチュートリアル]に従ってセットアップします。非rootユーザーとファイアウォール。

  • Nginxは、https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04 [Ubuntu 16.04にNginxをインストールする方法]チュートリアルの最初の2つの手順に従ってインストールしました。

  • ポート `+ 8080 +`でリッスンしているNginxサーバーブロック。https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual- hosts-on-ubuntu-16-04 [Ubuntu 16.04でNginxサーバーブロック(仮想ホスト)をセットアップする方法]チュートリアル。 このチュートリアルでは、これをエンドポイントとして使用して監視します。

  • `+ listen `ディレクティブを ` 80 `から ` 8080 +`に変更してポートを変更します。 ドメインまたはサブドメインを使用できますが、チュートリアルでエンドポイントアドレスを必ず置き換えてください。

  • チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-prometheus-on-ubuntu-16-04[Ubuntu 16.04にPrometheusをインストールする方法]に従ってインストールされたPrometheus2.x。

  • 電子メールを送信するためのSMTPサーバー。 任意のSMTPサーバーを使用するか、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-に従って独自のサーバーをセットアップできます。 smtp-server-on-ubuntu-16-04 [Ubuntu 16.04でPostfixを送信専用SMTPサーバーとしてインストールおよび設定する方法]。

  • オプションで、Slackを介してAlertmanagerからアラートを受信する場合は、https://slack.com [Slack]アカウントとワークスペース。

手順1-サービスユーザーの作成

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

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

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

ユーザーを配置したら、Blackbox Exporterをダウンロードして構成します。

ステップ2-Blackbox Exporterのインストール

まず、Blackbox Exporterの最新の安定バージョンをホームディレクトリにダウンロードします。 Prometheusダウンロードページで、最新のバイナリとチェックサムを確認できます。

cd ~
curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v/blackbox_exporter-.linux-amd64.tar.gz

アーカイブを展開する前に、次の `+ sha256sum +`コマンドを使用してファイルのチェックサムを確認します。

sha256sum blackbox_exporter-.linux-amd64.tar.gz

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

Output  blackbox_exporter-.linux-amd64.tar.gz

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

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

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

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

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

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

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

sudo chown  /usr/local/bin/blackbox_exporter

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

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

次に、Blackbox Exporterを設定して、HTTPプロトコルを介してエンドポイントをプローブし、実行します。

手順3-Blackbox Exporterの構成と実行

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

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

まず、Blackbox Exporterの設定用のディレクトリを作成します。 Linuxの規則により、設定ファイルは `+ / etc +`ディレクトリに格納されるため、このディレクトリを使用してBlackbox Exporter設定ファイルも保持します。

sudo mkdir /etc/blackbox_exporter

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

sudo chown  /etc/blackbox_exporter

新しく作成したディレクトリで、Blackbox Exporterの設定を保持する `+ blackbox.yml +`ファイルを作成します。

sudo nano /etc/blackbox_exporter/blackbox.yml

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

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

  • 5 *秒のタイムアウトを設定します。つまり、Blackbox Exporterは、応答を5秒待ってから障害を報告します。 アプリケーションの種類に応じて、ニーズに合った値を選択してください。

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

/etc/blackbox_exporter/blackbox.yml

modules:
 http_2xx:
   prober: http
   timeout:
   http:
     valid_status_codes: []
     method: GET

設定オプションの詳細については、https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md [Blackbox Exporterのドキュメント]をご覧ください。

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

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

sudo chown  /etc/blackbox_exporter/blackbox.yml

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

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

このサービスファイルは、 `+ / etc / blackbox_exporter / blackbox.yml `にある設定ファイルで* blackbox_exporter *ユーザーとしてBlackbox Exporterを実行するように ` systemd `に指示します。 ` systemd +`サービスファイルの詳細はこのチュートリアルの範囲外ですが、詳細についてはhttps://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-をご覧ください。 unit-files#where-are-systemd-unit-files-found [Understanding Systemd Units and Unit Files]チュートリアル。

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

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

sudo systemctl daemon-reload

次に、Blackbox Exporterを起動します。

sudo systemctl start blackbox_exporter

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

sudo systemctl status blackbox_exporter

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

Output● blackbox_exporter.service - Blackbox Exporter
  Loaded: loaded (/etc/systemd/system/blackbox_exporter.service; disabled; vendor preset: enabled)
  Active:  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

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

最後に、サービスを有効にして、サーバーの再起動時にBlackbox Exporterが確実に起動するようにします。

sudo systemctl enable blackbox_exporter

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

手順4-Blackbox ExporterをスクレイプするためのPrometheusの構成

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

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

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 `ディレクティブの最後に、次のエントリを追加します。これは、手順3で設定したBlackbox Exporterのモジュール ` http_2xx `を使用して、ローカルポート ` 8080 +`で実行しているエンドポイントをプローブするようPrometheusに指示します

/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

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

Blackbox Exporterの `+ scrape_configs `設定は、他のエクスポーターの設定とは異なります。 最も顕著な違いは、エクスポーターのアドレスの代わりにプローブされているエンドポイントをリストする「 targets 」ディレクティブです。 エクスポーターのアドレスは、適切な「 address +」ラベルのセットを使用して指定されます。

`+ relabel +`ディレクティブの詳細な説明は、https://prometheus.io/docs/introduction/overview/ [Prometheus documentation]にあります。

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を再起動して、変更を有効にします。

sudo systemctl restart prometheus

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

sudo systemctl status prometheus

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

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

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

Prometheus Alertingは2つの部分に分かれています。 最初の部分はPrometheusサーバーによって処理され、アラートルールに基づいてアラートを生成し、それらをhttps://github.com/prometheus/alertmanager[Alertmanager]に送信します。 2番目の部分はAlertmanagerが行います。Alertmanagerは、受信したアラートを管理し、構成に応じて適切な受信者に送信します。

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

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

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

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

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

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

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

sudo nano /etc/prometheus/prometheus.yml

`+ global `ディレクティブの後に ` rule_files +`ディレクティブを追加して、Prometheusが起動したときにPrometheusが新しく作成したアラートファイルをロードするようにします。

/etc/prometheus/prometheus.yml

global:
 scrape_interval: 15s




scrape_configs:
...

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

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

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

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

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

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

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

最初に、 `+ EndpointDown `というアラートルールを作成して、 ` probe_sucess +`メトリックが* 0 に等しく、持続時間が 10 *秒であるかどうかを確認します。 これにより、エンドポイントが10秒未満利用できない場合、Prometheusはアラートを送信しません。 アプリケーションの種類とニーズに応じて、必要な期間を自由に選択できます。

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

アラートのラベルと注釈に詳細を含める場合は、「+ {{$ labels」を使用できます。 }} + `構文を使用して、ラベルの値を取得します。 これを使用して、メトリックの「+ 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 +`コマンドを使用して、アラートファイルが構文的に正しいことを確認してください。

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

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

OutputChecking /etc/prometheus/alert.rules.yml
 SUCCESS: 1 rules found

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

sudo systemctl restart prometheus

`+ status +`コマンドでサービスが実行されていることを確認します:

sudo systemctl status prometheus

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

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

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

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

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

cd ~
curl -LO https://github.com/prometheus/alertmanager/releases/download/v/alertmanager-.linux-amd64.tar.gz

アーカイブを展開する前に、次の `+ sha256sum +`コマンドを使用してファイルのチェックサムを確認します。

sha256sum alertmanager-.linux-amd64.tar.gz

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

Output  alertmanager-.linux-amd64.tar.gz

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

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

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

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

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

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

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

sudo chown  /usr/local/bin/alertmanager
sudo chown  /usr/local/bin/amtool

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

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

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

手順7-電子メールでアラートを送信するためのAlertmanagerの設定

この手順では、Alertmanagerのデータと構成設定を保存するディレクトリとファイルを作成し、アラートマネージャーが電子メールでアラートを送信するように構成します。

標準のLinuxの規則に従って、Alertmanagerの設定ファイルを保存するためのディレクトリを「+ / etc +」に作成します。

sudo mkdir /etc/alertmanager

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

sudo chown  /etc/alertmanager

設定ファイルを `+ alertmanager.yml +`ファイルに保存するため、このファイルを作成してエディターで開きます。

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 +`ディレクティブを使用して非TLS SMTPサーバーを許可するようAlertmanagerに指示する必要があります。

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

Alertmanager構成ファイルパート1-/etc/alertmanager/alertmanager.yml

global:
 smtp_smarthost: 'localhost:25'
 smtp_from: 'alertmanager@'
 smtp_require_tls: false

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

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

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

この場合、ステップ6でアラートに添付したBlackboxの「+ instance 」ラベルと「 severity +」ラベルでのみグループ化し、重要度が1つのメールでエンドポイントに対して複数のアラートを取得できるようにします。

次の `+ group_by +`ディレクティブを追加します:

Alertmanager構成ファイルパート2-/etc/alertmanager/alertmanager.yml

...
route:
 group_by: ['instance', 'alert']

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

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

次に、「+ group_interval +」間隔を使用して、同じグループに新しいアラートがある場合にアラートマネージャーが次のアラートのバッチを送信する前に待機する時間を定義します。 ニーズに応じて自由に値を選択できますが、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:

特定のアラートについてのみ通知を照合して送信する場合は、「+ match 」および「 match_re 」サブディレクティブを使用して、ラベルの値でアラートを除外できます。 ` match `サブディレクティブは等価マッチを表し、 ` match_re +`サブディレクティブは正規表現によるマッチングを表します。

次に、アラートの通知を受信できるように、「+ team-1 」レシーバーを設定します。 ` receivers +`ディレクティブの下で、名前と適切な設定サブディレクティブを含むレシーバーを定義できます。 使用可能なレシーバーのリストとそれらの設定方法の説明は、https://prometheus.io/docs/alerting/configuration/#%3Creceiver [Alertmanager’s documentation]の一部として利用できます。

`+ team-1 `メールレシーバーを設定するには、 ` receivers `ディレクティブの下で ` email_configs +`サブディレクティブを使用します。

Alertmanager構成ファイルパート3-/etc/alertmanager/alertmanager.yml

receivers:
 - name: ''
   email_configs:
     - to: ''

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

Alertmanager構成ファイル-/etc/alertmanager/alertmanager.yml

global:
 smtp_smarthost: 'localhost:25'
 smtp_from: 'alertmanager@'
 smtp_require_tls: false

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

receivers:
 - name: ''
   email_configs:
     - to: ''

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

手順8-Slack経由でアラートを送信するためのAlertmanagerの設定

このステップに進む前に、Slackアカウントを作成し、Slackワークスペースが使用可能であることを確認してください。

Slackにアラートを送信するには、まずhttps://api.slack.com/incoming-webhooks[Incoming Webhook]を作成します。

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

image:https://assets.digitalocean.com/articles/prometheus_blackbox_alertmanager_1604/uBKKA4O.png [Slack Incoming Webhook]

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

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

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

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@'
 smtp_require_tls: false

 slack_api_url: ''

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

  1. 同じエントリの下に複数の受信機構成を含めます。 これは最もエラーが発生しにくいソリューションであり、最も簡単な方法です。

  2. 複数の受信者エントリを作成し、複数の `+ route +`ディレクティブをネストします。

このチュートリアルでは2番目のアプローチについては説明しませんが、関心がある場合は、Alertmanagerドキュメントのhttps://prometheus.io/docs/alerting/configuration/#route [ルート構成]の部分をご覧ください。

+ team-1 +`レシーバーで、https://prometheus.io/docs/alerting/configuration/#slack_config [+ slack_configs `]という新しいサブディレクティブを追加し、受信するチャンネルの名前を指定しますアラート。 この場合、 ` general`チャンネルを使用します:

Alertmanager構成ファイルパート2-/etc/alertmanager/alertmanager.yml

receivers:
 - name: ''
   email_configs:
     - to: ''

     general<^>'

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

Alertmanager構成ファイル-/etc/alertmanager/alertmanager.yml

global:
 smtp_smarthost: 'localhost:25'
 smtp_from: 'alertmanager@'
 smtp_require_tls: false

 slack_api_url: ''

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

receivers:
 - name: ''
   email_configs:
     - to: ''
   slack_configs:
     - channel: ''

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

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

ステップ9-Alertmanagerの実行

Alertmanagerを起動して実行しましょう。 最初にAlertmanager用のsystemdユニットファイルを作成して、 `+ systemd +`を使用してサービスを管理します。 次に、Prometheusを更新してAlertmanagerを使用します。

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

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

ファイルに以下を追加して、サーバーのIPアドレスを使用するように設定された「+ / etc / alertmanager / alertmanager.yml +」にある設定ファイルと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://:9093

[Install]
WantedBy=multi-user.target

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

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

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

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

sudo nano /etc/prometheus/prometheus.yml

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

プロメテウス構成ファイル-/etc/prometheus/prometheus.yml

...
rule_files:
 - alert.rules.yml






...

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

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

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

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://

新しい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://

[Install]
WantedBy=multi-user.target

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

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

sudo systemctl daemon-reload
sudo systemctl restart prometheus

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

sudo systemctl status prometheus

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

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

sudo systemctl start alertmanager

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

sudo systemctl status alertmanager

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

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

sudo systemctl enable alertmanager

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

sudo ufw allow 9093/tcp

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

ステップ10-Alertmanagerのテスト

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

sudo rm /etc/nginx/sites-enabled/

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

sudo systemctl reload nginx

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

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

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

sudo systemctl status alertmanager
sudo systemctl status prometheus

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

image:https://assets.digitalocean.com/articles/prometheus_blackbox_alertmanager_1604/ikIPV9Q.png [Prometheus UI-アラート]

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

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled

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

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 +`に指示します。

mkdir -p $HOME/.config/amtool

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

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

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

〜/ .config / amtool / config.yml

alertmanager.url: http://localhost:9093

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

ここで、 `+ amtool +`コマンドラインツールでできることを見てみましょう。

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

amtool alert query

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

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

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

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

amtool alert query

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

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

正規表現を使用して、 `+ =〜`演算子でラベルを一致させることができます。 たとえば、ポートに依存しない ` http:// localhost `エンドポイントのすべてのアラートをリストするには、 ` instance =〜http:// localhost。* +`マッチャーを使用できます。

amtool alert query

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

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

amtool config

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

それでは、 `+ amtool +`を使用してアラートを消音する方法を見てみましょう。

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

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

アラートの有効期限を定義するには、希望の無音期間で「-expires +」フラグを使用します。たとえば、httpsで「 1h 」または無音有効期限のある「-expire-on 」フラグを使用します。 ://www.ietf.org/rfc/rfc3339.txt [RFC3339形式]。 たとえば、「 2018-10-04T07:50:00 + 00:00+」という形式は、2018年10月4日の午前7時50分を表します。

`-expires +`または `-expires-on +`フラグが指定されていない場合、アラートは* 1時間*沈黙します。

`+ http:// localhost:8080 +`インスタンスのすべてのアラートを* 3時間*沈黙させるには、次のコマンドを使用します。

amtool silence add instance= --expires

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

Output

作成者やコメントなど、沈黙を作成するときに追加情報を提供する場合は、 `-author +`および `-comment +`フラグを使用します。

amtool silence add severity=critical --expires 3h

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

Output

コマンド「+ amtool silence query +」は、有効期限が切れていないすべての無音のリストを表示します。

amtool silence query

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

OutputID                                    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 +`コマンドと同様に、ラベルマッチャーを使用して、作成時に添付されたラベルで出力をフィルター処理できます。

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

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

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

最後に、無音を期限切れにするには、失効させたい無音のIDで `+ amtool silence expire +`を使用します。

amtool silence expire
amtool silence expire

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

結論

このチュートリアルでは、Prometheusと連携するようにBlackbox ExporterとAlertmanagerを設定して、電子メールとSlackでアラートを受信できるようにしました。 また、Alertmanagerのコマンドラインインターフェイスである「+ amtool +」を使用して、アラートを管理し、無音にしました。

他のAlertmanager統合の詳細については、Alertmanagerのドキュメントの[構成]((https://prometheus.io/docs/alerting/configuration/))の部分をご覧ください。

また、Prometheus Alertsをhttp://docs.grafana.org/alerting/rules/[Grafana]などの他のサービスと統合する方法を確認できます。

Related