Azure Monitorのアラートの「3 - 情報提供」、「4 - 詳細」がTeams通知ができていなかった件について
概要
Azureモニターのアラート通知をMicrosoft Teamsに通知する方法については私が書いた記事に公開しております。
Azureのアラートの重要度は下記の種類があります。
- 「0 - 重大」
- 「1 - エラー」
- 「2 - 警告」
- 「3 - 情報提供」
- 「4 - 詳細」
今回はアラートの重要度「0 - 重大」、「1 - エラー」、「2 - 警告」はTeamsに通知ができていたのですが「3 - 情報提供」、「4 - 詳細」はTeamsに通知ができていなかった事象がありました。
構成
原因
Azure Logic Appsのメッセージの関数を下記の記載をしておりました。
発生日時 :@{convertFromUtc(string(triggerBody()?['data']?['essentials']?['firedDateTime']), 'Tokyo Standard Time', 'yyyy/MM/dd HH:mm:ss')}
対象リソース :@{triggerBody()?['data']?['essentials']?['alertTargetIDs']}
ステータス :@{triggerBody()?['data']?['essentials']?['monitorCondition']}
重要度 :@{triggerBody()?['data']?['essentials']?['severity']}
説明 :@{if(equals(triggerBody()?['data']?['essentials']?['description'], ''), '-', triggerBody()?['data']?['essentials']?['description'])}
値 :@{if(equals(triggerBody()?['data']?['essentials']?['monitoringService'], 'Platform'), first(triggerBody()?['data']?['alertContext']?['condition']?['allOf'])?['metricValue'], '-')}
ロジックアプリデザイナーから入ると関数文はAzure Portal上だと省略されますが。(図の赤枠の箇所)
まず Logic Appsのログを調査したところ、以下のエラーを発見。
{
"code": "InvalidTemplate",
"message": "Unable to process template language expressions in action 'チャットまたはチャネルでメッセージを投稿する' inputs at line '0' and column '0': 'The template language function 'convertFromUtc' expects its first parameter to be a string that contains a UTC date time. The value was '2023-10-20T18:13:48.5926450'. Please see https://aka.ms/logicexpressions#ConvertFromUtc for usage details.'."
}
convertFromUtc 関数の引数に利用されているトリガーの出力「triggerBody()?['data']?['essentials']?['firedDateTime']」の値の最後に「Z」が含まれていないためにこのようなエラーが発生していたことが判明。
対処策
-
Azure Portalに入る。
https://portal.azure.com/ -
Portal上部の検索欄で「ロジックアプリ」と入力し、[ロジックアプリ]をクリックする。
-
対象のリソースをクリックする。
-
[開発ツール]>[ロジックアプリデザイナー]をクリックする。
- 「チャットまたはチャネルでメッセージを投稿する」アクションにて、下記の式を使用していました。
convertFromUtc(string(triggerBody()?['data']?['essentials']?['firedDateTime']), 'Tokyo Standard Time', 'yyyy/MM/dd HH:mm:ss')
- last 関数によって「triggerBody()?['data']?['essentials']?['firedDateTime']」の最後の値を取得し、equals 関数および if 関数によって「Z」の場合にはそのままの値を使用し、「Z」でない場合には concat 関数を利用して最後に「Z」を追加してから convertFromUtc 関数によるタイムゾーン変換を行いました。
convertFromUtc(if(equals(last(string(triggerBody()?['data']?['essentials']?['firedDateTime'])), 'Z'), string(triggerBody()?['data']?['essentials']?['firedDateTime']), concat(string(triggerBody()?['data']?['essentials']?['firedDateTime']),'Z')),'Tokyo Standard Time', 'yyyy/MM/dd HH:mm:ss')
(下図の赤枠の箇所を変更)
- その後、「3 - 情報提供」、「4 - 詳細」の通知がTeamsにもされるようになりました。
結論
繰り返しになりますが、「3 - 情報提供」、「4 - 詳細」はTeamsに通知ができていなかった事象はconvertFromUtc 関数の引数に利用されているトリガーの出力「triggerBody()?['data']?['essentials']?['firedDateTime']」の値の最後に「Z」が含まれていないために通知ができていませんでした。last 関数による「triggerBody()?['data']?['essentials']?['firedDateTime']」の最後の値を取得し、equals 関数および if 関数による「Z」の場合にはそのままの値を使用し、「Z」でない場合には concat 関数を利用して最後に「Z」を追加してから convertFromUtc 関数によるタイムゾーン変換を行う式に変更して、通知がされるようになりました。
参考URL
- Azure Logic Apps および Power Automate の式で関数を使用するためのリファレンス ガイド # convertFromUtc
https://learn.microsoft.com/ja-JP/azure/logic-apps/workflow-definition-language-functions-reference#convertfromutc
Discussion