オープンソース

一覧へ

15. ログ監視を行うには

15.1. ログ監視の概要

Graylogでは、一定のルールに基づいて通知を送信することができます。 例えば、特定のメッセージがログに現れた場合や、例外検知のログが1分あたり50メッセージを超える場合などです。 Graylogでは、デフォルトでは通知をEメールで送信するか、もしくはHTTPを使って送信ができます。

Graylogが特定のログを検知した後、管理の状態は次の2つの状態になります。

Note

ここでいう監視の状態は、チケットと読み替えたほうがわかりやすい人もいるでしょう。

未解決
通知が発生する条件が満たされている間、監視の状態は未解決の状態になります。通常、なんらかの改善を行う必要があります。
解決済み
通知の条件が満たされなくなったときに、自動的に解決済みのステータスになります。これは監視の最終状態であり、再び条件を満たした場合は、別の通知が行われます。猶予期間が設定されていれば、新しい通知を発生させる前に一定期間待機します。

15.2. 通知の作成

まずGraylogのログ監視には重要な要素が3つあります。

  • Condition : 監視条件
  • Notification : 通知の内容
  • Stream : ConditionとNotificationが紐づくstream

Hint

Streamついては ログのカテゴライズと保存場所の変更方法 を参照してください

ConditionとNotificationは、独立した設定として存在します。 この2つを設定する際、どのStreamとの紐付けが必要になります。 同じStreamに紐付いているConditionとNotificationが、すべて実行されるという動きになることに注意してください。 つまり一つのStreamの中で、条件Aの場合はA`の通知を送り、条件Bの場合はB`の通知を送るという分岐ができないことを意味しています。 このような動きをしたい場合、Streamの設定から見直しを行ってください。

15.2.1. Conditions (通知発生条件)の設定

_images/alert1.png

Manage conditions ボタンをクリックして、監視条件を作成します。

_images/alert6.png

次に Add new condition をクリックし、次の画面を表示します。

_images/alert7.png

この画面で、条件を適用するStreamとタイプを選択します。 タイプは以下の3つから選択できます。なお通知のタイプはプラグインで増やすこともできます。

  • Field Content Alert Condition : 指定したフィールドに特定の文字が含まれた場合に通知を発生させる条件
  • Field Aggregation Alert Condition : 指定したフィールドの値の推移(数値が10以上になった状態が5分間など)で通知を発生させる条件
  • Message Count COndition : 単位時間あたりのメッセージの数で通知を発生させる条件

以下は、Field Content Alert Condition を選択した場合の表示例です。

_images/alert8.png

15.2.1.1. Field Content Alert Condition

Field Content Alert Condition を選択した場合の設定項目は次の通りです。

  • Title : 条件のタイトルです。
  • Field : 条件にマッチさせるフィールドです。
  • Value : 上記で指定したフィールドにマッチさせる値です。部分一致で検査されます。
  • Grace Period : 次の通知を発生させるまでの猶予期間
  • Message Backlog : 条件にマッチしたログから何行遡るかの設定。遡った情報がメールに記載可能になります。
  • Repeat notifications : チェックした場合、状態に関係なく条件にマッチした場合、通知を送信します。

15.2.1.2. Field Aggregation Alert Condition

Field Aggregation Alert Condition を選択した場合の設定項目は次の通りです。

  • Title : 条件のタイトルです。

  • Field : 条件にマッチさせるフィールドです。

  • Time Range : 条件にマッチさせる期間(秒数)を指定します。

  • Threshold Type : higher/lowerから選択します

  • Threshold : しきい値を指定します。

  • Aggregation type : 次から選択します

    • max value : 時間あたりの最大値
    • mix value : 時間あたりの最小値
    • sum : 時間あたりの合計値
    • standard diviation : 時間あたりの標準偏差
    • mean value : 時間あたりの平均値
  • Message Backlog : 条件にマッチしたログから何行遡るかの設定。遡った情報がメールに記載可能になります。

  • Repeat notifications : チェックした場合、状態に関係なく条件にマッチした場合、通知を送信します。

15.2.1.3. Message Count Alert Condition description

Message Count Alert Condition description を選択した場合の設定項目は次の通りです。

  • Title : 条件のタイトルです。
  • Field : 条件にマッチさせるフィールドです。
  • Time Range : 条件にマッチさせる期間(秒数)を指定します。
  • Threshold Type : more than/less thanから選択します
  • Threshold : しきい値を指定します。
  • Message Backlog : 条件にマッチしたログから何行遡るかの設定。遡った情報がメールに記載可能になります。
  • Repeat notifications : チェックした場合、状態に関係なく条件にマッチした場合、通知を送信します。

15.2.2. Notifications (通知テンプレート)の設定

_images/alert1.png

Manage notifications ボタンをクリックして、送信する情報のテンプレートを作成します。つまり、メールで通知を送信する場合、メールの内容を作成するということです。

_images/alert2.png

次に Add new notification をクリックし、次の画面を表示します。

_images/alert3.png

この画面で、通知設定を適用するStreamとタイプを選択します。 タイプは以下の2つから選択できます。なおタイプはプラグインで増やすこともできます。

  • HTTP Alerm Callback : HTTPで通知を送信するタイプ
  • Email Alert Callback : Eメールで通知を送信するタイプ

それぞれ選択して Add alert notification ボタンをクリックすると次の画面が表示されます。

15.2.2.1. Eメール

