今回は、VMware社が開発しているHorizon Suiteの1コンポーネントであるConnection Serverの構成要素の一つであるイベントデータベースがどのような構成になっているか確認してみたいと思います。
期待する目標
本記事で期待する目標は以下の通りです。
- イベントDBのテーブル構造を理解できる
- イベントDBに挿入されるデータを解析してみる
前提条件
本記事で使用しているHorizonのバージョンは2111となります。
CloudPod architectureを有効にしていますが、シングル構成です。
Horizon7系からバージョンアップを行っていますが、イベントデータベースのクリアは行っていません。
イベントデータベースの構成は以下の通りです。
- データベースサーバのタイプ : Microsoft SQL Server
- データベースサーバ : 外部のSQL Serverを使用
- ポート : 1433 (デフォルト)
- データベース名 : CS_Event
- ユーザ名 : sa
- テーブルのプレフィックス : CS_
SQLサーバはシングルの構成で、Windows Server上に構築されたSQL Server Expressを使用しています。
データベースのユーザについては、Windows認証ではなくSQL Server認証を使用しています。
saユーザの使用については、セキュリティの観点から推奨されていません。。。本番環境では権限周りをしっかりと設計したほうが良さそうです。
イベントデータベースの構造
SQL Server Management Studioから、イベントデータベースの中身を覗いてみます。
イベントデータベースに格納されているテーブルは以下の通りです。
- eventテーブル
- event_dataテーブル
- event_historicalテーブル
- event_data_historicalテーブル
- propsテーブル
- timing_profilerテーブル
イベントデータベースには4種類6項目のテーブルが存在します。
無印テーブルとhistoricalテーブルがあり、それぞれeventテーブル、event_dataテーブルの4項目となります。
また、Horizonの構成情報を記録していると思われるpropsテーブル、ヘルプデスクツールのサポート情報が記録されているtiming_Profilerテーブルがあります。この2種のテーブルについては、情報がみつからず、現時点ではなんの情報が入っているかわかりませんでした。
無印テーブルについては、Horizon Administratorで使用されるテーブルで、Horizon Administrator上で表示する用のイベントが格納されています。
Horizon Administratorで使用されるイベントのため、Horizon Administratorの設定によってこのテーブルに格納されるイベントの期間が決まります。
そのため、Horizon Administratorでイベントの表示期間を3ヶ月に設定した場合、eventテーブルとevent_dataテーブルには3ヶ月分保存されます。それ以外のデータについては、Horizon Administratorが自動的に消しに行きます。
historicalテーブルについては、名前の通りに履歴として半永久的に残るテーブルとなります。
これは、Horizon Administratorとは無関係にすべてのイベントを記録するテーブルとなります。
そのため、大規模な環境の場合、定期的に別の場所にパージするような運用を行うことでデータベースの肥大化を防ぐことができます。
eventテーブルの内容
eventテーブルの構成内容を確認してみたいと思います。
eventテーブルにはEventIDを主キーとして様々なデータが記録されています。
内容を見る限り、時間や、イベントの内容、ユーザの情報なども詳細にカラムとして取られているようです。
- EventID : ユニークなイベントの番号が記録されています。
- Module : AgentやBroker、VLsiなどのコンポーネントの分類が記録されています。
- EventType : Agentの接続、切断や、デスクトップの割当や、ユーザのパスワード間違えなどのイベントの分類が記録されています。
- ModuleAndEventText : ログインなどのイベントの詳細が記録されいます。
- Time : イベントの記録時間が記録されています。
- Source : どのモジュールからイベントが記録されたかのモジュール情報が記録されています。(送信元ではない)
- Severity : イベントのレベルが記録されています。(AUDIT_ACCESS、INFO、WARNING、ERRORなど)
- Node : イベントを発生させたVDIのホスト名やConnection Serverのホスト名が記録されています。
- Acknowledged : イベントの応答があったか記録しています。(0 or 1が記録される?)
- UserSID : イベントを発生させたSIDが記録されています。
- DesktopId : イベントを発生させたデスクトップID (プール名)が記録されています。Connection Serverなどの場合はNULLが記録されます。
- MachineId : VDIなどのマシンIDが記録されます。Connection ServerなどはNULLが記録されます。
- FolderPath : 不明
- LUNId : 不明
- ThinAppId : 不明
- EndpointId : 不明
- UserDiskPathId : 不明
- GroupId : 不明
- ApplicationId : 不明
- SessionId : 不明
一部NULLしか記録されておらず、不明な部分がありますが、Horizon Administratorのイベントの詳細で表示されるような内容が記録されています。
event_dataテーブルの内容
eventテーブルの構成内容を確認してみたいと思います。
event_dataテーブルには、eventテーブルとは別のデータが入っているようです。
- EventID : eventテーブルの主キーが記録されています。
- Name : 主キーのイベントに対するイベント名が記録されています。
- Type : 不明。0 or 1が記録されています。
- IntValue : 不明。
- StrValue : Nameに対するデータが記録されています。
- TimeValue : 不明。
- BooleanValue : 不明。
- StrBlobValue : 不明。
event_dataテーブルには、eventテーブルを補完するデータが入っています。
そのため、eventテーブルとevent_dataテーブルを組み合わせる事によって詳細なイベントが表示されるようです。
event_historicalテーブルの内容
event_historicalテーブルの構造は以下のとおりです。
event_historicalテーブルは、eventテーブルの一部が記録されており、Connection Serverの過去のデータがすべて記録されているテーブルになります。
eventテーブルはHorizon Administratorの設定により、定期的にデータが削除されますが、historicalが付くテーブルは、基本的に削除されません。
そのため、監査データなどはこちらのテーブルを参照すると良いと思います。
また、内容的にeventテーブルと同じものが入っていると思われましたが、実は違うようです。
event_historicalテーブルに記録されているデータは以下のようになります。
- EventID : ユニークなイベントの番号が記録されています。
- Module : AgentやBroker、VLsiなどのコンポーネントの分類が記録されています。
- EventType : Agentの接続、切断や、デスクトップの割当や、ユーザのパスワード間違えなどのイベントの分類が記録されています。
- ModuleAndEventText : ログインなどのイベントの詳細が記録されいます。
- Time : イベントの記録時間が記録されています。
- Source : どのモジュールからイベントが記録されたかのモジュール情報が記録されています。(送信元ではない)
- Severity : イベントのレベルが記録されています。(AUDIT_ACCESS、INFO、WARNING、ERRORなど)
- Node : イベントを発生させたVDIのホスト名やConnection Serverのホスト名が記録されています。
- Acknowledged : イベントの応答があったか記録しています。(0 or 1が記録される?)
eventテーブルの一部がhistoricalテーブルに記録されています。
ただ、historicalだから必要なデータが取得できないわけではなく、このデータだけでも十分イベントの解析はできると思われます。
event_data_historicalテーブルの内容
event_data_historicalテーブルについては、event_dataテーブルと同様のデータが入っています。
EventID : eventテーブルの主キーが記録されています。
Name : 主キーのイベントに対するイベント名が記録されています。
Type : 不明。0 or 1が記録されています。
IntValue : 不明。
StrValue : Nameに対するデータが記録されています。
TimeValue : 不明。
BooleanValue : 不明。
StrBlobValue : 不明。
event_dataテーブルと同様の値が入っていることから、historicalのテーブルにおいても、event_historicalテーブルとevent_data_historicalテーブルの両方の保持が必要になると思います。
propsテーブルの内容
propsテーブルの構造は以下のとおりです。
- Name : WriteCompatibirityとschema_versionの2種類のデータが記録されています。
- Value : WriteCompatibirityとschema_versionのデータが記録されています。
このテーブルは、Connection Serverに関するデータが記録されているようです。
Horizonのバージョンアップにより、データベースのスキーマが変更されることがあるので、そのバージョン情報を記録しているテーブルでした。
timing_profilerテーブルの内容
timing_profilerテーブルの内容は以下の通りです。
- EventID : eventテーブルの主キーが記録されています。
- Time : イベントの記録時間が記録されています。
- EventType : 不明。
- UserSID : 不明。
- SessionId : 不明。
- Properties : 不明。
- TimingProfilerTree : 不明。
Timing Profiler関連の情報が記録されているのですが、検証ライセンスではヘルプデスクツールのライセンスは含まれていないので、詳細の確認はできませんでした。
まとめ
今回はConnection Serverのイベントデータベースがどのような構造になっており、どんな情報が記録されているかを確認してみました。
以外だったのが、eventテーブルとevent_historicalテーブルの内容が異なっていた点です。
historicalという文言から、履歴用のテーブルだと推察し、eventテーブルのコピーが入っているものだろうと思っていましたが、制限なく記録をすることから主要なデータ以外はデータ容量削減のため一部のデータを切り落としているんですかね。
ということで、イベントデータベースをバックアップしたりパージする際には、event_historicalテーブルとevent_data_historicalテーブルを死守すれば問題なさそうです。
まとめ
本ブログではVMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
また、Youtubeで解説動画も鋭意作成中です。本ブログで記事にしているものも動画にしようと思っておりますので、よろしくお願いいたします。
willserverのnoteも開設したのでフォローお願いします。
コメント