Instana | Mysqlの設定について（configuration.yaml）

# はじめに
Instanaは特定のテクノロジーを監視するために、エージェントをインストールするとほとんどのエージェントセンサーも自動的にインストールされます。ただ、一部手動でインストールする必要があるセンサーや、インストールされたセンサーの設定をする必要があります。
　本記事では、InstanaでMySQLを監視する際にconfiguration.yamlに記載する設定内容について解説していきたいと思います。configuration.yamlは監視する環境に合わせて様々な設定をすることができますが、監視対象によって、また、慣れるまでは記載方法が難しいと感じることがあるかもしれません。本記事が皆様のお役に立てれば幸いです。

# InstanaにおけるMySQLの監視について
MySQLセンサーはエージェントをインストールすると自動的にインストールされます。
対応バージョンなどは公式ドキュメントを参照してください。
https://www.ibm.com/docs/ja/instana-observability/current?topic=technologies-monitoring-mysql

InstanaのMySQLモニタリングに自動的に含まれるコモンメトリックは次のとおりです。
タイプ・クエリ
スロー・クエリ
潜在クエリ
スキーマ統計

更に詳細なモニタリングを実施するためには、ご利用の環境に応じて以下の構成を設定する必要があります。
**１．詳細メトリクスの取得設定（任意）**
**２．スキーマ統計情報の除外設定（任意）**
**３．SSL/TLS暗号化通信の設定（任意）**
４．エージェントへのDBアクセス権限設定（MySQL）
※本稿では１.～３.configuraion.yamlの設定内容について記載いたします。４．については公式ドキュメントを参考にMySQLの設定をしてください。

# configuration.yamlの設定について
MySQLの設定は「com.instana.plugin.mysql」の箇所が該当します。
デフォルトでは全てコメントアウト「＃」されている状態になっているので、必要に応じてコメントアウトを除外してください。
```rb
# Mysql
# com.instana.plugin.mysql:
# user: ''
# password: ''
# schema_excludes: ['INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA']
# sslTrustStore: '/path/to/truststore.jks'
# sslTrustStorePassword: 'mysqlTsPassword'
# sslKeyStore: '/path/to/sslKeyStoreFile.jks'
# sslKeyStorePassword: 'mysqlKsPassword'
# disableSslHostnameVerification: false
```
※設定を有効にする場合は必ず1行目の、
```rb
#com.instana.plugin.mysql:
```
のコメントアウトは外す必要があります。


# １．詳細メトリクスの取得設定（任意）
```rb
# user: ''
# password: ''
```

※デフォルトはroot@パスワードなし　でエージェントがMySQLに接続するように設定されていますので、ご利用の環境に応じて変更をして下さい。
（rootユーザを指定する必要があるわけではありませんので任意のユーザで構いません。）

Instanaエージェントが対象のMySQLからメトリクス情報を収集するために、MySQLへのアクセス情報(User/Password）を設定します。
コメントアウトを除外し、InstanaエージェントがMySQLへ接続する際に使用するユーザー名とパスワードを入力します。
Instanaエージェントが利用する接続ユーザーに必要な権限は以下になります。
https://www.ibm.com/docs/ja/instana-observability/current?topic=technologies-monitoring-mysql#required-db-permissions
※ユーザー・権限設定の際に、Kubernetes環境などエージェントのインストール場所とMySQLの実行場所が違う場合、@'localhost'を指定すると接続できない場合がありますので注意してください。

```rb
#設定例
 com.instana.plugin.mysql:
  user: 'MySQLUser'
  password: 'MySQLPassword'
```

追加でポーリング間隔の指定をすることも可能です。
デフォルトでは1秒間隔になっていますので、変更が必要な場合は設定を追加してください。
※ポーリング間隔は「秒数」で指定します。
```rb
#設定例
poll_rate: 10 #Values are in seconds. Default Value 1 Sec.
```

# ２．スキーマ統計情報の除外設定
```rb
# schema_excludes: ['INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA']
```
Instanaエージェントはデフォルトでは全てのスキーマ統計情報を収集するようになっています。収集した情報はInstana UI上のSchemasグラフで確認することができますが、ここではInstanaで監視する必要がないスキーマ情報の除外設定を記載します。

※MySQLは'INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA'の2つのスキーマデータベースを持っています。それぞれの詳細はMySQLの公式ページを参照ください。
'INFORMATION_SCHEMA'
https://dev.mysql.com/doc/refman/8.0/ja/information-schema.html
'PERFORMANCE_SCHEMA'
https://dev.mysql.com/doc/refman/8.0/ja/performance-schema.html

コメントアウトを除外し、エージェントの収集から除外するスキーマ名を記載します。
```rb
#設定例
 schema_excludes: ['INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA']
```

# ３．SSL/TLS暗号化通信の設定
```rb
# sslTrustStore: '/path/to/truststore.jks'
# sslTrustStorePassword: 'mysqlTsPassword'
# sslKeyStore: '/path/to/sslKeyStoreFile.jks'
# sslKeyStorePassword: 'mysqlKsPassword'
# disableSslHostnameVerification: false
```
InstanaエージェントがMySQLに接続する際に、SSL/TLSを利用してより安全に接続させることができます。
※接続に利用する鍵は、Java 鍵ストア 形式 (JKS)形式で指定する必要があります。
コメントアウトを除外し、各項目に必要な設定を記載します。

**・sslTrustStore**
トラストストアファイル（.truststore）が格納されているディレクトリを指定します。

**・sslTrustStorePassword**
トラストストアのパスワードを指定します。
※トラストストアのデフォルトパスワードは「changeit」ですが、現在のパスワードが分からない場合は新しくトラストストアを作成するなど別途対応が必要になる場合があります

**・sslKeyStore**
キーストアファイル（.keystore）が格納されているディレクトリを指定します。

**・sslKeyStorePassword**
キーストアのパスワードを指定します。
※キーストアのデフォルトパスワードは「changeit」ですが、現在のパスワードが分からない場合は新しくキーストアを作成するなど別途対応が必要になる場合があります

**・disableSslHostnameVerification**
SSL/TLSで接続する際に、ホスト名検証を無効かするかを指定します。
※デフォルトでは「false」、検証をするように設定されます。
検証しない場合は「true」を指定してください。

```rb
#設定例
  sslTrustStore: '/path/to/truststore.jks'
  sslTrustStorePassword: 'mySqlTsPassword'
  sslKeyStore: '/path/to/sslKeyStoreFile.jks'
  sslKeyStorePassword: 'mySqlKsPassword'
  disableSslHostnameVerification: false
  ```


  # まとめ
  InstanaでMySQLの監視を行う場合、必要なセンサーはエージェントインストール時に自動的にインストールされますが、configuration.yamlを変更して設定情報を記載する必要がある場合があります。
以下3点の情報を監視する環境に応じて変更してください。
１．詳細メトリクスの取得設定
２．スキーマ統計情報の除外設定
３．SSL/TLS暗号化通信の設定

各センサーに対しての設定は似通っているものもありますので、慣れるまで大変かもしれませんが、本投稿を参考にまずはtryしてみてください！