Uso del agente de CloudWatch para enviar registros de formato de métricas integradas
Para utilizar este método, instale primero el agente de CloudWatch para los servicios desde los que desea enviar registros con formato de métricas integradas y, a continuación, puede comenzar a enviar los eventos.
La versión del agente de CloudWatch debe ser 1.230621.0 o una posterior.
nota
No es necesario que se instale el agente de CloudWatch para enviar registros desde las funciones de Lambda.
Los tiempos de espera de las funciones Lambda no se administran automáticamente. Esto significa que si el tiempo de espera de su función se agota antes de que las métricas se vacíen, las métricas de esa invocación no se capturarán.
Installing the CloudWatch agent (Instalación del agente de CloudWatch)
Instale el agente de CloudWatch para cada servicio que deba enviar registros con formato de métricas integradas.
Instalación del agente de CloudWatch en EC2
Primero, instale el agente de CloudWatch en la instancia. Para obtener más información, consulte Instalación del agente de CloudWatch.
Una vez que haya instalado el agente, configúrelo para que escuche un puerto UDP o TCP para los registros de formato de métricas integradas. A continuación, se muestra un ejemplo de esta configuración que escucha el socket predeterminado tcp:25888
. Para obtener más información acerca de la configuración del agente, consulte Cree o edite de forma manual el archivo de configuración del agente de CloudWatch.
{ "logs": { "metrics_collected": { "emf": { } } } }
Instalación del agente de CloudWatch en Amazon ECS
La manera más fácil de implementar el agente de CloudWatch en Amazon ECS es ejecutarlo como sidecar al definirlo en la misma definición de tarea que su aplicación.
Creación de un archivo de configuración del agente
Cree el archivo de configuración del agente de CloudWatch localmente. En este ejemplo, la ruta relativa del archivo será amazon-cloudwatch-agent.json
.
Para obtener más información acerca de la configuración del agente, consulte Cree o edite de forma manual el archivo de configuración del agente de CloudWatch.
{ "logs": { "metrics_collected": { "emf": { } } } }
Envío de la configuración al almacén de parámetros SSM
Escriba el siguiente comando para publicar el archivo de configuración del agente de CloudWatch al almacén de parámetros de AWS Systems Manager (SSM).
aws ssm put-parameter \ --name "cwagentconfig" \ --type "String" \ --value "`cat amazon-cloudwatch-agent.json`" \ --region "{{region}}"
Configuración de la definición de la tarea
Configure la definición de tarea para utilizar el agente de CloudWatch y exponer el puerto TCP o UDP. La definición de tarea de ejemplo que debe utilizar depende del modo de red.
Observe que webapp
especifica la variable de entorno AWS_EMF_AGENT_ENDPOINT
. La biblioteca la utiliza y debe apuntar al punto de enlace que escucha el agente. Además, el cwagent
especifica el CW_CONFIG_CONTENT
como parámetro “valueFrom” que apunta a la configuración de SSM que creó en el paso anterior.
Esta sección contiene un ejemplo para el modo puente y un ejemplo para el modo host o awsvpc. Para obtener más ejemplos de cómo se puede configurar el agente de CloudWatch en Amazon ECS, consulte el Github samples repository
A continuación, se muestra un ejemplo del modo puente. Cuando se habilitan redes en modo puente, el agente debe enlazarse con la aplicación mediante el parámetro links
y debe hacerse referencia al mismo con el nombre del contenedor.
{ "containerDefinitions": [ { "name": "webapp", "links": [ "cwagent" ], "image": "my-org/web-app:latest", "memory": 256, "cpu": 256, "environment": [{ "name": "AWS_EMF_AGENT_ENDPOINT", "value": "tcp://cwagent:25888" }], }, { "name": "cwagent", "mountPoints": [], "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "memory": 256, "cpu": 256, "portMappings": [{ "protocol": "tcp", "containerPort": 25888 }], "environment": [{ "name": "CW_CONFIG_CONTENT", "valueFrom": "cwagentconfig" }], } ], }
A continuación, se muestra un ejemplo del modo de host o el modo awsvpc. Al ejecutarse en estos modos de red, se puede hacer referencia al agente a través de localhost
.
{ "containerDefinitions": [ { "name": "webapp", "image": "my-org/web-app:latest", "memory": 256, "cpu": 256, "environment": [{ "name": "AWS_EMF_AGENT_ENDPOINT", "value": "tcp://127.0.0.1:25888" }], }, { "name": "cwagent", "mountPoints": [], "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "memory": 256, "cpu": 256, "portMappings": [{ "protocol": "tcp", "containerPort": 25888 }], "environment": [{ "name": "CW_CONFIG_CONTENT", "valueFrom": "cwagentconfig" }], } ], }
nota
En el modo awsvpc, debe proporcionar una dirección IP pública a la VPC (solo para Fargate), configurar una gateway NAT o configurar un punto de enlace de la VPC de CloudWatch Logs. Para obtener más información acerca de cómo configurar una NAT, consulte Gateways NAT. Para obtener más información acerca de cómo se configura un punto de enlace de la VPC de CloudWatch Logs, consulte Using CloudWatch Logs with Interface VPC Endpoints (Uso de CloudWatch Logs con los puntos de enlace de la VPC de tipo interfaz).
A continuación, se muestra un ejemplo de cómo asignar una dirección IP pública a una tarea que utiliza el tipo de lanzamiento de Fargate.
aws ecs run-task \ --cluster {{cluster-name}} \ --task-definition cwagent-fargate \ --region {{region}} \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[{{subnetId}}],securityGroups=[{{sgId}}],assignPublicIp=ENABLED}"
Seguro de permisos
Asegúrese de que el rol de IAM que ejecuta las tareas tiene permiso para leer datos del almacén de parámetros SSM. Puede añadir este permiso asociando la política AmazonSSMReadOnlyAccess. Para ello, introduzca el siguiente comando.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \ --role-name CWAgentECSExecutionRole
Instalación del agente de CloudWatch en Amazon EKS
Algunas partes de este proceso se pueden omitir si ya ha instalado CloudWatch Container Insights en este clúster.
Permisos
Si aún no ha instalado Container Insights, asegúrese primero de que los nodos de Amazon EKS tienen los permisos de IAM adecuados. Deben tener la CloudWatchAgentServerPolicy asociada. Para obtener más información, consulte Verificación de los requisitos previos de .
Creación de ConfigMap
Cree un ConfigMap para el agente. El ConfigMap también indica al agente que escuche un puerto TCP o UDP. Utilice el siguiente ConfigMap.
# cwagent-emf-configmap.yaml apiVersion: v1 data: # Any changes here must not break the JSON format cwagentconfig.json: | { "agent": { "omit_hostname": true }, "logs": { "metrics_collected": { "emf": { } } } } kind: ConfigMap metadata: name: cwagentemfconfig namespace: default
Si ya ha instalado Container Insights, añada la siguiente línea "emf": { }
a su ConfigMap existente.
Aplicación del ConfigMap
Escriba el siguiente comando para aplicar el ConfigMap.
kubectl apply -f cwagent-emf-configmap.yaml
Implementación del agente
Para implementar el agente de CloudWatch como un sidecar, agregue el agente a la definición del pod, como en el ejemplo siguiente.
apiVersion: v1 kind: Pod metadata: name: myapp namespace: default spec: containers: # Your container definitions go here - name: web-app image: my-org/web-app:latest # CloudWatch Agent configuration - name: cloudwatch-agent image: public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest imagePullPolicy: Always resources: limits: cpu: 200m memory: 100Mi requests: cpu: 200m memory: 100Mi volumeMounts: - name: cwagentconfig mountPath: /etc/cwagentconfig ports: # this should match the port configured in the ConfigMap - protocol: TCP hostPort: 25888 containerPort: 25888 volumes: - name: cwagentconfig configMap: name: cwagentemfconfig
Uso del agente de CloudWatch para enviar registros de formato de métricas integradas
Una vez que el agente de CloudWatch esté instalado y en ejecución, podrá enviar los registros con formato de métricas integradas a través de TCP o UDP. Hay dos requisitos al enviar los registros a través del agente:
-
Los registros deben contener una
LogGroupName
clave que indique al agente qué grupo de registros utilizar. -
Cada evento de registro debe estar en una sola línea. En otras palabras, un evento de registro no puede contener el carácter de nueva línea (\n).
Los eventos de registro también deben seguir la especificación de formato de métricas integradas. Para obtener más información, consulte Especificación: Formato de métricas integradas .
Si planea crear alarmas a partir de métricas creadas con un formato de métrica integrado, consulte Configurar alarmas en las métricas creadas con el formato de métrica integrado para obtener recomendaciones.
A continuación, se muestra un ejemplo de envío manual de eventos de registro desde un shell Bash de Linux. En su lugar, puede utilizar las interfaces de socket UDP proporcionadas por el lenguaje de programación que elija.
echo '{"_aws":{"Timestamp":1574109732004,"LogGroupName":"Foo","CloudWatchMetrics":[{"Namespace":"MyApp","Dimensions":[["Operation"]],"Metrics":[{"Name":"ProcessingLatency","Unit":"Milliseconds","StorageResolution":60}]}]},"Operation":"Aggregator","ProcessingLatency":100}' \ > /dev/udp/0.0.0.0/25888
nota
Con el formato de métrica incorporado, puede hacer un seguimiento del procesamiento de sus registros de EMF por métricas publicadas en el espacio de nombres de AWS/Logs
de su cuenta. Se pueden utilizar para hacer un seguimiento de la generación con errores de métricas a partir de EMF, así como para determinar si se producen errores debido al análisis o la validación. Para obtener más información, consulte Supervisión con métricas de CloudWatch.