AWS

AWS

Crawler Crawler

概要

Amazon Web Services (AWS) を接続すると、次のことができるようになります。

  • AWS ステータスの自動更新をストリームに表示する
  • Agent をインストールすることなく、EC2 ホストの CloudWatch メトリクスを取得する
  • EC2 ホストを EC2 固有の情報にタグ付けする (アベイラビリティー ゾーンなど)
  • EC2 のスケジュール設定されたメンテナンス イベントをストリームに表示する
  • その他のさまざまな AWS 製品から CloudWatch メトリクスとイベントを収集する
Datadog の Amazon インテグレーションは、CloudWatch からすべてのメトリクス を収集するように構築されています。Datadog では継続的にドキュメントを更新してすべてのサブインテグレーションを表示できるように努めていますが、新しいメトリクスやサービスがクラウドサービスから次々にリリースされるため、インテグレーション一覧が追い付かないことがあります。
インテグレーション 説明
API Gateway API の作成、公開、管理、セキュリティ保護
Appstream AWS 上のフルマネージド型のアプリケーションストリーミング
AppSync リアルタイムのデータ同期機能とオフラインのプログラミング機能を備えた GraphQL サービス
Athena サーバーレスのインタラクティブなクエリサービス
Autoscaling EC2 容量のスケーリング
料金 請求と予算
CloudFront ローカルのコンテンツ配信ネットワーク
Cloudhsm マネージド型のハードウェアセキュリティモジュール (HSM)
CloudSearch ログファイルおよび AWS API 呼び出しへのアクセス
CloudTrail ログファイルおよび AWS API 呼び出しへのアクセス
CodeBuild フルマネージド型のビルドサービス
CodeDeploy コードデプロイの自動化
Cognito セキュリティ保護されたユーザーのサインアップとサインイン
Connect セルフサービス型のクラウドベースコンタクトセンターサービス
Direct Connect AWS への専用ネットワーク接続
DMS データベース移行サービス
DocumentDB MongoDB 互換データベース
Dynamo DB NoSQL データベース
EBS (Elastic Block Store) 永続的なブロックレベルのストレージボリューム
EC2 (Elastic Cloud Compute) クラウドのサイズ変更可能なコンピュート容量
EC2 スポット 未使用の EC2 容量の活用
ECS (Elastic Container Service) Docker コンテナをサポートするコンテナ管理サービス
EFS (Elastic File System) 共有ファイルストレージ
EKS Kubernetes 用の Elastic Container Service
Elastic Transcoder クラウドでのメディアおよびビデオコード変換
ElastiCache クラウドのインメモリキャッシュ
Elastic Beanstalk Web アプリケーションとサービスのデプロイとスケーリングを行うサービス
ELB (Elastic Load Balancing) 着信アプリケーショントラフィックを複数の Amazon EC2 インスタンス間で分散
EMR (Elastic Map Reduce) Hadoop を使用するデータ処理
ES (Elasticsearch) Elasticsearch クラスターのデプロイ、操作、スケーリング
Firehose ストリーミングデータの取得とロード
Gamelift 専用ゲームサーバーホスティング
Glue 分析のためのデータの抽出、変換、ロード
GuardDuty インテリジェントな脅威の検出
Health AWS のリソース、サービス、アカウントの状態の可視化
Inspector 自動化されたセキュリティ評価
IoT (モノのインターネット) クラウドサービスへの IOT デバイスの接続
Kinesis 大規模な分散データストリームをリアルタイムに処理するサービス
KMS (Key Management Service) 暗号キーの作成と制御
Lambda サーバーレスコンピューティング
Lex 会話ボットの構築
Machine Learning 機械学習モデルの作成
MediaConnect ライブビデオの転送
MediaConvert 放送およびマルチ画面配信のためのビデオ処理
MediaPackage インターネット配信のためのビデオの準備と保護
MediaTailor スケーラブルなサーバー側広告挿入
MQ ActiveMQ 向けのマネージド型メッセージブローカー
Managed Streaming for Kafka Apache Kafka を使用してストリーミングデータを処理するアプリケーションの構築と実行
NAT ゲートウェイ プライベートサブネット内のインスタンスをインターネットまたは他の AWS サービスに接続可能
Neptune クラウド向けに構築された高速・高信頼性のグラフデータベース
OpsWorks 構成管理
Polly テキスト読み上げサービス
RDS (Relational Database Service) クラウドのリレーショナルデータベース
Redshift データウェアハウスソリューション
Rekognition アプリケーション向けのイメージおよびビデオ分析
Route 53 DNS とトラフィック管理と可用性のモニタリング
S3 (Simple Storage Service) 高可用性・スケーラブルなクラウドストレージサービス
SageMaker 機械学習モデルおよびアルゴリズム
SES (Simple Email Service) 費用効率の高いアウトバウンド専用のメール送信サービス
SNS (Simple Notification System) アラートと通知
SQS (Simple Queue Service) メッセージキューサービス
Storage Gateway ハイブリッドクラウドストレージ
SWF (Simple Workflow Service) クラウドワークフロー管理
VPC (Virtual Private Cloud) 仮想ネットワーク内での AWS リソースの起動
Web Application Firewall (WAF) 一般的な Web エクスプロイトからの Web アプリケーションの保護
Workspaces セキュアなデスクトップコンピューティングサービス
X-Ray 分散アプリケーションのトレーシング

