ActiveGate を利用したDynatrace によるAWSの監視 2024年版

# はじめに

以前[ActiveGateを利用したDynatraceによるAWSの監視](https://qiita.com/sukatsu1222/items/304c556016596e8bf805)という記事を投稿しましたが、公式ドキュメントの内容が更新されより簡単にAmazon CloudWatchとDynatraceを連携させることができるようになりました。
本記事では、2024年現在の最新手順について改めて紹介していきます。

# 事前準備

本記事では[ActiveGate](https://docs.dynatrace.com/docs/shortlink/activegate-landing)を利用して、AWSを監視する方法について紹介していきます。

ActiveGateの導入方法については以下の記事で紹介していますので、ご参考ください！

https://qiita.com/sukatsu1222/items/7f07122544453253eb4c

:::note warn
ActiveGateを利用してAWSを監視する場合、ActiveGateにIAM Roleを割り当てる必要があるためActiveGate用にEC2インスタンスを立てる必要があります。
:::

# 設定の流れ

1. ActiveGateの構築
1. IAMロールの作成
    1. ActiveGate用ロールの作成
    1. EC2インスタンスにロールを割り当て
    1. 監視用ロールの作成
1. AWSアカウントとDynatraceの接続

オプションで以下を設定していきます。

1. AWSのリソースタギング
1. サポートサービスの追加
1. アラートのためのメトリックイベントの設定

詳細な設定はDynatraceの[マニュアルサイト](https://docs.dynatrace.com/docs/shortlink/aws-monitoring-guide)をご参照ください。

## ActiveGateの構築

[別記事](https://qiita.com/sukatsu1222/items/7f07122544453253eb4c)に掲載していますので、そちらを参考にEC2インスタンス上にActiveGateを構築します。
ActiveGateを構築するAWSのアカウントと監視対象とするアカウントは異なっていても問題ありません。また、単一のActiveGateから複数のAWSアカウントを対象とすることも可能です。

:::note warn
ActiveGateから各種サービスのAPI エンドポイントへアクセスできる必要があります。そのためインターネットゲートウェイやNAT ゲートウェイを介してパブリックエンドポイントへアクセスできるVPC内に構築することを推奨しております。
:::

## IAMロールの作成

一般的なセットアップ手順では2つのCloudFormationテンプレートを使用して、2つのスタックを作成する必要があります。それぞれ以下のIAMロールとポリシーが作成されます。

* ActiveGate用ロールとポリシー
* 監視用ロールとポリシー

### ActiveGate用ロールの作成

ActiveGateをインストールしたEC2インスタンスに割り当てるIAMロールの作成を行います。

1. [role_based_access_AG_account_template.yml﻿](https://github.com/dynatrace-oss/cloud-snippets/blob/main/aws/role-based-access/role_based_access_AG_account_template.yml)をダウンロードします
1. AWSのコンソール画面からCloudFormationの**スタック**画面に行き、`スタックの作成 > 新しいリソースを使用 (標準)`を選びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/2470f888-766d-2257-a27c-c7de1ad76bcd.png)
1. **スタックの作成**ページでは`既存のテンプレートを選択`を選び、`テンプレートファイルのアップロード`から先ほどダウンロードした`role_based_access_AG_account_template.yml﻿`ファイルをアップロードし、`次へ`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/0c485d2c-12a6-ab2f-d17e-95f711a1372f.png)
1. **スタックの詳細を指定**ページでは`スタック名`とパラメータを入力します。監視対象なるアカウントID（`MonitoredAccountID`）は入力が必須です。入力したら`次へ`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/56cb1994-79e8-3fcb-51fe-fdc3d68dcdb3.png)
1. **スタックオプションの設定**ページでは特に変更がなければそのまま`次へ`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/34708456-b7cf-e89d-df98-9778c8ea384a.png)
1. **確認して作成**ページでは設定を確認し、問題がなければ`AWS CloudFormation によってIAM リソースがカスタム名で作成される場合があることを承認します。`にチェックを入れ、`送信`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/5db17aca-c23e-f572-9832-abdfa656ed6c.png)

CloudFormationのスタックが`CREATE_COMPLETE`になれば本手順は終了です。

### EC2インスタンスにロールを割り当て

ロールの作成が完了したらActiveGateをインストールしたEC2インスタンスにIAM ロールに割り当てます。

