🌊

Azure Monitorのアラートの「3 - 情報提供」、「4 - 詳細」がTeams通知ができていなかった件について

2024/08/31に公開

概要

Azureモニターのアラート通知をMicrosoft Teamsに通知する方法については私が書いた記事に公開しております。
https://zenn.dev/headwaters/articles/ae65d85127b6e3

Azureのアラートの重要度は下記の種類があります。

  1. 「0 - 重大」
  2. 「1 - エラー」
  3. 「2 - 警告」
  4. 「3 - 情報提供」
  5. 「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」が含まれていないためにこのようなエラーが発生していたことが判明。

対処策

  1. Azure Portalに入る。
    https://portal.azure.com/

  2. Portal上部の検索欄で「ロジックアプリ」と入力し、[ロジックアプリ]をクリックする。

  3. 対象のリソースをクリックする。

  4. [開発ツール]>[ロジックアプリデザイナー]をクリックする。

  • 「チャットまたはチャネルでメッセージを投稿する」アクションにて、下記の式を使用していました。
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

ヘッドウォータース

Discussion