Graylogのアラート機能を使ってアラートメールを飛ばす

Graylogのアラート機能を使ってアラートメールを飛ばす

Graylogからアラートメールを飛ばす場合、Alertを使用するわけですが、少しわかりにくいところがあります。そこで今回は、Graylog からアラートメールを飛ばす設定について説明します。

アラートの種類

Graylogのアラート機能は次のように3パターンの条件によって、アラートを発生させることができます。

Condition Type内容
Field Content Alert Conditionフィールドに特定の文字列が含まれている場合にアラートを発生させる
Field Aggregation Alert Conditionフィールドの値が指定した集計関数の条件に一致した場合にアラートを発生させる
Message Count Alert Conditionメッセージの件数が指定した件数を超えた場合にアラートを発生させる

まずは、Conditionを作成して、次に Nofitiation を作成します。

Condition の作成

ここでは Fortigate の Virus ログが発生した場合を例としてアラートを作成します。

[Alert] – [Conditions] から [Add new conditon] を開きます。
ここで、アラートを設定したい stream を選択し、 Condition Type を
Message Count Alert Condition にして、 [Add alert conditon] をクリックします。
Fortinet Virus という Stream にメッセージが発生した場合にアラートを飛ばすための設定となります。

何かわかりやすいタイトルをつけます。
あと設定する項目としては、ThresholdとMessage Backlogの2つで基本は大丈夫です。
ここではThresholdは0としています。こうすることで、1件でもメッセージが発生したらアラートを飛ばすことができます。
もう一つのMessage Backlogは5としています。
ここを設定しておかないと、アラートメールの中に必要な項目を埋め込むことができません。
今回は、5分間のうち1件でもメッセージが発生したら、5件まで遡ったメッセージをアラートメールに埋め込むという設定になります。

ここまで設定したら [Save] をクリックしてください。

Notification の作成

[Notification] をクリックして、Notification設定画面に行きます。
そこで [Add new notification] をクリックします。

同様にして、Notify on stream から対象となる stream を選択し、Notification typeを Email Alert Callback にします。
ここで HTTP を選択すると、アラートとしてHTTP通信を飛ばすことができます。今回は、Email にしておきます。

[Add alert notification] をクリックしてください。

通知内容の設定

ここでどんなメールを飛ばすのか設定します。
まずは、分かりやすいタイトルを設定してください。
次に、User Recivers または E-Mail Receivers を設定します。
ここで設定したユーザーや Emailアドレスに通知が飛びます。

通知本文の設定

##########
Alert Description: ${check_result.resultDescription}
Date: ${check_result.triggeredAt}
Stream ID: ${stream.id}
Stream title: ${stream.title}
Stream description: ${stream.description}
Alert Condition Title: ${alertCondition.title}
${if stream_url}Stream URL: ${stream_url}${end}

Triggered condition: ${check_result.triggeredCondition}
##########

${if backlog}Last messages accounting for this alert:
${foreach backlog message}${message}

${end}${else}<No backlog>
${end}

デフォルトの本文はこのようになっていますが、このままでは、メッセージの全てが飛んできて可読性が非常に悪いです。
そのためこの本文を少し加工してやります。

まずは、${foreach backlog message} 〜 ${end} の間にある ${message} を削除します。
ここのforeach文は先ほど設定した、Message Backlogの件数分ループします。さきほどは5と設定したので、5件分までループしてくれます。
なので、Message Backlogを設定しておかないと、何も取得できないのです。

次に、メール本文に表示させたい項目を設定していきます。
例えば、ActionとApp、DestinationIPを設定するとします。

##########
Alert Description: ${check_result.resultDescription}
Date: ${check_result.triggeredAt}
Stream ID: ${stream.id}
Stream title: ${stream.title}
Stream description: ${stream.description}
Alert Condition Title: ${alertCondition.title}
${if stream_url}Stream URL: ${stream_url}${end}

Triggered condition: ${check_result.triggeredCondition}
##########

${if backlog}Last messages accounting for this alert:
${foreach backlog message}

-----------------------------------------------------
Action        :  ${message.fields.Action}
App           :  ${message.fields.App}
DestinationIP :  ${message.fields.DestinationIP}

${end}${else}<No backlog>
${end}

というように設定しておきます。
こうすることで必要な項目のみメール本文に表示させることができ、可読性が向上します。