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

こちらの手順は古くなっているため、新しい設定手順をまとめ直しました。

[ActiveGate を利用したDynatrace によるAWSの監視 2024年版](https://qiita.com/sukatsu1222/items/7fdd9944588e323168a3)

今後は上記サイトをご参照ください。

# はじめに

以前に[DynatraceによるAWSの監視の始め方](https://qiita.com/sukatsu1222/items/0819ca18213b2d2a8278)という記事を書きました。このときは、ActiveGateは利用せずDynatraceから直接AWSを監視する方法について、記載しました。

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

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

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

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

## ActiveGateを利用する必要があるケース

以前の記事の通り、ActiveGateを利用しなくともAWSを監視することは可能です。ただし、ActiveGateを利用しない場合は、EC2やEBS、ELB、RDSなどに限定されます。**それ以外の様々なサービスの監視を行うためにはActiveGateを利用する必要があります。**

# 設定の流れ

1. ActiveGate の構築
1. AWS監視用ポリシーの作成
1. AWSロールの作成
    1. AWS監視用ロールの作成
    1. ActiveGate用ロールの作成
1. AWSアカウントとDynatraceの接続

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

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

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

## ActiveGateの構築

[別記事](https://qiita.com/sukatsu1222/items/7f07122544453253eb4c)に掲載していますので、そちらを参考にEC2インスタンス上にActiveGateを構築します。

## AWS監視用ポリシーの作成

AWSマネジメントコンソールから[IAM](https://console.aws.amazon.com/iam/home)のページを開きます。
`ポリシー`のページに行き、`ポリシーの作成`をクリックします。
`JSON`タブを選び、以下の**jsonポリシー**を貼り付けます。

<details><summary>JSONポリシー</summary><div>

```json
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": [
				"acm-pca:ListCertificateAuthorities", 
				"apigateway:GET", 
				"apprunner:ListServices", 
				"appstream:DescribeFleets", 
				"appsync:ListGraphqlApis", 
				"athena:ListWorkGroups", 
				"autoscaling:DescribeAutoScalingGroups", 
				"cloudformation:ListStackResources", 
				"cloudfront:ListDistributions", 
				"cloudhsm:DescribeClusters", 
				"cloudsearch:DescribeDomains", 
				"cloudwatch:GetMetricData", 
				"cloudwatch:GetMetricStatistics", 
				"cloudwatch:ListMetrics", 
				"codebuild:ListProjects", 
				"datasync:ListTasks", 
				"dax:DescribeClusters", 
				"directconnect:DescribeConnections", 
				"dms:DescribeReplicationInstances", 
				"dynamodb:ListTables", 
				"dynamodb:ListTagsOfResource", 
				"ec2:DescribeAvailabilityZones", 
				"ec2:DescribeInstances", 
				"ec2:DescribeNatGateways", 
				"ec2:DescribeSpotFleetRequests", 
				"ec2:DescribeTransitGateways", 
				"ec2:DescribeVolumes", 
				"ec2:DescribeVpnConnections", 
				"ecs:ListClusters", 
				"eks:ListClusters", 
				"elasticache:DescribeCacheClusters", 
				"elasticbeanstalk:DescribeEnvironmentResources", 
				"elasticbeanstalk:DescribeEnvironments", 
				"elasticfilesystem:DescribeFileSystems", 
				"elasticloadbalancing:DescribeInstanceHealth", 
				"elasticloadbalancing:DescribeListeners", 
				"elasticloadbalancing:DescribeLoadBalancers", 
				"elasticloadbalancing:DescribeRules", 
				"elasticloadbalancing:DescribeTags", 
				"elasticloadbalancing:DescribeTargetHealth", 
				"elasticmapreduce:ListClusters", 
				"elastictranscoder:ListPipelines", 
				"es:ListDomainNames", 
				"events:ListEventBuses", 
				"firehose:ListDeliveryStreams", 
				"fsx:DescribeFileSystems", 
				"gamelift:ListFleets", 
				"glue:GetJobs", 
				"inspector:ListAssessmentTemplates", 
				"kafka:ListClusters", 
				"kinesis:ListStreams", 
				"kinesisanalytics:ListApplications", 
				"kinesisvideo:ListStreams", 
				"lambda:ListFunctions", 
				"lambda:ListTags", 
				"lex:GetBots", 
				"logs:DescribeLogGroups", 
				"mediaconnect:ListFlows", 
				"mediaconvert:DescribeEndpoints", 
				"mediapackage-vod:ListPackagingConfigurations", 
				"mediapackage:ListChannels", 
				"mediatailor:ListPlaybackConfigurations", 
				"opsworks:DescribeStacks", 
				"qldb:ListLedgers", 
				"rds:DescribeDBClusters", 
				"rds:DescribeDBInstances", 
				"rds:DescribeEvents", 
				"rds:ListTagsForResource", 
				"redshift:DescribeClusters", 
				"robomaker:ListSimulationJobs", 
				"route53:ListHostedZones", 
				"route53resolver:ListResolverEndpoints", 
				"s3:ListAllMyBuckets", 
				"sagemaker:ListEndpoints", 
				"sns:ListTopics", 
				"sqs:ListQueues", 
				"storagegateway:ListGateways", 
				"sts:GetCallerIdentity", 
				"swf:ListDomains", 
				"tag:GetResources", 
				"tag:GetTagKeys", 
				"transfer:ListServers", 
				"workmail:ListOrganizations", 
				"workspaces:DescribeWorkspaces"
			],
			"Resource": "*"
		}
	]
}
```
</div></details>

ポリシーの名前にはわかりやすい名称（`Dynatrace_monitoring_policy`など）を設定します。
`ポリシーの作成`をクリックし、ポリシーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/bcebd0a2-44f4-b73e-b83b-0d136d28739d.png)

## AWSロールの作成

AWSロールを作成するには以下が必要になります。

* DynatraceのAWSアカウントID: **509560245411**
* ActiveGate をホストしているAWSアカウントID
* 監視対象となるAWSアカウントID
* 外部ID

### Step 1. 外部IDの取得

AWSロールを付与するための外部IDを取得します。
DynatraceのGUIにログインをし、左のメニューからの一番下にある`管理 > 設定`を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/27e2fdae-7228-71cd-c81f-94601b6a6a9e.png)

`Cloud and virtualization > AWS`を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/27d4ebc7-3b03-b672-8632-e2081ba26b8b.png)

`Connect new instance`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/2b75e4f5-f664-bc22-28e4-fba30de869f7.png)

