Amazon CloudWatch Application InsightsでSAP HANAをモニタリングしてみる

# Amazon CloudWatch Application Insightsとは
公式マニュアルには以下のように記載されています。
>CloudWatch Application Insights は、他のアプリケーションリソースとともに Amazon EC2 インスタンスを使用するアプリケーションをモニタリングするのに役立ちます。アプリケーションのリソース全体およびテクノロジースタック (Microsoft SQL Server データベース、ウェブ (IIS) サーバー、アプリケーションサーバー、OS、ロードバランサー、キューなど) で主要なメトリクス、ログ、およびアラームを特定して設定します。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/appinsights-what-is.html

超簡単に説明すると「SQLServerやIISなどのアプリケーションの監視設定をよろしくやってくれる」機能です。(たぶん
2021年11月にSAP HANAの監視にも対応したので試してみたいと思います。
https://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-cloudwatch-insights-sap-hana-databases/

# SAP HANA環境の準備
まずは監視対象のHANA環境を準備します。

今回は[AWS Launch Wizard for SAP](https://docs.aws.amazon.com/ja_jp/launchwizard/latest/userguide/launch-wizard-sap.html)を使用してシングル構成のHANA環境を作成しました。
※事前にHANAのインストールメディアを[SAP Software Download Center](https://support.sap.com/en/my-support/software-downloads.html)からダウンロードする必要があります。
※インストールメディアのダウンロードにはS-USERが必要です。

# 前提条件
HANA環境の作成後にCloudWatch Application Insightsで監視を行うための[前提条件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/appinsights-tutorial-sap-hana.html#appinsights-tutorial-sap-hana-prerequisites)を確認します。
**・SAP HANA**
HANAがインストールされており、且つ起動していること。
Launch Wizardでインストールと起動まで完了しています。

**・SAP HANAデータベースユーザ**
CloudWatch Application Insightsと連携する専用のユーザを作成する必要があります。
マニュアルに従って以下のコマンドで作成します。

```sql
su - <sid>adm
hdbsql -u SYSTEM -p <SYSTEMDB password> -d SYSTEMDB
CREATE USER CW_HANADB_EXPORTER_USER PASSWORD <Monitoring user password> NO FORCE_FIRST_PASSWORD_CHANGE;
CREATE ROLE CW_HANADB_EXPORTER_ROLE;
GRANT MONITORING TO CW_HANADB_EXPORTER_ROLE;
GRANT CW_HANADB_EXPORTER_ROLE TO CW_HANADB_EXPORTER_USER;
```

**・Python 3.6**
**・pip3**
**・CloudWatch Agent**
**・SSM Agent**
これらはLaunch Wizardで起動させたSuSE Linux 15 SP1に既にインストールされていました。

```shell
sapci:~ # /usr/bin/python3 --version
Python 3.6.10

sapci:~ # /usr/bin/pip3 --version
pip 20.0.2 from /usr/lib/python3.6/site-packages/pip (python 3.6)

sapci:~ # /usr/bin/amazon-cloudwatch-agent-ctl -a status
{
  "status": "running",
  "starttime": "2021-12-18T05:39:31+00:00",
  "configstatus": "configured",
  "cwoc_status": "stopped",
  "cwoc_starttime": "",
  "cwoc_configstatus": "not configured",
  "version": "1.247349.0b251399"
}

sapci:~ # amazon-ssm-agent -version
SSM Agent version: 3.1.715.0
```


**・IAMロール**
HANAが起動しているEC2に必要な権限のロールをアタッチします。
今回は一時的な検証環境ということでAdmin権限のロールをアタッチしました。
本番環境ではマニュアルに従って権限を絞りましょう。

**・AWS Resource Groups**
監視対象のHANAサーバ(EC2)のResource Groupsを作成します。
以下のパラメーターで作成しました。
　グループ名：HANASERVERGROUP
　グループタイプ：タグベース
　リソースタイプ：AWS::EC2::Instance , AWS::EC2::Volume
　タグ：Key = Name , Value = HANASERVER　　※事前にEC2インスタンスとEBSのタグに左記を設定

作成したResource Groupsの画面です。
Group resourcesにHANAのEC2インスタンスとEBSボリュームが表示されています。
![ResourceGroups_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/5a7def82-90c0-8d07-67bb-c12ee2c1eac5.jpeg)

# CloudWatch Application Insightsの設定
マネージメントコンソールでCloudWatchの画面を開いて左メニューの **Insights** から **Application Insights** を選択します。
![ApplicationInsights_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/b90cb826-ca1a-1bcd-93aa-a8e00d485b39.jpeg)

**アプリケーションを追加** を選択します。
![ApplicationInsights_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/3b16a498-e383-1a4c-f36a-5d9ecc872d2a.jpeg)

**アプリケーションを選択** の画面で **Resource group based application** を選択します。
![ApplicationInsights_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/7e8b6b05-5588-85ce-a460-f85065913c52.jpeg)

**リソースグループ** にResource Groupsで作成した **HANASERVERGROUP** を選択します。
![ApplicationInsights_4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/82682a1a-8754-e958-532e-07d86b45f615.jpeg)

**アプリケーション** に **HANA single node**を選択します。
![ApplicationInsights_5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/3f764103-0e7d-0a7d-870a-d5e78a91218a.jpeg)

**ユーザ名** と **パスワード** に **前提条件** で作成したHANAデータベースユーザのユーザ名とパスワードを入力します。
![ApplicationInsights_6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/d044a1d7-2867-c402-8424-581b19a8f0b9.jpeg)

設定内容を確認して問題無ければ **Submit** を選択します。
![ApplicationInsights_7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/49207dfc-f53a-271f-00b0-a4347313ef5e.jpeg)

以下のような画面が表示されたら設定は完了です。
![ApplicationInsights_8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/49d53ee2-0993-31ef-2e27-9de0e124fb77.jpeg)

# 確認
Application Insightsのトップ画面を見ると、設定前は0と表示されていた **モニタリング対象アセット** や **テレメトリー** の数字が増えています。
![ApplicationInsights_9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/e72c5dfc-5d6b-196a-7c9d-7e4489f0afe2.jpeg)

CloudWatch画面の左メニューより **すべてのメトリクス** を選択してメトリクスの画面を開くと **CWAgent** というカスタム名前空間が作成されていることが確認できます。この中に34のカスタムメトリクスが存在しています。
![ApplicationInsights_10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/ecfe3f3f-a508-1825-ea9b-1524ddc0a22c.jpeg)

CWAgent内のカスタムメトリクスを確認するとHANAサーバのCPU使用率やディスク使用率、HANAデータベースのキャッシュヒット率やコネクション数等のモニタリングが自動的に設定されていることが確認できました。
![ApplicationInsights_11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268065/df01ba99-7509-c3e1-30a3-4368f6a02177.jpeg)

# まとめ
CloudWatchでSAP HANAなどのEC2内のアプリケーション監視を実施する場合、カスタムメトリクスを1つ1つ自前で設定していく必要がありましたがApplication Insightsを使えば主要な監視項目が自動的に設定されるため監視設定の負荷を下げることが可能です。
現時点ではApplication Insightsのモニタリングに対応しているアプリケーション数が少ないですが、今後更に増えることを期待したいと思います。