사이드카 전략을 사용한 배포 - Amazon CloudWatch

사이드카 전략을 사용한 배포

1단계: 계정에서 Application Signals 활성화

이 계정에서 아직 Application Signals를 활성화하지 않은 경우 서비스를 검색하는 데 필요한 권한을 Application Signals에 부여해야 합니다. 그렇게 하려면 다음을 수행합니다. 계정에 대해 한 번만 수행하면 됩니다.

애플리케이션에 대해 Application Signals 활성화
  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 서비스를 선택합니다.

  3. 서비스 검색 시작을 선택합니다.

  4. 확인란을 선택하고 서비스 검색 시작을 선택합니다.

    계정에서 처음으로 이 단계를 완료하면 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에서 애플리케이션 계측
  1. 먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. 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" } } }
  3. 애플리케이션의 작업 정의에 새 컨테이너 init를 추가합니다. $IMAGEAWS 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 } ] }
  4. 애플리케이션 컨테이너에 다음 환경 변수를 추가합니다. 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

  5. 이 절차의 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 애플리케이션 계측
  1. 먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
  2. 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" } } }
  3. 애플리케이션의 작업 정의에 새 컨테이너 init를 추가합니다. $IMAGEAWS 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 } ] }
  4. 애플리케이션 컨테이너에 다음 환경 변수를 추가합니다.

    환경 변수 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를 바꿉니다.

  5. 이 절차의 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 } ] }
  6. (선택 사항) 로그 상관 관계를 활성화하려면 볼륨을 마운트하기 전에 다음을 수행하세요. 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에서 애플리케이션 계측
  1. 먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. 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" } } }
  3. 애플리케이션의 작업 정의에 새 컨테이너 init를 추가합니다. $IMAGEAWS 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 } ] }
  4. 애플리케이션 컨테이너가 시작되기 전에 컨테이너가 완료되도록 init 컨테이너에 종속성을 추가합니다.

    "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
  5. 애플리케이션 컨테이너에 다음 환경 변수를 추가합니다. .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의 경로로 설정합니다.

  6. 이 절차의 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에서 애플리케이션 계측
  1. 먼저 바인드 탑재를 지정합니다. 다음 단계에서 이 볼륨은 컨테이너 간에 파일을 공유하는 데 사용됩니다. 이 바인드 탑재는 이 절차의 뒷부분에서 사용합니다.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
  2. 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" } } }
  3. 애플리케이션의 작업 정의에 새 컨테이너 init를 추가합니다. $IMAGEAWS 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 } ], }
  4. 애플리케이션 컨테이너에 다음 환경 변수를 추가합니다.

    환경 변수 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

  5. 이 절차의 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" } ] }
  6. (선택 사항) 로그 상관 관계를 활성화하려면 볼륨을 마운트하기 전에 다음을 수행하세요. 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– 설명서의 예제 애플리케이션 컨테이너입니다. 실제 워크로드에서는 이 특정 컨테이너가 존재하지 않거나 자체 서비스 컨테이너로 대체될 수 있습니다.