こんにちは、VMware製品のシステムエンジニア歴10年 ばにゃです。
本記事では、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
イベントデータベースの確認
確認方法
- データベース出力先のSQL Serverにサインインします。
- SQL Server Management Studio を起動し、データベース管理者権限のユーザーでサインインします。
- イベントデータベース用に作成したデータベースを展開し「テーブル」より「dbo.xxx_event_historical」を右クリック、「上位1000行の選択」をクリックします。
- 上記例ではデータベース名「EventDB」を展開して確認しています。
- テーブル名の xxx はイベントデータベース作成時に指定したプレフィックス名です。
- データベースの「上位1000行」が「結果」に表示されます。
- 必要に応じてクエリを修正後、「実行」をクリックし再度クエリを実行します。
- 上記例ではクエリの TOP (1000) を削除し、全てのデータが表示されるようにしています。
- 「結果」画面に情報が表示されます。
以上でテーブルの出力手順は完了です。ここで表示される結果を元に以降の手順(ユーザー接続履歴の確認)を行います。
event_historical スキーマの内容
スキーマ一覧
event_historical テーブルには以下のようなスキーマが含まれます。参考までにいくつか代表的なものを記載しておきますが、これら全てを理解しておく必要はありません。
列名 | データ タイプ | 説明 |
---|---|---|
Acknowledged | tinyint | Horizon がイベントを確認したかどうか。 0 = false 1 = true |
DesktopId | nvarchar(512) | 関連プールのデスクトップ ID。 |
EventID | int | イベントの一意のプライマリ キー。 |
EventType | nvarchar(512) | メッセージ カタログの項目と対応するイベント名。BROKER_USERLOGGEDIN など。 |
FolderPath | nvarchar(512) | 関連オブジェクトを格納するフォルダのフル パス。 |
GroupId | nvarchar(512) | Active Directory 内の関連グループの SID。 |
LUNId | nvarchar(512) | 関連オブジェクトを格納する LUN の ID。 |
MachineId | nvarchar(512) | 関連する物理マシンまたは仮想マシンの ID。 |
Module | nvarchar(512) | イベントの発生原因となった Horizon 7 コンポーネント。Admin、Broker、Tunnel、Framework、Client、Agent など。 |
ModuleAndEventText | nvarchar(512) | 属性パラメータが代入された値を伴うイベント メッセージ。 |
Node | nvarchar(512) | 仮想デバイス ノードの名前。 |
Severity | nvarchar(512) | 重要度レベル。INFO、WARNING、ERROR、AUDIT_SUCCESS、AUDIT_FAIL など。 |
Source | nvarchar(512) | イベント ソースの ID。 |
ThinAppId | nvarchar(512) | 関連する ThinApp™ オブジェクトの ID。 |
Time | datetime | エポック時間(1970 年 1 月 1 日)から数えたイベント発生時刻。 |
UserDiskPathId | nvarchar(512) | ユーザー ディスクの ID。 |
UserSID | nvarchar(512) | Active Directory 内の関連ユーザーの SID。 |
ユーザー接続履歴を確認する場合、以下の4種類を理解しておきましょう。
- Module
- EventType
- ModuleAndEventText
- Time
Module
Module はどのコンポーネントが処理を行っているかを表し、主に Admin / Broker / Agent の3種類が記録されます。
ユーザーの接続履歴を確認する際は、BrokerとAgentを確認します。
Module | 説明 |
---|---|
Admin | View Administrator の操作を表す。 |
Broker | Horizon Client から接続サーバーへの処理を表す。 |
Agent | Horizon Client から仮想デスクトップへの処理を表す。 |
EventType
EventType は処理の概要を表す内容が記録されます。Module が Broker / Agent の場合、EventTypeには主に以下のような内容となります。実際には様々な内容がありますが、ユーザーの接続処理に関連する主要なものを記載しています。
Module | EventType | 説明 |
---|---|---|
Broker | BROKER_USERLOGGEDIN | Horizon Clientを起動してユーザー名/パスワードを入力し、接続サーバーにログオンする |
Broker | BROKER_DESKTOP_REQUEST | 仮想デスクトップアイコンをクリックする |
Broker | BROKER_MACHINE_ALLOCATED | 接続サーバーによってユーザーに仮想マシンが割り当てられる |
Agent | AGENT_PENDING | 仮想マシンへの接続処理が開始される |
Agent | AGENT_CONNECTED | 仮想マシンの接続処理が完了する (仮想マシンのデスクトップ画面が表示される) |
Agent | AGENT_ENDED | 仮想マシンからログオフする |
Broker | BROKER_USERLOGGEDOUT | Horizon Clientからログオフする |
ModuleAndEventText
ModuleAndEventText は処理内容の詳細を表します。Module / EventType と合わせると以下のような内容で記録されます。赤字部分は各環境のユーザー名やプール名、マシン名に置きかえて読んでください。
Module | EventType | ModuleAndEventText |
---|---|---|
Broker | BROKER_USERLOGGEDIN | User domain\username has logged in |
Broker | BROKER_DESKTOP_REQUEST | User domain\username requested Pool poolname |
Broker | BROKER_MACHINE_ALLOCATED | User domain\username requested Pool poolname, allocated machine machinename |
Agent | AGENT_PENDING | The agent running on machine machinename has accepted an allocated session for user domain\username |
Agent | AGENT_CONNECTED | User domain\username has logged in to a new session on machine machinename |
Agent | AGENT_ENDED | User domain\username has logged off machine machinename |
Broker | BROKER_USERLOGGEDOUT | User domain\username has logged out |
Time
Time は処理が実行された時間を表します。これはそのままの内容なので詳しい説明は割愛します。
イベントデータベースの解析
Horizon Clientより仮想マシンに接続した場合に、実際にイベントデータベースに記録される内容を例にして解説します。
以下は、ユーザーがHorizon Clientより仮想デスクトップにログオンし、数分後に仮想デスクトップからログオフした際に記録される場合の例です。赤字部分は各環境のユーザー名やプール名、マシン名に置きかえて読んでください。
No. | Time | Module | EventType | ModuleAndEventText |
---|---|---|---|---|
1 | 2021-03-12 10:43:42 | Broker | BROKER_USERLOGGEDIN | User TestDomain\TestUser01 has logged in |
2 | 2021-03-12 10:43:51 | Broker | BROKER_DESKTOP_REQUEST | User TestDomain\TestUser01 requested Pool TestPool01 |
3 | 2021-03-12 10:43:52 | Broker | BROKER_MACHINE_ALLOCATED | User TestDomain\TestUser01 requested Pool TestPool01, allocated machine TestVM01 |
4 | 2021-03-12 10:43:54 | Agent | AGENT_PENDING | The agent running on machine TestVM01 has accepted an allocated session for user TestDomain\TestUser01 |
5 | 2021-03-12 10:44:12 | Agent | AGENT_CONNECTED | User TestDomain\TestUser01 has logged in to a new session on machine TestVM01 |
6 | 2021-03-12 10:51:30 | Agent | AGENT_ENDED | User TestDomain\TestUser01 has logged off machine TestVM01 |
7 | 2021-03-12 10:51:42 | Broker | BROKER_USERLOGGEDOUT | User TestDomain\TestUser01 has logged out |
ユーザーが仮想デスクトップへ正常にログオン/ログオフした場合の基本形のログとなるため、まずはこのログの流れを覚えておきましょう。
この正常系の形を覚えておけば、接続できない等の問題が発生してイベントデータベースを確認した際に どの処理までは成功していてどの処理で問題が発生しているのか がわかるようになります。
では実際にNo.1 ~ 7 の処理内容について細かく解説します。
User TestDomain\TestUser01 has logged in
ユーザーがHorizon Clientを起動後、ユーザー名「TestDomain\TestUser01」/ パスワードを入力し、接続サーバーへの認証に成功したタイミングで記録されます。
User TestDomain\TestUser01 requested Pool TestPool01
Horizon Client に表示された デスクトッププールのアイコンをクリックしたタイミングで記録されます。TestDomain\TestUser01 が TestPool01 プールで接続可能な仮想マシンを、接続サーバーにリクエストしたことを表すイベントです。
User TestDomain\TestUser01 requested Pool TestPool01, allocated machine TestVM01
リクエストを受けた接続サーバーが、TestDomain\TestUser01 に対して、接続可能な仮想マシン TestVM01 を割り当てられたタイミングで記録されます。
The agent running on machine TestVM01 has accepted an allocated session for user TestDomain\TestUser01
接続サーバーにより割り当てられた仮想マシン TestVM01 に対して、Horizon Client より接続処理を開始したタイミングで記録されます。
User TestDomain\TestUser01 has logged in to a new session on machine TestVM01
ユーザー TestDomain\TestUser01 が仮想マシン TestVM01 に接続完了したタイミング(デスクトップ画面が表示されたタイミング)で記録されます。
User TestDomain\TestUser01 has logged off machine TestVM01
ユーザー TestDomain\TestUser01 が仮想マシン TestVM01 よりログオフしたタイミングで記録されます。セッション切断ではなくログオフしたタイミングで記録されるイベントです。
User TestDomain\TestUser01 has logged out
Horizon Clientを終了させたタイミングで記録されます。
参考情報
VMware ドキュメント
イベントデータベースのテーブルとスキーマについては以下も参照してください。
- イベントデータベースのテーブルとスキーマ
https://docs.vmware.com/jp/VMware-Horizon-7/7.13/horizon-integration/GUID-0563057A-CD9A-471E-A3A1-8F00696C04FD.html
補足情報
イベントデータベースの情報は View Administrator(VMware Horizon の管理コンソール画面)からも確認可能ですが、大規模環境の場合すぐにログが流れて表示されなくなってしまうため、今回紹介したイベントデータベースを直接参照する方法を知っておくと、何かと役に立ちます。
「Horizon Client より仮想マシンに接続を行った際に、正常系ではどういったログがイベントデータベースに記録されるのか」という情報はVMwareからも公開されていないため、本記事が参考になれば幸いです。
関連書籍
最新バージョンの最新機能までは網羅されていませんが、VMware Horizon の基本機能を理解するには非常におすすめの書籍です。
コメント