AWS Elastic Beanstalk

Información general

AWS Elastic Beanstalk es un sitio servicio fácil de utilizar para desplegar y escalar aplicaciones web y servicios desarrolladas con Java, .NET, PHP, Node.js, Python, Ruby, Go y Docker en servidores conocidos como Apache, Nginx, Passenger e IIS.

Configuración

Instalación

Si aún no lo has hecho, configura primero la integración de Amazon Web Services. Para recibir métricas de Elastic Beanstalk, debes habilitar la función Enhanced Health Reporting para tu entorno y configurar tu entorno para publicar métricas de estado mejoradas en CloudWatch.

Nota: Estos parámetros aumentan los gastos de las métricas personalizadas de CloudWatch.

Datos recopilados

Métricas

aws.elasticbeanstalk.application_latency_p_1_0
(gauge)
Tiempo medio para completar el 10 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_latency_p_5_0
(gauge)
Tiempo medio para completar el 50 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_latency_p_7_5
(gauge)
Tiempo medio para completar el 75 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_latency_p_8_5
(gauge)
Tiempo medio para completar el 85 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_latency_p_9_0
(gauge)
Tiempo medio para completar el 90 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_latency_p_9_5
(gauge)
Tiempo medio para completar el 95 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_latency_p_9_9
(gauge)
Tiempo medio para completar el 99 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_latency_p_9_9_9
(gauge)
Tiempo medio para completar el 99,9 por ciento de las solicitudes más rápidas.
Se muestra como segundos
aws.elasticbeanstalk.application_requests_2xx
(count)
Número de solicitudes completadas con un código de estado 2XX.
Se muestra como solicitud
aws.elasticbeanstalk.application_requests_3xx
(count)
Número de solicitudes completadas con un código de estado 3XX.
Se muestra como solicitud
aws.elasticbeanstalk.application_requests_4xx
(count)
Número de solicitudes completadas con un código de estado 4XX.
Se muestra como solicitud
aws.elasticbeanstalk.application_requests_5xx
(count)
Número de solicitudes completadas con un código de estado 5XX.
Se muestra como solicitud
aws.elasticbeanstalk.application_requests_total
(count)
Número de solicitudes completadas por la instancia o el entorno.
Se muestra como solicitud
aws.elasticbeanstalk.cpuidle
(gauge)
[Instancia] Porcentaje de tiempo que la CPU estuvo en estado de inactividad en el último minuto.
Se muestra como porcentaje
aws.elasticbeanstalk.cpuiowait
(gauge)
[Instancia] Porcentaje de tiempo que la CPU estuvo en estado de espera de E/S en el último minuto.
Se muestra como porcentaje
aws.elasticbeanstalk.cpuirq
(gauge)
[Instancia] Porcentaje de tiempo que la CPU estuvo en estado de solicitud de interrupción en el último minuto.
Se muestra como porcentaje
aws.elasticbeanstalk.cpunice
(gauge)
[Instancia] Porcentaje de tiempo que la CPU estuvo en estado nice en el último minuto.
Se muestra como porcentaje
aws.elasticbeanstalk.cpusoftirq
(gauge)
[Instancia] Porcentaje de tiempo que la CPU estuvo en estado de solicitud de interrupción de software en el último minuto.
Se muestra como porcentaje
aws.elasticbeanstalk.cpusystem
(gauge)
[Instancia] Porcentaje de tiempo que la CPU estuvo en estado de sistema en el último minuto.
Se muestra como porcentaje
aws.elasticbeanstalk.cpuuser
(gauge)
[Instancia] Porcentaje de tiempo que la CPU estuvo en estado de usuario en el último minuto.
Se muestra como porcentaje
aws.elasticbeanstalk.environment_health
(gauge)
[Entorno] Estado de salud del entorno. Los valores posibles son: 0 (OK) 1 (Info) 5 (Desconocido) 10 (Sin datos) 15 (Advertencia) 20 (Degradado) y 25 (Grave).
aws.elasticbeanstalk.instance_health
(gauge)
[Instancia] Estado de salud de la instancia.
Se muestra como instancia
aws.elasticbeanstalk.instances_degraded
(count)
[Entorno] Número de instancias con estado de salud Degradado.
Se muestra como instancia
aws.elasticbeanstalk.instances_info
(count)
[Entorno] Número de instancias con estado de salud Info.
Se muestra como instancia
aws.elasticbeanstalk.instances_no_data
(count)
[Entorno] Número de instancias sin datos sobre el estado de salud.
Se muestra como instancia
aws.elasticbeanstalk.instances_ok
(count)
[Entorno] Número de instancias con estado de salud OK.
Se muestra como instancia
aws.elasticbeanstalk.instances_pending
(count)
[Entorno] Número de instancias con estado de salud Pendiente.
Se muestra como instancia
aws.elasticbeanstalk.instances_severe
(count)
[Entorno] Número de instancias con estado de salud Grave.
Se muestra como instancia
aws.elasticbeanstalk.instances_unknown
(count)
[Entorno] Número de instancias con estado de salud Desconocido.
Se muestra como instancia
aws.elasticbeanstalk.instances_warning
(count)
[Entorno] Número de instancias con estado de salud Advertencia.
Se muestra como instancia
aws.elasticbeanstalk.load_average_1min
(gauge)
[Instancia] Carga media de la CPU en el último minuto.
aws.elasticbeanstalk.load_average_5min
(gauge)
[Instancia] Carga media de la CPU en los últimos cinco minutos.
aws.elasticbeanstalk.root_filesystem_util
(gauge)
[Instancia] Porcentaje de espacio en disco en uso.
Se muestra como porcentaje

