Nagios と Application Real-Time Monitoring Service (ARMS) アラート管理を統合し、Nagios からホストおよびサービスのアラートを ARMS に転送します。ARMS はこれらのアラートを重複排除し、通知ポリシーに基づいてルーティングします。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
ARMS が有効化された Alibaba Cloud アカウント
管理者アクセス権を持つ実行中の Nagios サーバー
Nagios サーバーにインストール済みの Python
requestsPython ライブラリ(セットアップ時にまだインストールされていない場合は自動的にインストールされます)
ステップ 1:ARMS で Nagios 統合を作成する
ARMS コンソールにログインします。
左側のナビゲーションウィンドウで、アラート管理 > 統合 を選択します。
アラート統合 タブで、Nagios をクリックします。
Nagios 統合の作成 ダイアログボックスで、名前と説明を入力し、自動回復時間を指定して、保存 をクリックします。
説明自動回復期間内に再度アラートイベントがトリガーされない場合、ARMS は自動的にそのアラートをクリアします。
アラート統合 タブで、作成した Nagios 統合を見つけ、統合アドレス 列の URL をコピーします。

ステップ 2:Nagios のアラート転送を構成する
Nagios サーバー上に Python スクリプトを作成し、ARMS 統合エンドポイントにアラートデータを投稿します。その後、Nagios のコマンドおよび連絡先を構成してスクリプトを呼び出します。
アラート通知スクリプトの作成
Nagios サーバーにログインし、プラグインディレクトリに移動します。
cd /usr/local/nagios/libexec/以下の内容で
nagios-alert.pyという名前のファイルを作成します。重要<your-integration-url>は、ステップ 1 でコピーした統合アドレスに置き換えてください。#!/usr/bin/python # -*- coding: utf-8 -*- import requests import json import sys import os headers = {'Content-Type': 'application/json;charset=utf-8'} api_url = "<your-integration-url>" # Replace with the integration address from Step 1 def parse(sys): object_type = str(sys.argv[1]) notification_type = str(sys.argv[2]) host_name = str(sys.argv[3]) host_ip = str(sys.argv[4]) state = str(sys.argv[5]) time = str(sys.argv[6]) info = str(sys.argv[7]) if object_type == 'host': description = "[{}] {} alert: {} is {}".format(notification_type, object_type, host_name, state) service = "" else: service = str(sys.argv[8]) description = "[{}] {} alert: {}/{} is {}".format(notification_type, object_type, host_name, service, state) content_dict = {'service':""} content_dict['object_type'] = object_type content_dict['notification_type'] = notification_type content_dict['host_name'] = host_name content_dict['host_ip'] = host_ip content_dict['state'] = state content_dict['time'] = time content_dict['info'] = info content_dict['service'] = service content_dict['description'] = description print(content_dict) return content_dict def msg(text): result = requests.post(url=api_url, data=json.dumps(text), headers=headers) print(result) if __name__ == '__main__': text = parse(sys) msg(text)まだインストールされていない場合は、
requestsライブラリをインストールします。pip install requests
Nagios コマンドの定義
Nagios コマンド構成ファイルを開きます。
vim /usr/local/nagios/etc/objects/commands.cfファイルに以下のコマンド定義を追加します。
define command{ command_name notify-host-by-alert command_line python /usr/local/nagios/libexec/nagios-alert.py "host" "$NOTIFICATIONTYPE$" "$HOSTALIAS$" "$HOSTADDRESS$" "$HOSTSTATE$" "$LONGDATETIME$" "$HOSTOUTPUT$" } define command{ command_name notify-service-by-alert command_line python /usr/local/nagios/libexec/nagios-alert.py "service" "$NOTIFICATIONTYPE$" "$HOSTALIAS$" "$HOSTADDRESS$" "$SERVICESTATE$" "$LONGDATETIME$" "$SERVICEOUTPUT$" "$SERVICEDESC$" }ファイルを保存して閉じます。
連絡先の通知コマンドの更新
Nagios 連絡先構成ファイルを開きます。
vim /usr/local/nagios/etc/objects/contacts.cfg連絡先定義内で、以下の通知コマンドディレクティブを追加または更新します。
service_notification_commands notify-service-by-alert host_notification_commands notify-host-by-alert
ファイルを保存して閉じます。
Nagios の再起動
変更を適用するには、次のコマンドを実行します。
systemctl restart nagios(オプション)ステップ 3:フィールドマッピングのカスタマイズ
ARMS では、Nagios アラートデータと ARMS アラートイベント間のデフォルトのフィールドマッピングが提供されています。これらのマッピングを追加または変更するには、統合設定を編集します。
以下の JSON は、Nagios アラートペイロードのサンプルです。
{
"info": "SWAP CRITICAL - 0% free (0 MB out of 0 MB) - Swap is either disabled, not present, or of zero size.",
"description": "[PROBLEM] service alert: localhost/Swap Usage is CRITICAL",
"service": "Swap Usage",
"host_ip": "127.0.0.1",
"state": "CRITICAL",
"object_type": "service",
"time": "Tue Sep 14 10:46:49 CST 2021",
"notification_type": "PROBLEM",
"host_name": "localhost"
}テストデータの送信
アラート統合 タブで、対象の統合を見つけ、操作 列の 編集 をクリックします。
イベントマッピング セクションで、テストデータの送信 をクリックします。
テストデータの送信 ダイアログボックスで、JSON アラートペイロードを貼り付け、送信 をクリックします。
説明「アップロードされました。イベントは生成されていません。元データに基づいてマッピングを構成してください。」というメッセージが表示された場合、ソースフィールドはまだマッピングされていません。アップロードされたデータは左側のペインに表示され、マッピング構成時にフィールドを選択できます。
「Uploaded.」というメッセージが表示された場合、アラート内容が[アラートイベント履歴]ページに報告されました。 詳細については、「過去のアラートイベントの表示」をご参照ください。
テストデータの送信 ダイアログボックスで、無効化 をクリックします。
フィールドマッピングの構成
イベントマッピング セクションの左側ペインで、データレコードをクリックして詳細を表示します。
(オプション)ルートノードの選択 セクションで、アラートデータに配列ノードが含まれる場合はバッチ処理を有効にします。バッチ処理に使用する配列ノードを選択すると、そのノード配下のデータが一括で処理されます。
説明アラートデータに複数の配列ノードが存在する場合、バッチ処理用に選択できるのは 1 つのみです。
ソースフィールドからターゲットフィールドへのマッピング セクションで、ソースフィールドを ARMS アラートフィールドにマッピングします。マップ アイコンをクリックしてマッピング方法を選択します。
直接 — 単一のソースフィールドを ARMS アラートフィールドにマッピングします。
[シリーズ] -- 複数のソースフィールドをデリミタ(特殊文字のみ)で連結し、その結果を ARMS アラートフィールドにマップします。
条件 — 指定された条件を満たす場合にのみ、ソースフィールドを ARMS アラートフィールドにマッピングします。
マッピングテーブル — アラートソースの重大度レベルを ARMS の重大度レベルにマッピングします。この方法は
severityフィールドにのみ使用します。
ARMS アラートフィールド
| フィールド | 説明 |
|---|---|
| alertname | カスタムアラート名。 |
| severity | アラートの重大度レベル。直接マッピング方式を使用する必要があります。 |
| message | アラートの説明。アラート通知の内容として使用されます。最大長:15,000 文字。 |
| value | メトリック値のサンプル。 |
| imageUrl | Grafana メトリック折れ線グラフの URL。 |
| check | アラート確認項目(例:CPU、JVM、アプリケーションクラッシュ、Deployment など)。 |
| source | アラートソース。 |
| class | アラートイベントをトリガーするオブジェクトのタイプ(例:host など)。 |
| service | ソースサービス(例:ログインサービスなど)。 |
| startat | イベント開始時刻のタイムスタンプ。 |
| endat | イベント終了時刻のタイムスタンプ。 |
| generatorUrl | イベント詳細ページの URL。 |
イベント重複排除の構成
イベント重複排除は、指定されたフィールドの値が同一である複数のイベントを単一のアラート通知にマージすることで、ノイズを低減します。
重複排除は、未クリアのイベントにのみ適用されます。
統合詳細 ページの イベント重複排除 セクションで、重複排除に使用するフィールドを選択します。
重複排除テスト をクリックして、グループ化結果をプレビューします。
説明重複排除テストは、イベントマッピング セクションでアップロードされた最新のデータレコード 10 件に対して実行されます。
保存 をクリックします。
アラートイベントの詳細の表示
左側のナビゲーションウィンドウで、アラート管理 > アラートイベント履歴 を選択します。
アラートイベント名をクリックして、その詳細を表示します。詳細については、「過去のアラートイベントを表示する」をご参照ください。
統合の管理
アラート統合 タブ(アラート管理 > 統合)では、以下の操作で統合を管理できます。
詳細の表示 — 統合行をクリックして 統合詳細 ページを開きます。
キーの更新 — 操作 列で その他 > キーの更新 を選択し、OK をクリックします。
重要キーを更新した後は、
nagios-alert.pyスクリプト内のapi_url値を更新し、Nagios を再起動してください。詳細については、「ステップ 2:Nagios のアラート転送を構成する」をご参照ください。編集 — 操作 列の 編集 をクリックして 統合詳細 ページで統合を変更し、保存 をクリックします。
有効化または無効化 — 操作 列の 有効化 または 無効化 をクリックします。
削除 — 操作 列の 削除 をクリックし、OK をクリックします。
イベント処理フローの追加 -- [イベント処理フローの追加] を [操作] 列でクリックします。詳細については、「イベント処理フローの操作」をご参照ください。
通知ポリシーの作成 -- [操作] 列で [詳細] > [通知ポリシーの作成] を選択します。 詳細については、「通知ポリシーの作成と管理」をご参照ください。
次のステップ
通知ポリシーを作成すると、ARMS はそのポリシーに基づいてアラートを生成し、受信したアラートイベントに対して通知を送信します。詳細については、「通知ポリシーの作成と管理」をご参照ください。
送信済みのアラートを確認するには、[アラート送信履歴] ページに移動します。詳細については、「過去のアラートを表示する」をご参照ください。