オープンソース

Top

16. ログ監視を行うには

16.1. ログ監視の概要

Graylogでは、特定の条件に基づいてアラートを生成することができます。 例えば、特定のメッセージがログに現れた場合や、例外検知のログが1分あたり50メッセージを超える場合などです。

Graylogでは、アラートが生成された際に、通知を送信することもできます。デフォルトでは通知をEメールで送信するか、もしくはHTTPを使って送信ができます。

Hint

以前はStreamに基づいて通知条件が定義されていましたが、Graylog 3.1.0 以降からアラートを生成する条件を Event Definitions でイベントとして定義する方法に変更されました。定義されたイベントが検出されると、アラートが生成されます。

ログ監視の設定は、メニューの Alerts リンクから移動した画面で行います。

_images/alert1.png

Event Definitions では、アラートを生成するイベントを定義します。

Notifications は、通知方法や通知テンプレートを設定します。

Event DefinitionsNotifications は、独立した設定として存在しますが、この2つを組み合わせることでログ監視設定を行うことができます。

16.2. Event Definitions (イベントの定義)

_images/event1.png

Event Definitions のボタンをクリックして、イベントを定義します。 イベントが何も定義されていない場合、 Get Started! のボタンが表示されます。

Get Started! をクリックして、イベントを定義します。
_images/event2.png

この画面で、イベントの詳細設定を行います。 入力値の説明は以下の通りです。

  • Title : イベントの名前です。
  • Description : イベントの説明です。
  • Priority : イベントの優先度です。通知に書き込まれたり、Overviewでは優先度のアイコンが表示されます。

入力後 Next ボタンをクリックします。

_images/event3.png

この画面で、イベントの条件を設定します。 入力値の説明は以下の通りです。

  • Condition Type : 条件の種類を選択します。利用可能な条件は Filter & Aggregation です。
  • Search Query : 検索クエリを使用して条件を定義します。
  • Streams : 検索対象のStreamを選択します。空の場合は、すべてのStreamを検索対象とします。
  • Search within the last : 検索する時間を指定します。
  • Execute search every : 検索する間隔を指定します。
  • Enable : 定義したイベントを自動で実行する場合はチェックを入れます。
  • Filter has results : 条件にマッチした場合、イベントを作成します。
  • Aggregation of results reaches a threshold : 条件にマッチした結果が閾値に達した場合、イベントを作成します。

Note

Search within the last の時間が Execute search every よりも長い場合、同じログに対して複数のイベントが生成されます。
例えば、Search within the last を1分に設定し、 Execute search every を10秒に設定した場合、1分間のログエントリに対し10秒ごとに検索されるため、同じログエントリを6回検出することになります。

Hint

Aggregation of results reaches a threshold を選択した場合、閾値条件を設定することができます。

_images/event4.png

入力値の説明は以下の通りです。

  • Group by Field(s) : フィルター結果をグループ化するためのフィールドを選択します。
  • Create Events for Definition : 集計結果の閾値条件を設定します。

入力後 Next ボタンをクリックします。

16.2.1. カスタムフィールドの設定

_images/event5.png

カスタムフィールドを追加すると、検索画面のフィールドとして表示されるようになります。検索画面でイベント結果を再度集計する時などに便利です。 なお、オプション設定のため必須ではありません。

入力値の説明は以下の通りです。

  • Name : カスタムフィールドの名前です。
  • Use Field as Event Key : フィールドをイベントキーとして使用する場合はチェックし、グループの順序を数字で指定します。
  • Set Value From : カスタムフィールドの抽出元を選択します。 Template または Lookup table を選択します。

入力後 Next ボタンをクリックします。

16.2.2. 通知設定

_images/event6.png

アラートが生成され際に、通知も送信したい場合に設定を行います。 なお、オプション設定のため必須ではありません。

通知テンプレートの設定がない場合は、通知テンプレートの作成が必要です。

_images/event6.png

通知テンプレートの作成については notifications を参照してください

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

入力後 Next ボタンをクリックします。

最後にイベントの概要が表示されます。

_images/event8.png

問題なければ Done をクリックして完了します。

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

_images/notice1.png

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

Get Started! をクリックして、通知テンプレートを作成します。
_images/notice2.png

