Chatwork Event

Información general

Chef es una popular herramienta de gestión de configuración escrita en Ruby y Erlang.

El despliegue de Datadog con Chef está pensado para ser muy sencillo y brindarle un método para obtener el valor de la monitorización en toda su infraestructura de la forma más simple posible.

Datadog también proporciona un gestor de informes y ejecución de Chef que puede capturar las fallas de chef-client así como métricas relacionadas con la ejecución de Chef, como el tiempos y los recursos actualizados.

Configuración

Despliegue del Agent

El cookbook de Chef de Datadog está disponible para automatizar la instalación y la configuración del Datadog Agent.

Instala la última versión publicada del cookbook de Chef de Datadog desde Supermarket con Knife, y cárgala en el servidor de Chef:

knife cookbook site install datadog
knife cookbook upload datadog

Sigue las instrucciones de tu herramienta para cargar el cookbook al servidor de Chef.

Antes de añadir la receta del cookbook al run_list de tu nodo, debes agregar las credenciales de tu cuenta de Datadog, como claves API utilizando los atributos de Chef.

Esto se suele hacer con los archivos role o environment, u otro cookbook que declare los atributos.

He aquí un ejemplo de un archivo de roles base.rb, que suele aplicarse a cada host de una organización.

name 'base'
description 'base role, runs on every node'
run_list(
  'ntp',
  'datadog::dd-agent',
  'some_other_base_cookbook::recipe'
)
default_attributes(
  'datadog' => {
    'api_key' => "PON_TU_CLAVE_API_AQUI",
    'application_key' => "PON_TU_CLAVE_DE_APLICACIÓN_AQUÍ"
  }
)

Nota: Se necesitan dos claves: la clave API y la clave de aplicación de Datadog.

Proporciona ambos valores en los atributos como se muestra arriba.

Luego sube tu archivo de roles al servidor de Chef de esta manera:

knife role from file roles/base.rb

La próxima vez que se ejecute Chef, instalará el Agent y configurará el archivo de configuración con las claves de API y de aplicación.

NOTA: Si utilizas otro cookbook para definir estos atributos, usa un nivel de precedencia de atributos superior a default.

Gestor de informes

Datadog ofrece un gestor de informes de Chef que informa a Datadog sobre las métricas y los eventos de las ejecuciones de Chef. Una vez instalado, el gestor de informes envía métricas sobre los tiempos de ejecución de Chef y los cambios de recursos. También se crean eventos para permitir el seguimiento de las tasas de éxito y fracaso de las ejecuciones de Chef.

Esto tiene el valor agregado de llevar la salida de una ejecución de Chef al flujo de eventos de Datadog, de modo que las fallas se puedan resaltar rápidamente, discutir con el equipo y resolver.

Los éxitos tienen una prioridad “Baja”, mientras que los fallos tienen una prioridad “Normal”, y cuando el mismo nodo pasa la ejecución de Chef, se coloca en prioridad “Baja”.

Añadir el gestor es muy sencillo, como puedes ver en este fragmento de rol:

name 'base'
description 'base role, runs on every node'
run_list(
  'datadog::dd-handler',
  'ntp',
  'datadog::dd-agent',
  'some_other_base_cookbook::recipe'
)
default_attributes(
  'datadog' => {
    'api_key' => "<DATADOG_API_KEY>",
    'application_key' => "<DATADOG_APPLICATION>"
  }
)

En este ejemplo, la receta datadog::dd-handler se añadió al comienzo de la lista de ejecución del nodo. Agregarla al comienzo permite que el gestor capture detalles sobre todo lo que observa después de ser invocado, por lo que si lo añadiste al final de run_list y algo falló antes de que se ejecutara, es posible que no recibas el resultado completo.

Una vez configurado, carga el rol en el servidor de Chef y espera. Una vez que Chef se haya ejecutado en algunos hosts, se creará un nuevo dashboard automático con las métricas de Chef relevantes. Puedes encontrarlo en tu Lista de dashboards, en el margen derecho.

Envío de métricas de Chef a Datadog

  1. Si utilizas Berkshelf, añade el cookbook a tu Berksfile:

    cookbook 'datadog'
    

    De lo contrario, instala el cookbook en tu repositorio utilizando Knife:

    knife cookbook site install datadog
    
  2. Configura los atributos específicos de Datadog en un rol, entorno u otra receta:

    # Make sure you replace the API and application key below
    # with the ones for your account
    
    node.default['datadog']['<API_KEY>'] = "<DATADOG_API_KEY>"
    
    # Use an existing application key or create a new one for Chef
    node.default['datadog']['<APPLICATION_KEY>] ="<DATADOG_APP_KEY>"
    
  3. Carga el cookbook actualizado en el servidor de Chef.

    berks upload
    # or
    knife cookbook upload datadog
    
    knife cookbook list | grep datadog && \
    echo -e "\033[0;32mdatadog cookbook - OK\033[0m" || \
    echo -e "\033[0;31mmissing datadog cookbook - OK\033[0m"
    

    El cookbook está listo para ser aplicado a tus nodos.

  4. Una vez cargado, añádelo a la run_list o el rol de tu nodo:

    "run_list": [
      "recipe[datadog::dd-handler]"
    ]
    
  5. Espera a la siguiente ejecución programada de chef-client.

Recopilación de logs

La recopilación de logs está disponible con la versión del Agent 6.0 o posteriores; consulta attributes/default.rb para habilitarla. Para obtener más detalles, consulta el ejemplo de configuración a continuación.

Validación

Desde tu flujo de eventos, ingresa sources:chef en la barra de búsqueda. Deberían aparecer tus ejecuciones de Chef.

Datos recopilados

Métricas

chef.resources.elapsed_time
(gauge)
Total time elapsed during the Chef Client Run.
Shown as second
chef.resources.total
(gauge)
Total count of resources managed by Chef.
Shown as resource
chef.resources.updated
(gauge)
Total count of resources updated in the Chef Client Run.
Shown as resource

Leer más

Personalizaciones

El cookbook de Chef de Datadog proporciona recetas más específicas de la integración.

Incluir una de estas recetas en tu lista de ejecución instala todas las dependencias de monitorización, como cualquier módulo de Python que sea necesario para monitorizar ese servicio, así como también escribe el archivo de configuración correcto.

He aquí un ejemplo de ampliación de un archivo de roles webserver.rb para monitorizar automáticamente Apache con Datadog:

name 'webserver'
description 'Webserver role, runs apache'
run_list(
  'apache2',
  'datadog::apache',
)
default_attributes(
  'apache' => {
    'ext_status' => true,
  }
  'datadog' => {
    'apache' => {
      'instances' => [
        { 'status_url' => 'http://localhost:8080/server-status/',
          'tags' => ['extra_tag', 'env:example'] }
      ],
      'logs' => [
        { 'type' => 'file',
          'path' => '/var/log/apache2/access.log',
          'source' => 'apache',
          'service' => 'myapp',
          'sourcecategory' => 'http_web_access',
          'tags' => ['extra_tag', 'env:example'] },
        { 'type' => 'file',
          'path' => '/var/log/apache2/error.log',
          'source' => 'apache',
          'service' => 'myapp',
          'sourcecategory' => 'http_web_access',
          'tags' => ['extra_tag', 'env:example'] }
      ]
    }
  }
)

En este ejemplo, la receta datadog::apache se añadió a la lista de ejecución junto con algunos atributos para controlar qué instancias de Apache debería monitorizar Datadog.

Lee cada archivo de receta para conocer los detalles exactos de los valores de integración que se deben pasar a la parte de instances de los atributos.