Authentication methodを`Role-based authentication`に変更し、`Copy`ボタンをクリックします。
この画面は後ほど戻ってきますので、このままにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/88aa2d5e-cc6d-4c72-523c-0e908a6f0c40.png)

### Step 2. 監視用ロールの作成

監視対象のAWSアカウントに監視用ロールを作成します。もし、**複数のAWSアカウントを監視する場合はこの手順を監視対象のAWSアカウント全てで行います。**

AWSコンソールから`ロール`のページに行き、`ロールを作成`をクリックします。

信頼されたエンティティタイプには`AWSアカウント > このアカウント(***)`を選びます。`外部IDを要求する`にチェックを入れ、`外部ID`欄にStep 1.で取得した外部IDをペーストし、`次へ`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/72ad7eb8-7a75-4899-31e8-e70c7ffd30c6.png)

許可ポリシーでは先ほど作成したポリシー（`Dynatrace_monitoring_policy`）を選択し、`次へ`をクリックします。
ロール名にはわかりやすい名称（`Dynatrace_monitoring_role`など）を入力し、`ロールを作成`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/88f698f8-e0eb-fad6-8dd2-4e60ff80974f.png)

### Step 3. ActiveGate用ロールの作成

監視用ロールを作成したら、ActiveGateに割り当てる用のロールを作成します。

AWSコンソールから`ロール`のページに行き、`ロールを作成`をクリックします。

