技術情報

VMwareHorizon イベントデータベースからユーザー接続履歴を確認する方法

こんにちは、データベース解析のプロ ばにゃです。

これまでに、のべ 75,000 人 以上の エンドユーザーが利用する VMware Horizon 環境の設計/構築/テスト/運用に携わってきた私が、運用中のトラブルシューティングでよく利用していた手順について紹介します。

HorizonView イベントデータベース クエリの修正後の実行結果

本記事では以下の手順について解説します。

  • VMware Horizon 環境のイベントデータベースから、ユーザーの接続履歴を確認する方法

VMware Horizon 環境でイベントデータベースを取得するよう設定している場合、指定したデータベースに様々な情報が保存されます。

この中には VMware Horizon 環境に接続したユーザーの接続履歴の詳細も含まれます。

この情報を読み取れるようになると、以下のような場面で役に立ちます。

こんな場合に役に立つ
  • VMware Horizon 環境の接続にできない場合の 調査 / トラブルシューティング
スポンサーリンク

前提となる環境

本記事では、以下のような環境を例として記載します。
この環境で私自身が実機動作確認済みの手順となります。

環境
  • Horizon 7.x
  • Horizon 6.x
  • Horizon 5.x
  • SQL Server 2019
  • SQL Server 2016
  • SQL Server 2012

イベントデータベースの確認

確認方法

  1. データベース出力先のSQL Serverにサインインします。

  2. SQL Server Management Studio を起動し、データベース管理者権限のユーザーでサインインします。

  3. イベントデータベース用に作成したデータベースを展開し「テーブル」より「dbo.xxx_event_historical」を右クリック、「上位1000行の選択」をクリックします。
    ※以下の例ではデータベース名「EventDB」を展開して確認しています。
     テーブル名の xxx はイベントデータベース作成時に指定したプレフィックス名です。

    HorizonView イベントデータベース 上位1000行の選択

  4. データベースの「上位1000行」が「結果」に表示されます。
    HorizonView イベントデータベース 上位1000行の選択 実行結果

  5. 必要に応じてクエリを修正後、「実行」をクリックし再度クエリを実行します。
    ※以下の例では、クエリの TOP (1000) を削除し、全てのデータが表示されるようにしています。
    HorizonView イベントデータベース 上位1000行の選択 クエリの修正

  6. 「結果」画面に情報が表示されます。
    HorizonView イベントデータベース クエリの修正後の実行結果

以上でテーブルの出力手順は完了です。

ここで表示される結果を元に、以降の手順(ユーザー接続履歴の確認)を行います。

event_historical スキーマの内容

スキーマ一覧

event_historical テーブルには以下のようなスキーマが含まれます。

参考までに載せておきますが、これら全てを理解しておく必要はありません。

列名データ タイプ説明
AcknowledgedtinyintHorizon がイベントを確認したかどうか。
0 = false
1 = true
DesktopIdnvarchar(512)関連プールのデスクトップ ID。
EventIDintイベントの一意のプライマリ キー。
EventTypenvarchar(512)メッセージ カタログの項目と対応するイベント名。BROKER_USERLOGGEDIN など。
FolderPathnvarchar(512)関連オブジェクトを格納するフォルダのフル パス。
GroupIdnvarchar(512)Active Directory 内の関連グループの SID。
LUNIdnvarchar(512)関連オブジェクトを格納する LUN の ID。
MachineIdnvarchar(512)関連する物理マシンまたは仮想マシンの ID。
Modulenvarchar(512)イベントの発生原因となった Horizon 7 コンポーネント。Admin、Broker、Tunnel、Framework、Client、Agent など。
ModuleAndEventTextnvarchar(512)属性パラメータが代入された値を伴うイベント メッセージ。
Nodenvarchar(512)仮想デバイス ノードの名前。
Severitynvarchar(512)重要度レベル。INFO、WARNING、ERROR、AUDIT_SUCCESS、AUDIT_FAIL など。
Sourcenvarchar(512)イベント ソースの ID。
ThinAppIdnvarchar(512)関連する ThinApp™ オブジェクトの ID。
Timedatetimeエポック時間(1970 年 1 月 1 日)から数えたイベント発生時刻。
UserDiskPathIdnvarchar(512)ユーザー ディスクの ID。
UserSIDnvarchar(512)Active Directory 内の関連ユーザーの SID。


