AWS
Dash が新機能を発表!インシデントマネジメント、Continuous Profiler など多数の機能が追加されました! Dash イベントで発表された新機能!

AWS

Crawler Crawler

概要

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

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

セットアップ

Amazon Web Services との Datadog インテグレーションをセットアップするには、AWS IAM を使用してロールの委任を設定する必要があります。ロールの委任について、詳しくは AWS IAM ベストプラクティス ガイドを参照してください。

ロールの委任

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

  1. Datadog AWS インテグレーション タイルを開きます。
  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 インスタンスのサブセットを監視します。
  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",
                "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:TestMetricFilter",
                "logs:PutSubscriptionFilter",
                "logs:DeleteSubscriptionFilter",
                "logs:DescribeSubscriptionFilters",
                "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:getTagKeysAWS アカウント内のリージョン別にタグ キーを取得します。
tag:getTagValuesAWS アカウント内のリージョン別にタグ値を取得します。

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

GovCloud と China

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

ログの収集

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

  • Kinesis Firehose destination: Kinesis Firehose 配信ストリームで Datadog の宛先を使用して、ログを Datadog に転送します
  • Cloudformation: S3 バケットまたは CloudWatch ロググループにサブスクライブする Datadog Lambda 関数をデプロイし、ログを Datadog に転送します

ログを複数の宛先に送信する場合、Kinesis Firehose 宛先の利用を強くお勧めします。CloudWatch Log グループは 1 つのサブスクライバーしか持てませんが、Kinesis ストリームは複数のサブスクライバーを持つことができます。Kinesis ストリームをロググループにサブスクライブさせることで、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 Gatewayapiid、apinamemethodresourcestage`
Auto Scalingautoscalinggroupnameautoscaling_group
料金account_idbudget_namebudget_typecurrencyservicenametime_unit
CloudFrontdistributionid
CodeBuildproject_name
CodeDeployapplicationcreatordeployment_configdeployment_groupdeployment_optiondeployment_typestatus
DirectConnectconnectionid
DynamoDBglobalsecondaryindexnameoperationstreamlabeltablename
EBSvolumeidvolume-namevolume-type
EC2autoscaling_groupavailability-zoneimageinstance-idinstance-typekernelnamesecurity_group_name
ECSclusternameservicenameinstance_id
EFSfilesystemid
[ElastiCache][]cachenodeidcache_node_typecacheclusteridcluster_nameengineengine_versionprefered_availability-zonereplication_group
ElasticBeanstalkenvironmentnameenviromentid
ELBavailability-zonehostnameloadbalancernamenametargetgroup
EMRcluster_namejobflowid
ESdedicated_master_enabledebs_enabledelasticsearch_versioninstance_typezone_awareness_enabled
Firehosedeliverystreamname
Healthevent_categorystatusservice
IoTactiontypeprotocolrulename
Kinesisstreamnamenamestate
KMSkeyid
Lambdafunctionnameresourceexecutedversionmemorysizeruntime
Machine Learningmlmodelidrequestmode
MQbrokerqueuetopic
OpsWorksstackidlayeridinstanceid
Pollyoperation
RDSauto_minor_version_upgradedbinstanceclassdbclusteridentifierdbinstanceidentifierdbnameengineengineversionhostnamenamepublicly_accessiblesecondary_availability-zone
Redshiftclusteridentifierlatencynodeidservice_classstagewlmid
Route 53healthcheckid
S3bucketnamefilteridstoragetype
SESタグキーは AWS でカスタム設定されます。
SNStopicname
SQSqueuename
VPCnategatewayidvpnidtunnelipaddress
WorkSpacesdirectoryidworkspaceid

トラブルシューティング

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 のブログ投稿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 番目のホストは数時間で消え、請求には影響しません。