
AzureADの障害と言われたらとりあえず叩くLogAnalyticsクエリ
結論
3日間以内でのログインに対する成功・失敗(担当アプリに限定してもよい)を1時間毎にグラフ化するクエリを常に懐に忍ばせています。
結構便利。
前提としてAzureADサインインログをLogAnalyticsに転送しておく必要があります。
▼こちらがその忍ばせているクエリ
SigninLogs
| where TimeGenerated > now(-3d)
| where AppDisplayName == "アプリ名" or AppDisplayName == "アプリ名"
|summarize ResultCount=count() by ResultType,bin(TimeGenerated, 1h)
上記を実行すると、以下のようなグラフを手に入れることができます。
0(成功)や0以外(失敗)のコードでカウントを集計し棒グラフにしています。

これを見ることで、障害が起きているという怪情報が飛び交う今時点と、
昨日、一昨日の同じ時間帯と比較して認証の失敗が増えているか否か?
といった情報が確認できます。
何か特別なエラーコードが急増しているようであれば、それは何かが起こっているということ。
※エラーコードに関する情報はこちらにまとまっています。
※2023.03.02追記
検索もとにしているテーブルの「SignInLogs」は、「対話型サインインログ」です。
AzureAD上には非対話型のサインインログも出力されていて、そちらは「AADNonInteractiveUserSignInLogs」というテーブルで管理されています。
ユーザーに表示されずエラーになっている場合は、「AADNonInteractiveUserSignInLogs」にエラーが出力されています。
自分が関わる環境は非対話型のサインインログはLogAnalyticsに取り込んでいないため、前述のクエリは使えず、GUIでぽちぽち見てみるくらいしかできないです。
こちらの非対話型のログは容量大きくて安易にLogAnalyticsに取り込めない・・(課金がかさみます)
※2023.03.02追記 ここまで
解説
難しい内容のクエリではないので少しだけ解説します。
そもそもLogAnalyticsとは何ぞや的な話は、ほかの皆さんがたくさん記事を上げられているので割愛します。
また、クエリのチートシート的な内容はこちらのサイトを参照しました。
感謝。
クエリ再掲
SigninLogs
| where TimeGenerated > now(-3d)
| where AppDisplayName == "アプリ名" or AppDisplayName == "アプリ名"
|summarize ResultCount=count() by ResultType,bin(TimeGenerated, 1h)
SigninLogs
→サインインログから抽出する
| where TimeGenerated > now(-3d)
→今から3日間以内に取り込まれたログを対象にする
| where AppDisplayName == "アプリ名" or AppDisplayName == "アプリ名"
→このアプリの表示名のログで
|summarize ResultCount=count() by ResultType,bin(TimeGenerated, 1h)
→ResultTypeの数を1時間ごとに集約して数を数え、ResultCountという項目にする
このクエリを使う理由
自分が担当するAzureADには、それなりのユーザーがいて、サインインログもそれなりの量が出力される。
普段から成功のログも、そして失敗の状態のログも出力されている。
そんな中AzureADの障害が発生し、
認証機能に影響がないか確認して!と言われたときに、
ログを眺めるだけでは、いつも通りの失敗ログ量なのか否か、もはや人の目では判別不可能。
幸いなことに、担当するAzureADではLogAnalyticsにログを転送しているため、通常のAzureADの管理画面よりも柔軟な抽出をすることができます。
そこで障害が起きているという怪情報が飛び交う今時点と、
昨日、一昨日の同じ時間帯と比較して認証の失敗が増えているか否か?
といった情報を確認できるようなクエリを整理、
上司:「またAzure障害だよ・・認証に影響がないか確認して!」
自分:「だめです、いつも出ているエラーとは異なるコードの認証エラーが多発してます」
とか
自分「大丈夫そうです、エラーは出てますが、いつもより極端に増加はしていないように見えます」
と回答ができるようになりました。
おまけ・備忘
ログをみると、「50140」のエラーコードが多く出力されていました。
このコードを調べてみると、以下の通りで、サインイン時によく出てくる「サインインしたままにする」ポップアップが出るときに当てはまる内容の模様。
AADSTS50140 KmsiInterrupt - ユーザーがサインインしたときの "サインインしたままにする" 割り込みによりエラーが発生しました。 これはログイン フローの予想される部分であり、以降のログインが容易になるように現在のブラウザーにサインインしたままにするかユーザーに確認しています
キャッシュを残さない設定になっていると、都度確認されるため、こんなに多くログとして出力されているのだろうか。