Monitoree las tareas de Amazon ECS que se ejecutan en AWS Fargate al desplegar OpenTelemetry Collector Contrib como contenedor sidecar. Esta guía completa lo guía a través de la creación de definiciones de tareas, la configuración del recolector y la configuración del monitoreo para sus workloads de ECS sin servidor.
Pasos de instalación
Siga estos pasos para configurar el monitoreo de sus tareas de ECS Fargate.
Antes de que empieces
Asegúrese de que su entorno cumpla con estos requisitos:
Guarde su clave de licencia de New Relic
Guarde su clave de licencia como un parámetro de Systems Manager (SSM) para almacenar de forma segura las credenciales para el OpenTelemetry Collector:
$aws ssm put-parameter \> --name "/newrelic-infra/ecs/license-key" \> --type SecureString \> --description 'New Relic license key for ECS monitoring' \> --value "YOUR_NEW_RELIC_LICENSE_KEY"Crear una política de IAM y un rol de ejecución
Crea una política de IAM para que tus contenedores de ECS puedan recuperar de forma segura la clave de licencia de New Relic:
$aws iam create-policy \> --policy-name "NewRelicSSMLicenseKeyReadAccess" \> --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ssm:GetParameters"],"Resource":["arn:aws:ssm:*:*:parameter/newrelic-infra/ecs/license-key"]}]}' \> --description "Provides read access to the New Relic SSM license key parameter"Cree una función de IAM para utilizarla como función de ejecución de tareas:
$aws iam create-role \> --role-name "NewRelicECSTaskExecutionRole" \> --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}]}' \> --description "ECS task execution role for New Relic infrastructure"Adjunte las políticas administradas requeridas al rol:
$# Attach the standard ECS task execution policy$aws iam attach-role-policy \> --role-name "NewRelicECSTaskExecutionRole" \> --policy-arn "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"$
$# Attach the New Relic SSM license key read access policy$aws iam attach-role-policy \> --role-name "NewRelicECSTaskExecutionRole" \> --policy-arn "arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/NewRelicSSMLicenseKeyReadAccess"Almacenar configuración del recolector
Almacene la configuración del Collector de OpenTelemetry en el almacén de parámetros de AWS Systems Manager para que pueda administrar y actualizar los ajustes sin reconstruir las imágenes de contenedor:
$aws ssm put-parameter \> --name "/ecs/otel-collector/fargate-config" \> --type "String" \> --value "$(cat <<EOF$receivers:$ awsecscontainermetrics:$ collection_interval: <COLLECTION_INTERVAL>$
$processors:$ metricstransform/containers:$ transforms:$ - include: container.cpu.utilized$ action: insert$ new_name: container.cpu.utilization$ - include: container.memory.usage$ action: insert$ new_name: container.memory.usage.total$ - include: container.storage.read_bytes$ action: insert$ new_name: container.blockio.io_service_bytes_recursive$ operations:$ - action: add_label$ new_label: operation$ new_value: read$ - include: container.storage.write_bytes$ action: insert$ new_name: container.blockio.io_service_bytes_recursive$ operations:$ - action: add_label$ new_label: operation$ new_value: write$
$ batch:$ send_batch_size: <SEND_BATCH_SIZE>$ timeout: <BATCH_TIMEOUT>$
$ resource:$ attributes:$ - key: ClusterName$ from_attribute: aws.ecs.cluster.name$ action: insert$ - key: ServiceName$ from_attribute: aws.ecs.service.name$ action: insert$ - key: TaskId$ from_attribute: aws.ecs.task.id$ action: insert$ - key: TaskDefinitionFamily$ from_attribute: aws.ecs.task.family$ action: insert$ - key: LaunchType$ from_attribute: aws.ecs.launch_type$ action: insert$ - key: cloud.platform$ value: \"aws_ecs\"$ action: upsert$ - key: docker.host$ from_attribute: aws.ecs.task.id$ action: insert$ - key: docker.imageName$ from_attribute: container.image.name$ action: insert$ - key: docker.containerId$ from_attribute: container.id$ action: insert$ - key: docker.state$ from_attribute: aws.ecs.container.know_status$ action: insert$
$
$exporters:$ otlphttp:$ endpoint: https://otlp.nr-data.net:443$ headers:$ api-key: \${NEW_RELIC_LICENSE_KEY}$
$ debug:$ verbosity: basic$
$service:$ pipelines:$ metrics/containers:$ receivers: [awsecscontainermetrics]$ processors: [metricstransform/containers, resource, batch]$ exporters: [otlphttp, debug]$EOF$)"Parámetro de configuración
Los siguientes parámetros se pueden personalizar en la configuración de OpenTelemetry Collector:
Parámetro | Descripción |
|---|---|
| El intervalo en segundos para recopilar métricas del extremo de métricas del contenedor de ECS. |
| Límite de memoria para el OpenTelemetry Collector en MiB |
| Número de métricas a agrupar en lotes antes de enviarlas a New Relic |
| Tiempo máximo de espera antes de enviar un lote |
| Tiempo de espera para procesadores de detección de recursos |
Crear definición de tarea
Cree una nueva definición de tarea de ECS para Fargate que incluya el contenedor sidecar de OpenTelemetry Collector. Elija la definición de tarea adecuada para su plataforma de contenedores:
Parámetros de definición de tarea
Los siguientes parámetros se pueden personalizar en la definición de su tarea de ECS Fargate:
Parámetro | Descripción |
|---|---|
| Unidades totales de CPU para la tarea de Fargate |
| Memoria total para la tarea de Fargate en MiB |
| Unidades de CPU asignadas a su contenedor de aplicación |
| Memoria asignada a su contenedor de aplicación en MiB |
| Unidades de CPU asignadas al OpenTelemetry Collector |
| Reserva de memoria para el OpenTelemetry Collector en MiB |
| Nombre del grupo de logs de CloudWatch para su contenedor de aplicación |
| Nombre del grupo de logs de CloudWatch para el OpenTelemetry Collector |
| Región de AWS para logs de CloudWatch |
| Prefijo del flujo de logs para su contenedor de aplicación |
| Prefijo del flujo de logs para el OpenTelemetry Collector |
Sugerencia
Diferencias clave entre los contenedores de Fargate de Linux y Windows:
- Plataforma runtime: Windows requiere explícito
operatingSystemFamily: "WINDOWS_SERVER_2022_FULL" - Imágenes: Windows utiliza imágenes de contenedor específicas de Windows
- Punto de entrada: el recolector de Windows especifica
C:\\otelcol-contrib.execomo punto de entrada - Asignación de memoria: utiliza
memoryReservationpara una administración de memoria flexible
Importante
Reemplace los valores de YOUR_ACCOUNT y de la región por el ID de su cuenta de AWS y la región de AWS reales.
Desplegar y ejecutar la tarea
Despliegue la definición de su tarea en su clúster de ECS:
Registre la definición de la tarea:
bash$aws ecs register-task-definition --cli-input-json file://task-definition.jsonCrear un servicio:
bash$aws ecs create-service \>--cluster your-cluster-name \>--service-name otel-monitoring-service \>--task-definition otel-ecs-fargate-metrics:1 \>--desired-count 1 \>--launch-type FARGATE \>--network-configuration "awsvpcConfiguration={subnets=[subnet-12345,subnet-67890],securityGroups=[sg-abcdef],assignPublicIp=ENABLED}"
Verificar la recopilación de datos
Verifique que sus datos estén fluyendo a New Relic:
Verifique el estado de OpenTelemetry Collector: revise los logs del contenedor para confirmar que el recolector se esté ejecutando sin errores y se conecte correctamente a New Relic:
bash$aws logs get-log-events \>--log-group-name "/ecs/otel-collector-fargate" \>--log-stream-name "otel/otel-collector/TASK_ID"Verificar los datos en la New Relic UI: navegue a one.newrelic.com > All Capabilities > Infrastructure para confirmar que sus contenedores ECS aparecen con métricas. Para obtener orientación detallada sobre cómo explorar sus datos, consulte Buscar y consultar sus datos de monitoreo de ECS.
Diferencias de configuración con EC2
Diferencias clave al ejecutar en Fargate:
- Sin acceso a nivel de host: no se puede acceder a las métricas del host subyacente como en EC2
- Modo de red: debe usar el modo de red
awsvpc - Restricciones de recursos: limitado por las combinaciones de CPU/memoria de Fargate
- Almacenamiento: solo almacenamiento efímero, sin volúmenes persistentes
- Información valiosa del contenedor: depende del extremo de metadatos de tareas v4 para las estadísticas del contenedor
Próximos pasos
Después de configurar el monitoreo, puedes:
- Crea dashboards personalizados para tus métricas de Fargate
- Configura alertas para problemas a nivel de contenedor y tarea
- Correlacionar métricas de ECS con trazas y logs de la aplicación