Amazon Elastic Beanstalk
Datadog の調査レポート: サーバーレスの状態 レポート: サーバーレスの状態

Amazon Elastic Beanstalk

Crawler クローラー

概要

AWS Elastic Beanstalk は、Apache、Nginx、Passenger、IIS などの使い慣れたサーバーで、Java、.NET、PHP、Node.js、Python、Ruby、Go、および Docker を使用して開発された Web アプリケーションやサービスをデプロイおよびスケーリングするための使いやすいサービスです。

セットアップ

インストール

必要に応じて、まず Amazon Web Services インテグレーションをセットアップします。Elastic Beanstalk メトリクスを受信するには、ご使用の環境で拡張ヘルスレポート機能を有効にし、拡張ヘルスメトリクスを CloudWatch に公開するように環境を構成する必要があります。

: これらの設定により、CloudWatch カスタムメトリクス料金が加算されます。

Datadog Container Agent の構成

Elastic Beanstalk 環境で Docker コンテナを使用する場合は、コンテナ化された Datadog Agent を使用して Docker 使用量を監視します。以下の手順に従って、Datadog Agent コンテナを統合するように環境を構成します。

タスク定義

インスタンスごとに複数のコンテナを含む Docker 環境を実行するために、Elastic Beanstalk は Amazon EC2 Container Service (ECS) に依存します。 そのため、ECS 方式でデプロイするコンテナを記述する必要があります。Elastic Beanstalk では、Dockerrun.aws.json という名前のファイルを使用してこれを構成します。

Dockerrun.aws.json ファイルは Elastic Beanstalk 固有の JSON ファイルで、Docker コンテナセットを Elastic Beanstalk アプリケーションとしてデプロイする方法を記述します。このファイルをマルチコンテナ Docker 環境に使用できます。Dockerrun.aws.json は、環境内の各コンテナインスタンスにデプロイされるコンテナと、マウントするコンテナのホストインスタンス上に作成されるデータボリュームを記述します。

Dockerrun.aws.json ファイルは、単独で使用することも、他のソースコードと共にアーカイブに圧縮して使用することもできます。Dockerrun.aws.json と共にアーカイブされるソースコードは、コンテナインスタンスにデプロイされ、/var/app/current/ ディレクトリでアクセスできます。構成の volumes セクションを使用して、インスタンスで実行されるコンテナのマウントポイントを提供します。また、埋め込みコンテナ定義の mountPoints セクションを使用して、コンテナからマウントポイントをマウントします。

以下のコードサンプルは、Datadog Agent を宣言する Dockerrun.aws.json を示しています。containerDefinitions セクションを、ご使用の Datadog API キー、タグ (オプション)、および追加のコンテナ定義で更新してください。Datadog EU サイトを使用している場合は、DD_SITEdatadoghq.eu に設定します。必要に応じて、このファイルを上述の追加コンテンツと共に圧縮できます。このファイルの構文の詳細については、Beanstalk のドキュメントを参照してください。

注:

  • 多くのリソースを使用する場合は、メモリの上限を上げる必要があります。
  • すべてのホストが同じ Agent バージョンを実行するようにするには、agent:7Docker イメージの特定のマイナーバージョンに変更することをお勧めします。

    {
    "AWSEBDockerrunVersion": 2,
    "volumes": [
        {
            "name": "docker_sock",
            "host": {
                "sourcePath": "/var/run/docker.sock"
            }
        },
        {
            "name": "proc",
            "host": {
                "sourcePath": "/proc/"
            }
        },
        {
            "name": "cgroup",
            "host": {
                "sourcePath": "/cgroup/"
            }
        }
    ],
    "containerDefinitions": [
        {
            "name": "dd-agent",
            "image": "datadog/agent:7",
            "environment": [
                {
                    "name": "DD_API_KEY",
                    "value": "<DD_API_キー>"
                },
                {
                    "name": "DD_SITE",
                    "value": "datadoghq.com"
                },
                {
                    "name": "DD_TAGS",
                    "value": "<シンプルタグ>, <キー:値タグ>"
                }
            ],
            "memory": 256,
            "mountPoints": [
                {
                    "sourceVolume": "docker_sock",
                    "containerPath": "/var/run/docker.sock",
                    "readOnly": false
                },
                {
                    "sourceVolume": "proc",
                    "containerPath": "/host/proc",
                    "readOnly": true
                },
                {
                    "sourceVolume": "cgroup",
                    "containerPath": "/host/sys/fs/cgroup",
                    "readOnly": true
                }
            ]
        }
    ]
    }

環境の作成

コンテナ定義が完了したら、それを Elastic Beanstalk に送信します。具体的な手順については、AWS Elastic Beanstalk ドキュメント内の マルチコンテナ Docker 環境を参照してください。

DogStatsD

マルチコンテナ Docker 環境で DogStatsD を使用してアプリケーションコンテナからカスタムメトリクスを収集するには、Dockerrun.aws.json に以下の追加を行います。

  1. dd-agent コンテナの下に環境変数 DD_DOGSTATSD_NON_LOCAL_TRAFFIC を追加します。

    {
      "name": "DD_DOGSTATSD_NON_LOCAL_TRAFFIC",
      "value": "true"
    }
  2. アプリケーションコンテナの下に dd-agent コンテナへのリンクを追加します。

    "links": [ "dd-agent:dd-agent"]

