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

当ページのリンクには広告が含まれています。

こんにちは、VMware製品のシステムエンジニア歴10年 ばにゃです。

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行の選択」をクリックします。
    HorizonView イベントデータベース 上位1000行の選択
  • 上記例ではデータベース名「EventDB」を展開して確認しています。
  • テーブル名の xxx はイベントデータベース作成時に指定したプレフィックス名です。
  1. データベースの「上位1000行」が「結果」に表示されます。
    HorizonView イベントデータベース 上位1000行の選択 実行結果
  2. 必要に応じてクエリを修正後、「実行」をクリックし再度クエリを実行します。
    HorizonView イベントデータベース 上位1000行の選択 クエリの修正
  • 上記例ではクエリの TOP (1000) を削除し、全てのデータが表示されるようにしています。
  1. 「結果」画面に情報が表示されます。
    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 の処理内容について細かく解説します。

STEP
Broker | BROKER_USERLOGGEDIN

User TestDomain\TestUser01 has logged in

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

STEP
Broker | BROKER_DESKTOP_REQUEST

User TestDomain\TestUser01 requested Pool TestPool01

Horizon Client に表示された デスクトッププールのアイコンをクリックしたタイミングで記録されます。TestDomain\TestUser01 が TestPool01 プールで接続可能な仮想マシンを、接続サーバーにリクエストしたことを表すイベントです。

STEP
Broker | BROKER_MACHINE_ALLOCATED

User TestDomain\TestUser01 requested Pool TestPool01, allocated machine TestVM01

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

STEP
Agent | AGENT_PENDING

The agent running on machine TestVM01 has accepted an allocated session for user TestDomain\TestUser01

接続サーバーにより割り当てられた仮想マシン TestVM01 に対して、Horizon Client より接続処理を開始したタイミングで記録されます。

STEP
Agent | AGENT_CONNECTED

User TestDomain\TestUser01 has logged in to a new session on machine TestVM01

ユーザー TestDomain\TestUser01 が仮想マシン TestVM01 に接続完了したタイミング(デスクトップ画面が表示されたタイミング)で記録されます。

STEP
Agent | AGENT_ENDED

User TestDomain\TestUser01 has logged off machine TestVM01

ユーザー TestDomain\TestUser01 が仮想マシン TestVM01 よりログオフしたタイミングで記録されます。セッション切断ではなくログオフしたタイミングで記録されるイベントです。

STEP
Broker | BROKER_USERLOGGEDOUT

User TestDomain\TestUser01 has logged out

Horizon Clientを終了させたタイミングで記録されます。

参考情報

VMware ドキュメント

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

補足情報

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

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

関連書籍

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

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

よかったらシェアしてね!

この記事を書いた人

ばにゃ ばにゃ システムエンジニア

国内大手SIer勤務、SE15年以上やっています。これまでの経験を元にIT技術情報やIT資格試験、たまに投資/資産形成やSE界隈の話について記事にしていきます。

コメント

コメントする

CAPTCHA


目次