_images/alert4.png

入力項目は次の通りです。

  • Title : Notificationのタイトルです。
  • E-Mail Subject : メールの件名です。
  • Sender : メールの送信元アドレス(Fromヘッダ)です。
  • E-Mail Body : メール本文です。本文内では${}に囲まれた置換文字が利用できます。置換文字については後述します。
  • User Receivers : この通知を送信する宛先のユーザを選択します。ユーザ情報に紐づくEメールアドレスにメールは送信されます。
  • E-Mail Recivers : この通知を送信する宛先のメールアドレスを入力します。

Note

各項目について、UTF-8であれば日本語が利用可能です。自動的にMIMEエンコードも行われます。ただしGraylogが日本語を意識して開発されているわけではなく、たまたま日本語が利用できているという可能性が高いため、特殊文字など問題が発生しやすい文字は避けたほうが良いです。

15.2.2.2. 置換文字

Email Alert Callback では、以下の置換文字が使用できます。

  • stream : この通知が属するstream

    • stream.id : streamのID
    • stream.title : streamのタイトル
    • stream.description: streamの説明
    • stream_url : streamへのHTTP URLを含む文字列
  • check_result : 通知発生条件の検査結果

    • check_result.triggerdCondition : マッチ通知条件
    • check_result.triggeredAt : 通知発生時間
    • check_result.resultDescription : 検査結果のテキスト
  • backlog : 下記の message のリスト。 foreach を使用して反復処理が可能。

  • message : 上記の backlog の反復処理の中で使用可能。下記の個別のフィールドを利用しない場合は、toString()メソッドを使って、 message を表示できます。 * message.id : 自動生成されたメッセージID * message.message : 実際のメッセージテキスト * message.source : ソース * message.timestamp : メッセージのタイムスタンプ * message.fields : 定義されているすべてのフィールドのキー値のペアのマップ

15.2.2.3. HTTP

HTTPによる通知では、設定したURLに情報をPOSTします。

_images/alert5.png
  • Title : Notificationのタイトルです。
  • URL : 情報をPOSTするURLです。

POSTで送信される情報は以下のような情報です:

{
    "check_result": {
        "result_description": "Stream had 2 messages in the last 1 minutes with trigger condition more than 1 messages. (Current grace time: 1 minutes)",
        "triggered_condition": {
            "id": "5e7a9c8d-9bb1-47b6-b8db-4a3a83a25e0c",
            "type": "MESSAGE_COUNT",
            "created_at": "2015-09-10T09:44:10.552Z",
            "creator_user_id": "admin",
            "grace": 1,
            "parameters": {
                "grace": 1,
                "threshold": 1,
                "threshold_type": "more",
                "backlog": 5,
                "time": 1
            },
            "description": "time: 1, threshold_type: more, threshold: 1, grace: 1",
            "type_string": "MESSAGE_COUNT",
            "backlog": 5
        },
        "triggered_at": "2015-09-10T09:45:54.749Z",
        "triggered": true,
        "matching_messages": [
            {
                "index": "graylog2_7",
                "message": "WARN: System is failing",
                "fields": {
                    "gl2_remote_ip": "127.0.0.1",
                    "gl2_remote_port": 56498,
                    "gl2_source_node": "41283fec-36b4-4352-a859-7b3d79846b3c",
                    "gl2_source_input": "55f15092bee8e2841898eb53"
                },
                "id": "b7b08150-57a0-11e5-b2a2-d6b4cd83d1d5",
                "stream_ids": [
                    "55f1509dbee8e2841898eb64"
                ],
                "source": "127.0.0.1",
                "timestamp": "2015-09-10T09:45:49.284Z"
            },
            {
                "index": "graylog2_7",
                "message": "ERROR: This is an example error message",
                "fields": {
                    "gl2_remote_ip": "127.0.0.1",
                    "gl2_remote_port": 56481,
                    "gl2_source_node": "41283fec-36b4-4352-a859-7b3d79846b3c",
                    "gl2_source_input": "55f15092bee8e2841898eb53"
                },
                "id": "afd71342-57a0-11e5-b2a2-d6b4cd83d1d5",
                "stream_ids": [
                    "55f1509dbee8e2841898eb64"
                ],
                "source": "127.0.0.1",
                "timestamp": "2015-09-10T09:45:36.116Z"
            }
        ]
    },
    "stream": {
        "creator_user_id": "admin",
        "outputs": [],
        "matching_type": "AND",
        "description": "test stream",
        "created_at": "2015-09-10T09:42:53.833Z",
        "disabled": false,
        "rules": [
            {
                "field": "gl2_source_input",
                "stream_id": "55f1509dbee8e2841898eb64",
                "id": "55f150b5bee8e2841898eb7f",
                "type": 1,
                "inverted": false,
                "value": "55f15092bee8e2841898eb53"
            }
        ],
        "alert_conditions": [
            {
                "creator_user_id": "admin",
                "created_at": "2015-09-10T09:44:10.552Z",
                "id": "5e7a9c8d-9bb1-47b6-b8db-4a3a83a25e0c",
                "type": "message_count",
                "parameters": {
                    "grace": 1,
                    "threshold": 1,
                    "threshold_type": "more",
                    "backlog": 5,
                    "time": 1
                }
            }
        ],
        "id": "55f1509dbee8e2841898eb64",
        "title": "test",
        "content_pack": null
    }
}
一覧へ