【初心者】Prometheus/Loki/Grafanaを使ってみる #3  (Amazon Managed Service for Prometheus連携) 

# 1. はじめに
- 前回までの記事で、Prometheusを用いた監視の基本設定を確認した。
- 自作の監視サーバに保存されるメトリクスデータを安全かつ長期間保存するため、メトリクスデータをAmazon Managed Service for Prometheus(以下AMP)に連携する設定を確認する。
- 関連記事は以下。
    - [【初心者】Prometheus/Loki/Grafanaを使ってみる (メトリクス/ログの収集と表示)](https://qiita.com/mksamba/items/40e8c1cc9126e2e72cfa)
        - メトリクスとログを収集しGrafanaで表示させる。
    - [【初心者】Prometheus/Loki/Grafanaを使ってみる #2 (AlertManagerによるアラーム通知) ](https://qiita.com/mksamba/items/11a2dc51e49942e0b2a5)
        - AlertManagerを追加し、CPU高負荷時にslackへの通知を行う。
    - 【初心者】Prometheus/Loki/Grafanaを使ってみる #3 (Amazon Managed Service for Promethus連携)
        - 本記事。自分のPrometheusで収集したメトリクスをAmazon Managed Service for Prometheusに連携する。

# 2. やったこと
- AMPのワークスペースを作成する。
- 既存のPrometheusにて、AMPへデータを送信するよう設定変更する。
- 既存のGrafanaの接続先としてAMPを追加し、AMP側のデータを参照する。

# 3. 構成図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/06c639ec-671a-c767-4689-7e17621e870d.png)

# 4. 手順

## 4.1 AMPワークスペースの作成

- AMPのワークスペースを作成する(名前しか設定項目がない)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/565b9cf6-8362-b8bd-64bc-9609723ebc2b.png)

## 4.2 IAMロールの作成とアタッチ

- 公式ドキュメント「[Set up metrics ingestion from an Amazon EC2 instance using remote write](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-ingest-metrics-remote-write-EC2.html)」を参照し、既存のPrometheusがAMPにデータを書き込むための権限(AmazonPrometheusRemoteWriteAccess)及び既存のGrafanaがAMPからデータを読み出す権限(AmazonPrometheusQueryAccess)を含むIAMロールを作成し、監視サーバ(Prometheus/Grafanaインストール済)のインスタンスにアタッチする。

## 4.3 既存Prometheusの設定追加

- 既存のprometheus.ymlに、AMPにデータを送信する設定(AMPの書き込み用URL及びAMPのリージョンを指定)を追加する。

``` /etc/prometheus/prometheus.yml (追加部分のみ)
remote_write:
  -  url: https://aps-workspaces.us-west-2.amazonaws.com/workspaces/xxxxxx/api/v1/remote_write
     queue_config:
        max_samples_per_send: 1000
        max_shards: 200
        capacity: 2500
     sigv4:
          region: us-west-2
```

- 設定変更のためにサービスを再起動する。
```
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl restart prometheus.service
```

## 4.4 既存Grafanaの設定追加

- 既存のGrafanaから、AMPに接続できるように設定を追加する。
- 公式ブログ「[EC2 で Grafana をセットアップして Amazon Managed Service for Prometheus のメトリクスをクエリする](https://aws.amazon.com/jp/blogs/news/setting-up-grafana-on-ec2-to-query-metrics-from-amazon-managed-service-for-prometheus/)」に従い、GrafanaのSig v4認証対応(デフォルトは無効)を有効にする。具体的には、設定ファイル(grafana-server.service)の[Service]の箇所に以下2行追加する。
``` /usr/lib/systemd/system/grafana-server.service
[Service]
Environment="GF_AUTH_SIGV4_AUTH_ENABLED=true"
Environment="AWS_SDK_LOAD_CONFIG=true"
```

- 設定変更の反映を行う。
```
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl daemon-reload
[ec2-user@ip-10-0-0-249 ~]$ sudo systemctl restart grafana-server
```
- Grafanaの管理画面から、Data source > + Add new data source > Prometheusを選択し、以下の設定の上、「Save & Test」を押して登録する。
    - Name: AMP (既存のPrometheusと区別する)
    - Prometheus server URL: AMPの「クエリURL」の最後の「/api/v1/query」を除いた部分
    - Auth - SigV4 auth：　有効(スライダーを右に)
    - SigV4 Auth Details - Authentication Provider: AWS SDK Default
    - Default Region: us-west-2 (今回AMPをus-west-2に作成しているため)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/56038658-e96c-d795-8d83-0b9fb229b898.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/804022ca-eb8c-263b-0981-61c29d7b76f6.png)

- 接続成功後、data source としてAMPを選択した状態で、CPU使用率などのクエリが可能なことを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/7de76abd-e1ec-8612-191f-027fa736c6aa.png)

:::note warn
GrafanaでSigV4を有効にする方法について、最初公式ドキュメント「[Set up Grafana open source or Grafana Enterprise for use with Amazon Managed Service for Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-query-standalone-grafana.html)」を見ていたが、そこに記載されている内容では有効化できず、AWSブログの内容のほうを用いた。
:::

# 5. 参考サイト
- [Set up metrics ingestion from an Amazon EC2 instance using remote write](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-ingest-metrics-remote-write-EC2.html)
- [systemdのユニット設定を編集する](https://atsum.in/linux/systemctl-edit/)

# 6. 所感

- やっとPrometheus周りの超基本が確認できたため、次にkubernetes環境での動作確認にチャレンジしたい。