RDSパフォーマンスインサイトを使ってみる（PostgreSQL）（メモ）

# Performance Insights(パフォーマンスインサイト)

Performance Insightsはデータベースのモニタリングを行う機能で、負荷や各種統計情報を収集し、ダッシュボードに表示したりすることができます。
Performance Insightsはデフォルトで有効になっています。Performance Insightsのエージェントは負荷が低い（らしい）ので、そのまま有効の設定のまま使用することになると思います。


# 料金と保存期間

- 無料で7日間の履歴を保存できます。最大は2年間（有償）。
- APIは1か月あたり100万件のリクエストまで無料。


# ダッシュボードからパフォーマンスの確認

ダッシュボードから以下の情報が確認できます。

- カウンターメトリクス
- データベースのロード（時系列グラフ、積算グラフ）

Performance Insightsのデフォルト画面は以下のように表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/ba1dfe19-b8f8-1158-280d-9ef45c44da82.png)

## カウンターメトリクス

カウンターメトリクスは表示するメトリクスを以下の画面から選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/a41dcc0c-68dc-6231-4295-8ef102bd289d.png)

いくつかのメトリクスを選択した後、カウンターメトリクスは以下のように表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/7359bcfb-95ed-c3c2-c5d5-fa58e530dd6c.png)



パフォーマンスインサイトで取得できるメトリクスは以下のページに記載されていました。
PostgreSQLの統計コレクタが収集した「Native counter metrics」と、Amazon RDSによって定義された「Non-native counter metrics」があります。

- [パフォーマンスインサイトのカウンター](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.Aurora_PostgreSQL)


## データベースのロード（時系列グラフ、積算グラフ）

データベースのロードでは「待機」「SQL」「ホスト」「ユーザー」の4つについて、時系列グラフと積算グラフで表示できます。


### 待機

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/4d4f2003-8944-5c91-8703-ad11ad1c8e2d.png)

Aurora PostgreSQL の代表的な待機イベントは次のページで確認できます。

- https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Reference.html#AuroraPostgreSQL.Reference.Waitevents


### SQL

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/c64f0965-29fb-9cae-3bd5-135fb71c3f16.png)

### ホスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/74279187-f55e-e97f-2dd1-a46ce46dcf0d.png)

### ユーザー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179607/a63cd5d8-87c1-021f-7052-a44b20b9871c.png)


# パフォーマンスインサイトAPI

収集された情報はダッシュボードだけでなくパフォーマンスインサイトAPIを用いても取得することができます。データを加工したり、他の監視システムに取り込んだりするような利用方法があります。

詳細は以下のページを参照。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.API.html

パフォーマンスインサイトAPIを利用するためには、事前にAmazonRDSFullAccessポリシー、またはカスタムIAMポリシーを作成しIAMユーザまたはロールにアタッチしておく必要があります。


パフォーマンスインサイトで取得できるメモリクスは以下のページに記載されていました。

- [パフォーマンスインサイトのカウンター](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.Aurora_PostgreSQL)

APIで取得する際には対象のメトリクスに対して以下の計算を用いることができます。

- 平均 : 期間中のメトリクスの平均値。.avg をメトリクス名に追加します。
- 最小 : 期間中のメトリクスの最小値。.min をメトリクス名に追加します。
- 最大 : 期間中のメトリクスの最大値。.max をメトリクス名に追加します。
- 合計 : 期間中のメトリクス値の合計。.sum をメトリクス名に追加します。
- サンプル数 : 期間中にメトリクスが収集された回数。.sample_count をメトリクス名に追加します。

更新したタプル数（db.SQL.tup_updated）のメトリクスの合計値を取得したい場合は、メトリクス(db.SQL.tup_updated）の最後に".sum"をつけて、"db.SQL.tup_updated.sum"を指定します。

クエリー用のjsonは以下のようになります。

```json
[
  {
    "Metric": "db.SQL.tup_updated.sum"
  }
]
```

実際にAPIを使う場合はAWS-CLIから以下のように実行します（Windowsの場合）。

```
aws pi get-resource-metrics ^
   --service-type RDS ^
   --identifier XXX.ap-northeast-1.rds.amazonaws.com ^
   --start-time 2020-04-03T00:00:00Z ^
   --end-time   2020-04-03T00:05:00Z ^
   --period-in-seconds 60 ^
   --metric-queries file://query.json
```

「--identifier」には、インスタンスの「設定」に表示されるリソースIDを指定します。

取得結果は以下のようになります。

```json
{
    "AlignedStartTime": "2020-04-03T09:00:00+09:00",
    "AlignedEndTime": "2020-04-03T09:05:00+09:00",
    "Identifier": "db-5ACWEXJKX3DHLA3IT23RLDTC6I",
    "MetricList": [
        {
            "Key": {
                "Metric": "db.SQL.tup_updated.sum"
            },
            "DataPoints": [
                {
                    "Timestamp": "2020-04-03T09:01:00+09:00",
                    "Value": 3107.0
                },
                {
                    "Timestamp": "2020-04-03T09:02:00+09:00",
                    "Value": 5558.0
                },
                {
                    "Timestamp": "2020-04-03T09:03:00+09:00",
                    "Value": 11133.0
                },
                {
                    "Timestamp": "2020-04-03T09:04:00+09:00",
                    "Value": 5598.0
                },
                {
                    "Timestamp": "2020-04-03T09:05:00+09:00",
                    "Value": 1224.0
                }
            ]
        }
    ]
}
```


# 参考

- [Amazon RDSパフォーマンスインサイトの使用](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.html)