트레이서 시작 로그 (Tracer Startup Logs)
구성 문제와 Agent 연결을 해결하기 위해 트레이서 시작 로그를 구성하고 분석해요.
출처: 문서
본문
시작 로그 (Startup logs)
트레이서 시작 로그는 시작 시 얻을 수 있는 모든 정보를 캡처해 로그 내에서 검색을 단순화하도록 DATADOG TRACER CONFIGURATION, DATADOG TRACER DIAGNOSTICS, DATADOG ERROR, 또는 DATADOG CONFIGURATION으로 기록해요.
일부 언어는 언어 관례와 Stdout(또는 그에 상응하는 것) 접근의 안전성에 따라 별도 파일에 기록해요. 그런 경우 로그 위치는 아래 언어 탭에 표시돼요. 진단 항목을 기록하지 않는 언어도 있으며, 이 역시 아래에 표시돼요.
CONFIGURATION 로그는 트레이서에 적용된 설정의 JSON 형식 표현이에요. Agent 연결 확인이 수행되는 언어에서는 구성 JSON에 agent_error 키도 포함되며, 이는 Agent에 도달할 수 있는지 여부를 나타내요.
DIAGNOSTICS 또는 ERROR 로그 항목은(이를 생성하는 언어에서) 애플리케이션 시작 중 트레이서가 오류를 만날 때 발생해요. DIAGNOSTICS 또는 ERROR 로그 줄이 보이면 표시된 로그에서 설정과 구성이 올바르게 적용되었는지 확인하세요.
로그가 전혀 보이지 않으면 애플리케이션 로그가 무음(silenced) 처리되지 않았는지, 해당하는 경우 로그 레벨이 최소 INFO인지 확인하세요.
Java:
구성:
{"os_name":"Mac OS X","os_version":"10.15.4","architecture":"x86_64","lang":"jvm","lang_version":"11.0.6","jvm_vendor":"AdoptOpenJDK","jvm_version":"11.0.6+10","java_class_version":"55.0","enabled":true,"service":"unnamed-java-app","agent_url":"http://localhost:8126","agent_error":false,"debug":false,"analytics_enabled":false,"sampling_rules":[{},{}],"priority_sampling_enabled":true,"logs_correlation_enabled":false,"profiling_enabled":false,"dd_version":"null","health_checks_enabled":false,"configuration_file":"no config file present","runtime_id":"b69deb26-8bc3-4c00-8952-d42bf8c2123b"}
진단 (Diagnostics):
Java 트레이서는 Diagnostics 로그를 출력하지 않아요. 이 확인을 위해 트레이서를 디버그 모드로 실행하세요.
.NET:
파일 위치:
로그 파일은 기본적으로 다음 디렉터리에 저장돼요. DD_TRACE_LOG_DIRECTORY 설정으로 경로를 변경할 수 있어요.
| 플랫폼 | 경로 |
|---|---|
| Windows | %ProgramData%\Datadog .NET Tracer\logs\ |
| Linux | /var/log/datadog/dotnet/ |
| Linux (Kubernetes 라이브러리 주입 사용 시) | /datadog-lib/logs |
| Azure App Service | %AzureAppServiceHomeDirectory%\LogFiles\datadog |
참고: Linux에서 디버그 모드를 활성화하기 전에 로그 디렉터리를 만들어야 해요.
버전 2.19.0부터 DD_TRACE_LOGFILE_RETENTION_DAYS 설정을 사용해 시작 시 현재 로깅 디렉터리에서 로그 파일을 삭제하도록 트레이서를 구성할 수 있어요. 트레이서는 주어진 일수보다 같거나 오래된 로그 파일을 삭제하며 기본값은 32예요.
dotnet-tracer-managed-{processName}-{timestamp}.log는 구성 로그를 포함해요.dotnet-tracer-native-{processName}-{processID}.log는 생성되는 경우 진단 로그를 포함해요.
구성:
2020-06-29 12:26:39.572 +02:00 [INF] DATADOG TRACER CONFIGURATION -
{"date":"2020-06-29T12:26:39.5615724+02:00","os_name":"Windows",
"os_version":"Microsoft Windows NT 6.2.9200.0","version":"1.17.1.0",
"platform":"x64","lang":".NET Framework","lang_version":"4.8+",
"env":null,"enabled":true,"service":"git-credential-manager",
"agent_url":"http://localhost:8126","debug":false,
"analytics_enabled":false,"sample_rate":null,"sampling_rules":null,
"tags":[],"log_injection_enabled":false,
"runtime_metrics_enabled":false,"disabled_integrations":[]}
진단 (Diagnostics):
.NET 트레이서는 다음 진단 줄을 출력해요:
DATADOG TRACER DIAGNOSTICS - Profiler disabled in DD_TRACE_ENABLED
DATADOG TRACER DIAGNOSTICS - Profiler disabled: {process_name} not found in DD_PROFILER_PROCESSES
DATADOG TRACER DIAGNOSTICS - Profiler disabled: {process_name} found in DD_PROFILER_EXCLUDE_PROCESSES
DATADOG TRACER DIAGNOSTICS - Failed to attach profiler: interface ICorProfilerInfo3 not found
DATADOG TRACER DIAGNOSTICS - Profiler disabled: {application_pool} is recognized as an Azure App Services infrastructure process
DATADOG TRACER DIAGNOSTICS - Profiler disabled: {application_pool} is recognized as Kudu, an Azure App Services reserved process
DATADOG TRACER DIAGNOSTICS - Profiler disabled: no enabled integrations found
DATADOG TRACER DIAGNOSTICS - Failed to attach profiler: unable to set event mask
DATADOG TRACER DIAGNOSTICS - Error fetching configuration {exception}
PHP:
PHP Info: "DATADOG TRACER CONFIGURATION" 옆에 있는 phpinfo() 페이지에서 시작 로그 JSON 문자열을 가져와요. 다음 PHP 파일을 만들고 호스트 머신의 브라우저에서 접근하세요.
<?php phpinfo(); ?>
진단 정보는 별도 테이블에 표시되어 일반적인 문제를 진단하는 데 도움을 줘요.
CLI SAPI:
php --ri=ddtrace를 실행해 CLI SAPI에서 정보를 가져와요.
ddtrace
Datadog PHP tracer extension
For help, check out the documentation at https://docs.datadoghq.com/tracing/languages/php/
(c) Datadog 2020
Datadog tracing support => enabled
Version => 1.0.0-nightly
DATADOG TRACER CONFIGURATION => {"date":"2020-07-01T17:43:54Z","os_name":"Linux 49b1cb4bdd12 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64","os_version":"4.19.76-linuxkit","version":"1.0.0-nightly","lang":"php","lang_version":"7.4.5","env":null,"enabled":true,"service":null,"enabled_cli":false,"agent_url":"https://localhost:8126","debug":false,"analytics_enabled":false,"sample_rate":1.000000,"sampling_rules":null,"tags":null,"service_mapping":null,"distributed_tracing_enabled":true,"priority_sampling_enabled":true,"dd_version":null,"architecture":"x86_64","sapi":"cli","ddtrace.request_init_hook":null,"open_basedir_configured":false,"uri_fragment_regex":null,"uri_mapping_incoming":null,"uri_mapping_outgoing":null,"auto_flush_enabled":false,"generate_root_span":true,"http_client_split_by_domain":false,"measure_compile_time":true,"report_hostname_on_root_span":false,"traced_internal_functions":null,"auto_prepend_file_configured":false,"integrations_disabled":null,"enabled_from_env":true,"opcache.file_cache":null,"agent_error":"Couldn't connect to server","ddtrace.request_init_hook_reachable":false}
Diagnostics
agent_error => Couldn't connect to server
ddtrace.request_init_hook_reachable => false
Directive => Local Value => Master Value
ddtrace.disable => Off => Off
...
구성:
트레이서가 DEBUG 모드인 경우 시작 로그는 첫 번째 요청 시 프로세스당 한 번 error_log에 나타나요.
DATADOG TRACER CONFIGURATION - {"agent_error":"Couldn't connect to server","ddtrace.request_init_hook_reachable":false,"date":"2020-07-01T17:42:50Z","os_name":"Linux 49b1cb4bdd12 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64","os_version":"4.19.76-linuxkit","version":"1.0.0-nightly","lang":"php","lang_version":"7.4.5","env":null,"enabled":true,"service":null,"enabled_cli":false,"agent_url":"https://localhost:8126","debug":false,"analytics_enabled":false,"sample_rate":1.000000,"sampling_rules":null,"tags":null,"service_mapping":null,"distributed_tracing_enabled":true,"priority_sampling_enabled":true,"dd_version":null,"architecture":"x86_64","sapi":"cgi-fcgi","ddtrace.request_init_hook":null,"open_basedir_configured":false,"uri_fragment_regex":null,"uri_mapping_incoming":null,"uri_mapping_outgoing":null,"auto_flush_enabled":false,"generate_root_span":true,"http_client_split_by_domain":false,"measure_compile_time":true,"report_hostname_on_root_span":false,"traced_internal_functions":null,"auto_prepend_file_configured":false,"integrations_disabled":null,"enabled_from_env":true,"opcache.file_cache":null}
진단 (Diagnostics):
트레이서가 DEBUG 모드인 경우 PHP 트레이서의 실패 진단이 error_log에 출력돼요.
DATADOG TRACER DIAGNOSTICS - agent_error: Couldn't connect to server
DATADOG TRACER DIAGNOSTICS - ddtrace.request_init_hook_reachable: false
런타임 (Runtime):
런타임에 \DDTrace\startup_logs()로 시작 로그를 JSON 문자열로 접근해요.
echo \DDTrace\startup_logs() . PHP_EOL;
Go:
구성:
2020/07/09 15:57:07 Datadog Tracer v1.26.0 INFO: DATADOG TRACER CONFIGURATION {"date":"2020-07-09T15:57:07-05:00","os_name":"darwin","os_version":"10.15.4","version":"v1.26.0","lang":"Go","lang_version":"go1.14.2","env":"","service":"splittest2","agent_url":"http://127.0.0.1:8126/v0.4/traces","agent_error":"","debug":true,"analytics_enabled":false,"sample_rate":"NaN","sampling_rules":null,"sampling_rules_error":"","tags":{"runtime-id":"d269781c-b1bf-4d7b-9a55-a8174930554f"},"runtime_metrics_enabled":false,"health_metrics_enabled":false,"dd_version":"","architecture":"amd64","global_service":""}
진단 (Diagnostics):
Go 트레이서는 두 가지 가능한 진단 줄 중 하나를 출력하는데, 하나는 Agent에 도달할 수 없을 때, 다른 하나는 트레이스 샘플링 오류를 위한 것이에요.
2020/07/09 15:57:07 Datadog Tracer v1.26.0 WARN: DIAGNOSTICS Unable to reach agent: [Reason for error]
2020/07/09 15:57:07 Datadog Tracer v1.26.0 WARN: DIAGNOSTICS Error(s) parsing DD_TRACE_SAMPLING_RULES:
at index 1 ...
at index 4 ....
Node.js:
시작 로그는 SDK 버전 2.x부터 기본적으로 비활성화돼요. 환경 변수 DD_TRACE_STARTUP_LOGS=true로 활성화할 수 있어요.
구성:
[2020-07-02 14:51:16.421] [INFO] app - host:port==localhost:9080
[2020-07-02 14:51:16.423] [INFO] app - db type==mongo
[2020-07-02 14:51:16.439] [INFO] routes - Use dataaccess:../dataaccess/mongo/index.js
[2020-07-02 14:51:16.599] [INFO] app - Error connecting to database - exiting process: MongoError: connect ECONNREFUSED 127.0.0.1:27017
[2020-07-02 14:51:16.600] [INFO] app - Initialized database connections
[2020-07-02 14:51:16.601] [INFO] app - Express server listening on port 9080
DATADOG TRACER CONFIGURATION - {"date":"2020-07-02T18:51:18.294Z","os_name":"Darwin","os_version":"19.2.0","architecture":"x64","version":"0.23.0","lang":"nodejs","lang_version":"12.18.1","enabled":true,"service":"acmeair","agent_url":"http://localhost:8126","agent_error":"Network error trying to reach the agent: connect ECONNREFUSED 127.0.0.1:8126","debug":false,"analytics_enabled":false,"sample_rate":1,"sampling_rules":[],"tags":{"service":"acmeair","version":"0.0.4"},"dd_version":"0.0.4","log_injection_enabled":false,"runtime_metrics_enabled":false,"integrations_loaded":["http","fs","net","dns","[email protected]"]}
진단 (Diagnostics):
Node.js 트레이서는 Agent에 도달할 수 없을 때 진단 줄을 출력해요.
DATADOG TRACER DIAGNOSTIC - Agent Error: Network error trying to reach the agent: connect ECONNREFUSED 127.0.0.1:8126
Python:
로그 위치:
Python 트레이서는 구성 정보를 INFO 레벨로 기록해요. 진단 정보가 있으면 ERROR로 기록해요.
로깅 구성이 없으면 Diagnostics만 Stderr로 출력돼요.
트레이서 시작 로그를 보려면 로거를 추가하거나 구성에서 DD_TRACE_DEBUG=true를 설정하고 ddtrace-run으로 애플리케이션을 실행하세요. 이렇게 하면 로거가 추가되고 디버그 및 시작 트레이서 로그가 모두 노출돼요.
DD_TRACE_LOG_FILE로 파일 로깅 옵션을 보려면 Tracer Debug Logs를 읽으세요.
구성:
2020-07-09 11:04:08,098 INFO [ddtrace.tracer] [tracer.py:338] - - DATADOG TRACER CONFIGURATION - {"date": "2020-07-09T15:04:08.092797", "os_name": "Darwin", "os_version": "19.5.0", "is_64_bit": true, "architecture": "64bit", "vm": "CPython", "version": "0.38.1.dev79+gd22e2972.d20200707", "lang": "python", "lang_version": "3.7.6", "pip_version": "20.0.2", "in_virtual_env": true, "agent_url": "http://localhost:1234", "agent_error": "Agent not reachable. Exception raised: [Errno 61] Connection refused", "env": "", "is_global_tracer": true, "enabled_env_setting": null, "tracer_enabled": true, "sampler_type": "DatadogSampler", "priority_sampler_type": "RateByServiceSampler", "service": "", "debug": true, "enabled_cli": true, "analytics_enabled": false, "log_injection_enabled": false, "health_metrics_enabled": false, "dd_version": "", "priority_sampling_enabled": true, "global_tags": "", "tracer_tags": "", "integrations": {"asyncio": "N/A", "boto": "N/A", "botocore": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "1.15.32", "module_imported": false, "config": "N/A"}, "bottle": {"enabled": false, "instrumented": false, "module_available": true, "module_version": "0.12.18", "module_imported": false, "config": null}, "cassandra": "N/A", "celery": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "4.2.2", "module_imported": false, "config": "N/A"}, "consul": "N/A", "django": "N/A", "elasticsearch": "N/A", "algoliasearch": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "2.2.0", "module_imported": false, "config": "N/A"}, "futures": "N/A", "grpc": "N/A", "mongoengine": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "0.19.1", "module_imported": false, "config": "N/A"}, "mysql": "N/A", "mysqldb": "N/A", "pymysql": "N/A", "psycopg": "N/A", "pylibmc": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "1.6.1", "module_imported": false, "config": "N/A"}, "pymemcache": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "1.4.4", "module_imported": false, "config": "N/A"}, "pymongo": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "3.10.1", "module_imported": false, "config": "N/A"}, "redis": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "3.5.3", "module_imported": false, "config": "N/A"}, "rediscluster": "N/A", "requests": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "2.23.0", "module_imported": false, "config": "N/A"}, "sqlalchemy": "N/A", "sqlite3": "N/A", "aiohttp": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "3.6.2", "module_imported": false, "config": "N/A"}, "aiopg": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "0.15.0", "module_imported": false, "config": "N/A"}, "aiobotocore": {"enabled": false, "instrumented": false, "module_available": true, "module_version": "1.0.1", "module_imported": false, "config": null}, "httplib": "N/A", "vertica": "N/A", "molten": {"enabled": true, "instrumented": false, "module_available": true, "module_version": "0.7.4", "module_imported": false, "config": "N/A"}, "jinja2": "N/A", "mako": "N/A", "flask": "N/A", "kombu": {"enabled": false, "instrumented": false, "module_available": true, "module_version": "4.3.0", "module_imported": false, "config": null}, "falcon": {"enabled": false, "instrumented": false, "module_available": true, "module_version": "1.4.1", "module_imported": false, "config": null}, "pylons": "N/A", "pyramid": {"enabled": false, "instrumented": false, "module_available": true, "module_version": "1.10.4", "module_imported": false, "config": null}, "logging": "N/A"}}
진단 (Diagnostics):
Python 트레이서는 Agent에 도달할 수 없을 때 진단 줄을 출력해요.
DATADOG TRACER DIAGNOSTIC - Agent not reachable. Exception raised: [Errno 61] Connection refused
Ruby:
시작 로그 활성화 (Enable startup logs)
코드 구성 또는 환경 변수를 사용해 시작 로그를 활성화할 수 있어요:
코드 (Code):
코드에서 시작 로그를 활성화하려면:
Datadog.configure do |c|
c.diagnostics.startup_logs.enabled = true
end
환경 변수 (Environment variable):
환경 변수로 시작 로그를 활성화하려면:
export DD_TRACE_STARTUP_LOGS=true
출력 (Output)
시작 로그가 활성화되면 트레이서는 구성 및 진단 정보를 출력해요.
구성:
Ruby 트레이서는 각 제품(예: Profiling, Core, Tracing)에 대해 구성 줄을 출력해요.
I, [2023-08-16T18:09:01.972265 #35] INFO -- ddtrace: [ddtrace] DATADOG CONFIGURATION - PROFILING - {"profiling_enabled":false}
I, [2023-08-16T18:09:01.972767 #35] INFO -- ddtrace: [ddtrace] DATADOG CONFIGURATION - CORE - {"date":"2023-08-16T18:09:01+00:00","os_name":"aarch64-unknown-linux-gnu","version":"1.13.0","lang":"ruby","lang_version":"3.0.6","env":null,"service":"rails","dd_version":null,"debug":false,"tags":null,"runtime_metrics_enabled":false,"vm":"ruby-3.0.6","health_metrics_enabled":false}
I, [2023-08-16T18:09:27.223143 #35] INFO -- ddtrace: [ddtrace] DATADOG CONFIGURATION - TRACING - {"enabled":true,"agent_url":"http://agent:8126?timeout=30","analytics_enabled":false,"sample_rate":null,"sampling_rules":null,"integrations_loaded":"active_model_serializers@,aws@","partial_flushing_enabled":false,"priority_sampling_enabled":false,"integration_active_model_serializers_analytics_enabled":"false","integration_active_model_serializers_analytics_sample_rate":"1.0","integration_active_model_serializers_enabled":"true","integration_active_model_serializers_service_name":"","integration_aws_analytics_enabled":"false","integration_aws_analytics_sample_rate":"1.0","integration_aws_enabled":"true","integration_aws_service_name":"aws","integration_aws_peer_service":""}
진단 (Diagnostics):
Ruby 트레이서는 Agent에 도달할 수 없을 때 오류 줄을 출력해요.
W, [2020-07-08T21:19:05.765994 #143] WARN -- ddtrace: [ddtrace] DATADOG ERROR - TRACER - 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 ddagent:9127 (Connection refused - connect(2) for "ddagent" port 9127)
C++:
구성:
{"agent_url":"http://localhost:8126","analytics_enabled":false,"analytics_sample_rate":null,"date":"2020-07-03T00:44:37+0000","dd_version":"","enabled":true,"env":"test-env","lang":"cpp","lang_version":"201402","operation_name_override":"","report_hostname":false,"sampling_rules":"[{\"sample_rate\": 1.0}]","service":"service_name","tags":{},"version":"v1.2.0"}
진단 (Diagnostics):
C++의 경우 트레이서 로그에 출력되는 DATADOG TRACER DIAGNOSTICS 줄은 없어요. 그러나 Agent에 도달할 수 없으면 애플리케이션 로그에 오류가 나타나요. Envoy에서는 메트릭 tracing.datadog.reports_failed와 tracing.datadog.reports_dropped가 증가해요.
연결 오류 (Connection errors)
애플리케이션 또는 시작 로그에 Agent에 도달하거나 연결할 수 없다는 DIAGNOSTICS 오류나 메시지가(언어에 따라 다름) 포함된 경우, 트레이서가 Datadog Agent로 트레이스를 보낼 수 없다는 뜻이에요.
이런 오류가 있다면 Agent가 ECS, Kubernetes, Docker 또는 다른 옵션의 트레이스를 받도록 설정되었는지 확인하거나, 트레이서와 Agent 구성을 검토하도록 지원팀에 연락하세요.
계측된 애플리케이션이 Datadog Agent와 통신할 수 없음을 나타내는 오류에 대한 정보는 Connection Errors를 참고하세요.
구성 설정 (Configuration settings)
로그에 CONFIGURATION 줄만 포함된 경우, 유용한 문제 해결 단계는 트레이서가 출력하는 설정이 Datadog Tracer의 배포 및 구성의 설정과 일치하는지 확인하는 것이에요. 또한 Datadog에서 특정 트레이스가 보이지 않는다면 문서의 Compatibility Requirements 섹션을 검토해 이 통합이 지원되는지 확인하세요.
사용 중인 통합이 지원되지 않거나, 구성 출력을 새롭게 검토해 Datadog에서 트레이스가 예상대로 나타나지 않는 이유를 이해하고 싶다면 문제를 진단하고 새 통합에 대한 Feature Request를 만들 수 있도록 도와주는 지원팀에 연락하세요.
시작 로그 비활성화 (Disabling startup logs)
각 언어에서 환경 변수 DD_TRACE_STARTUP_LOGS=false를 설정해 시작 로그를 비활성화할 수 있지만, 이는 발신 로그가 문제를 일으킬 때만 수행하세요. 나중에 디버그 로그를 보낼 때는 지원 케이스 트리아지를 빠르게 하기 위해 시작 로그를 활성화하고 모든 관련 로그를 함께 보내는 것을 기억하세요.