본문 바로가기
WIKI 기술 지식 베이스

APM 연결 오류 (APM Connection Errors)

원문 보기 위키 갱신

SDK가 있는 애플리케이션이 Datadog Agent에 도달하지 못하면, 트레이서 시작 로그나 트레이서 디버그 로그에서 연결 오류를 확인하세요. 이 로그들은 애플리케이션 로그와 함께 확인할 수 있어요.

출처: 문서

본문

APM 연결 문제를 알리는 오류 (Errors that indicate an APM Connection problem)

다음과 같은 메시지가 보인다면, 트레이스가 Datadog Agent에 제출되고 있지 않다는 뜻이에요.

트레이싱 라이브러리 오류 (Tracing library errors)

{% tab title="Java" %}

Java 진단 CLI (Java diagnostic CLI)

Java 트레이서 0.82.0+부터는 Java 트레이서가 설치된 위치에서 잠재적인 연결 문제를 감지할 수 있는 진단 명령을 사용할 수 있어요. dd-java-agent.jar가 설치된 곳(애플리케이션 컨테이너 안)에서 다음을 실행하세요:

java -jar /path/to/dd-java-agent.jar sampleTrace -c 1

출력 예시:

[dd.trace 2021-08-24 18:38:01:501 +0000] [dd-task-scheduler] INFO datadog.trace.agent.core.StatusLogger - DATADOG TRACER CONFIGURATION {"version":"0.83.2~6bb3e09b2a","os_name":"Linux","os_version":"5.10.25-linuxkit","architecture":"amd64","lang":"jvm","lang_version":"1.8.0_232","jvm_vendor":"Oracle Corporation","jvm_version":"25.232-b09","java_class_version":"52.0","http_nonProxyHosts":"null","http_proxyHost":"null","enabled":true,"service":"dd-java-agent","agent_url":"http://localhost:8126","agent_error":true,"debug":false,"analytics_enabled":false,"sampling_rules":[{},{}],"priority_sampling_enabled":true,"logs_correlation_enabled":true,"profiling_enabled":false,"dd_version":"0.83.2~6bb3e09b2a","health_checks_enabled":true,"configuration_file":"no config file present","runtime_id":"<ID>","logging_settings":{"levelInBrackets":false,"dateTimeFormat":"'[dd.trace 'yyyy-MM-dd HH:mm:ss:SSS Z']'","logFile":"System.err","configurationFile":"simplelogger.properties","showShortLogName":false,"showDateTime":true,"showLogName":true,"showThreadName":true,"defaultLogLevel":"INFO","warnLevelString":"WARN","embedException":false}}
[dd.trace 2021-08-24 18:38:02:164 +0000] [dd-trace-processor] WARN datadog.trace.agent.common.writer.ddagent.DDAgentApi - Error while sending 1 (size=316B) traces to the DD agent. Total: 1, Received: 1, Sent: 0, Failed: 1. java.net.ConnectException: Failed to connect to localhost/127.0.0.1:8126 (Will not log errors for 5 minutes)
트레이서 시작 로그 (Tracer startup logs)
[dd.trace 2021-08-17 17:59:29:234 +0000] [dd-trace-processor] WARN datadog.trace.agent.common.writer.ddagent.DDAgentApi - Error while sending 9 (size=5KB) traces to the DD agent. Total: 9, Received: 9, Sent: 0, Failed: 9. java.net.ConnectException: Failed to connect to localhost/127.0.0.1:8126 (Will not log errors for 5 minutes)
트레이서 디버그 로그 (Tracer debug logs)
[dd.trace 2021-08-17 18:04:50:282 +0000] [dd-trace-processor] DEBUG datadog.communication.ddagent.DDAgentFeaturesDiscovery - Error querying info at http://localhost:8126/
java.net.ConnectException: Failed to connect to localhost/127.0.0.1:8126
	at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:249)

{% /tab %}

{% tab title="Python" %}