詳細については、DogStatsD と Docker を参照してください。

代替 Datadog Agent 構成

以下の手順に従い、構成ファイル (.ebextensions) による高度な環境のカスタマイズを使用して、Datadog Agent を Elastic Beanstalk にインストールします。

  1. アプリケーションソースバンドルのルートに .ebextensions という名前のフォルダーを作成します。
  2. 99datadog.config.ebextensions にダウンロードします。
  3. 99datadog.configoption_settings 内の DD_API_KEY の値を Datadog API キーに変更します。
  4. すべてのホストが同じバージョンの Agent を実行するように、option_settings の下に DD_AGENT_VERSION を設定して特定の Agent バージョンを固定することをお勧めします。
  5. Elastic Beanstalk コンソールEB CLI、または AWS CLI でアプリケーションをデプロイします。

追加の設定

99datadog.config"/configure_datadog_yaml.sh" セクションを更新することで、datadog.yaml にさらに設定を追加します。以下のラインで Datadog Process Agent が有効になります。

echo -e "process_config:\n  enabled: \"true\"\n" >> /etc/datadog-agent/datadog.yaml

収集データ

メトリクス

aws.elasticbeanstalk.application_latency_p_1_0
(gauge)
The average time to complete the fastest 10 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_5_0
(gauge)
The average time to complete the fastest 50 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_7_5
(gauge)
The average time to complete the fastest 75 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_8_5
(gauge)
The average time to complete the fastest 85 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_0
(gauge)
The average time to complete the fastest 90 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_5
(gauge)
The average time to complete the fastest 95 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_9
(gauge)
The average time to complete the fastest 99 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_9_9
(gauge)
The average time to complete the fastest 99.9 percent of requests.
Shown as second
aws.elasticbeanstalk.application_requests_2xx
(count)
The number of requests that completed with a 2XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_3xx
(count)
The number of requests that completed with a 3XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_4xx
(count)
The number of requests that completed with a 4XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_5xx
(count)
The number of requests that completed with a 5XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_total
(count)
The number of requests completed by the instance or environment.
Shown as request
aws.elasticbeanstalk.cpuidle
(gauge)
[Instance] The percentage of time the CPU was in the idle state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpuiowait
(gauge)
[Instance] The percentage of time the CPU was in the iowait state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpuirq
(gauge)
[Instance] The percentage of time the CPU was in the interrupt request state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpunice
(gauge)
[Instance] The percentage of time the CPU was in the nice state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpusoftirq
(gauge)
[Instance] The percentage of time the CPU was in the soft interrupt request state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpusystem
(gauge)
[Instance] The percentage of time the CPU was in the system state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpuuser
(gauge)
[Instance] The percentage of time the CPU was in the user state in the last minute.
Shown as percent
aws.elasticbeanstalk.environment_health
(gauge)
[Environment] The health status of the environment. The possible values are 0 (OK) 1 (Info) 5 (Unknown) 10 (No data) 15 (Warning) 20 (Degraded) and 25 (Severe).
aws.elasticbeanstalk.instance_health
(gauge)
[Instance] The health status of the instance.
Shown as instance
aws.elasticbeanstalk.instances_degraded
(count)
[Environment] The number of instances with Degraded health status.
Shown as instance
aws.elasticbeanstalk.instances_info
(count)
[Environment] The number of instances with Info health status.
Shown as instance
aws.elasticbeanstalk.instances_no_data
(count)
[Environment] The number of instances with no health status data.
Shown as instance
aws.elasticbeanstalk.instances_ok
(count)
[Environment] The number of instances with OK health status.
Shown as instance
aws.elasticbeanstalk.instances_pending
(count)
[Environment] The number of instances with Pending health status.
Shown as instance
aws.elasticbeanstalk.instances_severe
(count)
[Environment] The number of instances with Severe health status.
Shown as instance
aws.elasticbeanstalk.instances_unknown
(count)
[Environment] The number of instances with Unknown health status.
Shown as instance
aws.elasticbeanstalk.instances_warning
(count)
[Environment] The number of instances with Warning health status.
Shown as instance
aws.elasticbeanstalk.load_average_1min
(gauge)
[Instance] The average CPU load over the last minute.
aws.elasticbeanstalk.load_average_5min
(gauge)
[Instance] The average CPU load over the last five minutes.
aws.elasticbeanstalk.root_filesystem_util
(gauge)
[Instance] The percentage of disk space in use.
Shown as percent

AWS から取得される各メトリクスには、ホスト名やセキュリティグループなど、AWS コンソールに表示されるタグと同じタグが割り当てられます。

イベント

AWS Elastic Beanstalk インテグレーションには、イベントは含まれません。

サービスのチェック

AWS Elastic Beanstalk インテグレーションには、サービスのチェック機能は含まれません。

トラブルシューティング

ご不明な点は Datadog サポートまでお問い合わせください。

その他の参考資料