A cada una de las métricas recuperadas de AWS se le asignan las mismas etiquetas (tags) que aparecen en la consola de AWS, donde se incluyen el nombre del host y los grupos de seguridad, entre otras cosas.

Eventos

La integración AWS Elastic Beanstalk no incluye eventos.

Checks de servicio

La integración AWS Elastic Beanstalk no incluye checks de servicio.

Configuración del Datadog Agent

Los pasos siguientes despliegan el Datadog Agent en tus máquinas virtuales de Elastic Beanstalk para que informen de las métricas del host además de las métricas rastreadas por la integración AWS. Consulta ¿Por qué debería instalar el Datadog Agent en mis instancias en la nube? para obtener más información.

Selecciona tu método de instalación para configurar el Agent en tu entorno Elastic Beanstalk:

Para una configuración sin contenedor, instala el Datadog Agent en Elastic Beanstalk utilizando la personalización avanzada del entorno con archivos de configuración (.ebextensions):

  1. Crea una carpeta llamada .ebextensions en la raíz de tu paquete de aplicación de origen.
  2. Descarga 99datadog.config y colócalo en la carpeta .ebextensions.
  3. Cambia el valor de api_key dentro de la plantilla de archivo para /etc/datadog-agent/datadog.yaml con tu clave de API Datadog.
  4. Cambia el valor de site en /etc/datadog-agent/datadog.yaml por el de tu región Datadog (por ejemplo: ) para asegurarte de que el Agent envía los datos a la localización de Datadog correcta.
  5. Fija una versión específica del Agent configurando DD_AGENT_VERSION en option_settings para asegurarte de que todos los hosts ejecutan la misma versión del Agent.
  6. Despliega tu aplicación con la consola de Elastic Beanstalk, la CLI de EB o la CLI de AWS.

Puedes añadir parámetros adicionales al Agent en /etc/datadog-agent/datadog.yaml.

Por ejemplo, para habilitar la Monitorización de procesos en vivo:

process_config:
  enabled: "true"

Recopilación de trazas

Cuando la aplicación no está en un contenedor y el Datadog Agent está configurado con 99datadog.config, el rastreo se habilita sin ninguna configuración adicional, siempre que la aplicación esté instrumentada con la configuración de la biblioteca de rastreo.

Para una configuración sin contenedor, instala el Datadog Agent en Elastic Beanstalk utilizando la personalización avanzada del entorno con archivos de configuración (.ebextensions):

  1. Crea una carpeta llamada .ebextensions en la raíz de tu paquete de aplicación de origen.
  2. Descarga 99datadog-windows.config y trasládalo a la carpeta .ebextensions. Revisa la configuración de ejemplo y realiza las modificaciones necesarias.
  3. En 99datadog-windows.config, sustituye el valor APIKEY por tu clave de API Datadog.
  4. (Opcional) Si necesitas añadir variables de entorno, configúralas en la sección 00_setup-env1 de 99datadog-windows.config. Puedes eliminar esta sección si no necesitas configurar variables entorno.
  5. (Opcional) Si no quieres habilitar APM en tu entorno, elimina la sección packages.msi.DotnetAPM, la sección 02_setup-APM1 y la sección 03_setup-APM2.
  6. Para la recopilación de trazas con .NET APM:
    1. Sustituye el enlace packages.msi.DotnetAPM por el archivo MSI (Windows Installer) de la versión deseada en las notas de versión dd-trace-dotnet.
    2. (Opcional) Si necesitas añadir variables de entorno para .NET APM, defínelas en la sección 00_setup-env1 de 99datadog-windows.config.
  7. Despliega tu aplicación con la consola de Elastic Beanstalk, la CLI de EB o la CLI de AWS.