ユーザー接続履歴を確認する場合、以下4種類を理解しておきましょう。

理解しておくべきスキーマ
  • Module
  • EventType
  • ModuleAndEventText
  • Time

Module

Module はどのコンポーネントが処理を行っているかを表し、主に Admin / Broker / Agent の3種類が記録されます。

ユーザーの接続履歴を確認する際は、BrokerAgent を確認します。

Module説明
AdminView Administrator の操作を表す。
BrokerHorizon Client から接続サーバーへの処理を表す。
AgentHorizon Client から仮想デスクトップへの処理を表す。

EventType

EventType は処理の概要を表す内容が記録されます。
Module が Broker / Agent の場合、EventTypeには主に以下のような内容となります。
※実際には様々な内容がありますが、ユーザーの接続処理に関連する主要なものを記載しています。

ModuleEventType説明
BrokerBROKER_USERLOGGEDINHorizon Clientを起動してユーザー名/パスワードを入力し、接続サーバーにログオンする
BrokerBROKER_DESKTOP_REQUEST仮想デスクトップアイコンをクリックする
BrokerBROKER_MACHINE_ALLOCATED接続サーバーによってユーザーに仮想マシンが割り当てられる
AgentAGENT_PENDING仮想マシンへの接続処理が開始される
AgentAGENT_CONNECTED仮想マシンの接続処理が完了する
(仮想マシンのデスクトップ画面が表示される)
AgentAGENT_ENDED仮想マシンからログオフする
BrokerBROKER_USERLOGGEDOUTHorizon Clientからログオフする

ModuleAndEventText

ModuleAndEventText は処理内容の詳細を表します。
Module / EventType と合わせると、以下のような内容で記録されます。
※赤字部分は各環境のユーザー名やプール名、マシン名に置きかえて読んでください。

ModuleEventTypeModuleAndEventText
BrokerBROKER_USERLOGGEDINUser domain\username has logged in
BrokerBROKER_DESKTOP_REQUESTUser domain\username requested Pool poolname
BrokerBROKER_MACHINE_ALLOCATEDUser domain\username requested Pool poolname, allocated machine machinename
AgentAGENT_PENDINGThe agent running on machine machinename has accepted an allocated session for user domain\username
AgentAGENT_CONNECTEDUser domain\username has logged in to a new session on machine machinename
AgentAGENT_ENDEDUser domain\username has logged off machine machinename
BrokerBROKER_USERLOGGEDOUTUser domain\username has logged out

Time

Time は処理が実行された時間を表します。
これはそのままの内容なので詳しい説明は割愛します。



イベントデータベースの解析

Horizon Clientより仮想マシンに接続した場合に、実際にイベントデータベースに記録される内容を例にして解説します。

以下は、ユーザーがHorizon Clientより仮想デスクトップにログオンし、数分後に仮想デスクトップからログオフした際に記録される場合の例です。
※赤字部分は各環境のユーザー名やプール名、マシン名に置きかえて読んでください。

