Este módulo instala el Datadog Agent y envía informes de Puppet a Datadog.
Requisitos previos
El módulo Puppet Datadog admite Linux y Windows, y es compatible con las versiones >= 7.34.x de Puppet o con
las versiones >= 2021.7.x de Puppet Enterprise. Para obtener información detallada sobre la compatibilidad, consulta la página del módulo en Puppet Forge.
Instalación
Sigue la guia de instalacion en la aplicación en Fleet Automation para seleccionar las funciones requeridas, copiar el fragmento de manifiesto generado, agregarlo a tu manifiesto de Puppet y aplicar tu despliegue estandar de Puppet para implementar el Agent. Consulta el módulo del Datadog Agent o la sección de configuraciones avanzadas para consultar configuraciones adicionales, incluyendo la gestión de actualizaciones del Agent, la habilitación de integraciones del Agent y la configuración de informes de ejecución de Puppet.
Actualización del Agent
[!IMPORTANTE]
La v4.x del módulo Puppet Datadog deja de ser compatible con la v6 o anterior de Puppet y con la v5 del Datadog Agent. Para actualizar o instalar la v5 del Datadog Agent
en la v6 o anterior de Puppet utiliza la v3.x del módulo.
- Por defecto, está instalada la v7.x del Datadog Agent. Para utilizar la v6 del Agent, cambia la configuración agent_major_version.
- Se han eliminado las opciones legacy específicas de la v5 del Agent. Consulta CHANGELOG.md para ver más detalles y comentarios de la clase datadog_agent de todas las opciones disponibles.
IMPORTANTE
Se han realizado actualizaciones y cambios de última hora en las siguientes integraciones del Agent:
- ActiveMQ_XML- La configuración suppress_errorsdebe utilizarse ahora, en lugar desupress_errors(retrocompatible)
 
- ElasticSearch [CAMBIOS DE ÚLTIMA HORA]- ssl_verifysólo acepta valores booleanos
- Se han añadido opciones tls_verify
 
- Check de disco [CAMBIOS DE ÚLTIMA HORA]- use_mount,- all_partitionsy- tag_by_filesystemsólo aceptan valores booleanos
 
- TCP Check- La opción skip_eventha sido eliminada a partir de la v6.4 y posteriores del Datadog Agent
 
Configuración
Una vez que el módulo datadog_agent esté instalado en tu puppetserver/puppetmaster (o en un host sin nodo maestro), sigue estos pasos de configuración:
- Obtén tu clave de API de Datadog. 
- Añade la clase Datadog a los manifiestos de tus nodos (ej.: - /etc/puppetlabs/code/environments/production/manifests/site.pp).
 - class { 'datadog_agent':
    api_key => "<YOUR_DD_API_KEY>",
}
 
- Si utilizas un sitio de Datadog distinto al predeterminado (datadoghq.com), configúralo aquí también: - class { 'datadog_agent':
    api_key => "<YOUR_DD_API_KEY>",
    datadog_site => "datadoghq.eu",
}
 
- Para las versiones de CentOS/RHEL anteriores a la 7.0 y las de Ubuntu anteriores a la 15.04, especifica el proveedor de servicio como - upstart:
 - class { 'datadog_agent':
    api_key => "<YOUR_DD_API_KEY>",
    service_provider => 'upstart'
}
 
- Consulta la sección Variables de configuración para ver la lista de argumentos que puedes utilizar aquí. 
- (Opcional) Incluye cualquier integración que quieras utilizar con el Agent. En el siguiente ejemplo, instalamos la integración de Mongo: - class { 'datadog_agent::integrations::mongo':
    # integration arguments go here
}
 
- Consulta los comentarios del código para conocer todos los argumentos disponibles en una integración determinada. - Si una integración no tiene ningún manifiesto con una clase específica, puedes añadir una configuración al respecto. A continuación, te mostramos un ejemplo para el check - ntp:
 - class { 'datadog_agent':
    api_key      => "<YOUR_DD_API_KEY>",
    integrations => {
        "ntp" => {
            init_config => {},
            instances => [{
                offset_threshold => 30,
            }],
        },
    },
}
 
- (Opcional) Para recopilar métricas y eventos sobre Puppet, consulta la sección Informes. 
Configuraciones avanzadas
Actualización de las integraciones
Para instalar y anclar versiones de integraciones específicas, utiliza datadog_agent::install_integration. De este modo, se invoca el comando datadog-agent integration para garantizar la instalación o desinstalación de una integración específica. Ejemplo:
datadog_agent::install_integration { "mongo-1.9":
    ensure => present,
    integration_name => 'datadog-mongo',
    version => '1.9.0',
    third_party => false,
}
El argumento ensure puede presentar dos valores:
- present(predeterminado)
- absent(elimina una versión previamente anclada de una integración)
Para instalar una integración de terceros (ej.: del Marketplace), define el argumento third_party como true.
Ten en cuenta que no es posible cambiar una integración a una versión anterior a la suministrada con el Agent.
Para enviar los informes sobre las ejecuciones de Puppet a tu línea de tiempo de Datadog, activa el procesador de informes en tu nodo maestro de Puppet y el envío de informes para tus clientes. Los clientes envían al nodo maestro un informe de ejecución después de cada registro.
- Define la opción - puppet_run_reportscomo true en el manifiesto de configuración de tu nodo maestro:
 - class { 'datadog-agent':
  api_key            => '<YOUR_DD_API_KEY>',
  puppet_run_reports => true
  # ...
}
 