Recopilación de trazas

Cuando la aplicación no está en un contenedor y el Datadog Agent está configurado con 99datadog-windows.config, el rastreo se habilita sin ninguna configuración adicional a los pasos indicados en la sección anterior. Para obtener más información sobre la instrumentación del rastreo, consulta Configuración de Datadog APM.

Para la configuración con un único contenedor Docker, instala el Datadog Agent en Elastic Beanstalk utilizando la personalización avanzada del entorno con archivos de configuración (.ebextensions).

Nota: Esta configuración requiere que tu clave API se coloque en el directorio .ebextensions, que forma parte del código fuente. Utiliza AWS Secret Manager u otra herramienta de gestión de secretos para proteger tu clave de API.

  1. Crea una carpeta llamada .ebextensions en la raíz de tu paquete de aplicación de origen.
  2. Descarga 99datadog.config y colócalo en la carpeta .ebextensions.
  3. Cambia el valor de api_key dentro de la plantilla de archivo para /etc/datadog-agent/datadog.yaml con tu clave de API Datadog.
  4. Cambia el valor de site en /etc/datadog-agent/datadog.yaml por el de tu región Datadog (por ejemplo: ) para asegurarte de que el Agent envía los datos a la localización de Datadog correcta.
  5. Fija una versión específica del Agent configurando DD_AGENT_VERSION en option_settings para asegurarte de que todos los hosts ejecutan la misma versión del Agent.
  6. Despliega tu aplicación con la consola de Elastic Beanstalk, la CLI de EB, o la CLI de AWS.

Puedes añadir parámetros adicionales al Agent en /etc/datadog-agent/datadog.yaml.

Por ejemplo, para habilitar la Monitorización de procesos en vivo:

process_config:
  enabled: "true"

Recopilación de trazas

Para habilitar el rastreo para contenedores Docker individuales:

  1. Actualiza la sección /etc/datadog-agent/datadog.yaml del archivo 99datadog.config con apm_non_local_traffic, con el siguiente formato:

    apm_config:
      enabled: "true"
      apm_non_local_traffic: "true"
    
  2. Configura las bibliotecas de rastreo para que dirijan las trazas (traces) a la IP de la puerta de enlace de la red puente,, que por defecto es 172.17.0.1, desde dentro del contenedor de la aplicación. (Si no sabes si esta es la IP de la puerta de enlace, ejecuta docker inspect <container id> para confirmarlo).

Para todos los lenguajes, define la variable de entorno DD_AGENT_HOST en la IP de pasarela. Alternativamente, para los siguientes lenguajes, define el nombre del host mediante programación:

Python
from ddtrace import tracer

tracer.configure(hostname="172.17.0.1")
Node.js
const tracer = require('dd-trace');

tracer.init({ hostname: "172.17.0.1" });
Ruby
require 'ddtrace'

Datadog.configure do |c|
  c.tracer hostname: "172.17.0.1")
end
Go
package main