No. TimeModuleEventTypeModuleAndEventText
12021-03-12 10:43:42BrokerBROKER_USERLOGGEDINUser TestDomain\TestUser01 has logged in
22021-03-12 10:43:51BrokerBROKER_DESKTOP_REQUESTUser TestDomain\TestUser01 requested Pool TestPool01
32021-03-12 10:43:52BrokerBROKER_MACHINE_ALLOCATEDUser TestDomain\TestUser01 requested Pool TestPool01, allocated machine TestVM01
42021-03-12 10:43:54AgentAGENT_PENDINGThe agent running on machine TestVM01 has accepted an allocated session for user TestDomain\TestUser01
52021-03-12 10:44:12AgentAGENT_CONNECTEDUser TestDomain\TestUser01 has logged in to a new session on machine TestVM01
62021-03-12 10:51:30AgentAGENT_ENDEDUser TestDomain\TestUser01 has logged off machine TestVM01
72021-03-12 10:51:42BrokerBROKER_USERLOGGEDOUTUser TestDomain\TestUser01 has logged out

ユーザーが仮想デスクトップへ正常にログオン/ログオフした場合の基本形のログとなるため、この形を覚えておくことで、接続に失敗するといった事象が発生した場合に、

  • どの処理までは成功していて、どの処理で問題が発生しているのか

ということが判断できるようになるため、参考にしてみてくだい。

では実際にNo.1 ~ 7 の処理内容について細かく解説します。

ユーザー接続履歴の詳細
  • 1
    Broker | BROKER_USERLOGGEDIN

    User TestDomain\TestUser01 has logged in
    ユーザーがHorizon Clientを起動後、ユーザー名「TestDomain\TestUser01」/ パスワードを入力し、接続サーバーへの認証に成功したタイミングで記録される。

  • 2
    Broker | BROKER_DESKTOP_REQUEST

    User TestDomain\TestUser01 requested Pool TestPool01
    Horizon Client に表示された デスクトッププールのアイコンをクリックしたタイミングで記録される。
    TestDomain\TestUser01TestPool01 プールで接続可能な仮想マシンを、接続サーバーにリクエストしている。

  • 3
    Broker | BROKER_MACHINE_ALLOCATED

    User TestDomain\TestUser01 requested Pool TestPool01, allocated machine TestVM01
    リクエストを受けた接続サーバーが、TestDomain\TestUser01 に対して、接続可能な仮想マシン TestVM01 を割り当てられたタイミングで記録される。

  • 4
    Agent | AGENT_PENDING

    The agent running on machine TestVM01 has accepted an allocated session for user TestDomain\TestUser01
    接続サーバーにより割り当てられた仮想マシン TestVM01 に対して、Horizon Client より接続処理を開始したタイミングで記録される。

  • 5
    Agent | AGENT_CONNECTED

    User TestDomain\TestUser01 has logged in to a new session on machine TestVM01
    ユーザー TestDomain\TestUser01 が仮想マシン TestVM01 に接続完了したタイミング(デスクトップ画面が表示されたタイミング)で記録される。

  • 6
    Agent | AGENT_ENDED

    User TestDomain\TestUser01 has logged off machine TestVM01
    ユーザー TestDomain\TestUser01 が仮想マシン TestVM01 よりログオフしたタイミングで記録される。
    ※セッション切断ではなくログオフしたタイミングで記録される。

  • 7
    Broker | BROKER_USERLOGGEDOUT

    User TestDomain\TestUser01 has logged out
    Horizon Clientを終了させたタイミングで記録される。

参考情報

VMware ドキュメント

イベントデータベースのテーブルとスキーマについては以下も参照してください。

補足情報

イベントデータベースの情報は View Administrator(VMware Horizon の管理コンソール画面)からも確認可能ですが、大規模環境の場合すぐにログが流れて表示されなくなってしまうため、今回紹介したイベントデータベースを直接参照する方法を知っておくと、何かと役に立ちます。

「Horizon Client より仮想マシンに接続を行った際に、正常系ではどういったログがイベントデータベースに記録されるのか」という情報はVMwareからも公開されていないため、本記事が参考になれば幸いです。

関連書籍

最新バージョンの最新機能までは網羅されていませんが、VMware Horizon の基本機能を理解するには非常におすすめの書籍です。

にほんブログ村 IT技術ブログへ
にほんブログ村


コメント