1. コンソール画面から**EC2**のページにアクセスし、ActiveGateをインストールしたインスタンスのIAM ロールを変更します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/82a79271-7650-3221-38bb-9eb0dacce9bb.png)
1. **IAM ロールを変更**ページで先ほど作成したIAM ロール (`Dynatrace_ActiveGate_role`) を選び、`IAM ロールの更新`をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/bd245348-174f-a4a2-0b03-2acad457e9b7.png)

### 監視用ロールの作成

監視対象となるAWS アカウント上で監視用ロールの作成を行います。

1. Dynatraceの`設定`ページから`Cloud and virtualization > AWS`を開き、`Connect new instance`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/f53cdf18-a221-f2d3-bbae-cd1913d33be8.png)
1. **Token**の右にある`Copy`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/e3b96ac3-6ca2-0e05-ffc9-6831407b2566.png)
1. [role_based_access_monitored_account_template.yml﻿﻿](https://github.com/dynatrace-oss/cloud-snippets/blob/main/aws/role-based-access/role_based_access_monitored_account_template.yml)をダウンロードします
1. AWSのコンソール画面からCloudFormationの**スタック**画面に行き、`スタックの作成 > 新しいリソースを使用 (標準)`を選びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/2470f888-766d-2257-a27c-c7de1ad76bcd.png)
1. **スタックの作成**ページでは`既存のテンプレートを選択`を選び、`テンプレートファイルのアップロード`から先ほどダウンロードした`role_based_access_monitored_account_template.yml﻿﻿﻿`ファイルをアップロードし、`次へ`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/578cbec8-e126-97dc-17ef-29adedad6cca.png)
1. **スタックの詳細を指定**ページでは、`スタック名`を入力し、`ActiveGateAccountID`にActiveGateが構築されているアカウントIDを入力します。`ExternalID`は先ほどDynatraceの画面でコピーしたTokenの値を貼り付けます。`RoleName`は**ActiveGate用ロールの作成**で指定したMonitoringRoleNameと同じもの (デフォルト `Dynatrace_monitoring_role`)を入力し、 `次へ`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/577c1d50-aee8-8773-4388-98a4b5d856bd.png)
1. **スタックオプションの設定**ページでは特に変更がなければそのまま`次へ`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/34708456-b7cf-e89d-df98-9778c8ea384a.png)
1. **確認して作成**ページでは設定を確認し、問題がなければ`AWS CloudFormation によってIAM リソースがカスタム名で作成される場合があることを承認します。`にチェックを入れ、`送信`ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/5db17aca-c23e-f572-9832-abdfa656ed6c.png)

CloudFormationのスタックが`CREATE_COMPLETE`になれば本手順は終了です。

## AWSアカウントとDynatraceの接続

ロールの作成が完了したら、Dynatraceの画面に戻り、残りの設定を実施していきます。

* `Connection name`には対象となるAWSアカウントのサービス名や環境などを入力します（例：`Payment - Prod`）
* `IAM role that Dynatrace should use to get monitoring data`は**監視用ロールの作成**で作成したロール名を入力します（デフォルト：`Dynatrace_monitoring_role`）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/8f6a07de-eef6-a892-fc85-561115417357.png)
* `Your Amazon account ID`は監視対象となるAWS のアカウントIDを入力します
* すべて入力し終えたら、`接続`ボタンをクリックします

以上で、AWSの主要な機能に関する監視が開始されます。

数分立ってから**AWS**のアイコンもしくは**Clouds**アイコンをクリックすることで情報を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/701b7e71-bb12-6363-2cef-cd2754087247.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/0134fdb4-3c9c-c541-23c9-bdf074dcab04.png)

# オプション設定

## リソースタギング

[以前の記事](https://qiita.com/sukatsu1222/items/0819ca18213b2d2a8278#%E3%82%BF%E3%82%B0%E3%81%AE%E8%BF%BD%E5%8A%A0)でも記載したように、AWSのタグを利用することで、監視する対象を制限でき、**AWSに対するAPIコール数を制限**することが可能です。

AWSコンソールから対象となるリソースに対して、タグを指定します。ここではキーに`monitor_dynatrace`、値に`true`を設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/d21c782c-8015-efbb-2cd8-759d5f9beb70.png)

`設定 > Cloud and virtuallzation > AWS`と進んで、先ほど作成した設定の右側にあるペンシルアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/6b06bb9b-1261-64e4-700f-bd47aad8ee8c.png)

