

# Uso del agente de CloudWatch para enviar registros de formato de métricas integradas
<a name="CloudWatch_Embedded_Metric_Format_Generation_CloudWatch_Agent"></a>

 En esta sección se describe cómo instalar y utilizar el agente de CloudWatch. En la primera parte de esta sección se describe cómo instalar el agente de CloudWatch. En la segunda parte de esta sección se describe cómo utilizar el agente de CloudWatch para enviar registros con formato de métricas incrustadas. Si desea utilizar este método, debe instalar el agente de CloudWatch para los Servicios de AWS desde los que desea enviar registros con formato de métricas incrustadas. A continuación, puede empezar 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.

## Instalación del agente de CloudWatch
<a name="CloudWatch_Embedded_Metric_Format_Generation_Install_Agent"></a>

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
<a name="CloudWatch_Embedded_Metric_Format_Generation_Install_Agent_EC2"></a>

Primero, instale el agente de CloudWatch en la instancia. Para obtener más información, consulte [Instalación del agente de CloudWatch](install-CloudWatch-Agent-on-EC2-Instance.md).

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](CloudWatch-Agent-Configuration-File-Details.md).

```
{
  "logs": {
    "metrics_collected": {
      "emf": { }
    }
  }
}
```

### Instalación del agente de CloudWatch en Amazon ECS
<a name="CloudWatch_Embedded_Metric_Format_Generation_Install_Agent_ECS"></a>

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](CloudWatch-Agent-Configuration-File-Details.md).

```
{
  "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](https://github.com/aws-samples/amazon-cloudwatch-container-insights/tree/master/ecs-task-definition-templates/deployment-mode/sidecar) (Repositorio de muestras de Github)

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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html). 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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html) (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
<a name="CloudWatch_Embedded_Metric_Format_Generation_Install_Agent_EKS"></a>

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 Información de contenedores en CloudWatch](Container-Insights-prerequisites.md).

**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
<a name="CloudWatch_Embedded_Metric_Format_Generation_CloudWatch_Agent_Send_Logs"></a>

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](CloudWatch_Embedded_Metric_Format_Specification.md).

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](CloudWatch_Embedded_Metric_Format_Alarms.md) 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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Monitoring-CloudWatch-Metrics.html). 