入力値の説明は以下の通りです。

  • Title : 通知テンプレートの名前です。
  • Description : 通知テンプレートの説明です。
  • Notification Type : 通知方法を選択します。以下の2つから選択できます。なおタイプはプラグインで増やすこともできます。
  • Email Notification : Eメールで通知を送信するタイプ
  • HTTP Notification : HTTPで通知を送信するタイプ

以前のバージョンに合わせた通知タイプ Legacy Alarm Callbacks も選択できますが、将来的にサポートが削除される予定のため非推奨となっています。

Notification Type を選択すると次の画面が表示されます。

16.3.1. メールによる通知

_images/notice3.png

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

  • Sender : メールの送信元アドレス(Fromヘッダ)です。
  • Subject : メールの件名です。
  • User recipient(s) : この通知を受信するGraylogユーザを選択します。ユーザ情報に紐づくEメールアドレスにメールは送信されます。
  • User recipient(s) : この通知を受信するメールアドレスを追加します。
  • Body Template : メール本文です。本文内では${}に囲まれた置換文字が利用できます。置換文字については後述します。
  • Test Notification : テスト通知を送信します。

Note

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

16.3.1.1. 置換文字

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

  • イベントに関するメタデータ

    • event_definition_id : イベントのデータベースID
    • event_definition_type : イベントタイプ名
    • event_definition_title : イベントのタイトル
    • event_definition_description : イベントの説明
    • job_definition_id : イベントに関連付けられたジョブID
    • job_trigger_id : ジョブの実行に関連付けられた内部ID
  • evnet : Graylogに保存されているイベントに関する情報

    • event.id : イベントのメッセージID
    • event.event_definition_id : イベントのデータベースID
    • event.event_definition_type : イベントタイプ名
    • event.origin_context : イベントを作成するメッセージまたはイベントのURN(event または message)
    • event.timestamp : イベントのタイムスタンプ
    • event.timestamp_processing : イベントがGraylogによって作成された時のタイムスタンプ
    • event.timerange_start : イベントの作成時に使用されたGraylogウィンドウの開始時間
    • event.timerange_end : イベントの作成時に使用されたGraylogウィンドウの終了時間
    • event.stream : イベントが格納されているStream
    • event.source_streams : イベントのソースが格納されているStream
    • event.alert : イベントがアラートと判定されているかどうか(True or False)
    • event.message : イベントの説明
    • event.source : イベントを作成したGraylogサーバのホスト名
    • event.key_tuple : イベントキーのリスト
    • event.key : イベントキー
    • event.priority : イベントの優先度
    • event.fields : イベントのカスタムフィールド
  • backlog : アラートの生成に関連するメッセージやイベントのリスト。 foreach を使用して反復処理が可能。

    • id : メッセージID
    • index : メッセージが格納されているインデックスの名前
    • source : ソース
    • message : メッセージ
    • timestamp : メッセージのタイムスタンプ
    • stream_ids : メッセージのStreamID
    • fields : 定義されているすべてのフィールドのキー値のペアのマップ

16.3.2. HTTPによる通知

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

_images/alert2.png

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

  • URL : 情報をPOSTするURLです。

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

{
  "event_definition_id": "this-is-a-test-notification",
  "event_definition_type": "test-dummy-v1",
  "event_definition_title": "Event Definition Test Title",
  "event_definition_description": "Event Definition Test Description",
  "job_definition_id": "<unknown>",
  "job_trigger_id": "<unknown>",
  "event": {
    "id": "NotificationTestId",
    "event_definition_type": "notification-test-v1",
    "event_definition_id": "EventDefinitionTestId",
    "origin_context": "urn:graylog:message:es:testIndex_42:b5e53442-12bb-4374-90ed-0deadbeefbaz",
    "timestamp": "2020-05-20T11:35:11.117Z",
    "timestamp_processing": "2020-05-20T11:35:11.117Z",
    "timerange_start": null,
    "timerange_end": null,
    "streams": [
      "000000000000000000000002"
    ],
    "source_streams": [],
    "message": "Notification test message triggered from user <admin>",
    "source": "000000000000000000000001",
    "key_tuple": [
      "testkey"
    ],
    "key": "testkey",
    "priority": 2,
    "alert": true,
    "fields": {
      "field1": "value1",
      "field2": "value2"
    }
  },
  "backlog": []
}
Top