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 la integración Amazon Web Services. Para recibir métricas de Elastic Beanstalk, debes habilitar la característica Habilitación de informes de estado mejorado en tu entorno y configurar tu entorno para publicar métricas de estado mejorado a 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)
The average time to complete the fastest 10 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_5_0
(gauge)
The average time to complete the fastest 50 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_7_5
(gauge)
The average time to complete the fastest 75 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_8_5
(gauge)
The average time to complete the fastest 85 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_0
(gauge)
The average time to complete the fastest 90 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_5
(gauge)
The average time to complete the fastest 95 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_9
(gauge)
The average time to complete the fastest 99 percent of requests.
Shown as second
aws.elasticbeanstalk.application_latency_p_9_9_9
(gauge)
The average time to complete the fastest 99.9 percent of requests.
Shown as second
aws.elasticbeanstalk.application_requests_2xx
(count)
The number of requests that completed with a 2XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_3xx
(count)
The number of requests that completed with a 3XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_4xx
(count)
The number of requests that completed with a 4XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_5xx
(count)
The number of requests that completed with a 5XX status code.
Shown as request
aws.elasticbeanstalk.application_requests_total
(count)
The number of requests completed by the instance or environment.
Shown as request
aws.elasticbeanstalk.cpuidle
(gauge)
[Instance] The percentage of time the CPU was in the idle state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpuiowait
(gauge)
[Instance] The percentage of time the CPU was in the iowait state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpuirq
(gauge)
[Instance] The percentage of time the CPU was in the interrupt request state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpunice
(gauge)
[Instance] The percentage of time the CPU was in the nice state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpusoftirq
(gauge)
[Instance] The percentage of time the CPU was in the soft interrupt request state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpusystem
(gauge)
[Instance] The percentage of time the CPU was in the system state in the last minute.
Shown as percent
aws.elasticbeanstalk.cpuuser
(gauge)
[Instance] The percentage of time the CPU was in the user state in the last minute.
Shown as percent
aws.elasticbeanstalk.environment_health
(gauge)
[Environment] The health status of the environment. The possible values are 0 (OK) 1 (Info) 5 (Unknown) 10 (No data) 15 (Warning) 20 (Degraded) and 25 (Severe).
aws.elasticbeanstalk.instance_health
(gauge)
[Instance] The health status of the instance.
Shown as instance
aws.elasticbeanstalk.instances_degraded
(count)
[Environment] The number of instances with Degraded health status.
Shown as instance
aws.elasticbeanstalk.instances_info
(count)
[Environment] The number of instances with Info health status.
Shown as instance
aws.elasticbeanstalk.instances_no_data
(count)
[Environment] The number of instances with no health status data.
Shown as instance
aws.elasticbeanstalk.instances_ok
(count)
[Environment] The number of instances with OK health status.
Shown as instance
aws.elasticbeanstalk.instances_pending
(count)
[Environment] The number of instances with Pending health status.
Shown as instance
aws.elasticbeanstalk.instances_severe
(count)
[Environment] The number of instances with Severe health status.
Shown as instance
aws.elasticbeanstalk.instances_unknown
(count)
[Environment] The number of instances with Unknown health status.
Shown as instance
aws.elasticbeanstalk.instances_warning
(count)
[Environment] The number of instances with Warning health status.
Shown as instance
aws.elasticbeanstalk.load_average_1min
(gauge)
[Instance] The average CPU load over the last minute.
aws.elasticbeanstalk.load_average_5min
(gauge)
[Instance] The average CPU load over the last five minutes.
aws.elasticbeanstalk.root_filesystem_util
(gauge)
[Instance] The percentage of disk space in use.
Shown as percent

A cada una de las métricas recuperadas de AWS se le asignan las mismas etiquetas 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 servicios

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

Configuración del Datadog Agent

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

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 de entorno con archivos de configuración (.ebextensions):

  1. Crea una carpeta llamada .ebextensions en la raíz de tu paquete de aplicaciones 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 por/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 EB CLI o la AWS CLI.

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 de entorno con archivos de configuración (.ebextensions):

  1. Crea una carpeta llamada .ebextensions en la raíz de tu paquete de aplicaciones de origen.
  2. Descarga 99datadog-windows.config y desplázalo a la carpeta .ebextensions. Revisa el ejemplo de configuración 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 lanzamiento dd-trace-dotnet.
    2. (Opcional) Si necesitas añadir variables de entorno para .NET APM, configúralas en la sección 00_setup-env1 de 99datadog-windows.config.
  7. Despliegue su aplicación con Elastic Beanstalk Console, EB CLI, o AWS CLI.

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 más información sobre la instrumentación del rastreo, consulta Configuración de Datadog APM.

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

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

  1. Crea una carpeta llamada .ebextensions en la raíz de tu paquete de aplicaciones 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 por/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 EB CLI o la AWS CLI.

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 dirigir trazas a la IP de pasarela del puente de red, que por defecto es 172.17.0.1, desde dentro del contenedor de la aplicación. (Si tienes dudas de que esta sea la IP de la pasarela, 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.Configurar 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 múltiples contenedores 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. Puede utilizar este archivo para un multicontenedor Docker entorno . Dockerrun.aws.json describe los contenedores que se deben implementar en cada instancia 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, etiquetas (tags) (opcional) y cualquier definición adicional de contenedor. 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 hosts ejecuten la misma versión Agent, es recomendado cambiar agent:7 a una versión menor específica de la imagenDocker .

  • 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": "/cgroup/"
            }
        }
    ],
    "containerDefinitions": [
        {
            "name": "dd-Agent",
            "image": "gcr.io/datadoghq/Agent:7",
            "entorno": [
                {
                    "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>"
                }
            ],
            "memoria": 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 los entornos Docker multicontenedor en la documentación de AWS Elastic Beanstalk.

DogStatsD

Para recopilar métricas personalizadas de tu contenedor de aplicación 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"]
    

Para obtener más información, consulta DogStatsD y Docker.

Múltiples contenedores 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 el contenedor de tu aplicación, que se instrumentó 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",
      "entorno": [
          {
              "name": "DD_API_KEY",
              "value": "<api key>"
          },
          {
              "name": "DD_APM_ENABLED",
              "value": "true"
          },
          {
             "name": "DD_APM_NON_LOCAL_TRAFFIC",
             "value": "true"
          },
         # cualquier otra variable entorno necesaria
      ],
      "portMappings": [
        {
          "hostPuerto": 8126,
          "containerPort": 8126
        }
      ],
      "memory": 256,
      "mountPoints": [
          # cualquier punto de montaje necesario
         }
      ]
    },
    {
      "name": "aplicación-Contenedor",
      "image": "<application image name>",
      "entorno": [
        {
          "nombre": "DD_AGENT_HOST",
          "value": "dd-Agent",
          # cualquier otra variable entorno necesaria
        }
      ],
      "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: