datadog_integration pattern¶
概要¶
datadog_integration pattern
モジュールでは、監視およびモニタリングに関するSaaSであるDatadogとAWSのインテグレーションを実現します。
このpatternを使用すると、DatadogとAWSのインテグレーションが行われ、Amazon CloudWatchのメトリクスの取得やプリセットされたダッシュボードを利用できます。
この後、Datadogを利用してのサービス固有のダッシュボードの作成、監視設定の基礎となるpatternです。
想定する適用対象環境¶
datadog_integration pattern
は、Runtime環境で使用することを想定しています。
依存するpattern¶
datadog_integration pattern
は、他のpatternの実行結果に依存しません。独立して実行できます。
Datadog自体の利用手続きは、利用者自身で行っていることが前提となります。
datadog_integration pattern
は、Datadog利用手続きに関する機能は提供しません。
構築されるリソース¶
このpatternでは、以下のリソースが構築されます。
リソース名 | 説明 |
---|---|
AWS IAM | Datadogへ必要なアクセス許可を与えるための、IAMロールを構築します |
AWS Integration | DatadogとAWSのインテグレーションを行います |
モジュールの理解に向けて¶
TerraformでのDatadogの利用¶
Datadogは、Terraformから操作可能です。Datadog自身が、TerraformのProviderを提供しています。
以下のようなTerraformの定義を記述することで、Datadog Providerを利用可能です。
terraform {
...
required_providers {
...
aws = {
source = "hashicorp/aws"
version = "[AWS Providerのバージョン]"
}
datadog = {
source = "DataDog/datadog"
version = "[Datadog Providerのバージョン]"
}
...
}
...
}
provider "datadog" {
}
Datadog ProviderはDatadogのAPIを使用するため、APIキーおよびアプリケーションキーが必要です。
以下のドキュメントを参照して、APIキーおよびアプリケーションキーを取得してください。
取得したAPIキーおよびアプリケーションキーは、Terraformを実行する際に、環境変数として設定してください。Datadogのクレデンシャル情報となりますので、Terraformの定義ファイル等へのハードコードは避けてください。
Linuxの場合¶
$ export DD_API_KEY=[DatadogのAPIキー]
$ export DD_APP_KEY=[Datadogのアプリケーションキー]
Windowsの場合¶
> set DD_API_KEY=[DatadogのAPIキー]
> set DD_APP_KEY=[Datadogのアプリケーションキー]
AWSインテグレーション時のモニタリング対象の制御¶
Datadogでは本patternの適用で実行されるAWSインテグレーションにより、デフォルトではすべてのEC2インスタンスがモニタリング対象となり、 課金が発生します。
一方で、コストを抑制するためにモニタリングする対象を限定したい1という要望が発生し得ます。 この目的のため、Datadogではモニタリングの対象を除外する仕組みがあります。
EC2に特定のタグを付与することで、モニタリング対象にする・しないを制御できます。
どのようなタグで制御するかについては、本patternの引数filter_tags
で定義できます。
記述方法については、以下のDatadogのマニュアルをご参照ください。
例えば、本ページ下部のサンプルコードにあるように以下の設定をすると、datadog:monitored
というタグを付与されたEC2のみがモニタリング対象となります。
filter_tags = ["datadog:monitored"]
filter_tags
で指定した内容は、DatadogのAWS Integrationページ内で反映されたことを確認できます。
上記ページの、Optionally limit resource collection
のto hosts with tag
を参照してください。
IAMロールとDatadogのAWS Integration¶
datadog_integration pattern
では、Terraformを使用したAWS Integrationのドキュメントに従い、IAMロールを作成します。
The AWS Integration with Terraform
これは、以下のページ内の「手動」セットアップの手順に相当します。
このIAMリソースを作成する際に、Datadogと連携するためのExternal IDが必要となります。これは、Datadogのページから取得できます。
datadog_integration pattern
ではExternal IDはdatadog_integration_aws
リソースにて作成するため、通常、意識することはありません。
ただし、AWS IntegrationにおけるDatadogとの連携条件のひとつとなるため、存在については押さえておいてください。
また、本patternを使用したAWS Integrationがうまくいかない場合にも、使用することになります。
AWS用にプリセットされたダッシュボード¶
DatadogによるAWS Integrationが成功すると、ダッシュボードリスト2にプリセットされているダッシュボードが表示されます。
プリセットされたダッシュボードには、Amazon ECSやAmazon RDSなどAWSのリソースに対するメトリクスが表示されるように設定されています。
これらのダッシュボードは、モニタリングの第一歩としては非常に有用です。
ただ、実際のダッシュボードを見ていると、タイムラグがあるように感じられるでしょう。
DatadogはAmazon CloudWatchよりメトリクスを取得しますが、これには実行間隔があります。詳細は、以下のドキュメントを参照してください。
AWS Integrationの解除¶
DatadogとAWSとのIntegrationを解除する場合、本patternのインスタンスに対して、terraform destroy
を行います。
Datadog上では、本patternで関連付けられたAWSアカウントとの紐付けが削除されます。
create_iam_role_only
をtrue
にしている場合は、Datadog上でAWSアカウントの削除が必要です。
AWS Integrationに失敗する場合¶
datadog_integration pattern
を実行しても、AWS Integrationに失敗することがあります。
AWS Integratoinに失敗している場合、Datadog上のAWS Integrationのページ2を開くと次のように権限不足でBROKEN
と表示されます。
うまくいかない場合、datadog_integration pattern
の実行後にUpdate Configuration
ボタンを押して設定を更新してください。
Update Configuration
ボタンは、Datadog上のAWS Integrationのページの下部にあります
やや時間がかかりますが、プリセットされたダッシュボードにメトリクスが表示されるようになります。
それでもうまく行かない場合は、create_iam_role_only
をtrue
とすることで、作成するリソースをIAMロールのみにとどめ、インテグレーション自体はDatadog側で行います。
datadog_integration pattern
モジュールには、以下のように設定します。
create_iam_role_only = true
aws_integration_external_id = "[External ID]"
External IDは、Datadog上のAWS Integrationのページにて取得できます。
サンプルコード¶
datadog_integration pattern
を使用したサンプルコードを、以下に記載します。
module "datadog_integration" {
source = "git::https://gitlab.com/eponas/epona.git//modules/aws/patterns/datadog_integration?ref=v0.2.6"
integrate_aws_account_id = "232105380006"
tags = {
# 任意のタグ
Environment = "runtime"
RuntimeEnvironment = "production"
ManagedBy = "epona"
}
filter_tags = ["datadog:monitored"]
}
関連するpattern¶
datadog_integration pattern
の結果を利用するpatternはありません。
AWSとのインテグレーション後、Datadogに送信されてくるメトリクスを元にダッシュボードやアラートを設定してください。
入出力リファレンス¶
Requirements¶
Name | Version |
---|---|
terraform | ~> 0.14.10 |
datadog | >= 2.25.0, < 3.0.0 |
Inputs¶
Name | Description | Type | Default | Required |
---|---|---|---|---|
integrate_aws_account_id | Datadogと紐付けるAWSアカウントID | string |
n/a | yes |
account_specific_namespace_rules | このアカウント内の特定の名前空間に対して、メトリクス収集の有効、無効を設定する | map(bool) |
null |
no |
allow_actions | Datadogに実行許可するアクションを、リストで指定する。 どのようなアクションが指定可能かは、DatadogのAWSインテグレーションを参照すること。 デフォルトでは、[DatadogのAWSインテグレーション]に記載されているすべてのアクセスを権限を許可している。 |
list(string) |
[ |
no |
aws_integration_external_id | create_iam_role_only をfalse とした場合、必須。DatadogのAWS Integrationページより、External IDを取得して設定する |
string |
null |
no |
create_iam_role_only | IAMロールの作成までにとどめ、DatadogとAWSのインテグレーションまでは行わない場合、true を指定する |
bool |
false |
no |
excluded_regions | メトリクス収集から除外するリージョンを指定する | list(string) |
null |
no |
filter_tags | メトリクスの収集対象とのあるEC2を制御するためのタグを指定する。指定しない場合は、integrate_aws_account_id で指定するAWSアカウント配下の全EC2が収集対象となる。指定方法についてはタグの使用方法を参照 |
list(string) |
null |
no |
host_tags | このインテグレーションによりレポートされる、すべてのホストとメトリクスに追加するタグを指定する | list(string) |
null |
no |
integration_policy_name | Datadog連携のために作成するポリシーの名前 | string |
"DatadogAWSIntegrationPolicy" |
no |
integration_role_name | Datadog連携のために作成するIAMロール名 | string |
"DatadogAWSIntegrationRole" |
no |
tags | Datadogと連携するIAMロール関連のリソースに、共通的に付与するタグ | map(string) |
{} |
no |
Outputs¶
Name | Description |
---|---|
datadog_aws_integration_external_id | AWS Integrationを行ったExternal ID |
※ このドキュメントはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。
※ このドキュメントに記載されている会社名、製品名は、各社の登録商標または商標です。
© 2021 TIS Inc.