Amazon Managed Service for Prometheus로 애플리케이션 지표 내보내기
Amazon ECS는 태스크 수준 CPU, 메모리, 네트워크 및 스토리지 지표와 사용자 정의 애플리케이션 지표를 Amazon Managed Service for Prometheus로 내보내기를 지원합니다. 이는 태스크 정의에 AWS Distro for OpenTelemetry 사이드카 컨테이너를 추가하는 방식으로 수행됩니다. Amazon ECS 콘솔은 새 작업 정의를 생성할 때 지표 수집 사용 옵션을 추가하여 이 프로세스를 간소화합니다. 자세한 내용은 콘솔을 사용하여 Amazon ECS 작업 정의 생성 단원을 참조하십시오.
지표는 Amazon Managed Service for Prometheus로 내보내지며 Amazon Managed Grafana 대시보드를 사용하여 볼 수 있습니다. 애플리케이션은 Prometheus 라이브러리 또는 OpenTelemetry SDK로 계측되어야 합니다. OpenTelemetry SDK로 애플리케이션 계측에 대한 자세한 정보는 AWS Distro for OpenTelemetry 설명서의 AWS Distro for OpenTelemetry 소개
Prometheus 라이브러리를 사용할 때 애플리케이션은 지표 데이터를 스크레이핑하는 데 사용되는 /metrics
엔드포인트를 노출해야 합니다. Prometheus 라이브러리로 애플리케이션 계측에 대한 자세한 정보는 Prometheus 설명서의 Prometheus 클라이언트 라이브러리
고려 사항
Amazon Managed Service for Prometheus에 애플리케이션 지표를 전송하기 위해 Fargate의 Amazon ECS와 AWS Distro for OpenTelemetry 통합을 사용하는 경우 다음 사항을 고려해야 합니다.
-
AWS Distro for OpenTelemetry 통합은 Fargate에서 호스팅되는 Amazon ECS 워크로드 및 Amazon EC2 인스턴스에서 호스팅되는 Amazon ECS 워크로드에 대해 지원됩니다. 외부 인스턴스는 현재 지원되지 않습니다.
-
기본적으로 AWS Distro for OpenTelemetry에는 Amazon Managed Service for Prometheus로 내보낼 때 애플리케이션 지표에 사용 가능한 모든 태스크 수준 차원이 포함됩니다. 애플리케이션을 계측하여 차원을 추가할 수도 있습니다. 자세한 정보는 AWS Distro for OpenTelemetry 설명서의 Amazon Managed Service for Prometheus용 Prometheus Remote Write Exporter 시작하기(Getting Started with Prometheus Remote Write Exporter for Amazon Managed Service for Prometheus)
를 참조하세요.
AWS Distro for OpenTelemetry와 Amazon Managed Service for Prometheus 통합에 필요한 IAM 권한
AWS Distro for OpenTelemetry 사이드카를 사용하여 Amazon ECS와 Amazon Managed Service for Prometheus를 통합하려면 태스크 IAM 역할을 생성하고 태스크 정의에서 역할을 지정해야 합니다. 이 태스크 IAM 역할은 태스크 정의를 등록하기 전에 아래 단계를 사용하여 수동으로 생성해야 합니다.
AWS Distro for OpenTelemetry 사이드카도 컨테이너 로그를 CloudWatch Logs로 라우팅하도록 구성하는 것이 좋습니다. 이 경우 태스크 실행 IAM 역할도 생성하고 태스크 정의에 지정해야 합니다. Amazon ECS 콘솔은 사용자를 대신하여 작업 실행 IAM 역할을 처리하지만 태스크 IAM 역할은 수동으로 생성해야 합니다. 태스크 실행 IAM 역할 생성에 대한 자세한 정보는 Amazon ECS 태스크 실행 IAM 역할 섹션을 참조하세요.
중요
AWS Distro for OpenTelemetry 통합을 사용하여 애플리케이션 추적 데이터도 수집하는 경우 태스크 IAM 역할에 해당 통합에 필요한 권한도 포함되어 있는지 확인합니다. 자세한 내용은 애플리케이션 추적 데이터를 사용하여 Amazon ECS 최적화 기회 식별 단원을 참조하십시오.
Elastic Container Service에 대한 서비스 역할을 생성하는 방법(IAM 콘솔)
AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
IAM 콘솔의 탐색 창에서 역할을 선택하고 역할 생성을 선택합니다.
-
신뢰할 수 있는 엔터티 유형에 AWS 서비스를 선택합니다.
-
서비스 또는 사용 사례의 경우 Elastic Container Service를 선택하고 Elastic Container Service 작업 사용 사례를 선택합니다.
-
Next(다음)를 선택합니다.
-
권한 추가 섹션에서 AmazonPrometheusRemoteWriteAccess를 검색하고 정책을 선택합니다.
-
(선택 사항) 권한 경계를 선택합니다. 이는 서비스 역할에서 가능한 고급 기능이며 서비스 링크된 역할은 아닙니다.
-
권한 경계 설정 섹션을 열고 최대 역할 권한을 관리하기 위한 권한 경계 사용을 선택합니다.
IAM은 계정의 AWS 관리형 또는 고객 관리형 정책 목록을 포함합니다.
정책을 선택하여 권한 경계를 사용하세요.
-
-
Next(다음)를 선택합니다.
-
역할의 목적을 식별하는 데 도움이 되는 역할 이름이나 역할 이름 접미사를 입력합니다.
중요
역할 이름을 지정할 때는 다음 사항에 유의하세요.
-
역할 이름은 AWS 계정 내에서 고유해야 하지만 대소문자를 구분하지는 않습니다.
예를 들어, 이름이
PRODROLE
과prodrole
, 두 가지로 지정된 역할을 만들지 마십시오. 역할 이름이 정책 또는 ARN의 일부로 사용되는 경우 역할 이름은 대소문자를 구분합니다. 그러나 로그인 프로세스와 같이 콘솔에서 역할 이름이 고객에게 표시되는 경우에는 역할 이름이 대소문자를 구분하지 않습니다. -
다른 엔터티가 역할을 참조할 수 있기 때문에 역할이 생성된 후에는 역할 이름을 편집할 수 없습니다.
-
-
(선택 사항)설명에 역할에 대한 설명을 입력합니다.
-
(선택 사항) 역할에 대한 사용 사례와 권한을 편집하려면 1단계: 신뢰할 수 있는 엔터티 선택 또는 2단계: 권한 추가 섹션에서 편집을 선택합니다.
-
(선택 사항) 태그를 키-값 페어로 연결하여 역할을 식별, 구성 또는 검색합니다. IAM에서 태그 사용에 대한 자세한 내용을 알아보려면 IAM 사용 설명서의 IAM 리소스에 태그 지정을 참조하세요.
-
역할을 검토한 다음 역할 생성을 선택합니다.
태스크 정의에서 AWS Distro for OpenTelemetry 사이드카 지정
Amazon ECS 콘솔은 지표 수집 사용 옵션으로 AWS Distro for OpenTelemetry 사이드카 컨테이너 생성 환경을 단순화합니다. 자세한 내용은 콘솔을 사용하여 Amazon ECS 작업 정의 생성 단원을 참조하십시오.
Amazon ECS 콘솔을 사용하지 않는 경우 태스크 정의에 AWS Distro for OpenTelemetry 사이드카 컨테이너를 수동으로 추가할 수 있습니다. 다음 태스크 정의 예는 Amazon Managed Service for Prometheus 통합을 위한 AWS Distro for OpenTelemetry 사이드카를 추가하기 위한 컨테이너 정의를 보여줍니다.
{ "family": "otel-using-cloudwatch", "taskRoleArn": "arn:aws:iam::111122223333:role/
AmazonECS_OpenTelemetryCloudWatchRole
", "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole
", "containerDefinitions": [{ "name": "aws-otel-emitter
", "image": "application-image
", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/aws-otel-emitter", "awslogs-region": "aws-region
", "awslogs-stream-prefix": "ecs" } }, "dependsOn": [{ "containerName": "aws-otel-collector", "condition": "START" }] }, { "name": "aws-otel-collector", "image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.30.0", "essential": true, "command": [ "--config=/etc/ecs/ecs-amp.yaml" ], "environment": [{ "name": "AWS_PROMETHEUS_ENDPOINT", "value": "https://aps-workspaces.aws-region
.amazonaws.com/workspaces/ws-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
/api/v1/remote_write" }], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector", "awslogs-region": "aws-region
", "awslogs-stream-prefix": "ecs" } } } ], "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "cpu": "1024", "memory": "3072" }