트레이서 시작 로그 (Tracer startup logs)
2021-08-17 19:10:06,169 WARNING [ddtrace.tracer] [tracer.py:655] [dd.service= dd.env= dd.version= dd.trace_id=0 dd.span_id=0] - - DATADOG TRACER DIAGNOSTIC - Agent not reachable at http://localhost:8126. Exception raised: [Errno 99] Cannot assign requested address
트레이서 디버그 로그 (Tracer debug logs)
2021-08-17 14:04:12,982 ERROR [ddtrace.internal.writer] [writer.py:466] [dd.service= dd.env= dd.version= dd.trace_id=0 dd.span_id=0] - failed to send traces to Datadog Agent at http://localhost:8126
Traceback (most recent call last):

{% /tab %}

{% tab title="Ruby" %}

트레이서 시작 로그 (Tracer startup logs)
W, [2021-08-17T18:37:51.542245 #24]  WARN -- ddtrace: [ddtrace] DATADOG TRACER DIAGNOSTIC - Agent Error: Datadog::Transport::InternalErrorResponse ok?: unsupported?:, not_found?:, client_error?:, server_error?:, internal_error?:true, payload:, error_type:Errno::ECONNREFUSED error:Failed to open TCP connection to 127.0.0.1:8126 (Connection refused - connect(2) for "127.0.0.1" port 8126)
트레이서 디버그 로그 (Tracer debug logs)
D, [2021-08-17T18:51:28.962389 #24] DEBUG -- ddtrace: [ddtrace] (/usr/local/bundle/gems/ddtrace-0.48.0/lib/ddtrace/transport/http/client.rb:33:in `rescue in send_request') Internal error during HTTP transport request. Cause: Failed to open TCP connection to 127.0.0.1:8126 (Connection refused - connect(2) for "127.0.0.1" port 8126) Location: /usr/local/lib/ruby/2.5.0/net/http.rb:939:in `rescue in block in connect'

{% /tab %}

{% tab title="Go" %}

트레이서 시작 로그 (Tracer startup logs)
2021/08/17 17:46:22 Datadog Tracer v1.32.0 WARN: DIAGNOSTICS Unable to reach agent intake: Post http://localhost:8126/v0.4/traces: dial tcp 127.0.0.1:8126: connect: connection refused
트레이서 디버그 로그 (Tracer debug logs)
2021/08/17 17:47:42 Datadog Tracer v1.32.0 ERROR: lost 1 traces: Post http://localhost:8126/v0.4/traces: dial tcp 127.0.0.1:8126: connect: connection refused (occurred: 17 Aug 21 17:46 UTC)

{% /tab %}

{% tab title="Node.js" %}

트레이서 시작 로그 (Tracer startup logs)
DATADOG TRACER DIAGNOSTIC - Agent Error: Network error trying to reach the agent: connect ECONNREFUSED 127.0.0.1:8126
Error: Network error trying to reach the agent: connect ECONNREFUSED 127.0.0.1:8126
트레이서 디버그 로그 (Tracer debug logs)
Error: Network error trying to reach the agent: connect ECONNREFUSED 127.0.0.1:8126
    at ClientRequest.<anonymous> (/home/node-web-app/node_modules/dd-trace/packages/dd-trace/src/platform/node/request.js:51:33)

{% /tab %}

{% tab title=".NET" %}

관리 로그 (Managed logs)

디버그 모드가 활성화되어 있지 않아도, 관리 로그에는 연결 거부(connection refused) 문제로 인한 오류가 포함되어 있어요:

{ MachineName: ".", Process: "[114 sample-web-app]", AppDomain: "[1 sample-web-app]", TracerVersion: "1.28.2.0" }
2021-08-17 18:19:46.827 +00:00 [ERR] An error occurred while sending 1 traces to the agent at http://127.0.0.1:8126/v0.4/traces
System.Net.Http.HttpRequestException: Connection refused
 ---> System.Net.Sockets.SocketException (111): Connection refused
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---

{% /tab %}

{% tab title="PHP" %}

트레이서 시작 로그 (Tracer startup logs)
Failed to connect to localhost port 8126: Connection refused

{% /tab %}

{% tab title="C++" %}

애플리케이션 로그 (Application logs)

애플리케이션이 Datadog Agent에 도달하지 못하면, 다음과 같은 로그 메시지가 애플리케이션에서 로그를 보내는 위치로 출력돼요:

Error sending traces to agent: Couldn't connect to server
Failed to connect to localhost port 8126: Connection refused

{% /tab %}

Datadog Agent 오류 (Datadog Agent errors)

agent status 명령(Agent 6.20.0/7.20.0부터 사용 가능)이 APM이 실행 중이 아니거나 localhost:8126에서 접근할 수 없다고 표시하면, Datadog Agent에 APM이 구성되어 있지 않아 트레이스를 Datadog 백엔드에 제출할 수 없는 거예요.

APM Agent
=========
  Status: Not running or unreachable on localhost:8126.

참고: Linux에서 Agent 7.80.0부터는 트레이스 데이터를 받은 후에만 trace-agent가 시작돼요. 이렇게 하면 메모리 사용량이 줄지만, APM이 올바르게 구성되어 있어도 agent status가 APM을 실행 중이지 않거나 접근할 수 없다고 표시할 수 있어요. 아직 트레이스를 보내지 않았다면 정상적인 동작이에요. 이 동작을 비활성화하려면 datadog.yaml에서 apm_config.socket_activation.enabled: false를 설정하거나, 환경 변수로 DD_APM_SOCKET_ACTIVATION_ENABLED=false를 설정하세요.

연결 문제 트러블슈팅 (Troubleshooting the connection problem)

SDK든 Datadog Agent든 오류를 표시하는 쪽에 관계없이, 트러블슈팅 방법은 몇 가지가 있어요.

호스트 기반 구성 (Host-based setups)

애플리케이션과 Datadog Agent가 컨테이너화되어 있지 않다면, SDK가 있는 애플리케이션은 localhost:8126 또는 127.0.0.1:8126으로 트레이스를 보내야 해요. Datadog Agent가 바로 그곳에서 수신 대기하고 있기 때문이에요.

Datadog Agent가 APM을 수신 대기하지 않는다고 표시되면, Datadog Agent의 APM 구성 요소가 기본적으로 사용하는 포트 8126에 대한 포트 충돌이 있는지 확인하세요.

근본 원인을 격리할 수 없다면 다음 정보와 함께 Datadog 지원팀에 문의하세요:

  • 애플리케이션과 Datadog Agent를 배포하는 환경에 대한 정보.
  • 프록시를 사용 중이라면, 프록시가 어떻게 구성되었는지에 대한 정보.
  • 기본 포트를 8126에서 다른 포트로 변경하려고 한다면, 해당 포트에 대한 정보.
  • Datadog Agent flare.

컨테이너화된 구성 (Containerized setups)

네트워크 구성 확인 (Check network configuration)

컨테이너화된 구성에서는 Datadog Agent도 컨테이너화되어 다른 곳에 있기 때문에 localhost나 127.0.0.1로 트레이스를 보내는 것은 종종 올바르지 않아요. 참고: Amazon ECS on Fargate와 AWS EKS on Fargate는 이 규칙의 예외예요.

애플리케이션과 Datadog Agent 간의 네트워킹이 해당 구성에 필요한 것과 일치하는지 확인하세요.

특히, Datadog Agent가 포트 8126(또는 정의한 포트)에 접근할 수 있고 애플리케이션이 트레이스를 Datadog Agent의 위치로 보낼 수 있는지 확인하세요. 이를 위해 애플리케이션 컨테이너에서 다음 명령을 실행할 수 있어요({agent_ip}와 {agent_port} 변수는 교체하세요):

curl -X GET http://{agent_ip}:{agent_port}/info

이 명령이 실패하면 컨테이너가 Agent에 접근할 수 없는 거예요. 아래 섹션을 참고해 이 문제의 원인이 될 수 있는 부분을 확인하세요.

시작하기 좋은 곳은 APM 인앱 설정 문서예요.

SDK가 트레이스를 보내려는 위치 확인 (Review where your SDK is trying to send traces)

위에서 언어별로 나열된 오류 로그를 사용해 트레이스가 어디로 보내지고 있는지 확인하세요.

설정 예시는 아래 표를 참고하세요. 일부는 해당 문서에서 설명하는 추가 네트워크 구성을 설정해야 해요.

구성 DD_AGENT_HOST
Amazon ECS on EC2 Amazon의 EC2 메타데이터 엔드포인트로 평가
Amazon ECS on Fargate DD_AGENT_HOST를 설정하지 마세요
AWS EKS on Fargate DD_AGENT_HOST를 설정하지 마세요
AWS Elastic Beanstalk - Single Container 게이트웨이 IP(보통 172.17.0.1)
AWS Elastic Beanstalk - Multiple Containers Datadog Agent 컨테이너 이름을 가리키는 링크
Kubernetes 1) Unix Domain Socket, 2) 수동으로 추가한 status.hostIP, 3) Admission Controller를 통한 방식. TCP를 사용한다면 컨테이너에 적용된 네트워크 정책을 확인하세요
AWS EKS (non Fargate) 1) Unix Domain Socket, 2) 수동으로 추가한 status.hostIP, 3) Admission Controller를 통한 방식
Datadog Agent and Application Docker Containers Datadog Agent 컨테이너

