AlertHub で受信したメッセージの文中から取り出した値をルールで利用できるようになりました。

これまで AlertHub では、メールで受信したメッセージについて、本文の中に特定の文字列が含まれていることや、 正規表現にマッチするかの判定は行えていました。
ただし、ルールによって発生させるイベントでのスコープ指定の条件や、深刻度名の指定においてはメールの文面を活用するのが困難でした。

そこで、正規表現によって、メッセージの内容から文字列を取り出してルールで利用できるよう機能追加を行いました。

設定例

以下の様な文面の異常通知メールを受信した場合に、 hostname を元に深刻度を増加させるスコープを指定し、 trigger を元に増加させる深刻度名を指定する設定例を紹介します。

異常通知メールの例

異常を検知しました。
------------
hostname: someone.example.com
address: 192.168.0.1
trigger: ping
status: error
------------

処理フロー

まず、処理フローでメール本文 (message.content.text) から hostnametriggerstatus を取り出し、 status については「error」と比較して異常通知であることを判断します。 f:id:ueno-fixpoint:20210609181027p:plain:w800

イベント

そして、イベント (対象スコープを条件指定) では、スコープ属性名「hostname」の属性値がメッセージから取り出した hostname と一致する条件を指定し、 深刻度を増加させる対象の深刻度名をメッセージから取り出した trigger で指定しています。

上記の異常通知メールを受信した場合は、属性名「hostname」の属性値が「someone.example.com」であるスコープにおいて、 深刻度名「ping」の深刻度が「1」増加することになります。 f:id:ueno-fixpoint:20210609181532p:plain

仕様に関する補足事項

取り出される値の指定について

正規表現においては () によるキャプチャグループが利用できます。 キャプチャグループが含まれる正規表現を記述した場合には、キャプチャグループ内のパターンにマッチした値が取得されます。 また、キャプチャグループを含めない場合には、記述した正規表現全体に最初にマッチした値が取得されます。

取り出した値の型について

正規表現で取り出した値は全て文字列として扱われます。 処理フローで「フィールドを数値比較する」などを使用した場合、その文字列は数値としての解釈を試みた上で比較されるので数値比較を行うことも可能です。

取り出した値の保存先の名称について

保存先には任意の名称を付けることが可能ですが、message.content.text などは既定のプロパティとして利用されているため使用できません。 message から始まる名称を避けて指定してください。

正規表現の書式について

AlertHub で利用可能な正規表現の書式の詳細仕様は以下のドキュメントに記載された仕様に準拠しています。 https://github.com/google/re2/wiki/Syntax