第５章　Denodo monitorの設定

# 目次
[1.はじめに](#1-はじめに)
[2.今回の実施内容](#2-今回の実施内容)
[3.作業実施するうえでの予備知識](#3-作業実施するうえでの予備知識)
[4.インストール](#4-インストール)
[5.動作確認](#5-動作確認)
[6.ビュー作成](#6-ビュー作成)
[7.クエリ実行確認](#7-クエリ実行確認)
[8.最後に](#8-最後に)

# 参考URL
- [Denodo-USER MANUALS　Denodo Monitorの構成](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/monitoring_the_virtual_dataport_server/denodo_monitor/configuring_the_denodo_monitor)
- [Denodo-USER MANUALS　Denodo Monitorの起動](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/monitoring_the_virtual_dataport_server/denodo_monitor/launching_the_denodo_monitor)
- [Denodo-USER MANUALS　Denodo Log Columnの詳細](https://community.denodo.com/kb/en/view/document/Log%20column%20details)

# 1 はじめに
本記事は、データ仮想化製品Denodoについて紹介する連載記事になっております。
これまでの連載通りにDenodo Express環境設定がされていることを前提としていますので、未実施の場合は過去の記事を参照して構築をしてください。

データ仮想化技術やDenodoの概要については、[第1章　データ仮想化とDenodo概要](https://qiita.com/k_tym/items/d2bd2f59cdde269cd423)をご参照ください。
また、データ仮想化環境の構築については、[第2章　データ仮想化環境の構築](https://qiita.com/nomurah/items/23573c3dc59e23850b49)をご参照ください。

# 2 今回の実施内容
DenodoにはDenodo MonitorというDenodo サーバーに関する情報をログに記録する機能があります。
クエリ実行に関する情報やデータソースへのアクセス状況等が取得でき、実運用においてトラシューや利用状況の確認等において活躍する機能であり、導入が推奨されます。
今回はDenodo MonitorのログをDBに格納し利用できるまでの手順を記載します。

Postgresqlは13を例として進めます。

# 3 作業実施するうえでの予備知識
Denodo Monitorは前述の通りDenodoサーバーの状態をログに記録しますが、記録対象についての概要を簡単に記載します。
ログカラム情報などは参考URLを記載しておりますので、そちらを参照ください。
なお、ログはデフォルトだとログファイルへ書き出されますが、オプション設定としてDBへの書き出しやS3への書き出しにも対応しています。

### ローカルモニター
Denodo Monitor が実行されているホストに関する情報を収集します。
- プロセスモニター: ローカルホストのすべての実行中のプロセスに関する情報をログに記録
- ソケットモニター: ローカルコンピュータのアクティブなコネクションの情報をログに記録

### サーバーモニター
Denodo サーバーの実行中のスレッドとメモリ使用量に関するデータをログに記録します。
Denodo Monitor とは別のホストで実行されているサーバーから情報を取得できるように、JMX 経由で Denodo サーバーに接続し情報を収集します。
- リソースモニター
  - メモリ情報: 監視対象サーバーを実行するJVMのメモリ使用量をログに記録
  - クラス情報: 現在ロードされているクラスの数 、ロードされているクラスの総数、スレッドの数、およびスレッドの最大数をログに記録
  - Virtual DataPort の情報（コネクション数、リクエスト数、メモリ使用量）
- スレッドモニター
  - スレッドモニターは、Denodo サーバーによって起動されたスレッドと、それらが消費したCPU 時間をログに記録

### Virtual DataPortモニター
運用では例えばトラブルシュート時に実行クエリを確認することがあり、Virtual Data Portの処理ログが欲しくなります。
以下3つのモニターがありますが、特にクエリモニターには当方お世話になっています。
- Virtual DataPort クエリモニター: Virtual DataPort によって処理されたすべてのステートメントをログに記録
- Virtual DataPort キャッシュモニター: Virtual DataPort のキャッシュロードプロセスのアクティビティをログに記録
- Virtual DataPort コネクションモニター: 開かれたコネクションと閉じられたコネクション、コネクションを開いた/閉じたユーザーアカウント、使用したインターフェイス、接続元 IP などに関する情報をログに記録

:::note info
Virtual DataPortモニターの各種ログ出力は、デフォルトのテキスト出力に加え、PostgresqlやMySQL等のDBへの出力、およびS3への出力が可能です。
なお、Data Catalogにはビューの利用統計情報を表示する機能があるのですが、前提条件としてDenodo monitorログをDBに格納することが求められるため、DBへの格納設定をお勧めします。

実運用環境では、Denodo MonitorはDenodo機能提供サーバーとは別の環境で動かすことが推奨です。（最小構成の場合は、Solutiona Managerサーバ上に同居が良いかと思います）


:::
# 4 インストール
Monitorの周りの設定と格納用DBの設定を行います。

### Denod monitor
1. Denodoが提供するJREを利用できるよう、環境変数を設定します。
Windows 環境変数 > 詳細設定タブ「環境変数」へ遷移し、ユーザー環境変数とシステム環境変数に以下を設定。
    `変数名: JAVA_HOME`  
    `変数値: C:\Denodo\DenodoPlatform8.0`

2. `C:\Denodo\DenodoPlatform8.0\tools\monitor`ディレクトリに移動します。
3. `denodo-monitor.zip`をカレントディレクトリに解凍します。
4. DBコネクタをコピーします。
コマンドプロンプトを立ち上げて、以下コマンド入力
    ```
    copy C:\Denodo\DenodoPlatform8.0\lib\extensions\jdbc-drivers\postgresql- 
    12\postgresql-42.3.5.jar C:\Denodo\DenodoPlatform8.0\tools\monitor\denodo- 
    monitor\denodo-monitor\lib
    ```
5. `C:\Denodo\DenodoPlatform8.0\tools\monitor\denodo-monitor\denodo-monitor\conf\ConfigurationParameters.properties`を修正します。
以下のようにQuery monitor設定部を修正します。
    ```
    # =============================================================================
    # Settings to store the output of the Virtual DataPort query monitor in a 
    database
    # =============================================================================
    
    vdpqueries.jdbcagent.enable=true　   # falseから修正
    
    # JDBC Agent Parameters: PostgreSQL
    vdpqueries.jdbcagent.driverClassName=org.postgresql.Driver    # コメント解除
    vdpqueries.jdbcagent.url=jdbc:postgresql://localhost:5432/monitor    # コメント解除&DBのURL記載
    vdpqueries.jdbcagent.user=monitor    # コメント解除&ユーザー名入力
    vdpqueries.jdbcagent.password=Pass!234    # コメント解除&パスワード入力
    ```
    
### Postgresql
1. [リンク](https://lets.postgresql.jp/documents/tutorial/windows/)等を参照にPostgreSQLをインストールします。
（※Windows上にインストールすることを想定。pgAdminもセットでインストール）
2. pgAdminを起動し、Server接続後にPostgreSQL右クリック > Create > Login/Group Roleをクリックし、表示画面の各タブ画面内で以下入力します。
      - General
        - Name : monitor
      - Definistion
        - Password : Pass!234
      - Privileges
        - Can login? : クリックして右にスライド（有効化）
![pg-01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/bdd8641f-76b2-b019-4521-2706cb7c69ab.jpeg)
![pg-02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/436ee97a-496e-f719-cace-f7efb4f8b037.jpeg)
![pg-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/be48ee7e-80f0-3888-1c28-c8bbe2cd1cb0.jpeg)
![pg-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/ab02405b-e8bf-ad4b-7339-66c8a57d714f.jpeg)

3. Databasesを右クリック > Create > databaseをクリックし、表示画面内で以下入力します。
    - General
      - Name : monitor
      - Owner : monitor
![pg-05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/73e446dd-cd17-b107-6fd2-bc94550a3781.jpeg)
![pg-06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/45b56c87-a797-afac-88ea-a0b3aba1e060.jpeg)

4. monitorを右クリック > PSQL Tool をクリックしPSQLプロンプトを表示します。以下パスにあるSQLファイルを開き、記載されているクエリをPSQLプロンプトへコピペし実行します。
`C:\Denodo\DenodoPlatform8.0\tools\monitor\denodo-monitor\denodo-monitor\sql\postgresql.sql`
![pg-07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/49106b43-fbe5-149f-5b67-adf357940a75.jpeg)
![pg-09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/7ab66d1d-53c9-895a-b9dd-7208c617b577.jpeg)

5. 左ペインにテーブルが作成されるのでrequest_nitificationを右クリック > Propertiesをクリック
    - General
      - Owner : monitor
![pg-11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/87bca08a-83bc-635f-8334-ac37d0bde9be.jpeg)
![pg-11-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/50f87fb6-e6b9-6ddc-be96-9f915cc7086d.jpeg)

6. Admin Toolログイン後、格納用の仮想DBとして「monitor」という名前で仮想DBを作成します。（Administration > Database managementをクリック後、画面のように設定）
![pg-0x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/50bc266e-5d53-5c64-9ee9-a5120d3d1658.jpeg)

7. 左ペインで、作成したmonitorを右クリック > New > Data source > JDBC をクリック後、表示されるConnectionタブ内にて以下を設定します。
    - Name : 任意（postgresql13）
    - Database adapter: PostgreSQL12
    - Driver class path: postgresql-12
    - Driver Class: org.postgresql.Driver
    - Database URI: jdbc:postgresql://localhost:5432/monitor
    - Transaction isolation: Database default
    - Authentication: Use login and password
      - Login: monitor
      - Password: Pass!234
![pg-12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/75c0717b-0386-0735-90c1-acbf9603fe28.jpeg)
![pg-13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/b42e711e-6f99-5454-e7d1-5dc45faaec63.jpeg)

8. 設定入力が終わったら、TestConnectionが成功することを確認後、Saveをクリックします。
（※もし失敗する場合は、接続URL・ユーザー名・パスワード、およびPostgres側の権限を確認してみてください）

9. 前項のSaveクリック後表示される画面上のCreate base viewをクリック後、request_notificationにチェックを入れてから、Create selectedをクリックします。
![pg-14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/9fb025d5-cbca-ff7b-c6cb-ca6a64a8c39b.jpeg)

10. ベースビュー表示されるので、Saveアイコン（Diskアイコン）クリック。

![pg-15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/6f9eb698-0118-5a43-851d-4b10a4489086.jpeg)

# 5 動作確認
#### 起動およびログ書き出し確認
1. コマンドプロンプトを開き`C:\Denodo\DenodoPlatform8.0\tools\monitor\denodo-monitor\denodo-monitor\bin\denodomonitor_startup.bat`を実行します。

    ::: note warn
    コマンド実行するとフォアグラウンドでプログラムが動き続けます。
    終了時にはCtrl+Cや閉じるボタンなどで終了してください。
   :::
2. Denodo Administration Toolを起動しログインします。
3. ログインが完了したら、`C:\Denodo\DenodoPlatform8.0\tools\monitor\denodo-monitor\denodo-monitor\logs\vdp-connections.log`を開きます
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/50e7d0ef-124d-2002-2c2a-b8169395afbc.jpeg)

4. 項1でのログイン履歴があることを確認します。（※以下分かりづらいですが、画像取得にあたりログインログアウト実施しており、正しく記録されています）
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/4d23514d-e44c-38c6-9300-377fc61f1a9c.jpeg)


#### クエリ実行確認
1. 登録したrequest_notificationビューを開き、Excution panel -> Excuteをクリックしクエリを実行します。

2. 以下のようにクエリ結果が表示されます。（Postgresqlにクエリログの内容が格納されている）
![pg-19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/9a082208-1755-380d-34c1-0377e302bd5c.jpeg)

::: note info
クエリ結果が何も表示されない場合は以下で切り分けを実施してみてください。
- pgAdminでSQL実行画面を開き、`SELECT * FROM request_notification;` を実行
    - 結果表示される => DenodoとPostgresqlの接続設定確認
    - 結果表示されない => MonitorとPostgresqlの接続設定確認
:::

# 余談
簡単なTipsとして運用で使いそうなカラムについて触れておきます。
- **NumRows**: 返答行数を確認する際に使えます。
- **State**: クエリの状態確認する際に使えます。
  - 行制限に該当すると`LOW_LIMIT_REACHED`。正常と異常は`OK/ERROR`。止めると`STOPPED`。タイムアウトは`QUERY_TIMEOUT`が記録されます。
- **Cache**: キャッシュ無効は`0`。キャッシュ有効は`1`。効いているかどうか確認時に。
- **Query**: 発行クエリの確認時に。特定の期間に特定のビューに発行されたクエリを確認したい場合などに、フィルタをかまして使えます。
    - ちなみにData Catalogクエリエディターからのクエリ実行時は、`SELECT_NAVIGATIONAL`で始まるクエリが記録されます。
- **UserAgent**: どのエージェント（AdminToolやCatalogなど）からアクセスしているのかを確認する際に使えます。
- **ClientIP**: 接続元のIP確認する際に使えます。

# 8 最後に
今回はデータ活用を円滑に進めるためのモニタリングに活用できる、Denodo Monitorを紹介しました。
実際の運用においては、トラブルシュート時にクエリモニタから障害時のレコードを抽出して切り分けを行うこともありますし、月次でビューごとのアクセス数を集計したいという場合などにも利用できるので触れる場面は相応にあるかと思います。
今回は簡単な記述で概要の説明にとどまっていますので、ログをDBやS3に吐き出したい等、より活用したい方はマニュアルを参考の上でトライしてみてください。

次回はデータ利用者がデータに便利にアクセスできる機能である、Data CatalogとIndexsearchについて触れたいと思います。