- El GEM dogapi se instala automáticamente. Configura - manage_dogapi_gemcomo false si quieres personalizar la instalación.
 
- Añade estas opciones de configuración a la configuración del nodo maestro de Puppet (ej.: - /etc/puppetlabs/puppet/puppet.conf):
 - [main]
# No modification needed to this section
# ...
[master]
# Enable reporting to Datadog
reports=datadog_reports
# If you use other reports, add datadog_reports to the end,
# for example: reports=store,log,datadog_reports
# ...
[agent]
# ...
report=true
 
Con el módulo ini_setting:
  ini_setting { 'puppet_conf_master_report_datadog_puppetdb':
    ensure  => present,
    path    => '/etc/puppetlabs/puppet/puppet.conf',
    section => 'master',
    setting => 'reports',
    value   => 'datadog_reports,puppetdb',
    notify  => [
      Service['puppet'],
      Service['puppetserver'],
    ],
  }
- En todos tus nodos de cliente de Puppet, añade lo siguiente en la misma localización: - [agent]
# ...
report=true
 
Con el módulo ini_setting:
  ini_setting { 'puppet_conf_agent_report_true':
    ensure  => present,
    path    => '/etc/puppetlabs/puppet/puppet.conf',
    section => 'agent',
    setting => 'report',
    value   => 'true',
    notify  => [
      Service['puppet'],
    ],
  }
- (Opcional) Habilita el etiquetado de informes con hechos: - Puedes añadir etiquetas (tags) en los informes que se envían a Datadog como eventos. Estas etiquetas se pueden extraer de los hechos de Puppet en el nodo en el que se basa el informe. Estos deben ser individuales y no involucrar hechos estructurados (hashes, matrices, etc.) para garantizar su legibilidad. Para habilitar el etiquetado regular de hechos, ajusta el parámetro - datadog_agent::reports::report_fact_tagsal valor de la matriz de los hechos; por ejemplo,- ["virtual","operatingsystem"]. Para activar el etiquetado de hechos fiables, ajusta el parámetro- datadog_agent::reports::report_trusted_fact_tagsal valor de la matriz de los hechos; por ejemplo,- ["certname","extensions.pp_role","hostname"].
 - NOTA: Para modificar estos parámetros, hay que reiniciar pe-puppetserver (o puppetserver) para releer el procesador de informes. Asegúrate de que se hayan desplegado los cambios antes de reiniciar el servicio. - Consejos: - Utiliza dot index para especificar un hecho de destino; de lo contrario, todo el conjunto de datos del hecho se convierte en un valor en forma de cadena (y esto no es muy útil).
- No dupliques los datos comunes de la monitorización, como el nombre de host, el tiempo de actividad, la memoria, etc.
- Coordina datos básicos como el rol, el propietario, la plantilla, el centro de datos, etc., que te ayudarán a crear correlaciones significativas con las mismas etiquetas de las métricas.
 
- Busca - sources:puppeten la herramienta Event Stream para verificar que tus datos de Puppet están en Datadog.
 
Configuración de NPM
Para habilitar las funciones de la herramienta Network Performance Monitoring (NPM) del Datadog Agent, sigue estos pasos:
- (Solo para Windows) Si el Agent ya está instalado, pasa win_ensure => absenta la clase principal y elimina las definiciones de otras clases para desinstalarlo.
- (Solo para Windows) Pasa la opción windows_npm_installcon valortruea la clasedatadog::datadog_agent. Eliminawin_ensuresi se ha añadido en el paso anterior.
- Utiliza la clase datadog_agent::system_probepara crear correctamente el archivo de configuración:
class { 'datadog_agent::system_probe':
    network_enabled => true,
}
Configuración de USM
Para habilitar la herramienta Universal Service Monitoring (USM) del Datadog Agent, utiliza la clase datadog_agent::system_probe para crear correctamente el archivo de configuración:
class { 'datadog_agent::system_probe':
    service_monitoring_enabled => true,
}
Solucionar problemas
Puedes ejecutar el Puppet Agent manualmente para comprobar si hay errores en la salida:
```shell
sudo systemctl restart puppetserver
sudo puppet agent --onetime --no-daemonize --no-splay --verbose
```
 Example response:
```text
info: Retrieving plugin
info: Caching catalog for alq-linux.dev.datadoghq.com
info: Applying configuration version '1333470114'
notice: Finished catalog run in 0.81 seconds
```
Si aparece el siguiente error, asegúrate de que reports=datadog_reports está definido en [master], no en [main].
```text
err: Could not send report:
Error 400 on SERVER: Could not autoload datadog_reports:
Class Datadog_reports is already defined in Puppet::Reports
```
Si no ves llegar ningún informe, comprueba los logs de tu servidor Puppet.
Puppet sin nodo maestro
- El módulo de Datadog y sus dependencias deben instalarse en todos los nodos que ejecuten sin nodo maestro. 
- Añade esto al archivo - site.ppde cada nodo:
 - class { "datadog_agent":
    api_key            => "<YOUR_DD_API_KEY>",
    puppet_run_reports => true
}
 
- Ejecuta Puppet en una configuración sin nodo maestro: - puppet apply --modulepath <path_to_modules> <path_to_site.pp>
 
Etiquetar nodos de cliente
El archivo de configuración del Datadog Agent se recrea a partir de la plantilla en cada ejecución de Puppet. Si necesitas etiquetar tus nodos, añade una entrada de matriz en Hiera:
datadog_agent::tags:
- 'keyname:value'
- 'anotherkey:%{factname}'
Para generar etiquetas a partir de hechos personalizados, clasifica tus nodos con hechos de Puppet como si se tratase de una matriz en el parámetro facts_to_tags, ya sea a través de la consola Puppet Enterprise o de Hiera. He aquí un ejemplo:
class { "datadog_agent":
  api_key            => "<YOUR_DD_API_KEY>",
  facts_to_tags      => ["os.family","networking.domain","my_custom_fact"],
}
Consejos:
- En el caso de los hechos estructurados, se debe indexar en el valor del hecho específico. De lo contrario, la matriz se presentaría como una cadena y resultaría difícil de utilizar.
- Los hechos dinámicos, tales como el uso de la CPU o el tiempo de actividad, entre otros, no son los más indicados para el etiquetado, dado que lo normal es que cambien en cada ejecución. Los hechos estáticos, que normalmente permanecen inalterables durante toda la vida útil de un nodo, son más idóneos para el etiquetado.
Variables de configuración
Estas variables pueden establecerse en la clase datadog_agent para controlar la configuración del Agent. Consulta los comentarios del código para ver la lista completa de argumentos admitidos.
| nombre de la variable | descripción | 
|---|
| agent_major_version | Versión del Agent a instalar: v6 o v7 (por defecto: v7). | 
| agent_version | Te permite anclar una versión anterior específica del Agent que ser va a instalar. Ejemplo: 1:7.16.0-1. Déjalo vacío para instalar la versión más reciente. | 
| collect_ec2_tags | Recopila las etiquetas EC2 personalizadas de una instancia como etiquetas del Agent mediante el parámetro true. | 
| collect_instance_metadata | Recopila los metadatos EC2 de una instancia como etiquetas del Agent mediante el parámetro true. | 
| datadog_site | El sitio Datadog al que informar. Por defecto datadoghq.com, por ejemplo:datadoghq.euous3.datadoghq.com. | 
| dd_url | La URL del servidor de ingesta de Datadog. Es poco probable que necesites anular esto. Anula el parámetro datadog_site. | 
| host | Anula el nombre de host del nodo. | 
| local_tags | Una matriz de cadenas <KEY:VALUE>que se establecen como etiquetas del nodo. | 
| non_local_traffic | Permite que otros nodos retransmitan su tráfico DogStatsD a través de este nodo. | 
| apm_enabled | Un booleano que habilita el APM Agent (se establece por defecto como false). | 
| process_enabled | Un booleano que habilita el Agent de proceso (se establece por defecto como false). | 
| scrub_args | Un booleano que habilita la limpieza de líneas de comandos de proceso (se establece por defecto como true). | 
| custom_sensitive_words | Una matriz para añadir más palabras, aparte de las predeterminadas, usada por la función de limpieza (se establece por defecto como []). | 
| logs_enabled | Un booleano que habilita el Logs Agent (se establece por defecto como false). | 
| windows_npm_install | Un booleano que habilita la instalación del controlador NPM de Windows (se establece por defecto como falso). | 
| win_ensure | Un enum (presente/ausente) para garantizar la presencia/ausencia del Datadog Agent en Windows (por defecto, presente). | 
| container_collect_all | Un booleano que habilita la recopilación de logs en todos los contenedores. | 
| agent_extra_options1 | Un hash para proporcionar opciones adicionales de configuración (solo para el Agent v6 y v7). | 
| hostname_extraction_regex2 | Una expresión regular que se utiliza al extraer el nombre del host del grupo capturado para informar de la ejecución en Datadog en lugar de enviar el nombre del nodo de Puppet. Ejemplo: 
 '^(?<hostname>.*\.datadoghq\.com)(\.i-\w{8}\..*)? | 
(1) agent_extra_options se utiliza para proporcionar un control preciso de las opciones de configuración adicionales del Agent v6/v7. Se realiza una fusión profunda que puede anular las opciones proporcionadas en los parámetros de clasedatadog_agent. Ejemplo:
class { "datadog_agent":
    < your other arguments to the class >,
    agent_extra_options => {
        use_http => true,
        use_compression => true,
        compression_level => 6,
    },
}
(2) hostname_extraction_regex es útil cuando el módulo Puppet y el Datadog Agent dan diferentes nombres para el mismo host en la lista de infraestructuras.