セットアップ

AWS のロール委任は、Datadog for Government site でサポートされていません。アクセスキーを使用する必要があります。

以下のいずれかの方法を使用して AWS アカウントを Datadog に統合し、メトリクス、トレース、ログを収集します。

必要となる AWS ロールのセットアップ方法を選択してください。CloudFormation を推奨します。

自動 - CloudFormation

  1. Datadog AWS インテグレーションタイル を開きます。Install ボタンをクリックし、このインテグレーションをインストールします。
  2. Configuration タブで Automatically Using CloudFormation を選択します。既に AWS アカウントがアタッチされている場合は、まず Add another account をクリックしてください。
  3. AWS コンソールにログインします。
  4. CloudFormation ページでスタックを新規作成し、Datadog API キーを入力します。
  5. Update the Datadog AWS インテグレーション タイルを、CloudFormation のスタック作成に使用した IAM ロール名とアカウント ID で更新します。

手動

AWS

  1. AWS IAM コンソールで新しいロールを作成します。
  2. ロールタイプで、Another AWS account を選択します。
  3. アカウント ID で、464622532012 (Datadog のアカウント ID) を入力します。これは、Datadog に AWS データへの読み取り専用アクセスを許可することを意味します。
  4. Require external ID を選択し、AWS インテグレーションタイルで生成された ID を入力します。Require MFA は無効のままにしておきます。外部 ID の詳細については、IAM ユーザーガイドのこのドキュメントを参照してください
  5. Next: Permissions をクリックします。
  6. 既にポリシーを作成してある場合は、このページで検索して選択し、ステップ 12 に進んでください。そうでない場合は、Create Policy をクリックします。新しいウィンドウが開きます。
  7. JSON タブを選択します。Datadog が提供する各 AWS インテグレーションを利用するには、テキストボックスの下にあるポリシー スニペットを使用します。これらのアクセス許可は、他のコンポーネントがインテグレーションに追加されると変更される場合があります。
  8. Review policy をクリックします。
  9. ポリシーに DatadogAWSIntegrationPolicy、または自分が選択した名前を付け、適切な説明を入力します。
  10. Create policy をクリックします。これで、このウィンドウを閉じることができます。
  11. “Create role” ウィンドウに戻り、ポリシーのリストを更新し、作成したポリシーを選択します。
  12. Next: Review をクリックします。
  13. ロールに DatadogAWSIntegrationRole などの名前を付け、適切な説明を入力します。Create Role をクリックします。

補足: Terraform を使用する場合は、Terraform との AWS インテグレーションを利用して Datadog IAM ポリシーをセットアップします。

Datadog

  1. AWS インテグレーション タイルを開きます。
  2. Role Delegation タブを選択して Manually を選択します。
  3. AWS アカウント ID をダッシュなしで入力します(例、123456789012)。アカウント ID は、AWS インテグレーションのインストール中に作成されるロールの ARN にあります。
  4. 作成されたロールの名前を入力します。注: インテグレーションタイルに入力する名前は大文字と小文字が区別され、AWS 側で作成されるロール名と完全に一致する必要があります。
  5. ダイアログの左側で、メトリクスを収集するサービスを選択します。
  6. オプションで、すべてのホストやメトリクスにタグを追加します。
  7. オプションで、to hosts with tag テキストボックスに AWS タグを入力して、EC2 インスタンスのサブセットを監視します。注: インスタンスに接続された EBS ボリュームにも適用されます。
  8. オプションで、to Lambdas with tag テキストボックスに AWS タグを入力して、Lambdas のサブセットを監視します。
  9. Install Integration をクリックします。

Datadog AWS IAM ポリシー