`Resource to be monitored`欄を`Monitor resources selected by tags`に変更し、`主要`と`値`にAWSの監視対象と同一のものを入力し、`保存`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/6a14e8d3-db48-8fdd-2bae-8bc15f162e81.png)

ここで設定したキーと値が一致したリソースのみを監視するようになります。

## サポートサービスの追加

ActiveGateを用いたAWSの監視のメリットは**EC2やEBS、ELB、RDSなどの主要なサービス以外の様々なAWSサービスのメトリックを取得可能**な点です。DynatraceがサポートしているAWSサービスについては以下から確認ができます。

[AWS supporting service metrics](https://www.dynatrace.com/support/help/shortlink/aws-supporting-services-hub)

Dynatraceでは選択したサービスに対してAWS CloudWatchのメトリクスを選択して取得することができるため効率よくデータを取得できコスト削減につなげることができます。

リソースタギングと同様に設定したAWSの画面を開き、サポートサービスから`Add service`ボタンもしくは`Manage services`ボタン（一度、serviceを追加したら`Manage services`に変わります）をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/d398523f-76a0-7e97-95eb-1d72da2a526c.png)

`Select service to be monitored...`フィールドから監視したいサービスを選択し、`Add service`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/031dd9d8-6789-24ec-a5e3-707745bbc484.png)

`Add service`ボタンをクリックし、監視したいサービスを全て登録したら`変更の保存`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/0671af2d-6ddb-dc0c-f479-171434f9cb0b.png)

`インフラストラクチャ > AWS`を開き、作成したAWS名をクリックすることでAWSの監視画面を開きます。`サポートサービス`をクリックすることで先ほど設定したサービスを監視していることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/a00b88af-895e-68d3-2887-23eaa4a31e8f.png)
これらのサービスをクリックすることで、詳細を確認することが可能です。

### 取得するメトリックの編集

再度、`設定 > Cloud and virtuallzation > AWS`と進み、AWSの設定画面を開きます。サポートサービスの下の`Manage services`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/65a2bc83-1800-7475-eb49-85da2032f1b1.png)

監視しているサービスの一覧が表示されるので、メトリックを編集したいAWSサービスの名前をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/8786baa9-66ee-1913-12f7-6c8ba6fce1cb.png)

メトリックを追加する場合は、`メトリックの追加`ボタンを削除する場合は、該当メトリックの×アイコンをディメンションなどの変更を行う場合は、下矢印アイコンクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/cba379b7-32cd-9a9c-dce5-e3930ca9a5d0.png)

追加したいメトリックを選び、`Choose dimension(s)`からディメンションを選択し、`メトリックの追加`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/e9a7619b-5a24-22b0-4a8d-f27bd5cb5231.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/1375e011-5537-8707-0cde-4955658bf6d5.png)

最後に忘れずに`変更の保存`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/17b3aa15-f697-92be-8064-367af052699e.png)

## アラートのためのメトリックイベントの設定

サポートサービスで追加取得したメトリックについても、アラートの設定をすることが可能です。Dynatraceではあらかじめ推奨のアラートルールが定義されておりそれを有効にするだけで、細かい閾値の設定などは必要ありません（もちろん閾値を変更することも可能です）。

`設定 > Cloud and virtuallzation > AWS`と進み、AWSの設定画面を開き、`Manage alerting rules`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/91216d9b-b1d5-d1cf-7159-09951e76f67f.png)

監視しているサポートサービスの内容に応じた推奨のアラートルールが表示されます。全てのルールを作成する場合は`Create all recommended alerting rules`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/6dee2a88-a009-b3f0-9b4a-549a80d2a104.png)
特に保存ボタンなどはなく有効になります。個別に設定を変更したい場合はアラートルール名をクリックすることで閾値などを変更可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/71fd1190-ea38-6184-cb6d-2c885a0f7d9f.png)

# まとめ

最新の手順では、CloudFormationを使うことでより簡単にAWSの監視を行うことができるようになりました。アラートの設定もデフォルトで用意されているので、監視設計やアラートの設定に割く時間を減らすことができます。
また、AWSの監視についてはEC2インスタンスにOneAgentをインストールすることで、自動でAWSのタグをホスト情報に紐付けてくれたりするので、AWS上でアプリケーションを展開しているのであればぜひ導入を検討してみてください。