AlertmanagerとBlackboxExporterを使用してUbuntu16.04でWebサーバーを監視する方法
序章
問題が発生した場合、適切なチームにアラートを送信すると、問題の根本原因の特定が大幅にスピードアップし、チームがインシデントを迅速に解決できるようになります。
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
からの指令80
に8080
. ドメインまたはサブドメインを使用できますが、チュートリアルを通じてエンドポイントアドレスを必ず置き換えてください。
- を変更してポートを変更します
- チュートリアルUbuntu16.04にPrometheusをインストールする方法に従ってインストールされたPrometheus2.x。
- 電子メールを送信するためのSMTPサーバー。 任意のSMTPサーバーを使用することも、チュートリアル Ubuntu16.04でPostfixを送信専用SMTPサーバーとしてインストールおよび構成する方法]に従って独自にセットアップすることもできます。
- オプションで、Slackを介してAlertmanagerからアラートを受信する場合は、Slackアカウントとワークスペース。
ステップ1—サービスユーザーの作成
セキュリティ上の理由から、blackbox_exporterとalertmanagerの2つの新しいユーザーアカウントを作成します。 チュートリアル全体でこれらのアカウントを使用して、Blackbox ExporterとAlertmanagerを実行し、適切なコアファイルとディレクトリの所有権を分離します。 これにより、Blackbox ExporterとAlertmanagerは、所有していないデータにアクセスして変更することができなくなります。
これらのユーザーを作成する useradd
を使用したコマンド --no-create-home
と --shell /bin/false
これらのユーザーがサーバーにログインできないようにフラグを立てます。
- sudo useradd --no-create-home --shell /bin/false blackbox_exporter
- sudo useradd --no-create-home --shell /bin/false alertmanager
ユーザーを配置したら、BlackboxExporterをダウンロードして構成しましょう。
ステップ2—BlackboxExporterをインストールする
まず、BlackboxExporterの最新の安定バージョンをホームディレクトリにダウンロードします。 最新のバイナリとそのチェックサムは、Prometheusダウンロードページで見つけることができます。
- cd ~
- curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.12.0/blackbox_exporter-0.12.0.linux-amd64.tar.gz
アーカイブを解凍する前に、以下を使用してファイルのチェックサムを確認してください sha256sum
指図:
- sha256sum blackbox_exporter-0.12.0.linux-amd64.tar.gz
このコマンドの出力をPrometheusダウンロードページのチェックサムと比較して、ファイルが本物であり、破損していないことを確認します。
Outputc5d8ba7d91101524fa7c3f5e17256d467d44d5e1d243e251fd795e0ab4a83605 blackbox_exporter-0.12.0.linux-amd64.tar.gz
チェックサムが一致しない場合は、ダウンロードしたファイルを削除し、前の手順を繰り返してファイルを再ダウンロードします。
チェックサムが一致することを確認したら、アーカイブを解凍します。
- tar xvf blackbox_exporter-0.12.0.linux-amd64.tar.gz
これにより、というディレクトリが作成されます blackbox_exporter-0.12.0.linux-amd64
、を含む blackbox_exporter
バイナリファイル、ライセンス、およびサンプルファイル。
バイナリファイルをにコピーします /usr/local/bin
ディレクトリ。
- sudo mv ./blackbox_exporter-0.12.0.linux-amd64/blackbox_exporter /usr/local/bin
バイナリのユーザーとグループの所有権をblackbox_exporterユーザーに設定し、root以外のユーザーがファイルを変更または置換できないようにします。
- sudo chown blackbox_exporter:blackbox_exporter /usr/local/bin/blackbox_exporter
最後に、アーカイブと解凍されたディレクトリは不要になったため、削除します。
- 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構成ファイルも保持します。
- sudo mkdir /etc/blackbox_exporter
次に、このディレクトリの所有権を、手順1で作成したblackbox_exporterユーザーに設定します。
- sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter
新しく作成したディレクトリに、 blackbox.yml
Blackbox Exporterの構成設定を保持するファイル:
- 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は起動に失敗します。
次の構成をファイルに追加します。
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_status_codes: []
method: GET
構成オプションの詳細については、BlackboxExporterのドキュメントを参照してください。
ファイルを保存して、テキストエディタを終了します。
サービスファイルを作成する前に、構成ファイルのユーザーとグループの所有権を、手順1で作成したblackbox_exporterユーザーに設定します。
- sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter/blackbox.yml
次に、サービスファイルを作成して、BlackboxExporterを使用して管理できるようにします。 systemd
:
- sudo nano /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
新しく作成したサービスファイルを使用するには:
- sudo systemctl daemon-reload
次に、BlackboxExporterを起動します。
- sudo systemctl start blackbox_exporter
サービスのステータスを確認して、正常に開始されたことを確認します。
- 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が起動することを確認します。
- sudo systemctl enable blackbox_exporter
Blackbox Exporterが完全に構成されて実行されたので、エンドポイントへのプローブ要求に関するメトリックを収集するようにPrometheusを構成できるため、これらのメトリックに基づいてアラートを作成し、Alertmanagerを使用してアラートの通知を設定できます。
ステップ4—BlackboxExporterをスクレイプするためのPrometheusの構成
手順3で説明したように、プローブされるエンドポイントのリストは、BlackboxExporterの一部としてPrometheus構成ファイルにあります。 targets
指令。 このステップでは、BlackboxExporterを使用してポートで実行されているNginxWebサーバーをスクレイピングするようにPrometheusを構成します 8080
前提条件のチュートリアルで構成したもの。
エディターでPrometheus構成ファイルを開きます。
- sudo nano /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で構成されます。
...
- 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構成ファイルは次のようになります。
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
サービスのステータスがそうでない場合 active (running)
、画面上のログに従い、チュートリアルを続行する前に、前の手順をたどって問題を解決してください。
この時点で、BlackboxExporterからメトリックを取得するようにPrometheusを構成しました。 Alertmanagerからアラートを受信するには、次のステップで適切なPrometheusアラートルールのセットを作成します。
ステップ5—アラートルールの作成
PrometheusAlertingは2つの部分に分かれています。 最初の部分はPrometheusサーバーによって処理され、アラートルールに基づいてアラートを生成してAlertmanagerに送信します。 2番目の部分は、Alertmanagerによって実行されます。Alertmanagerは、受信したアラートを管理し、構成に応じて適切な受信者に送信します。
このステップでは、サーバーが使用可能かどうかを確認するアラートルールを作成するときに、アラートルールの基本的な構文を学習します。
まず、アラートを保存するファイルを作成します。 名前の付いた空のファイルを作成します alert.rules.yml
の中に /etc/prometheus
ディレクトリ:
- sudo touch /etc/prometheus/alert.rules.yml
このファイルはPrometheus構成の一部であるため、所有権が、前提条件のPrometheusチュートリアルで作成したprometheusユーザーに設定されていることを確認してください。
- sudo chown prometheus:prometheus /etc/prometheus/alert.rules.yml
アラートファイルを配置したら、構成ファイルに適切なディレクティブを追加して、Prometheusに通知する必要があります。
エディターでPrometheus構成ファイルを開きます。
- sudo nano /etc/prometheus/prometheus.yml
追加します rule_files
後のディレクティブ global
Prometheusの起動時に、新しく作成されたアラートファイルをPrometheusにロードさせるディレクティブ。
global:
scrape_interval: 15s
rule_files:
- alert.rules.yml
scrape_configs:
...
ファイルを保存して、テキストエディタを終了します。
次に、エンドポイントがダウンしているかどうかをチェックするルールを作成しましょう。
アラートルールを作成するには、BlackboxExporterのを使用します probe_success
エンドポイントが稼働している場合は1を返し、稼働していない場合は0を返すメトリック。
The 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.metrics_label }}
ラベルの値を取得するための構文。 これを使用して、メトリックのエンドポイントのアドレスを含めます instance
ラベル。
次のルールをアラートファイルに追加します。
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
サービスのステータスがそうでない場合 active
、画面上のログに従い、チュートリアルを続行する前に、前の手順をたどって問題を解決してください。
アラートルールを設定すると、Alertmanagerをダウンロードしてインストールできます。
ステップ6—Alertmanagerをダウンロードする
Blackbox Exporterが構成され、アラートルールが設定されています。 Alertmanagerをダウンロードしてインストールし、Prometheusが受信したアラートを処理しましょう。
最新のバイナリとそのチェックサムは、Prometheusダウンロードページで見つけることができます。 Alertmanagerの現在の安定バージョンをホームディレクトリにダウンロードして解凍します。
- cd ~
- curl -LO https://github.com/prometheus/alertmanager/releases/download/v0.14.0/alertmanager-0.14.0.linux-amd64.tar.gz
アーカイブを解凍する前に、以下を使用してファイルのチェックサムを確認してください sha256sum
指図:
- sha256sum alertmanager-0.14.0.linux-amd64.tar.gz
このコマンドの出力をPrometheusダウンロードページのチェックサムと比較して、ファイルが本物であり、破損していないことを確認します。
Outputcaddbbbe3ef8545c6cefb32f9a11207ae18dcc788e8d0fb19659d88c58d14b37 alertmanager-0.14.0.linux-amd64.tar.gz
チェックサムが一致しない場合は、ダウンロードしたファイルを削除し、前の手順を繰り返してファイルを再ダウンロードします。
ダウンロードを確認したら、アーカイブを解凍します。
- tar xvf alertmanager-0.14.0.linux-amd64.tar.gz
これにより、というディレクトリが作成されます alertmanager-0.14.0.linux-amd64
2つのバイナリファイルを含む(alertmanager
と amtool
)、ライセンスと設定ファイルの例。
2つのバイナリファイルをに移動します /usr/local/bin
ディレクトリ:
- sudo mv alertmanager-0.14.0.linux-amd64/alertmanager /usr/local/bin
- sudo mv alertmanager-0.14.0.linux-amd64/amtool /usr/local/bin
バイナリファイルのユーザーとグループの所有権を、手順1で作成したalertmanagerユーザーに設定します。
- sudo chown alertmanager:alertmanager /usr/local/bin/alertmanager
- sudo chown alertmanager:alertmanager /usr/local/bin/amtool
残ったファイルは不要になったので、ホームディレクトリから削除します。
- rm -rf alertmanager-0.14.0.linux-amd64 alertmanager-0.14.0.linux-amd64.tar.gz
必要なファイルが適切な場所にあるので、アラートの通知を電子メールで送信するようにAlertmanagerを構成できます。
ステップ7—電子メールでアラートを送信するようにAlertmanagerを構成する
この手順では、Alertmanagerのデータと構成設定を格納するディレクトリとファイルを作成してから、アラートを電子メールで送信するようにAlertmanagerを構成します。
標準のLinux規則に従って、次の場所にディレクトリを作成します。 /etc
Alertmanagerの構成ファイルを保存します。
- sudo mkdir /etc/alertmanager
新しく作成されたディレクトリのユーザーとグループの所有権をalertmanagerユーザーに設定します。
- sudo chown alertmanager:alertmanager /etc/alertmanager
構成ファイルをに保存します alertmanager.yml
ファイルなので、このファイルを作成してエディタで開きます。
- 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トークンを含めることもできます。
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@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
指令:
...
route:
group_by: ['instance', 'alert']
次に、Alertmanagerが最初のアラートと新しいアラートを送信するまで待機する時間などの間隔を定義します。
を使用して group_wait
サブディレクティブでは、Alertmanagerが最初のアラートを送信する前に待機する時間を定義します。 この期間中、Alertmanagerは、Prometheusが他のアラートを送信するのを待機して、同じバッチで送信できるようにします。 アラートは1つしかないため、30秒の任意の値を選択します。
次に、 group_interval
間隔では、同じグループに新しいアラートがある場合に、Alertmanagerがアラートの次のバッチを送信するまで待機する時間を定義します。 必要に応じて任意の値を自由に選択できますが、これは5分ごとに設定されます。
構成する最後の間隔は repeat_interval
、アラートがまだ解決されていない場合にAlertmanagerが通知を送信するまで待機する時間を定義します。 ニーズに合った値を選択できますが、3時間の任意の値を使用します。
最後に、 receiver
サブディレクティブ、アラートの通知を受信するユーザーを定義します。 と呼ばれる受信機を使用します team-1
、後で定義します。
ルートディレクティブを次のように変更します。
route:
group_by: ['instance', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: team-1
特定のアラートについてのみ一致して通知を送信する場合は、 match
と match_re
ラベルの値でアラートを除外するサブディレクティブ。 The match
サブディレクティブは平等一致を表します。ここで、 match_re
サブディレクティブは、正規表現によるマッチングを表します。
次に、を構成します team-1
アラートの通知を受信できるようにするためのレシーバー。 下 receivers
ディレクティブ名前と適切な構成サブディレクティブを含むレシーバーを定義できます。 使用可能なレシーバーのリストとそれらの構成方法の説明は、Alertmanagerのドキュメントの一部として入手できます。
を構成するために team-1
メール受信者、使用します email_configs
の下のサブディレクティブ receivers
指令:
receivers:
- name: 'team-1'
email_configs:
- to: 'your-email-address'
この時点で、アラートの通知を電子メールアドレスに送信するようにAlertmanagerを構成しました。 構成ファイルは次のようになります。
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を作成します。
ブラウザで、次の場所にある着信Webhook作成ページにアクセスします。 https://workspace-name.slack.com/services/new/incoming-webhook/
. 受信Webhookの詳細と、アラートを送信するチャネルを選択するために必要なドロップダウンを含むページが表示されます。
チャネルを選択したら、着信WebHooks統合の追加ボタンをクリックします。
Webhookが正常に作成されたことを確認する新しいページが表示されます。 このページに表示されているWebhookURL をコピーします。これを使用して、AlertmanagerのSlack通知を構成します。
エディターでAlertmanager構成ファイルを開き、Slack通知を構成します。
- sudo nano /etc/alertmanager/alertmanager.yml
まず、を追加します slack_api_url
にサブディレクティブ global
Slack Incoming Webhookを作成したときに取得したURLを使用して、構成の一部を作成します。
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@example.com'
smtp_require_tls: false
slack_api_url: 'your_slack_webhook_url'
複数の受信者にアラートを送信するには、次の2つの方法があります。
- 同じエントリの下に複数のレシーバー構成を含めます。 これは、エラーが発生しにくいソリューションであり、最も簡単な方法です。
- 複数のレシーバーエントリを作成し、複数をネストします
route
ディレクティブ。
このチュートリアルでは2番目のアプローチについては説明しませんが、興味がある場合は、Alertmanagerドキュメントのルート構成の部分を参照してください。
の中に team-1
受信者に、 slack_configs という新しいサブディレクティブを追加し、アラートを受信するチャネルの名前を指定します。 この場合、使用します general
チャネル:
receivers:
- name: 'team-1'
email_configs:
- to: 'your-email-address'
slack_configs:
- channel: 'general<^>'
完成した構成ファイルは次のようになります。
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
ユニットファイルを開き、テキストエディタで開きます。
- sudo nano /etc/systemd/system/alertmanager.service
以下をファイルに追加して、にある構成ファイルを使用して、alertmanagerユーザーとしてAlertmanagerを実行するようにsystemdを構成します。 /etc/alertmanager/alertmanager.yml
サーバーのIPアドレスを使用するように構成されたAlertmanagerのURL:
[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構成ファイルを開きます。
- sudo nano /etc/prometheus/prometheus.yml
後に rule_files
ディレクティブ、以下を追加 alerting
指令:
...
rule_files:
- alert.rules.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
...
完了したら、ファイルを保存してテキストエディタを閉じます。
受信したアラートからURLを追跡できるようにするには、PrometheusにサーバーのIPアドレスまたはドメイン名を使用して通知する必要があります。 -web.external-url
Prometheusを起動するときにフラグを立てます。
を開きます systemd
Prometheusのユニットファイル:
- 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ユニットファイルは次のようになります。
[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を再起動して、変更を適用します。
- sudo systemctl daemon-reload
- sudo systemctl restart prometheus
サービスのステータスを確認して、Prometheusが意図したとおりに機能していることを確認します。
- sudo systemctl status prometheus
サービスのステータスがそうでない場合 active (running)
、画面上のログに従い、チュートリアルを続行する前に、前の手順をたどって問題を解決してください。
最後に、Alertmanagerを初めて起動します。
- sudo systemctl start alertmanager
サービスのステータスをチェックして、Alertmanagerが意図したとおりに機能していることを確認します。
- sudo systemctl status alertmanager
サービスのステータスがそうでない場合 active (running)
、画面上のメッセージに従い、チュートリアルを続行する前に、前の手順をたどって問題を解決してください。
最後に、サービスを有効にして、システムの起動時にAlertmanagerが起動することを確認します。
- sudo systemctl enable alertmanager
AlertmanagerのWebUIにアクセスするには、ポートへのトラフィックを許可します 9093
ファイアウォールを介して:
- sudo ufw allow 9093/tcp
Alertmanagerは、電子メールとSlackを介してアラートの通知を送信するように構成されました。 それが機能することを確認しましょう。
ステップ10—Alertmanagerのテスト
Alertmangerが正しく機能し、メールとSlack通知を送信していることを確認しましょう。 前提条件のチュートリアルで作成したNginxサーバーブロックを削除して、エンドポイントを無効にします。
- sudo rm /etc/nginx/sites-enabled/your_domain
Nginxをリロードして、変更を適用します。
- sudo systemctl reload nginx
実際に無効になっていることを確認したい場合は、Webブラウザでサーバーのアドレスを指定できます。 サイトにアクセスできなくなったことを示すメッセージが表示されます。 そうでない場合は、前の手順をたどって、正しいサーバーブロックを削除し、Nginxをリロードしたことを確認してください。
に応じて group_wait
間隔(この場合は 30秒)では、30秒後に電子メールとSlackの通知を受信するはずです。
そうでない場合は、以下を使用してサービスのステータスを確認してください status
コマンドを実行し、画面上のログに従って問題の原因を見つけます。
- sudo systemctl status alertmanager
- sudo systemctl status prometheus
また、Prometheus Web UIから、Webブラウザでアラートのステータスを確認することもできます。 http://your_server_ip/alerts
. Prometheusチュートリアルに従って、選択したユーザー名とパスワードを入力するように求められます。 アラート名をクリックすると、ステータス、アラートルール、および関連するラベルが表示されます。
Alertmanagerが機能していることを確認したら、からシンボリックリンクを再作成してエンドポイントを有効にします。 sites-available
ディレクトリへの sites-enabled
ディレクトリ:
- sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled
Nginxをもう一度リロードして、変更を適用します。
- 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
途中で必要な親ディレクトリを作成するには:
- mkdir -p $HOME/.config/amtool
を作成します config.yml
ファイルを作成し、テキストエディタで開きます。
- nano $HOME/.config/amtool/config.yml
次の行を追加して伝えます amtool
Alertmanagerをで使用するには http://localhost:9093
URL:
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
適切なマッチャーを使用して、ラベルでアラートをフィルタリングすることもできます。 マッチャーには、ラベル名、適切な操作が含まれています。 =
完全一致と =~
部分一致の場合、およびラベルの値。
重大度ラベルが添付されているすべてのアラートを一覧表示する場合は、 severity=critical
のマッチャー alert query
指図:
- amtool alert query severity=critical
以前と同様に、出力にはアラートの名前、アラートが最初に発生した時刻、およびアラートの要約が含まれます。
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 instance=~http://localhost.*
アラートとエンドポイントが1つしかないため、出力は前の例と同じになります。
Alertmanagerの構成を確認するには、 amtool config
指図:
- 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時間のインスタンスの場合、次のコマンドを使用します。
- amtool silence add instance=http://localhost:8080 --expires 3h
出力には無音の識別番号が含まれているため、無音を削除する場合に必要になるので、必ずメモしておいてください。
Output4e89b15b-0814-41d3-8b74-16c513611732
沈黙を作成するときに、作成者やコメントなどの追加情報を提供する場合は、 --author
と --comment
フラグ:
- amtool silence add severity=critical --expires 3h --author "Sammy The Shark" --comment "Investigating the progress"
前と同様に、出力には無音のIDが含まれます。
Output12b7b9e1-f48a-4ceb-bd85-65ac882ceed1
コマンド 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
最後に、沈黙を期限切れにするには、 amtool silence expire
期限切れにしたい沈黙のIDを使用して:
- amtool silence expire 12b7b9e1-f48a-4ceb-bd85-65ac882ceed1
- amtool silence expire 4e89b15b-0814-41d3-8b74-16c513611732
コマンドが正常に実行されたことを示す出力はありません。 エラーが表示された場合は、無音の正しいIDを指定したことを確認してください。
結論
このチュートリアルでは、Blackbox ExporterとAlertmanagerをPrometheusと連携するように構成して、電子メールとSlackを介してアラートを受信できるようにしました。 また、Alertmanagerのコマンドラインインターフェイスを使用しました。 amtool
、アラートを管理および沈黙させるため。
他のAlertmanager統合について詳しく知りたい場合は、AlertmanagerのドキュメントのConfigurationの部分を参照してください。
また、PrometheusAlertsをGrafanaなどの他のサービスと統合する方法を確認することもできます。