以下に記載されているアクセス許可はポリシー ドキュメントに含まれているもので、List*Get* などのワイルドカードを使用しています。厳密なポリシーが必要な場合は、記載されているとおりの完全なアクション名を使用し、必要なサービスの Amazon API ドキュメントを参照してください。

すべてのアクセス許可

すべてのアクセス許可を付与したくない場合は、既存ポリシーのうち少なくとも AmazonEC2ReadOnlyAccess および CloudWatchReadOnlyAccess を使用してください。アクセス許可の詳細については、主要なアクセス許可 セクションをご覧ください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "apigateway:GET",
                "autoscaling:Describe*",
                "budgets:ViewBudget",
                "cloudfront:GetDistributionConfig",
                "cloudfront:ListDistributions",
                "cloudtrail:DescribeTrails",
                "cloudtrail:GetTrailStatus",
                "cloudtrail:LookupEvents",
                "cloudwatch:Describe*",
                "cloudwatch:Get*",
                "cloudwatch:List*",
                "codedeploy:List*",
                "codedeploy:BatchGet*",
                "directconnect:Describe*",
                "dynamodb:List*",
                "dynamodb:Describe*",
                "ec2:Describe*",
                "ecs:Describe*",
                "ecs:List*",
                "elasticache:Describe*",
                "elasticache:List*",
                "elasticfilesystem:DescribeFileSystems",
                "elasticfilesystem:DescribeTags",
                "elasticfilesystem:DescribeAccessPoints",
                "elasticloadbalancing:Describe*",
                "elasticmapreduce:List*",
                "elasticmapreduce:Describe*",
                "es:ListTags",
                "es:ListDomainNames",
                "es:DescribeElasticsearchDomains",
                "health:DescribeEvents",
                "health:DescribeEventDetails",
                "health:DescribeAffectedEntities",
                "kinesis:List*",
                "kinesis:Describe*",
                "lambda:AddPermission",
                "lambda:GetPolicy",
                "lambda:List*",
                "lambda:RemovePermission",
                "logs:DeleteSubscriptionFilter",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:DescribeSubscriptionFilters",
                "logs:FilterLogEvents",
                "logs:PutSubscriptionFilter",
                "logs:TestMetricFilter",
                "rds:Describe*",
                "rds:List*",
                "redshift:DescribeClusters",
                "redshift:DescribeLoggingStatus",
                "route53:List*",
                "s3:GetBucketLogging",
                "s3:GetBucketLocation",
                "s3:GetBucketNotification",
                "s3:GetBucketTagging",
                "s3:ListAllMyBuckets",
                "s3:PutBucketNotification",
                "ses:Get*",
                "sns:List*",
                "sns:Publish",
                "sqs:ListQueues",
                "states:ListStateMachines",
                "states:DescribeStateMachine",
                "support:*",
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "xray:BatchGetTraces",
                "xray:GetTraceSummaries"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
主要なアクセス許可

コア Datadog AWS インテグレーションは、AWS CloudWatch からデータを取得します。少なくとも、ポリシー ドキュメントで次のアクションを許可する必要があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "cloudwatch:Get*",
                "cloudwatch:List*",
                "ec2:Describe*",
                "support:*",
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
AWS アクセス許可 説明
cloudwatch:ListMetrics 使用可能な CloudWatch メトリクスをリスト化します。
cloudwatch:GetMetricData 特定のメトリクスのデータ ポイントを取得します。
support:*: サービスの制限に関するメトリクスを追加します。
AWS の制限のためフル アクセスが必要です。
tag:getResources リソース タイプ別にカスタム タグを取得します。
tag:getTagKeys AWS アカウント内のリージョン別にタグ キーを取得します。
tag:getTagValues AWS アカウント内のリージョン別にタグ値を取得します。

Resource Group Tagging API の主な用途は、カスタムタグの収集に必要な API 呼び出しの数を減らすことです。詳細については、AWS Web サイトのタグ ポリシードキュメントを参照してください。

AWS

  1. AWS コンソールで、Datadog インテグレーションで使用される IAM ユーザーをセットアップします。
  2. Datadog インテグレーション IAM ユーザー用のアクセスキーとシークレットキーを生成します。

詳細は、AWS ドキュメントをご参照ください。