import (
    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

func main() {
  tracer.Start(tracer.WithAgentAddr("172.17.0.1"))
  defer tracer.Stop()

  // ...
}

Para contenedores múltiples Docker, utiliza el Datadog Agent contenedorizado para monitorizar el uso de Docker con un archivo llamado Dockerrun.aws.json.

Un archivo Dockerrun.aws.json es un archivo JSON específico de Elastic Beanstalk que describe cómo desplegar un conjunto de contenedores Docker como una aplicación Elastic Beanstalk. Puedes utilizar este archivo para un entorno Docker multicontenedor. Dockerrun.aws.json describe los contenedores que se deben desplegar en cada instancia de contenedor del entorno y los volúmenes de datos que se deben crear en la instancia host para que se monten los contenedores.

Un archivo Dockerrun.aws.json se puede utilizar solo o comprimido con código fuente adicional en un único archivo. El código fuente que se archiva con Dockerrun.aws.json se despliega en instancias de contenedor y es accesible en el directorio /var/app/current/. Utiliza la sección volumes de la configuración para proporcionar puntos de montaje para los contenedores que se ejecutan en la instancia y la sección mountPoints de las definiciones de contenedor integradas para montarlos desde los contenedores.

El siguiente ejemplo de código ilustra un Dockerrun.aws.json declarando el Datadog Agent. Actualiza la sección containerDefinitions con tu clave de API Datadog, tus etiquetas (opcional) y cualquier definición de contenedor adicional. Si es necesario, este archivo se puede comprimir con contenido adicional como se ha descrito anteriormente. Para obtener más información sobre la sintaxis de este archivo, consulta la configuración de Docker multicontenedor.

Notas:

  • Para un uso elevado de recursos, es posible que necesites un límite de memoria más alto.
  • Para garantizar que todos los hosts ejecutan la misma versión del Agent, se recomienda cambiar agent:7 a una versión menor específica de la imagen de Docker.

  • Define DD_SITE como para garantizar que el Agent envíe datos a la localización correcta de Datadog.

{
    "AWSEBDockerrunVersion": 2,
    "volumes": [
        {
            "name": "docker_sock",
            "host": {
                "sourcePath": "/var/run/docker.sock"
            }
        },
        {
            "name": "proc",
            "host": {
                "sourcePath": "/proc/"
            }
        },
        {
            "name": "cgroup",
            "host": {
                "sourcePath": "/sys/fs/cgroup/"
            }
        }
    ],
    "containerDefinitions": [
        {
            "name": "dd-agent",
            "image": "gcr.io/datadoghq/agent:7",
            "environment": [
                {
                    "name": "DD_API_KEY",
                    "value": "<YOUR_DD_API_KEY>"
                },
                {
                    "name": "DD_SITE",
                    "value": "<YOUR_DD_SITE>"
                },
                {
                    "name": "DD_TAGS",
                    "value": "<SIMPLE_TAG>, <KEY:VALUE_TAG>"
                }
            ],
            "memory": 256,
            "mountPoints": [
                {
                    "sourceVolume": "docker_sock",
                    "containerPath": "/var/run/docker.sock",
                    "readOnly": false
                },
                {
                    "sourceVolume": "proc",
                    "containerPath": "/host/proc",
                    "readOnly": true
                },
                {
                    "sourceVolume": "cgroup",
                    "containerPath": "/host/sys/fs/cgroup",
                    "readOnly": true
                }
            ]
        }
    ]
}

Creación del entorno

Una vez que la definición del contenedor esté lista, envíala a Elastic Beanstalk. Para obtener instrucciones específicas, consulta Entornos Docker multicontenedor en la documentación de AWS Elastic Beanstalk.

DogStatsD

Para recopilar métricas personalizadas de tu contenedor de aplicaciones utilizando DogStatsD en el entorno Docker multicontenedor, añade lo siguiente a tu Dockerrun.aws.json:

  1. Añada la variable entorno DD_DOGSTATSD_NON_LOCAL_TRAFFIC bajo la dd-agent Contenedor :

    {
      "name": "DD_DOGSTATSD_NON_LOCAL_TRAFFIC",
      "value": "true"
    }
    
  2. Añada un enlace a dd-agent Contenedor bajo su aplicación Contenedor:

    "links": [ "dd-agent:dd-agent"]
    

Consulta DogStatsD y Docker para obtener más información.

Contenedores múltiples Docker

  1. En el mismo Dockerrun.aws.json de la aplicación, añade un contenedor de Datadog Agent utilizando la imagen datadog/agent. Añade lo siguiente:
    • En la sección portMappings, añade un hostPort 8126 con un containerPort 8126.
    • En la sección environment, configura DD_APM_ENABLED y DD_APM_NON_LOCAL_TRAFFIC como true.
  2. En tu contenedor de aplicaciones, que ha sido instrumentado con la [configuración de la biblioteca de rastreo][14], añade lo siguiente:
    • En la sección environment, añade una variable de entorno llamada DD_AGENT_HOST al nombre del contenedor de Datadog Agent.
    • En la sección links, establezca Agent Contenedor para que se utilice como variable entorno.

A continuación se muestra un ejemplo:

 "containerDefinitions": [    {
      "name": "dd-agent",
      "image": "datadog/agent:latest",
      "environment": [
          {
              "name": "DD_API_KEY",
              "value": "<api key>"
          },
          {
              "name": "DD_APM_ENABLED",
              "value": "true"
          },
          {
             "name": "DD_APM_NON_LOCAL_TRAFFIC",
             "value": "true"
          },
         # any other environment variables needed
      ],
      "portMappings": [
        {
          "hostPort": 8126,
          "containerPort": 8126
        }
      ],
      "memory": 256,
      "mountPoints": [
          # any mountpoints needed
         }
      ]
    },
    {
      "name": "application-container",
      "image": "<application image name>",
      "environment": [
        {
          "name": "DD_AGENT_HOST",
          "value": "dd-agent",
          # any other environment variables needed
        }
      ],
      "links": [
        "dd-agent:dd-agent"
      ],

Solucionar problemas

¿Necesitas ayuda? Ponte en contacto con el servicio de asistencia de Datadog.

Referencias adicionales

Más enlaces, artículos y documentación útiles: