0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure Virtual Desktopのログイン/切断履歴をLog Analyticsで調べてみた

0
Posted at

経緯

Azure Virtual Desktopで、コスト削減のため以下の設定をしています。

  1. アクティブなセッションが残っていない場合に自動シャットダウン
  2. VM側の設定で、指定した時間になったら自動シャットダウン

基本的に1.のセッションがなくなったことによるシャットダウンでの運用を想定していまいたが、ログを確認すると、セッションが無くなったことによるシャットダウンではなく、たびたびVMの「時間指定の自動シャットダウン」が実行されている記録がありました。

ユーザーがブラウザやアプリの「×閉じ」で切断し、サインアウトされずに セッションだけ残っているのではないかと考え、実際に以下を試してみました。

  • ブラウザの「×閉じ」
  • デスクトップアプリ版の Windows App を「×閉じ」
  • 正常にサインアウト

すると、WVDCheckpoints のログにある codeSymbolic の値に違いが出ていることが分かりました。

この値を見れば、どのようにセッションが終了したのかある程度判断できそうだったため、
Log Analytics でログを整理してみました。


前提

本記事のクエリを実行するためには、
AVDの診断設定でログを Log Analytics ワークスペースへ送信しておく必要があります。

Azure Portal で以下を設定します。

Azure Virtual Desktop
↓
Host pool
↓
診断設定
↓
Log Analytics ワークスペースへ送信

本記事のクエリでは、以下のログカテゴリを利用します。

  • Checkpoints
  • Connections

これらのログが Log Analytics に送信されていない場合、クエリは結果を返しません。

image.png


クエリ

以下のクエリで、接続・切断イベントを取得できます。

WVDCheckpoints
| where Name in ("RdpStackAuthenticatedUser", "RdpStackDisconnect", "OnClientDisconnected")
| extend ParamsJson = parse_json(Parameters)
| extend codeSymbolic = tostring(ParamsJson.codeSymbolic)
| extend EventType = case(
    Name == "RdpStackAuthenticatedUser", "Connect",
    Name in ("RdpStackDisconnect", "OnClientDisconnected"), "Disconnect",
    "Other"
)
| extend EventTypeDetail = case(
    Name == "RdpStackAuthenticatedUser", "Connect(認証成功)",
    codeSymbolic == "UserLogoff", "Disconnect(SignOut:サインアウト)",
    codeSymbolic == "ReverseConnectGracefulCloseByPeer", "Disconnect(×閉じ:ブラウザ)",
    codeSymbolic == "ClientInitiatedDisconnect", "Disconnect(×閉じ:アプリ)",
    isempty(codeSymbolic), "Disconnect(理由不明)",
    "Disconnect(その他)"
)
| project TimeGenerated, UserName, EventType, EventTypeDetail, codeSymbolic, CorrelationId
| join kind=inner (
    WVDConnections
    | project CorrelationId, SessionHostName
) on CorrelationId
| project TimeGenerated, UserName, SessionHostName, EventType, EventTypeDetail, codeSymbolic, CorrelationId
| sort by TimeGenerated asc

image.png


確認できる情報

このクエリで以下の情報を確認できます。

項目 内容
TimeGenerated イベント発生時間
UserName ユーザー
SessionHostName 接続先セッションホスト
EventType 接続 / 切断
EventTypeDetail 切断理由
CorrelationId セッションID

切断理由の例

codeSymbolic 意味
UserLogoff 正常にサインアウト
ReverseConnectGracefulCloseByPeer ブラウザを閉じた
ClientInitiatedDisconnect デスクトップアプリ(Windows App)を閉じた

特にブラウザ閉じやアプリの×閉じの場合はサインアウトにならないため、
セッションが残り続ける可能性があります。

また、codeSymbolic が空の場合は具体的な理由までは分かりませんが、
サインアウトなのか単なる接続切断なのかといった
セッション終了の傾向を把握するための手がかりにはなりそうです。


まとめ

AVDの接続・切断履歴は
WVDCheckpointsWVDConnections を組み合わせることで確認できます。

codeSymbolic を確認することで、

  • 正常にサインアウト
  • ブラウザ閉じ
  • デスクトップアプリの×閉じ

など、どのようにセッションが終了したのかをある程度把握できるようになりました。

Log Analytics を使うことで接続履歴を整理できるため、
トラブルシュートや運用確認の参考になりそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?