InstanaでDBやアプリが監視できない時に確認すべきこと

## 1.はじめに
こんにちは。[Instana Observability Advent Calendar](https://qiita.com/advent-calendar/2023/instana)に参加します。
本記事ではInstanaでデータベースやアプリケーションを監視しようと思ったのにInstanaにデータが表示されない、などうまく監視ができない時に試すべき方法をいくつかご紹介します。個人的に、Instanaに初めて触る人がつまづきやすいなと感じたポイントをまとめました。
この記事で紹介しているのはあくまで一例ですので、これを試してもダメな場合は別の問題の可能性があります。

## 2.監視がうまくいかないときの原因と対処法
### センサーの構成ができていない
MySQL、PostgreSQL、Microsoft SQL serverといったデータベースを監視する場合、Instanaがエージェントを使ってデータを取得するにはデータベースの認証の設定を行う必要があります。ただエージェントを導入しただけではデータは取れませんので必ずこの設定を行う必要があります。
データベースによって設定方法は異なりますが、今回はMySQLでの設定方法を紹介します。

 #### MySQLでの設定方法

 < agent_install_dir >/etc/instana/configuration.yamlの設定ファイルを編集し設定を行います。
 以下のようにuserとpasswordを設定し必要であればスキーマ名も設定します。
```
 com.instana.plugin.mysql:
  user: ''
  password: ''
  schema_excludes: ['INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA']
```
フィールドに挿入されたスキーマ名は、スキーマごとの統計の収集およびグラフの監視から除外されます。

同じように[PostgreSQL](https://www.ibm.com/docs/en/instana-observability/current?topic=technologies-monitoring-postgresql)や[Microsoft SQl Server](https://www.ibm.com/docs/en/instana-observability/current?topic=technologies-monitoring-microsoft-sql-server)でも最初に認証の設定が必要です。ドキュメントを参照し設定を行ってください。


### データベースの権限の設定ができていない
これもセンサーの構成と同じく、必要なデータベース権限を設定していないとデータが取得できない場合があります。
これもMySQLでの例を紹介します。

#### MySQLの場合
センサーが DBMS に関するパフォーマンス情報を収集できるようにするには、スキーマへの読み取り専用アクセスが必要です。この設定についてはバージョン8.0.0前後で設定が異なります。

・必要な権限を持つアカウントを作成する設定
MySQL バージョン 8.0.0 より前の場合、次の例を参照してください。
```
GRANT REPLICATION CLIENT ON *.* TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
GRANT SELECT ON 'performance_schema'.'events_waits_summary_global_by_event_name' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
GRANT SELECT ON 'performance_schema'.'events_statements_summary_by_digest' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
GRANT SELECT ON 'performance_schema'.'events_statements_summary_global_by_event_name' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
GRANT SELECT ON 'performance_schema'.'replication_connection_status' TO '<instana_mon_user>'@'localhost' IDENTIFIED BY 'instana_mon_pwd';
```

MySQL バージョン 8.0.0 以降の場合、次の例を参照してください。
```
GRANT REPLICATION CLIENT ON *.* TO '<instana_mon_user>'@'localhost';
GRANT SELECT ON performance_schema.events_waits_summary_global_by_event_name TO '<instana_mon_user>'@'localhost';
GRANT SELECT ON performance_schema.events_statements_summary_by_digest TO '<instana_mon_user>'@'localhost';
GRANT SELECT ON performance_schema.events_statements_summary_global_by_event_name TO '<instana_mon_user>'@'localhost';
GRANT SELECT ON performance_schema.replication_connection_status TO '<instana_mon_user>'@'localhost';
```



### Instana Pythonパッケージがインストールできていない
監視対象にPythonアプリケーションが含まれる場合はInstana Pythonパッケージが原因の場合があります。Instana PythonパッケージにはPythonのトレーシングとメトリックを取得するためのセンサーが含まれます。
基本的に、Instanaはゼロ構成という言葉で説明される、監視対象のテクノロジーを自動で判別し、監視するためのセンサーをロード・構成する機能を持っています。Instana Pythonパッケージもこの対象であり監視対象にPythonが含まれる場合には自動で構成されるツールです(*)。
ただし、何らかの原因でこれが自動インストールされない場合があり、その場合は手動でインストールする必要があります。下記でその方法を紹介します。

(*)Python Autotrace機能は2023年9月19日リリースのBuild258以降はデフォルト有効ではなくなりました。Kubernetes/Openshift上にあるPythonアプリケーションに対しては下記で紹介する方法ではなく[Autotrace Webhook](https://www.ibm.com/docs/en/SSE1JP5_current/src/pages/ecosystem/kubernetes/autotrace-webhook.html)の使用が推奨されています。
ホストユーザーは以下の手順でパッケージをインストールしてください。

#### Instana Pythonパッケージの手動インストール
**1.パッケージのインストール**

・Python 3.7 以降のバージョンのランタイムの場合
次のコマンドを実行すると、Instana Python パッケージを virtualenv、pipenv、またはコンテナーに手動でインストールできます。
```
pip install git+https://github.com/instana/python-sensor@v2.0.10
```
・Python 3.6 以前のバージョンのランタイムの場合
バージョン 2.0.0 以前のInstana Python パッケージ ( PyPI でホストされている) は、レガシー Python ランタイム バージョン (3.6 以下) を対象としています。PyPI でホストされる Instana Python パッケージをインストールするには、次のコマンドを実行します。
```
pip install instana
```
既存のインストールを更新するには、次のコマンドを実行します。
```
pip install -U instana
```
**2.パッケージのアクティブ化**
パッケージのアクティブ化は、アプリケーションのコードを変更するかしないかで方法が代わります。

・コードを変更なしのアクティブ化
アプリケーションのコードを 1 行も変更せずに Instana Python パッケージをアクティブ化できます。これによりアプリケーション コードの変更に関連するプロセスの多くを回避できます。

コードを変更せずに Instana パッケージをアクティブ化するには、Python アプリケーションに次の環境変数を設定するだけです。
```
export AUTOWRAPT_BOOTSTRAP=instana
```
Instana Python パッケージはアプリケーションの起動時に自動的にロードされ、Python アプリケーションをインストルメントします。

・コード変更によるアクティブ化
Instanaパッケージを Python アプリケーション コード内に手動でインポートするには、アプリケーション コードに次の行を追加します。
```
import instana
```

基本的にはこのパッケージがアクティブ化されればPythonの監視は構成なしで可能ですが、必要に応じて設定も可能です。詳細は[製品ドキュメント](https://www.ibm.com/docs/en/instana-observability/current?topic=package-python-configuration-configuring-instana)を確認してください。


## まとめ
Instanaでデータベースの監視がうまくいかない時に試す方法を紹介しました。Instanaは監視設定が自動化されていてエージェントを入れるだけで監視できるものも多いですが紹介した例のように最初に設定が必要な場合もあります。
同じような問題でお困りの場合はまず紹介した方法を試してみてください。
それでも解決できない場合もありますので、そういったときはIBMへお問い合わせください。
この記事が困っている方の助けになれば幸いです。