Datadog

  1. AWS インテグレーションタイルを開きます。Install ボタンをクリックし、このインテグレーションをインストールします。
  2. Access Keys (GovCloud or China Only) タブを選択します。
  3. AWS アクセスキーAWS シークレットキー を入力します。GovCloud および中国用のアクセスキーとシークレットキーのみが許可されます。
  4. ダイアログの左側で、メトリクスを収集するサービスを選択します。
  5. オプションで、すべてのホストやメトリクスにタグを追加します。
  6. オプションで、to hosts with tag テキストボックスに AWS タグを入力して、EC2 インスタンスのサブセットを監視します。注: インスタンスに接続された EBS ボリュームにも適用されます。
  7. オプションで、to Lambdas with tag テキストボックスに AWS タグを入力して、Lambdas のサブセットを監視します。
  8. Install Integration をクリックします。

ログの収集

AWSサービスログを Datadog に送信する方法はいくつかあります。

  • Kinesis Firehose destination: Kinesis Firehose 配信ストリームで Datadog の宛先を使用して、ログを Datadog に転送します。CloudWatch から非常に大量のログを送信するには、このアプローチを使用することをお勧めします。
  • Forwarder Lambda 関数: S3 バケットまたは CloudWatch ロググループにサブスクライブする Datadog Forwarder Lambda 関数をデプロイし、ログを Datadog に転送します。Lambda 関数からログを介して非同期でトレース、拡張カスタムメトリクス、またはカスタムメトリクスを送信するには、このアプローチを使用する必要があります。また、S3 またはデータを Kinesis に直接ストリーミングできないその他のリソースからログを送信する場合は、このアプローチを使用することをお勧めします。

収集データ

メトリクス

aws.logs.incoming_bytes
(gauge)
The volume of log events in uncompressed bytes uploaded to Cloudwatch Logs.
Shown as byte
aws.logs.incoming_log_events
(count)
The number of log events uploaded to Cloudwatch Logs.
Shown as event
aws.logs.forwarded_bytes
(gauge)
The volume of log events in compressed bytes forwarded to the subscription destination.
Shown as byte
aws.logs.forwarded_log_events
(count)
The number of log events forwarded to the subscription destination.
Shown as event
aws.logs.delivery_errors
(count)
The number of log events for which CloudWatch Logs received an error when forwarding data to the subscription destination.
Shown as event
aws.logs.delivery_throttling
(count)
The number of log events for which CloudWatch Logs was throttled when forwarding data to the subscription destination.
Shown as event
aws.events.invocations
(count)
Measures the number of times a target is invoked for a rule in response to an event. This includes successful and failed invocations but does not include throttled or retried attempts until they fail permanently.
aws.events.failed_invocations
(count)
Measures the number of invocations that failed permanently. This does not include invocations that are retried or that succeeded after a retry attempt
aws.events.triggered_rules
(count)
Measures the number of triggered rules that matched with any event.
aws.events.matched_events
(count)
Measures the number of events that matched with any rule.
aws.events.throttled_rules
(count)
Measures the number of triggered rules that are being throttled.
aws.usage.call_count
(count)
The number of specified operations performed in your account
Shown as operation
aws.usage.resource_count
(count)
The number of specified resources in your account
Shown as resource

イベント

AWS のイベントは、AWS サービス ベースごとに収集されます。収集されるイベントの詳細については、各 AWS サービスの文書を参照してください。

タグ

AWS インテグレーションから以下のタグが収集されます。: 一部のタグは、特定のメトリクスにのみ表示されます。

