ECS アプリケーションのトレース
Incident Management が一般に使用できるようになりました。 Incident Management が広範に使用できるようになりました。

ECS アプリケーションのトレース

セットアップ

Amazon ECS エージェントのインストール手順でインストールした後、以下の手順に従いトレースの収集を有効にします。

  1. gcr.io/datadoghq/agent コンテナのタスク定義で次のパラメーターを設定します。portMappings ホスト / コンテナポートを 8126(プロトコルは tcp)に設定します。

        containerDefinitions": [
        {
          "name": "datadog-agent",
          "image": "gcr.io/datadoghq/agent:latest",
          "cpu": 10,
          "memory": 256,
          "essential": true,
          "portMappings": [
            {
              "hostPort": 8126,
              "protocol": "tcp",
              "containerPort": 8126
            }
          ],
          ...
        

    Agent v7.17 以下の場合、以下の環境変数を追加します。

        ...
              "environment": [
                ...
              {
                "name": "DD_APM_ENABLED",
                "value": "true"
              },
              {
                "name": "DD_APM_NON_LOCAL_TRAFFIC",
                "value": "true"
              },
              ...
              ]
        ...
        

    Agent トレースの収集に使用できるすべての環境変数を参照してください

  2. アプリケーションコンテナでコンテナが実行されている基底の各インスタンスのプライベート IP アドレスを DD_AGENT_HOST 環境変数に割り当てます。これにより、アプリケーショントレースを Agent に送信できます。Amazon の EC2 メタデータエンドポイントでは、プライベート IP アドレスを検出できます。各ホストのプライベート IP アドレスを取得するには、次の URL に curl を実行します。

        curl http://169.254.169.254/latest/meta-data/local-ipv4
        

    APM に渡される各アプリケーションコンテナのトレースエージェントのホスト名の環境変数として結果を設定します。

        os.environ['DD_AGENT_HOST'] = <EC2_PRIVATE_IP>
        

起動時間の変数

ECS アプリケーションの変数が起動時に設定される場合は、DD_AGENT_HOST を使ってホスト名を環境変数として設定する必要があります。あるいは、Python、JavaScript、Ruby の場合は対象のホスト名をアプリケーションのソースコード内で設定することも可能です。Java と .NET の場合は、ECS タスクでホスト名を設定できます。たとえば、以下のとおりです。

import requests
from ddtrace import tracer


def get_aws_ip():
  r = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4')
  return r.text

tracer.configure(hostname=get_aws_ip())

他の言語で Agent ホスト名を設定するには、Agent ホスト名の変更方法を参照してください。

const tracer = require('dd-trace').init();
const request = require('request');
request('http://169.254.169.254/latest/meta-data/local-ipv4', function(
    error,
    resp,
    body
) {
    tracer.setUrl(`http://${hostname}:8126`)
});

他の言語で Agent ホスト名を設定するには、Agent ホスト名の変更方法を参照してください。

require 'ddtrace'
require 'net/http'

Datadog.configure do |c|
  c.tracer hostname: Net::HTTP.get(URI('http://169.254.169.254/latest/meta-data/local-ipv4'))
end
package main

import (
    "net/http"
    "io/ioutil"
    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

resp, err := http.Get("http://169.254.169.254/latest/meta-data/local-ipv4")
        bodyBytes, err := ioutil.ReadAll(resp.Body)
        host := string(bodyBytes)
  if err == nil {
        //set the output of the curl command to the DD_Agent_host env
        os.Setenv("DD_AGENT_HOST", host)
        // tell the trace agent the host setting
        tracer.Start(tracer.WithAgentAddr(host))
        defer tracer.Stop()

このスクリプトを ECS タスク定義の entryPoint フィールドにコピーし、アプリケーション jar および引数フラグで値を更新します。

"entryPoint": [
  "sh",
  "-c",
  "export DD_AGENT_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4); java -javaagent:/app/dd-java-agent.jar <APPLICATION_ARG_FLAGS> -jar <APPLICATION_JAR_FILE/WAR_FILE>"
]

他の言語で Agent ホスト名を設定するには、Agent ホスト名の変更方法を参照してください。

"entryPoint": [
  "sh",
  "-c",
  "export DD_AGENT_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4); dotnet ${APP_PATH}"
]

その他の参考資料