Utilizzo dell'agente CloudWatch per inviare log in Embedded Metric Format
Questa sezione descrive come installare e utilizzare l'agente CloudWatch. La prima parte di questa sezione descrive come installare l'agente CloudWatch. La seconda parte di questa sezione descrive come utilizzare l'agente CloudWatch per inviare log in Embedded Metric Format. Per utilizzare questo metodo, è necessario installare l'agente CloudWatch per i Servizi AWS da cui desideri inviare i log in Embedded Metric Format. Dopodiché puoi iniziare a inviare gli eventi. La versione dell'agente CloudWatch deve essere 1.230621.0 o successiva.
Nota
Non è necessario installare l'agente CloudWatch per inviare log da funzioni Lambda.
I timeout della funzione Lambda non vengono gestiti automaticamente. Ciò significa che se la funzione scade prima che i parametri vengano scaricati, i parametri per tale chiamata non verranno acquisiti.
Installazione dell'agente CloudWatch
Installa l'agente CloudWatch per ogni servizio che deve inviare log in Embedded Metric Format.
Installazione dell'agente CloudWatch su EC2
Innanzitutto, installa l'agente CloudWatch nell'istanza. Per ulteriori informazioni, consulta Installazione dell'agente CloudWatch.
Dopo aver installato l'agente, configura l'agente per l'ascolto su una porta UDP o TCP dei in log Embedded Metric Format. Di seguito è riportato un esempio di questa configurazione che rimane in ascolto sul socket predefinito tcp:25888. Per ulteriori informazioni sulla configurazione dell'agente, consulta Creazione o modifica manuale del file di configurazione dell'agente CloudWatch.
{ "logs": { "metrics_collected": { "emf": { } } } }
Installazione dell'agente CloudWatch su Amazon ECS
Il modo più semplice per distribuire l'agente CloudWatch su Amazon ECS è quello di eseguirlo come un sidecar, definendolo nella stessa definizione di attività dell'applicazione.
Creazione del file di configurazione dell'agente
Crea il file di configurazione dell'agente CloudWatch localmente. In questo esempio, il percorso file relativo sarà amazon-cloudwatch-agent.json.
Per ulteriori informazioni sulla configurazione dell'agente, consulta Creazione o modifica manuale del file di configurazione dell'agente CloudWatch.
{ "logs": { "metrics_collected": { "emf": { } } } }
Configurazione push in SSM Parameter Store
Immetti il comando seguente per eseguire il push del file di configurazione dell'agente CloudWatch in AWS Systems Manager (SSM) Parameter Store.
aws ssm put-parameter \ --name "cwagentconfig" \ --type "String" \ --value "`cat amazon-cloudwatch-agent.json`" \ --region "{{region}}"
Configurazione della definizione di attività
Configura la definizione di attività per utilizzare l'agente CloudWatch ed esporre la porta TCP o UDP. La definizione di attività di esempio da utilizzare dipende dalla modalità di rete.
Tieni presente che webapp specifica la variabile di ambiente AWS_EMF_AGENT_ENDPOINT. Questa viene utilizzata dalla libreria e deve mostrare l'endpoint su cui l'agente è in ascolto. Inoltre, cwagent specifica CW_CONFIG_CONTENT come parametro “valueFrom” che punta alla configurazione SSM creata nella fase precedente.
Questa sezione contiene un esempio per la modalità bridge e un esempio per la modalità host o awsvpc. Per altri esempi su come configurare l'agente CloudWatch su Amazon ECS, consulta il Repository di esempi Github
Di seguito è riportato un esempio di modalità bridge. Quando è abilitata la modalità di rete bridge, l'agente deve essere collegato all'applicazione utilizzando il parametro links e deve essere indirizzato utilizzando il nome del container.
{ "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" }], } ], }
Di seguito è riportato un esempio per la modalità host o la modalità awsvpc. Durante l'esecuzione su tali modalità di rete, l'agente può essere indirizzato su 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
In modalità awsvpc, è necessario assegnare un indirizzo IP pubblico al VPC (solo Fargate), configurare un gateway NAT o impostare un endpoint VPC CloudWatch Logs. Per ulteriori informazioni sulla configurazione di un NAT, consulta Gateway NAT. Per ulteriori informazioni sulla configurazione di un endpoint VPC CloudWatch Logs, consulta Utilizzo di CloudWatch Logs con endpoint VPC di interfaccia.
Di seguito è riportato un esempio di come assegnare un indirizzo IP pubblico a un'attività che utilizza il tipo di lancio 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}"
Garantire le autorizzazioni
Assicurati che il ruolo IAM che esegue le attività disponga dell'autorizzazione per leggere dall'Archivio parametri SSM. È possibile aggiungere questa autorizzazione collegando la policy AmazonSSMReadOnlyAccess . A questo scopo, immetti il comando seguente.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \ --role-name CWAgentECSExecutionRole
Installazione dell'agente CloudWatch su Amazon EKS
Parti di questo processo possono essere ignorate se CloudWatch Container Insights è già stato installato su questo cluster.
Autorizzazioni
Se Container Insights non è già stato installato, assicurati innanzitutto che i nodi Amazon EKS dispongano delle autorizzazioni IAM appropriate. Verifica che la policy CloudWatchAgentServerPolicy sia collegata alle autorizzazioni. Per ulteriori informazioni, consulta Verifica dei prerequisiti per Container Insights in CloudWatch.
Creazione di ConfigMap
Crea una ConfigMap per l'agente. ConfigMap indica inoltre all'agente di rimanere in ascolto su una porta TCP o UDP. Utilizza la seguente 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
Se hai già stato installato Container Insights, aggiungi la riga "emf": { } seguente alla ConfigMap esistente.
Applica la ConfigMap
Immetti il seguente comando per applicare la ConfigMap.
kubectl apply -f cwagent-emf-configmap.yaml
Distribuzione dell'agente
Per distribuire l'agente CloudWatch come un sidecar, aggiungilo alla definizione di pod, come nell'esempio seguente.
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
Utilizzo dell'agente CloudWatch per inviare log in Embedded Metric Format
Dopo che l'agente CloudWatch è stato installato ed è in esecuzione, puoi inviare i log in Embedded Metric Format su TCP o UDP. Durante l'invio di log sull'agente è necessario rispettare due requisiti:
-
I log devono contenere una chiave
LogGroupNameche indica all'agente quale gruppo di log utilizzare. -
Ogni evento di log deve trovarsi su una singola riga. In altre parole, un evento di log non può contenere il carattere di nuova riga (n).
Gli eventi di log devono inoltre seguire le specifiche Embedded Metric Format. Per ulteriori informazioni, consulta Specifica: Embedded Metric Format.
Se prevedi di creare allarmi su parametri creati utilizzando il formato dei parametri incorporati, consulta Impostazione degli allarmi sui parametri creati con il formato dei parametri incorporati per ottenere dei suggerimenti.
Di seguito è riportato un esempio di invio manuale di eventi di log da una shell bash Linux. Puoi invece utilizzare le interfacce socket UDP fornite dal linguaggio di programmazione preferito.
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 la specifica Embedded Metric Format, puoi tenere traccia dell'elaborazione dei registri EMF in base ai parametri pubblicati nello spazio dei nomi AWS/Logs del tuo account. Questi possono essere utilizzati per tenere traccia della generazione di parametri con esito negativo per EMF e per verificare se gli errori sono dovuti all'analisi o alla convalida. Per ulteriori informazioni, consulta la pagina Monitoraggio dell'utilizzo con i parametri di CloudWatch.