インテグレーション Datadog タグキー
すべて region
API Gateway apiid、apinamemethodresourcestage`
Auto Scaling autoscalinggroupnameautoscaling_group
料金 account_idbudget_namebudget_typecurrencyservicenametime_unit
CloudFront distributionid
CodeBuild project_name
CodeDeploy applicationcreatordeployment_configdeployment_groupdeployment_optiondeployment_typestatus
DirectConnect connectionid
DynamoDB globalsecondaryindexnameoperationstreamlabeltablename
EBS volumeidvolume-namevolume-type
EC2 autoscaling_groupavailability-zoneimageinstance-idinstance-typekernelnamesecurity_group_name
ECS clusternameservicenameinstance_id
EFS filesystemid
[ElastiCache][] cachenodeidcache_node_typecacheclusteridcluster_nameengineengine_versionprefered_availability-zonereplication_group
ElasticBeanstalk environmentnameenviromentid
ELB availability-zonehostnameloadbalancernamenametargetgroup
EMR cluster_namejobflowid
ES dedicated_master_enabledebs_enabledelasticsearch_versioninstance_typezone_awareness_enabled
Firehose deliverystreamname
Health event_categorystatusservice
IoT actiontypeprotocolrulename
Kinesis streamnamenamestate
KMS keyid
Lambda functionnameresourceexecutedversionmemorysizeruntime
Machine Learning mlmodelidrequestmode
MQ brokerqueuetopic
OpsWorks stackidlayeridinstanceid
Polly operation
RDS auto_minor_version_upgradedbinstanceclassdbclusteridentifierdbinstanceidentifierdbnameengineengineversionhostnamenamepublicly_accessiblesecondary_availability-zone
Redshift clusteridentifierlatencynodeidservice_classstagewlmid
Route 53 healthcheckid
S3 bucketnamefilteridstoragetype
SES タグキーは AWS でカスタム設定されます。
SNS topicname
SQS queuename
VPC nategatewayidvpnidtunnelipaddress
WorkSpaces directoryidworkspaceid

トラブルシューティング

CloudWatch と Datadog でデータの不一致があるように見える

以下の 2 つの重要な区別に注意する必要があります。

  1. AWS のカウンターで「sum」に設定されているグラフでは、「1minute」に示される値は、その時点までの 1 分間の発生数の合計、つまり 1 分あたりのレートです。Datadog は、AWS で選択された時間フレームに関係なく 1 秒の値あたりに正規化された AWS の未加工データを表示します。そのため、Datadog で示される値が小さく感じられることがあります。
  2. 全体を通じて、AWS での最小/最大/平均は、Datadog とは異なる意味を持ちます。AWS では、平均レイテンシー、最小レイテンシー、最大レイテンシーは、AWS が収集する 3 つの独自のメトリクスです。Datadog が AWS CloudWatch からメトリクスを取得するとき、平均レイテンシーは ELB ごとに 1 つの時系列として受信されます。Datadog 内で「min」、「max」、「avg」を選択している場合は、複数の時系列の組み合わせ方法を制御していることになります。たとえば、フィルターなしで system.cpu.idle をリクエストすると、そのメトリクスを報告する系列がホストごとに 1 つずつ返され、それらの系列を結合してグラフ化する必要があります。一方、1 つのホストから system.cpu.idle をリクエストした場合、集計は不要で、平均と最大を切り替えても結果は同じです。

メトリクスの遅延

AWS インテグレーションを使用している場合、Datadog は CloudWatch API からメトリクスを取得します。API に関していくつかの制約が存在するため、AWS のメトリクスにわずかな遅延が見られる場合があります。

そもそも、CloudWatch API で提供されるのは、データを取得するためのメトリクス別のクロールだけです。CloudWatch API にはレート制限があり、認証証明書、リージョン、サービスの組み合わせに基づいて変化します。アカウント レベルにより、AWS で使用できるメトリクスは異なります。たとえば、AWS 上で詳細なメトリクスに対して支払いを行うと、短時間で入手できるようになります。この詳細なメトリクスのサービスのレベルは粒度にも適用され、一部のメトリクスは 1 分ごと、それ以外は 5 分ごとに使用可能になります。

Datadog には、状況に応じてアカウント内の特定のメトリクスに優先順位をつけ、すばやく取り込む機能があります。詳細は、Datadog サポートまでお問い合わせください。

遅延をほぼゼロでメトリクスを取得するには、ホストに Datadog Agent をインストールします。詳細については、Datadog のブログ投稿「Don’t fear the Agent: Agent-based monitoring(Agent は難しくない: Agent ベースの監視)」を参照してください。

メトリクスがない

CloudWatch の API は、データポイントとメトリクスのみを返します。そのため、たとえば、ELB に接続されているインスタンスがない場合は、Datadog でこの ELB に関連するメトリクスは表示されないことが予想されます。

aws.elb.healthy_host_count のカウントに誤りがある

ELB でクロスゾーン負荷分散オプションを有効にすると、この ELB に接続されているすべてのインスタンスは、すべてのアベイラビリティー ゾーンの一部であると見なされます (CloudWatch 側)。そのため、1a に 2 個、ab に 3 個のインスタンスがある場合、メトリクスはアベイラビリティー ゾーンごとに 5 つのインスタンスが表示されます。 このカウンターは直感的でないので、新しいメトリクス aws.elb.healthy_host_count_dedupedaws.elb.un_healthy_host_count_deduped を追加しています。これは、このクロスゾーン負荷分散オプションが有効かどうかに関係なく、アベイラビリティー ゾーンごとに正常または正常でないインスタンスのカウントを表示します。

Agent のインストール時にホストが重複する

AWS ホストに Agent をインストールし、Agent の構成でホスト名を手動で設定した場合、インフラ ページにホストが数時間、重複して表示されることがあります。この 2 番目のホストは数時間で消え、請求には影響しません。