웹 서버에 대한 참고: 트레이서 시작 로그의 agent_url 섹션이 전달받은 DD_AGENT_HOST 환경 변수와 일치하지 않으면, 해당 서버에서 환경 변수가 어떻게 전파되는지 검토하세요. 예를 들어 PHP에는 Apache 또는 Nginx가 DD_AGENT_HOST 환경 변수를 올바르게 읽어들이도록 하는 추가 설정이 있어요.

구성에 따라 SDK가 트레이스를 올바르게 보내고 있다면 다음 단계로 진행하세요.

Datadog Agent 상태 및 구성 확인 (Review your Datadog Agent status and configuration)

구성이 Fargate 기반이 아니라면 Datadog Agent 컨테이너에 exec로 진입해 Agent 상태 명령 agent status를 실행할 수 있어요.

참고: 전용 컨테이너와 함께 Kubernetes를 사용한다면, 전용 Trace Agent Container에 exec로 진입하세요.

APM Agent 섹션을 찾아 실행 중인지 확인하세요:

참고: Linux에서 Agent 7.80.0부터는 트레이스 데이터를 받은 후에만 trace-agent가 시작돼요. 이렇게 하면 메모리 사용량이 줄지만, APM이 올바르게 구성되어 있어도 APM Agent 섹션이 실행 중이지 않거나 접근할 수 없다고 표시할 수 있어요. 아직 트레이스를 보내지 않았다면 정상적인 동작이에요. 이 동작을 비활성화하려면 datadog.yaml에서 apm_config.socket_activation.enabled: false를 설정하거나, 환경 변수로 DD_APM_SOCKET_ACTIVATION_ENABLED=false를 설정하세요.

=========
APM Agent
=========
  Status: Running
  Pid: <pid number>
  Uptime: <integer> seconds
  Mem alloc: <integer> bytes
  Hostname: <name of datadog agent container>
  Receiver: 0.0.0.0:8126
  Endpoints:
    https://trace.agent.datadoghq.com

  Receiver (previous minute)
  ==========================
    No traces received in the previous minute.
    Default priority sampling rate: 100.0%

구성이 올바른데도 여전히 연결 오류가 보인다면 다음 정보와 함께 Datadog 지원팀에 문의하세요:

  • 애플리케이션과 Datadog Agent를 배포하는 환경에 대한 정보.
  • 프록시를 사용 중이라면 프록시가 어떻게 구성되었는지에 대한 정보.
  • 애플리케이션과 Datadog Agent를 구성하는 데 사용한 모든 구성 파일.
  • 연결 오류를 설명하는 시작 로그 또는 트레이서 디버그 로그.
  • Datadog Agent flare. 전용 컨테이너라면 전용 Trace Agent 컨테이너에서 flare를 보내세요.

더 알아보기 (Learn more)

APM 트러블슈팅 및 트레이스 수집에 관한 더 자세한 문서는 Datadog APM 문서에서 확인할 수 있어요.