`AWSのサービス > EC2`を選び、`次へ`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/1d542537-c2a0-880a-8aa8-7a6a349f3f8d.png)

許可ポリシーは何も設定せずに`次へ`をクリックします。

ロール名にはわかりやすい名称（`Dynatrace_ActiveGate_role`など）を入力し、`ロールを作成`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/b18c962a-57c7-17d1-5535-467c7665aedc.png)

作成した ActiveGate用ロール（`Dynatrace_ActiveGate_role`）を開き、`インラインポリシーを作成`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/07556fff-ad8b-5a14-29ac-1ae5a5bc4f2b.png)

`JSON`タブを選び、以下の**jsonポリシー**を貼り付け、自身の環境に合うように編集します。
複数のAWSアカウントを監視する場合は`Statement.Resource`に全て記載をします。
編集が完了したら、`ポリシーの確認`をクリックします。

<details><summary>JSONポリシー</summary><div>

```json
{
    "Statement": [
        {
            "Resource": [
                "arn:aws:iam::<12桁の監視対象のAWSアカウントID>:role/<Step 2で作成した監視用ロール名 (Dynatrace_monitoring_role)>"
            ],
            "Action": [
                "sts:AssumeRole"
            ],
            "Effect": "Allow"
        }
    ],
    "Version": "2012-10-17"
}
```
</div></details>

インラインポリシーにわかりやすい名称（`Dynatrace_assume_policy`など）を入力し、`ポリシーの作成`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/ff4b398b-33cd-2294-bdf6-2ad717af8d8a.png)

### Step 4. 監視用ロールへの信頼ポリシーの編集

Step 2で作成した監視用ロール（`Dynatrace_monitoring_role`）を開き、`信頼関係`タブから`信頼ポリシーを編集`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/49b06d72-5bce-e2a8-d363-04046ea470c7.png)

信頼ポリシーを編集画面で以下の**jsonポリシー**を貼り付け、自身の環境に合うように編集します。

<details><summary>JSONポリシー</summary><div>

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",

      "Principal": {
        "AWS": [
          "arn:aws:iam::<12桁の監視対象のAWSアカウントID>:role/<Step 3で作成したActiveGate用のロール (Dynatrace_ActiveGate_role)>",
          "arn:aws:iam::509560245411:root"
        ]
      },
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "<Step 1で取得した外部ID>"
        }
      }
    }
  ]
}
```
</div></details>

更新が完了したら、`ポリシーを更新`をクリックします。

### Step 5. ActiveGateへロールの適用

AWSコンソールからEC2を開き、ActiveGateのインスタンスを選択します。
`アクション > セキュリティ > IAMロールを変更`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/9903c17a-3ac8-56e6-86e7-0c362c116bdd.png)

Step 3で作成したActiveGate用ロールを選択して、`保存`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/f51b3fa4-07e1-8f82-7faa-400e6bdc97f9.png)

## Dynatraceとの接続

`Connection name`にどのような任意の名前（どのようなアカウントなのかわかりやすいもの）を入力し、`IAM role that Dynatrace should use to get monitoring data`に作成した監視用ロール名を、`Your Amazon account ID`に監視対象のAWSアカウントIDを入力します。最後に`接続`ボタンをクリックすることでAWSに接続し、監視が始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/5ba9e2b5-7fb4-de5e-9fe3-33fa8abbf831.png)

以上の操作で、AWSの主要な機能に関する監視が行われます。

# オプション設定

## リソースタギング

[以前の記事](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)

# まとめ

今回はActiveGateを利用したDynatraceによるAWSの監視の設定方法について紹介しました。ActiveGateを利用することで監視の幅が広がりますので、ぜひご活用いただければ幸いです。
また、AWSの監視についてはEC2インスタンスにOneAgentをインストールすることで、自動でAWSのタグをホスト情報に紐付けてくれたりするので、AWS上でアプリケーションを展開しているのであればぜひ導入を検討してみてください。