アラートメッセージの制御について
回答済みお世話になっております。
下記の①→②のメッセージメールにて、
AlertHubで「アラートに判別しない/する」を制御したいです。
設定方法をご教授いただきたく、お願いします。
<条件>
・ジョブエラーのとき、①のメッセージが発報されます。
・システム内部のリトライがあり、リトライが成功すると1分以内に
②のメッセージが発報されます。
・②で、
- 「取得値」にある"ジョブ名A,ジョブ名B,ジョブ名C"が①と一致
- かつ、末尾に"リトライn回目"の文字列のあるとき
リトライ成功として、アラートにしない。(AlertHubからメール転送しない)
1分以内に同じ取得値で、かつ、末尾に"リトライn回目"の文字列がない
メッセージときは、アラートにしたい。(AlertHubからメール転送する)
取得値が異なるときは別のメッセージメールにします。
<メッセージ内容>
---------------------------------------------------
①ジョブ異常終了メッセージ
(件名)
【重度の障害】アプリケーション障害検知しました
(本文)
障害内容 :ジョブ異常検知しました
レベル :Error
取得値 :ジョブ名A,ジョブ名B,ジョブ名C,,User,,警告またはエラーを返しました。
---------------------------------------------------
②リトライメッセージ
(件名)
【重度の障害】アプリケーション障害検知しました
(本文)
障害内容 :ジョブ異常検知しました
レベル :Error
取得値 :ジョブ名A,ジョブ名B,ジョブ名C,,User,Check
リトライn回目
---------------------------------------------------
※リトライが成功すると末尾に"リトライn回目"が付加されたメッセージになります。
nは任意の数字です。
-
お問い合わせいただきありがとうございます。
ジョブエラーが発生した場合に、トリガーで 1 分後に回復したかどうかを判断して、
アラートメールを送信することで実現可能と考えられます。メールの本文内にあるジョブ名をスコープの深刻度名に利用することで、
ジョブごとにそれぞれ分けてエラーを扱い、エラー発生とリトライ成功を関連づける方法がよいと思われます。設定の詳細については以下を参考にしてください。
[スコープ]
- 1 つ作成する[ルール]
- ジョブエラー検知とリトライ成功検知の 2 つを作成する
- ジョブエラー時は深刻度を 1 以上の値にして、リトライ成功時は 0 にする
- メール本文に「リトライ」が含まれるかどうかで、エラー発生かリトライ成功か判別する
- ジョブ名を正規表現で抽出して、「深刻度名」として指定する[トリガー]
- 1 つのスコープにジョブの種類と同じ数のトリガーを作成する
- 実行条件を以下とする
- 深刻度名が「ジョブA」と等しい
- 変化前の深刻度が「0」と等しい値である
- 「60」秒経過k後、深刻度「ジョブA」が「1」以上の値である
- 上記の「ジョブA」を各ジョブの名称としたトリガーをそれぞれ作成する
- アクションで実行するメール内にジョブ名を入れる場合は、パラメータ加工フローでジョブ名を本文から正規表現で抽出し、アクションで指定する正規表現での抽出については以下の記事を参考にしてください。
https://support.kompira.jp/column/amessagereceivedbyalerthubinarule/設定の基本的な考え方は以下の記事と同様ですが、ジョブごとに深刻度名を分けている点が異なります。
https://fixpoint.github.io/alerthub-setting-examples/example7.html -
回答ありがとうございます。
確認させてください。
①ご回答頂いた”- 1 つのスコープにジョブの種類と同じ数のトリガーを作成する”は
対象のジョブが不特定多数でトリガーに全てのジョブを登録する事は困難です。この場合AlertHubでの設定は難しいでしょうか?
ジョブエラールールで、ジョブ名取得、深刻度上げる、リトライルールでジョブ名取得、ジョブ比較、一致で深刻度下げるを考えましたが、ジョブエラーが発生する度に取得したジョブ名が変わるかと思いますので1分内に複数のジョブがエラーするケースを想定すると難しそうかと思っております。
➁ご回答頂いた”- 深刻度名が「ジョブA」と等しい”ですが
マニュアルに以下記載がりました、ルールで取得した任意の一時フィールドはルール以外にトリガーでも使用可という事で合っていますでしょうか?
5.3.1. 処理フローの設定
保存した値の活用
保存した値は、他の処理フロー等にて選択項目の代わりに使用できます。
ただし、ルールの中でしか使用できないため、注意してください。
以下に活用例を記載します。③正規表現で取得した任意の一時フィールドの中身を確認する方法はありますでしょうか?
正しく取得出来ているのか確認がしたいのですが。
-
ご確認いただきありがとうございます。
以下の通り回答いたします。①ご回答頂いた"- 1 つのスコープにジョブの種類と同じ数のトリガーを作成する"は対象のジョブが不特定多数でトリガーに全てのジョブを登録する事は困難です。この場合AlertHubでの設定は難しいでしょうか?
→ジョブが不特定多数とのこと、承知いたしました。
ルールはそのままで以下の通りトリガーを設定いただけますでしょうか。
以下の設定であれば、トリガーは一つのみで対応可能です。- 深刻度の増減を判定する: 深刻度が「増えた」
- 一定時間経過語のイベントのフィールドを指定値と比較する: 「60」秒経過後、「最新の深刻度」が「1」以上の 値である
イベントの深刻度名を処理フローで一時フィールドに保存した値を指定することで、メールに記載のジョブ名ごとの深刻度が作成されます。
②ご回答頂いた"- 深刻度名が「ジョブA」と等しい"ですがマニュアルに以下記載がりました、ルールで取得した任意の一時フィールドはルール以外にトリガーでも使用可という事で合っていますでしょうか?
→ルールの中で保存した一時フィールドの情報はルールの中でしか使用できません。③正規表現で取得した任意の一時フィールドの中身を確認する方法はありますでしょうか?
→申し訳ありませんが、AlertHub の機能上で一時フィールドの確認をすることはできません。
一時フィールドの内容を深刻度名に設定いただき、イベント名をアクションの通知内容に埋め込むことで確認することは可能です。
イベント名を埋め込む際は {event.severityName} と記載いただけますでしょうか。
通知内容の設定方法については、以下を参照いただくようお願いいたします。
https://fixpoint.github.io/alerthub-manual/notification-content.html④ご回答頂いた"- ジョブ名を正規表現で抽出して、「深刻度名」として指定する"ですが深刻度名自体を正規表現で取得した値にする事が可能という事でしょうか?
→ご認識の通りです。
前回答でお送りした以下の「イベント」項で深刻度名に一時フィールドを指定することで正規表現で取得した値を深刻度名としております。
https://support.kompira.jp/column/amessagereceivedbyalerthubinarule/ -
回答ありがとうございます。
「受信データのパスで指定」で取得した値を深刻度名にする事ができました。
ジョブエラーのジョブIDとリトライメッセージのジョブIDが一致する場合は、通知しないとしたいので、
リトライメッセージのジョブIDとジョブエラーのジョブIDを比較し、エラージョブID名の深刻度を下げる必要があるかと思いますが、どの様な設定を行えばよいでしょうか?
また回答頂いた
- 一定時間経過語のイベントのフィールドを指定値と比較する: 「60」秒経過後、「最新の深刻度」が「1」以上の 値である
ですが、うまく動作しません、「最新の深刻度」はそのままの文言を設定しておりますがこれで良いでしょうか?
-
ご確認いただきありがとうございます。
深刻度名を設定できたとのこと、承知いたしました。初回の回答で示しました通り、ルールについては 2 つ設定が必要となります。
エラー発生時は深刻度を増加させ、リトライ成功時は深刻度を 0 にすることで切り分けが可能となります。エラー発生時のルールは、以下の通り設定いただけますでしょうか。
1. 処理フローについて、以下 2 つを設定- 「フィールドが文字列を含むかどうか確認する」:「message.content.text」が「リトライ」を包含「しなかった」場合
- 「フィールドから正規表現によって値をひとつ取り出す」:「message.content.text」から正規表現「(該当の正規表現を入力)」によって値をひとつ取り出して一時フィールド「(任意の名称)」に保存する
2. イベント(対象スコープを直接指定)で「受信データのパスで指定」を選択し以下の通り設定
- 深刻度名「(一時フィールドの名称)」を「1」「増やす」
リトライ成功時のルールは、以下の通り設定いただけますでしょうか。
1. 処理フローについて、以下 2 つを設定- 「フィールドが文字列を含むかどうか確認する」:「message.content.text」が「リトライ」を包含「した」場合
- 「フィールドから正規表現によって値をひとつ取り出す」:「message.content.text」から正規表現「(該当の正規表現を入力)」によって値をひとつ取り出して一時フィールド「(任意の名称)」に保存する
2. イベント(対象スコープを直接指定)で「受信データのパスで指定」を選択し以下の通り設定
- 深刻度名「(一時フィールドの名称)」を「0」「にする」
上記の通り設定いただいた上で、再度検証いただけますと幸いです。
トリガーに関しては、すでにご設定の内容で問題ないかと存じます。
ルールによって深刻度を操作しておりますので、60 秒以内にリトライ成功した場合はアクションは発生いたしません。
お手数おかけし恐縮ですが、よろしくお願いいたします。 -
回答ありがとうございます。
・一時フィールド「(任意の名称)」は2つのルールで処理フロー、イベント全て同一名にする事で動作しました。(設定が誤っていましたらご指摘ください)
・トリガーはご指定の設定で動作する事を確認しました。
トリガーの設定ですが、提案頂いた設定は複数のジョブエラーが発生した場合でもトリガーのきっかけとなった深刻度の60秒後の最新の状態を確認しているとの理解で合っていますでしょうか?
(例えば3種類の深刻度が同じ時刻帯で上昇してもそれぞれの深刻度の60秒後の最新の状態を確認してそれぞれアクションしている理解であっていますでしょうか、テストして動作しているのですが念のため確認です)
-
追加分のご質問について回答いたします。
深刻度の上限は 1000 となります。
仕様情報にも記載がございますので、併せてご確認のほどよろしくお願いいたします。
https://fixpoint.github.io/alerthub-manual/specificaition.html#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97 -
ご確認いただきありがとうございます。
深刻度が上限を超えた後でも、ルールが実行される分には問題はございません。
ただ、トリガーで深刻度が増えた場合にアクションを実行するよう設定しておりますので、深刻度が上がらない状況は発生させない方がよいかと思われます。
スコープ詳細画面の右上メニューより、深刻度の自動復旧を有効化できますので必要に応じてご設定いただくようお願いいたします。
深刻度の自動復旧を設定すると、最後のイベント発生時から指定の時間が経過後、深刻度が自動で 0 に戻ります。
スコープの設定については下記に記載がございますので、併せて参照いただけますと幸いです。
https://fixpoint.github.io/alerthub-manual/make-scope.html -
このスレッドの設定について再度確認させてください。
①同じジョブの異常終了メッセージが2件、②リトライメッセージが1件、ほぼ同時刻(秒単位)で発生する場合があり、AlertHubで受信するタイミングで①と➁のメールが前後してしまうケースがあります。
システムのタイムスタンプは①⇒①⇒➁ですがAlertHub受信が①⇒➁⇒①になってしまう。
①⇒①⇒➁の場合、正常に①、➁のメールがフィルタされます(➁で深刻度が0になります)
①⇒➁⇒①の場合 ①⇒①のアラートが2通、通知されます。(60秒以内に深刻度が再度上がる為かと思います)
①⇒➁⇒①の場合でも①、➁のメールを通知しない様な回避策はありませんでしょうか?
サインインしてコメントを残してください。
コメント
26件のコメント