フィールドの種類と操作
AlertHub では、「フィールド」に受信したメッセージの情報や AlertHub 上の情報が保存されており、その情報を利用してメッセージ処理を行えるようになっています。
たとえば、下記のリクエストボディを持つ webhook メッセージを受信したとします。
{
"host":"拠点01",
"status":"error",
"number":99,
"ping":"XXX.XXX.XXX.XXX",
"date":"11 Jan 23 11:12 +0900"
}
AlertHub では、受信した webhook メッセージは下記のようにフィールドに保存されます。
{
"message": {
"receiveSlotId": "02ca1f12-4ca0-4ded-84e9-425beecba378",
"receiveSlotKind": "webhook",
"content": {
"body": "{\n \"host\":\"拠点01\",\n \"status\":\"error\",\n \"number\":99,\n \"ping\":\"XXX.XXX.XXX.XXX\",\n \"date\":\"11 Jan 22 11:12 +0900\"\n}",
"data": {
"date": "11 Jan 23 11:12 +0900",
"host": "拠点01",
"number": 99,
"ping": "XXX.XXX.XXX.XXX",
"status": "error"
}
},
"receivedAt": "2023-01-11T02:12:27.136835967Z"
}
}
フィールドの情報は、文字列・数値・日時の三種類の情報として扱うことができます。
各フィールドの内容について詳細を説明します。
文字列として扱う場合
フィールドの情報は全て文字列として扱えます。
文字列の情報は、文字列比較や文字の部分一致の確認などが行えます。
下記 webhook メッセージでは、赤字および緑字部分が文字列として扱えます。
{
"message": {
"receiveSlotId": "02ca1f12-4ca0-4ded-84e9-425beecba378",
"receiveSlotKind": "webhook",
"content": {
"body": "{\n \"host\":\"拠点01\",\n \"status\":\"error\",\n \"number\":99,\n \"ping\":\"XXX.XXX.XXX.XXX\",\n \"date\":\"11 Jan 22 11:12 +0900\"\n}",
"data": {
"date": "11 Jan 23 11:12 +0900",
"host": "拠点01",
"number": 99,
"ping": "XXX.XXX.XXX.XXX",
"status": "error"
}
}
}
}
ルールの処理フローにおいて文字列として情報を扱っている項目は下記の通りです。
- フィールドが正規表現にマッチするかどうか確認する
- フィールドを文字列比較する
- フィールドが文字列を含むかを確認する
- フィールドを JSON としてパースする
- フィールドから正規表現によって値をひとつ取り出す
ランブックでは、以下のステップ項目において文字列として情報を扱っています。
-
オペレーターステップ
-
ブランチステップ
数値として扱う場合
JSON 形式のメッセージに含まれる数値や、数値として解釈可能な文字列について、数値として扱うことができます。
数値の情報は、処理フロー等で任意に設定した数値との比較が行えます。
下記 webhook メッセージでは、赤字部分の 99
が JSON 形式の数値として扱えます。
また、一番下の 100
も数値として解釈可能な文字列であるため、数値の情報として扱えます。
{
"message": {
"receiveSlotId": "02ca1f12-4ca0-4ded-84e9-425beecba378",
"receiveSlotKind": "webhook",
"content": {
"body": "{\n \"number\":99,\n \"numberstring\"100\n}",
"data": {
"number": 99,
"numberstring": "100"
}
}
}
}
ルールの処理フローにおいて数値として情報を扱っている項目は下記の通りです。
ランブックでは、以下のステップ項目において数値として情報を扱っています。
- ブランチステップ
数値を扱う処理において、数値ではない文字列を持つフィールドを指定した場合、ルールやステップの処理でエラーが発生します。
日時として扱う場合
日時を表す文字列は、「フィールドを日時に変換する」を利用することで日時の情報として扱うことができます。
日時の情報に変換可能な文字列の書式は以下の通りです。
書式名 | 例 |
---|---|
RFC 822 | 02 Jan 22 15:04 JST |
RFC 822Z | 02 Jan 22 15:04 +0900 |
RFC 850 | Sunday, 02-Jan-22 15:04:05 JST |
RFC 1123 | Sun, 02 Jan 2022 15:04:05 JST |
RFC 1123Z | Sun, 02 Jan 2022 15:04:05 +0900 |
RFC 3339 | 2022-01-02T15:04:05.123456789+09:00 |
日時の情報は、日時の情報同士の計算や時刻の範囲の確認などが行えます。
下記 webhook メッセージでは、緑字部分の "11 Jan 23 11:12 +0900"
と
"2023-01-11T02:12:27.136835967Z"
が日時を表す文字列になっています。
{
"message": {
"receiveSlotId": "02ca1f12-4ca0-4ded-84e9-425beecba378",
"receiveSlotKind": "webhook",
"content": {
"body": "{\n \"date\":\"11 Jan 22 11:12 +0900\"\n}",
"data": {
"date": "11 Jan 23 11:12 +0900"
}
},
"receivedAt": "2023-01-11T02:12:27.136835967Z"
}
}
ルールの処理フローにおいて日時として情報を扱っている項目は下記の通りです。
- フィールドを日時に変換する
- 日時に対して加減算を行う
- 2つの日時の差分を計算する
- 現在の日時を取得する
- 日時が指定した時刻の範囲内であるか確認する
- 日時が指定した曜日における時刻の範囲内であるか確認する
ランブックでは、以下のステップ項目において日時として情報を扱っています。
-
オペレーターステップ
-
ブランチステップ
フィールドの指定パターン
フィールドの指定は、情報を取得するために指定する場合と情報を保存するために指定する場合に分かれます。
処理フローの「フィールドを日時に変換する」を例に説明します。
今回は、下記の通り AlertHub が受信した内容について、"date": "11 Jan 23 11:12 +0900"
の文字列部分を変換して日時情報として扱えるようにします。
{
"message": {
"receiveSlotId": "02ca1f12-4ca0-4ded-84e9-425beecba378",
"receiveSlotKind": "webhook",
"content": {
"body": "{\n \"date\":\"11 Jan 22 11:12 +0900\"\n}",
"data": {
"date": "11 Jan 23 11:12 +0900"
}
},
"receivedAt": "2023-01-11T02:12:27.136835967Z"
}
}
「フィールドを日時に変換する」を選択すると、下図の通りフィールドを 2 つ指定する必要があります。
「F1」では、上記の通り受信した webhoook メッセージの情報が保存されたフィールドを指定します。
規定の指定方法によるフィールドの指定についての詳細は、「設定の流れ > フィールドの指定方法」を参照してください。
今回は、webhook で受信したメッセージにおいて message
中の content
下、data
の date
を指定したいため、message.content.data.date
と入力します。
一方「F2」では、日時に変換した情報を保存するフィールドの名称を指定します。
保存先のフィールドの名称は自身で任意に設定できます。
今回は、date
としました。
ランブックを使用している場合は、保存されたフィールドを実行履歴の出力値で確認できます。
下記コードブロックの一番下に "date": "2022-01-11T11:12:00+09:00"
とある通り、日時に変換された情報が date
に保存されています。
{
"message": {
"receiveSlotId": "02ca1f12-4ca0-4ded-84e9-425beecba378",
"receiveSlotKind": "webhook",
"content": {
"body": "{\n \"date\":\"11 Jan 22 11:12 +0900\"\n}",
"data": {
"date": "11 Jan 23 11:12 +0900"
}
},
"receivedAt": "2023-01-11T02:12:27.136835967Z"
},
"date": "2022-01-11T11:12:00+09:00"
}