DynatraceによるAWSの監視の始め方


# はじめに

Dynatraceと言えばアプリケーションモニタリング管理ツールとして有名ですが、AWSなどのクラウドインフラを監視することも簡単に行うことができます。
完全に自動化されたAIがAWSにおけるクラウドインフラ環境を完全に可視化することが可能です。
絶えず変化・更新されるクラウドインフラ環境においてDynatraceは自動でその更新に追従します。またOneAgentというエージェントをEC2などのホスト上に展開することでAIエンジンは問題点を見つけるだけでなくその解決策までも提供してくれます。
これらの機能により、従来の運用監視に割かれていたリソースをより生産的な仕事に割り振ることが可能となりビジネスの拡大に繋げることが可能となります。

本記事では、DynatraceによるAWSの監視方法について紹介していきたいと思います。

**15日間の無料トライアル**を利用することができるので、自分の環境でも簡単に試してみることができます。
[Dynatraceフリートライアル](https://www.dynatrace.com/ja/trial/)

# Dynatraceで監視可能なAWSリソース

DynatraceとAWSが連携することによるメリットについては以下の公式サイトに詳しく書かれているのでそちらに譲りたいと思います。

[AWS監視｜Dynatrace](https://www.dynatrace.com/ja/technologies/aws-monitoring/)

DynatraceではEC2インスタンスだけでなくAmazon ECS、AWS Lambda、AWS Fargate、Amazon EKSをはじめとした多くのサービスを監視することが可能です。
サポートしているサービスについては以下のサイトから確認することが可能です。

[AWS supporting services](https://www.dynatrace.com/support/help/technology-support/cloud-platforms/amazon-web-services/supporting-services/)

# 設定の流れ

大まかな流れは以下のようになります。

1. AWS監視用ポリシーの作成
1. アクセス方法の選定
    1. アクセスキーによるアクセス
    1. ロールベースによるアクセス
1. タグを用いた監視リソースの設定（オプション）

監視のための操作は基本的にはAWSのコンソールが中心であり、Dynatrace側で必要な設定は多くありません。

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

マネジメントコンソールから`IAM`のページを開きます。
ポリシーのページに行き、`ポリシーの作成`をクリックします。
JSONタブを選び、以下のjsonポリシーを貼り付けます。

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

```json
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": [
				"apigateway:GET",
				"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/ab042555-cfcf-8008-0b7d-eb69683e31aa.png)

## アクセス方法の選定

Dynatraceの環境からAWSへアクセスする方法については以下の２つがあります。

1. Dynatrace用のアクセスキーを利用したアクセス（キーベースアクセス）
1. Dynatrace用のロールを利用したアクセス（ロールベースアクセス）

本記事では、ロールベースアクセスによるアクセス方法について試したいと思います。

すでにDynatrace を利用していて、AWS EC2にActiveGateを展開している方もいらっしゃるかもしれませんが、今回はActiveGateがないという前提で進めたいと思います。

## 外部IDの取得

DynatraceのAWSアカウントにロールを付与するため、外部IDを取得します。

DynatraceのGUIにログインをし、左側ナビゲーションパネルの一番下にある`Settings`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/98b96eff-baa8-e27f-4b9d-d471f73fbc1a.png)

Settingsメニューが表示されるので`Cloud and virtualization`を選び、`AWS`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/767cae04-eee5-9013-8894-5a36136bb823.png)

`Connect new instance`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/74b77497-c0be-d001-086f-38f478fb9553.png)

Authentication methodを`Role-based authentication`に変更し、Tokenの横の`Copy`をクリックします。
`show`をクリックすることで実際の値を確認することも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/4ae4ccfb-36a4-c969-fb4d-2f013239e62c.png)

この画面は後ほど戻ってきますので、このままにしておきます。

## ロールの作成

再び「IAM」のページを開きます。
ロールのページに行き、「ロールの作成」をクリックします。
「別のAWSアカウント」を選択し、アカウントIDにはDynatraceのアカウントID（`509560245411`）を入力し、`外部IDが必要`にチェックを入れ
Dynatraceの画面でCopyした外部IDを貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/a9f466e4-e033-46d8-131d-de52f7d1e5bc.png)

先ほど作成ポリシーをロールにアタッチします。タグについては任意で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/d7c7289f-5dbd-5739-26fe-d61602f3e7af.png)

ロール名にはわかりやすい名称（`Dynatrace_monitoring_role`など）を設定します。
`ロールの作成`をクリックし、ロールを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/0f3c1b26-4496-cef2-2105-d24fcb7db766.png)

## タグの追加

DynatraceではAWSリソースの全てを監視することも可能ですが、監視対象を本番環境だけにしたいことがあると思います。その場合はリソースに任意のタグ（`dynatrace_monitoring`など）を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/75dbedd2-9142-a6c8-d5af-70d779dedcf0.png)

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

Dynatraceの画面に戻ります。
`Connection name`にわかりやすい名前を付けます。
`IAM role that Dynatrace should use to get monitoring data`に先ほどAWSで作成したロールを指定します。
`Your Amazon account ID`にはアクセスしたいAWSアカウントIDを指定します。
`Resources to be monitored`には全てを指定するか特定のタグが付いているリソースのみを対象にするか選ぶことができます。
`Monitor resources selected by tags`を選んだ場合は、リソースに指定したタグのKeyとValueを指定します。
全て設定が完了したら`Connect`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/cabe83c5-06a0-04ae-169a-a69397df72b4.png)

問題なく接続ができたら左側のナビゲーションパネルから`Monitor` `AWS`を選択することで先ほど登録したものが表示されるはずです。
さらに表示されたタイルをクリックすることで詳細情報が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65441/60dea65f-2255-04de-5d55-c0b560bcd96f.png)

**お疲れ様でした。これでDynatraceによるAWSの監視が可能になりました！**

# まとめ
今回はDynatraceによるAWSの監視の始め方について紹介しました。
複雑な操作なしに非常に簡単に監視を始めることができるのがお判りいただけたかと思います。
次回はさらに個別のリソースに対してDynatraceではどのような情報を確認することができるかなどを紹介したいと思います。

# 最後に
Dynatraceは5月11日（火）、12日（水）に行われるAWS Summit Onlineに**[グローバルスポンサー](https://aws.amazon.com/jp/events/summits/online/japan/partner-solutions/)**として参加いたします。
バーチャルブースでは、可観測性、自動化、AIに関するホワイトペーパー、デモ動画などをご覧いただくことができます。

* AWSクラウドの運用とトラブル対応の効率化
* お客様導入事例
* AIOpsの正しい活用法
* AWSクラウド移行のためのソフトウェアインテリジェンス

## ぜひ[AWS Summit Online Dynatrace Virtual Booth](https://summits-japan.virtual.awsevents.com/channel/Dynatrace/207821573) までお越しください。