사이드카 전략을 사용한 배포
1단계: 계정에서 Application Signals 활성화
이 계정에서 아직 Application Signals를 활성화하지 않은 경우 서비스를 검색하는 데 필요한 권한을 Application Signals에 부여해야 합니다. 그렇게 하려면 다음을 수행합니다. 계정에 대해 한 번만 수행하면 됩니다.
애플리케이션에 대해 Application Signals 활성화
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. 탐색 창에서 서비스를 선택합니다.
서비스 검색 시작을 선택합니다.
확인란을 선택하고 서비스 검색 시작을 선택합니다.
계정에서 처음으로 이 단계를 완료하면 AWSServiceRoleForCloudWatchApplicationSignals 서비스 역할이 생성됩니다. 이 역할은 Application Signals에 다음 권한을 부여합니다.
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
이에 대한 자세한 내용은 CloudWatch Application Signals에 대한 서비스 연결 역할 권한 섹션을 참조하세요.
-
2단계 - IAM 역할 생성
IAM 역할을 생성해야 합니다. 이 역할을 이미 생성한 경우 권한을 추가해야 할 수 있습니다.
-
ECS 태스크 역할 - 컨테이너는 이 역할을 사용하여 실행됩니다. CloudWatchAgentServerPolicy 외에도 권한은 애플리케이션에 필요한 것이어야 합니다.
IAM 역할 생성에 대한 자세한 내용은 IAM 역할 생성 단원을 참조하세요.
3단계: CloudWatch 에이전트 구성 준비
먼저 Application Signals가 활성화된 에이전트 구성을 준비합니다. 이렇게 하려면 /tmp/ecs-cwagent.json
이라는 로컬 파일을 생성합니다.
{ "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {} } } }
그런 다음, 이 구성을 SSM Parameter Store에 업로드합니다. 이를 위해 다음 명령을 입력합니다. 파일에서 $REGION
을 실제 리전 이름으로 바꿉니다.
aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "
$REGION
"
4단계: CloudWatch 에이전트를 사용하여 애플리케이션 계측
다음 단계는 CloudWatch Application Signals에 대해 애플리케이션을 계측하는 것입니다.
- Java
-
CloudWatch 에이전트를 사용하여 Amazon ECS에서 애플리케이션 계측
먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
CloudWatch 에이전트 사이드카 정의를 추가합니다. 이렇게 하려면 애플리케이션의 작업 정의에
ecs-cwagent
라는 새 컨테이너를 추가합니다.$REGION
을 실제 리전 이름으로 바꿉니다.$IMAGE
를 Amazon Elastic Container Registry의 최신 CloudWatch 컨테이너 이미지 경로로 바꿉니다. 자세한 내용은 Amazon ECR의 cloudwatch-agent를 참조하세요. 대신 대몬 전략으로 CloudWatch 에이전트를 활성화하려면 대몬 전략을 사용하여 배포의 지침을 참조하세요.
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION
", "awslogs-stream-prefix": "ecs" } } }애플리케이션의 작업 정의에 새 컨테이너
init
를 추가합니다.$IMAGE
를 AWS Distro for OpenTelemetry Amazon ECR 이미지 리포지토리의 최신 이미지로 바꿉니다. { "name": "init", "image": "
$IMAGE
", "essential": false, "command": [ "cp", "/javaagent.jar", "/otel-auto-instrumentation/javaagent.jar" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }애플리케이션 컨테이너에 다음 환경 변수를 추가합니다. Java용 AWS Distro for OpenTelemetry 자동 계측 에이전트
버전 1.32.2 이상을 사용해야 합니다. 환경 변수 Application Signals를 활성화하도록 설정 OTEL_RESOURCE_ATTRIBUTES
다음 정보를 키-값 페어로 지정합니다.
service.name
은 서비스 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 이 키에 대한 값을 제공하지 않으면 기본값인UnknownService
가 사용됩니다.deployment.environment
는 애플리케이션이 실행되는 환경을 설정합니다. 이는 Application Signals 대시보드에서 애플리케이션의 호스팅 위치 환경으로 표시됩니다. 이 인수를 지정하지 않으면generic:default
의 기본값이 사용됩니다.
이 속성 키는 Application Signals에서만 사용되며 X-Ray 트레이스 주석 및 CloudWatch 지표 측정기준으로 변환됩니다.
(선택 사항) Application Signals의 로그 상관 관계를 활성화하려면 추가 환경 변수
aws.log.group.names
를 애플리케이션 로그의 로그 그룹 이름으로 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우$YOUR_APPLICATION_LOG_GROUP
을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(&
)를 사용하여 로그 그룹을 구분할 수 있습니다.aws.log.group.names=log-group-1&log-group-2
지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 로그 상관 관계에 대한 지표 활성화 단원을 참조하십시오. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 로그 상관 관계에 대한 추적 활성화 단원을 참조하십시오.OTEL_AWS_APPLICATION_SIGNALS_ENABLED
컨테이너가 X-Ray 트레이스와 CloudWatch 지표를 Application Signals로 전송하기 시작하게 하려면
true
로 설정합니다.OTEL_METRICS_EXPORTER
다른 지표 내보내기를 비활성화하려면
none
으로 설정합니다.OTEL_LOGS_EXPORTER
다른 로그 내보내기를 비활성화하려면
none
으로 설정합니다.OTEL_EXPORTER_OTLP_PROTOCOL
HTTP를 사용하여 지표와 트레이스를 Application Signals로 전송하려면
http/protobuf
로 설정합니다.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
CloudWatch 사이드카로 지표를 전송하려면
http://localhost:4316/v1/metrics
로 설정합니다.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
CloudWatch 사이드카로 트레이스를 전송하려면
http://localhost:4316/v1/traces
로 설정합니다.OTEL_TRACES_SAMPLER
X-Ray를 트레이스 샘플러로 설정하려면 이를
xray
로 설정합니다.OTEL_PROPAGATORS
전파자 중 하나로
xray
를 설정합니다.JAVA_TOOL_OPTIONS
" -javaagent:$
로 설정합니다.AWS_ADOT_JAVA_INSTRUMENTATION_PATH
"AWS_ADOT_JAVA_INSTRUMENTATION_PATH
를 AWS Distro for OpenTelemetry Java 자동 계측 에이전트가 저장된 경로로 바꿉니다. 예제:/otel-auto-instrumentation/javaagent.jar
이 절차의 1단계에서 정의한 볼륨을
opentelemetry-auto-instrumentation
을 마운트합니다. 지표 및 추적과의 로그 상관 관계를 활성화할 필요가 없는 경우 Java 애플리케이션에 대한 다음 예제를 사용합니다. 로그 상관 관계를 활성화하려면 다음 단계를 대신 참조하세요.{ "name": "
my-app
", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME
" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "JAVA_TOOL_OPTIONS", "value": " -javaagent:/otel-auto-instrumentation/javaagent.jar" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
- Python
-
Python 애플리케이션에서 Application Signals를 활성화하기 전에 다음 사항에 유의하세요.
일부 컨테이너화된 애플리케이션에서는
PYTHONPATH
환경 변수가 누락되면 애플리케이션이 시작되지 않을 수 있습니다. 이 문제를 해결하려면PYTHONPATH
환경 변수를 애플리케이션의 작업 디렉터리 위치로 설정해야 합니다. 이는 OpenTelemetry 자동 계측과 관련하여 알려진 문제 때문입니다. 이 문제에 대한 자세한 내용은 Python autoinstrumentation setting of PYTHONPATH is not compliant를 참조하세요. Django 애플리케이션의 경우 추가 필수 구성이 있으며, OpenTelemetry Python 설명서
에서 설명합니다. --noreload
플래그를 사용하여 자동 재로드를 방지합니다.DJANGO_SETTINGS_MODULE
환경 변수를 Django 애플리케이션settings.py
파일의 위치로 설정합니다. 이렇게 하면 OpenTelemetry가 올바르게 액세스하여 Django 설정에 통합할 수 있습니다.
Python 애플리케이션에 WSGI 서버를 사용하는 경우 이 섹션의 다음 단계 외에도 WSGI 서버를 사용하는 Python 애플리케이션에 대한 Application Signals 데이터 없음 섹션을 참조하여 Application Signals 작동 정보를 확인하세요.
CloudWatch 에이전트를 사용하여 Amazon ECS에서 Python 애플리케이션 계측
먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
CloudWatch 에이전트 사이드카 정의를 추가합니다. 이렇게 하려면 애플리케이션의 작업 정의에
ecs-cwagent
라는 새 컨테이너를 추가합니다.$REGION
을 실제 리전 이름으로 바꿉니다.$IMAGE
를 Amazon Elastic Container Registry의 최신 CloudWatch 컨테이너 이미지 경로로 바꿉니다. 자세한 내용은 Amazon ECR의 cloudwatch-agent를 참조하세요. 대신 대몬 전략으로 CloudWatch 에이전트를 활성화하려면 대몬 전략을 사용하여 배포의 지침을 참조하세요.
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION
", "awslogs-stream-prefix": "ecs" } } }애플리케이션의 작업 정의에 새 컨테이너
init
를 추가합니다.$IMAGE
를 AWS Distro for OpenTelemetry Amazon ECR 이미지 리포지토리의 최신 이미지로 바꿉니다. { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-python" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
애플리케이션 컨테이너에 다음 환경 변수를 추가합니다.
환경 변수 Application Signals를 활성화하도록 설정 OTEL_RESOURCE_ATTRIBUTES
다음 정보를 키-값 페어로 지정합니다.
service.name
은 서비스 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 이 키에 대한 값을 제공하지 않으면 기본값인UnknownService
가 사용됩니다.deployment.environment
는 애플리케이션이 실행되는 환경을 설정합니다. 이는 Application Signals 대시보드에서 애플리케이션의 호스팅 위치 환경으로 표시됩니다. 이 인수를 지정하지 않으면generic:default
의 기본값이 사용됩니다.
이 속성 키는 Application Signals에서만 사용되며 X-Ray 트레이스 주석 및 CloudWatch 지표 측정기준으로 변환됩니다.
(선택 사항) Application Signals의 로그 상관 관계를 활성화하려면 추가 환경 변수
aws.log.group.names
를 애플리케이션 로그의 로그 그룹 이름으로 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우$YOUR_APPLICATION_LOG_GROUP
을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(&
)를 사용하여 로그 그룹을 구분할 수 있습니다.aws.log.group.names=log-group-1&log-group-2
지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 로그 상관 관계에 대한 지표 활성화 단원을 참조하십시오. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 로그 상관 관계에 대한 추적 활성화 단원을 참조하십시오.OTEL_AWS_APPLICATION_SIGNALS_ENABLED
컨테이너가 X-Ray 트레이스와 CloudWatch 지표를 Application Signals로 전송하기 시작하게 하려면
true
로 설정합니다.OTEL_METRICS_EXPORTER
다른 지표 내보내기를 비활성화하려면
none
으로 설정합니다.OTEL_EXPORTER_OTLP_PROTOCOL
http/protobuf
로 설정하여 HTTP를 사용하여 지표 및 추적을 CloudWatch에 전송합니다.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
CloudWatch 사이드카로 지표를 전송하려면
http://127.0.0.1:4316/v1/metrics
로 설정합니다.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
CloudWatch 사이드카로 트레이스를 전송하려면
http://127.0.0.1:4316/v1/traces
로 설정합니다.OTEL_TRACES_SAMPLER
X-Ray를 트레이스 샘플러로 설정하려면 이를
xray
로 설정합니다.OTEL_PROPAGATORS
전파자 중 하나로
xray
를 추가합니다.OTEL_PYTHON_DISTRO
aws_distro
로 설정하여 ADOT Python 계측을 사용합니다.OTEL_PYTHON_CONFIGURATOR
aws_configuration
으로 설정하여 ADOT Python 구성을 사용합니다.PYTHONPATH
컨테이너 내 애플리케이션 작업 디렉터리의 위치로
$APP_PATH
를 바꿉니다. 이는 Python 인터프리터가 애플리케이션 모듈을 찾는 데 필요합니다.DJANGO_SETTINGS_MODULE
Django 애플리케이션에만 필요합니다. Django 애플리케이션
settings.py
파일의 위치로 설정합니다.$PATH_TO_SETTINGS
를 바꿉니다.이 절차의 1단계에서 정의한 볼륨을
opentelemetry-auto-instrumentation-python
을 마운트합니다. 지표 및 추적과의 로그 상관 관계를 활성화할 필요가 없는 경우 Python 애플리케이션에 대한 다음 예제를 사용합니다. 로그 상관 관계를 활성화하려면 다음 단계를 대신 참조하세요.{ "name": "
my-app
", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME
" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }(선택 사항) 로그 상관 관계를 활성화하려면 볼륨을 마운트하기 전에 다음을 수행하세요.
OTEL_RESOURCE_ATTRIBUTES
에서 애플리케이션의 로그 그룹에 대한 추가 환경 변수aws.log.group.names
를 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우$YOUR_APPLICATION_LOG_GROUP
을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(&
)를 사용하여 로그 그룹을 구분할 수 있습니다.aws.log.group.names=log-group-1&log-group-2
지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 로그 상관 관계에 대한 지표 활성화 단원을 참조하십시오. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 로그 상관 관계에 대한 추적 활성화 단원을 참조하십시오.다음은 예입니다. 로그 상관 관계를 활성화하려면 이 절차의 1단계에서 정의한
opentelemetry-auto-instrumentation-python
볼륨을 마운트할 때 이 예제를 사용하세요.{ "name": "
my-app
", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP
,service.name=$SVC_NAME
" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
- .NET
-
CloudWatch 에이전트를 사용하여 Amazon ECS에서 애플리케이션 계측
먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
CloudWatch 에이전트 사이드카 정의를 추가합니다. 이렇게 하려면 애플리케이션의 작업 정의에
ecs-cwagent
라는 새 컨테이너를 추가합니다.$REGION
을 실제 리전 이름으로 바꿉니다.$IMAGE
를 Amazon Elastic Container Registry의 최신 CloudWatch 컨테이너 이미지 경로로 바꿉니다. 자세한 내용은 Amazon ECR의 cloudwatch-agent를 참조하세요. 대신 대몬 전략으로 CloudWatch 에이전트를 활성화하려면 대몬 전략을 사용하여 배포의 지침을 참조하세요.
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION
", "awslogs-stream-prefix": "ecs" } } }애플리케이션의 작업 정의에 새 컨테이너
init
를 추가합니다.$IMAGE
를 AWS Distro for OpenTelemetry Amazon ECR 이미지 리포지토리의 최신 이미지로 바꿉니다. Linux 컨테이너 인스턴스의 경우 다음을 사용합니다.
{ "name": "init", "image": "
$IMAGE
", "essential": false, "command": [ "cp", "-a", "autoinstrumentation/.", "/otel-auto-instrumentation" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }Windows Server 컨테이너 인스턴스의 경우 다음을 사용합니다.
{ "name": "init", "image": "
$IMAGE
", "essential": false, "command": [ "CMD", "/c", "xcopy", "/e", "C:\\autoinstrumentation\\*", "C:\\otel-auto-instrumentation", "&&", "icacls", "C:\\otel-auto-instrumentation", "/grant", "*S-1-1-0:R", "/T" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ] }애플리케이션 컨테이너가 시작되기 전에 컨테이너가 완료되도록
init
컨테이너에 종속성을 추가합니다."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
애플리케이션 컨테이너에 다음 환경 변수를 추가합니다. .NET용 AWS Distro for OpenTelemetry 자동 계측 에이전트
버전 1.1.0 이상을 사용해야 합니다. 환경 변수 Application Signals를 활성화하도록 설정 OTEL_RESOURCE_ATTRIBUTES
다음 정보를 키-값 페어로 지정합니다.
service.name
은 서비스 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 이 키에 대한 값을 제공하지 않으면 기본값인UnknownService
가 사용됩니다.deployment.environment
는 애플리케이션이 실행되는 환경을 설정합니다. 이는 Application Signals 대시보드에서 애플리케이션의 호스팅 위치 환경으로 표시됩니다. 이 인수를 지정하지 않으면generic:default
의 기본값이 사용됩니다.
이 속성 키는 Application Signals에서만 사용되며 X-Ray 트레이스 주석 및 CloudWatch 지표 측정기준으로 변환됩니다.
OTEL_AWS_APPLICATION_SIGNALS_ENABLED
컨테이너가 X-Ray 트레이스와 CloudWatch 지표를 Application Signals로 전송하기 시작하게 하려면
true
로 설정합니다.OTEL_METRICS_EXPORTER
다른 지표 내보내기를 비활성화하려면
none
으로 설정합니다.OTEL_LOGS_EXPORTER
다른 로그 내보내기를 비활성화하려면
none
으로 설정합니다.OTEL_EXPORTER_OTLP_PROTOCOL
HTTP를 사용하여 지표와 트레이스를 Application Signals로 전송하려면
http/protobuf
로 설정합니다.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
CloudWatch 사이드카로 지표를 전송하려면
http://localhost:4316/v1/metrics
로 설정합니다.OTEL_EXPORTER_OTLP_ENDPOINT
CloudWatch 사이드카로 트레이스를 전송하려면
http://localhost:4316/
로 설정합니다.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
CloudWatch 사이드카로 트레이스를 전송하려면
http://localhost:4316/v1/traces
로 설정합니다.OTEL_DOTNET_AUTO_HOME
ADOT .NET 자동 계측의 설치 위치에 설정합니다.
OTEL_DOTNET_AUTO_PLUGINS
AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation
으로 설정하여 Application Signals 플러그인을 활성화합니다.CORECLR_ENABLE_PROFILING
1
로 설정하여 프로파일러를 활성화합니다.CORECLR_PROFILER
프로파일러의 CLSID로서
{918728DD-259F-4A6A-AC2B-B85E1B658318}
로 설정합니다.CORECLR_PROFILER_PATH
이를 프로파일러의 경로로 설정합니다.
Linux에서는
${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so
로 설정Windows Server에서는
${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dll
로 설정DOTNET_ADDITIONAL_DEPS
이를
${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps
의 폴더 경로로 설정합니다.DOTNET_SHARED_STORE
이를
${OTEL_DOTNET_AUTO_HOME}/store
의 폴더 경로로 설정합니다.DOTNET_STARTUP_HOOKS
이를 기본 애플리케이션의 진입점 이전에 실행할 관리형 어셈블리
${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll
의 경로로 설정합니다.이 절차의 1단계에서 정의한 볼륨을
opentelemetry-auto-instrumentation
을 마운트합니다. Linux의 경우 다음을 사용합니다.{ "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "/otel-auto-instrumentation/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "/otel-auto-instrumentation/AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "/otel-auto-instrumentation/store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "/otel-auto-instrumentation/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "/otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
Windows Server의 경우 다음을 사용합니다.
{ "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "C:\\otel-auto-instrumentation\\win-x64\\OpenTelemetry.AutoInstrumentation.Native.dll" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "C:\\otel-auto-instrumentation\\AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "C:\\otel-auto-instrumentation\\store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "C:\\otel-auto-instrumentation\\net\\OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "C:\\otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
- Node.js (Preview)
-
CloudWatch 에이전트를 사용하여 Amazon ECS에서 애플리케이션 계측
먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.
"volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
CloudWatch 에이전트 사이드카 정의를 추가합니다. 이렇게 하려면 애플리케이션의 작업 정의에
ecs-cwagent
라는 새 컨테이너를 추가합니다.$REGION
을 실제 리전 이름으로 바꿉니다.$IMAGE
를 Amazon Elastic Container Registry의 최신 CloudWatch 컨테이너 이미지 경로로 바꿉니다. 자세한 내용은 Amazon ECR의 cloudwatch-agent를 참조하세요. 대신 대몬 전략으로 CloudWatch 에이전트를 활성화하려면 대몬 전략을 사용하여 배포의 지침을 참조하세요.
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION
", "awslogs-stream-prefix": "ecs" } } }애플리케이션의 작업 정의에 새 컨테이너
init
를 추가합니다.$IMAGE
를 AWS Distro for OpenTelemetry Amazon ECR 이미지 리포지토리의 최신 이미지로 바꿉니다. { "name": "init", "image": "
$IMAGE
", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-node" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], }애플리케이션 컨테이너에 다음 환경 변수를 추가합니다.
환경 변수 Application Signals를 활성화하도록 설정 OTEL_RESOURCE_ATTRIBUTES
다음 정보를 키-값 페어로 지정합니다.
service.name
은 서비스 이름을 설정합니다. Application Signals 대시보드에 애플리케이션의 서비스 이름으로 표시됩니다. 이 키에 대한 값을 제공하지 않으면 기본값인UnknownService
가 사용됩니다.deployment.environment
는 애플리케이션이 실행되는 환경을 설정합니다. 이는 Application Signals 대시보드에서 애플리케이션의 호스팅 위치 환경으로 표시됩니다. 이 인수를 지정하지 않으면generic:default
의 기본값이 사용됩니다.
이 속성 키는 Application Signals에서만 사용되며 X-Ray 트레이스 주석 및 CloudWatch 지표 측정기준으로 변환됩니다.
(선택 사항) Application Signals의 로그 상관 관계를 활성화하려면 추가 환경 변수
aws.log.group.names
를 애플리케이션 로그의 로그 그룹 이름으로 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우$YOUR_APPLICATION_LOG_GROUP
을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(&
)를 사용하여 로그 그룹을 구분할 수 있습니다.aws.log.group.names=log-group-1&log-group-2
지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 로그 상관 관계에 대한 지표 활성화 단원을 참조하십시오. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 로그 상관 관계에 대한 추적 활성화 단원을 참조하십시오.OTEL_AWS_APPLICATION_SIGNALS_ENABLED
컨테이너가 X-Ray 트레이스와 CloudWatch 지표를 Application Signals로 전송하기 시작하게 하려면
true
로 설정합니다.OTEL_METRICS_EXPORTER
다른 지표 내보내기를 비활성화하려면
none
으로 설정합니다.OTEL_LOGS_EXPORTER
다른 로그 내보내기를 비활성화하려면
none
으로 설정합니다.OTEL_EXPORTER_OTLP_PROTOCOL
OTLP/HTTP와 protobuf를 사용하여 지표와 트레이스를 Application Signals로 전송하려면
http/protobuf
로 설정합니다.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
CloudWatch 사이드카로 지표를 전송하려면
http://localhost:4316/v1/metrics
로 설정합니다.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
CloudWatch 사이드카로 트레이스를 전송하려면
http://localhost:4316/v1/traces
로 설정합니다.OTEL_TRACES_SAMPLER
X-Ray를 트레이스 샘플러로 설정하려면 이를
xray
로 설정합니다.OTEL_PROPAGATORS
전파자 중 하나로
xray
를 설정합니다.NODE_OPTIONS
--require
로 설정합니다.AWS_ADOT_NODE_INSTRUMENTATION_PATH
AWS_ADOT_NODE_INSTRUMENTATION_PATH
를 AWS Distro for OpenTelemetry Node.js 자동 계측이 저장된 경로로 바꿉니다. 예제:/otel-auto-instrumentation-node/autoinstrumentation.js
이 절차의 1단계에서 정의한 볼륨을
opentelemetry-auto-instrumentation
을 마운트합니다. 지표 및 추적과의 로그 상관 관계를 활성화할 필요가 없는 경우 Node.js 애플리케이션에 대한 다음 예를 사용합니다. 로그 상관 관계를 활성화하려면 다음 단계를 대신 참조하세요.애플리케이션 컨테이너의 경우 애플리케이션 컨테이너가 시작되기 전에 컨테이너가 완료되도록
init
컨테이너에 종속성을 추가합니다.{ "name": "
my-app
", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME
" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }(선택 사항) 로그 상관 관계를 활성화하려면 볼륨을 마운트하기 전에 다음을 수행하세요.
OTEL_RESOURCE_ATTRIBUTES
에서 애플리케이션의 로그 그룹에 대한 추가 환경 변수aws.log.group.names
를 설정합니다. 이렇게 하면 애플리케이션의 추적과 지표를 로그 그룹의 관련 로그 항목과 상관시킬 수 있습니다. 이 변수의 경우$YOUR_APPLICATION_LOG_GROUP
을 애플리케이션의 로그 그룹 이름으로 바꿉니다. 로그 그룹이 여러 개 있는 경우 다음 예와 같이 앰퍼샌드(&
)를 사용하여 로그 그룹을 구분할 수 있습니다.aws.log.group.names=log-group-1&log-group-2
지표와 로그의 상관 관계를 활성화하려면 이 현재 환경 변수를 설정하는 것으로 충분합니다. 자세한 내용은 로그 상관 관계에 대한 지표 활성화 단원을 참조하십시오. 추적과 로그의 상관 관계를 활성화하려면 애플리케이션의 로깅 구성도 변경해야 합니다. 자세한 내용은 로그 상관 관계에 대한 추적 활성화 단원을 참조하십시오.다음은 예입니다. 이 예제를 사용하여 이 절차의 1단계에서 정의한
opentelemetry-auto-instrumentation
볼륨을 마운트할 때 로그 상관 관계를 활성화합니다.{ "name": "
my-app
", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP
,service.name=$SVC_NAME
" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
5단계: 애플리케이션 배포
작업 정의의 새 버전을 생성하여 애플리케이션 클러스터에 배포합니다. 새로 생성된 작업에는 세 개의 컨테이너가 표시되어야 합니다.
init
– Application Signals를 초기화하는 데 필요한 컨테이너입니다.ecs-cwagent
– CloudWatch 에이전트를 실행하는 컨테이너입니다.
– 설명서의 예제 애플리케이션 컨테이너입니다. 실제 워크로드에서는 이 특정 컨테이너가 존재하지 않거나 자체 서비스 컨테이너로 대체될 수 있습니다.my-app