Esta página le guía a través del proceso de construir un básico “¡Hola mundo!” verificación de agente personalizada. También le muestra cómo cambiar el intervalo mínimo de recolección para la verificación.
Configuración
Instalación
Antes de crear una verificación de agente personalizada, instale el Datadog Agent.
Para trabajar con la última versión del Agent, su verificación de agente personalizada debe ser compatible con Python 3.
Configuración
Cambie al directorio conf.d en su sistema. Para más información sobre dónde encontrar el directorio conf.d, consulte los archivos de configuración del Agent.
En el directorio conf.d, cree un nuevo archivo de configuración para su nueva verificación de agente. Asigne un nombre al archivo custom_checkvalue.yaml.
Edite el archivo para incluir lo siguiente:
conf.d/custom_checkvalue.yaml
init_config:instances:[{}]
Cree un archivo de verificación en el directorio checks.d. Asigne un nombre al archivo custom_checkvalue.py.
Nombrando sus verificaciones:
Es una buena idea prefijar su verificación con custom_ para evitar conflictos con el nombre de una integración de Datadog Agent preexistente. Por ejemplo, si tiene una verificación personalizada de Postfix, nombre sus archivos de verificación custom_postfix.py y custom_postfix.yaml en lugar de postfix.py y postfix.yaml.
Los nombres de los archivos de configuración y verificación deben coincidir. Si su verificación se llama custom_checkvalue.py, su archivo de configuración debe llamarse custom_checkvalue.yaml.
Si tiene problemas para que su verificación personalizada funcione, verifique los permisos del archivo. El archivo de verificación debe ser legible y ejecutable por el usuario del Agent. Para más pasos de solución de problemas, consulte Solucionar una verificación de agente.
Actualizando el intervalo de recolección
Para cambiar el intervalo de recolección de su verificación, utilice la configuración min_collection_interval en su archivo custom_checkvalue.yaml y especifique un ajuste en segundos. El valor predeterminado es de 15 segundos. Debe agregar el min_collection_interval a nivel de instancia. Si su verificación personalizada está configurada para monitorear múltiples instancias, debe configurar el intervalo individualmente por instancia.
Establecer el min_collection_interval en 30 no garantiza que la métrica se recoja cada 30 segundos. El recolector de Agente intenta ejecutar la verificación cada 30 segundos, pero la verificación puede terminar en cola detrás de otras integraciones y verificaciones, dependiendo de cuántas integraciones y verificaciones estén habilitadas en el mismo Agente. Si un método check tarda más de 30 segundos en completarse, el Agent nota que la verificación aún se está ejecutando y omite su ejecución hasta el siguiente intervalo.
Establezca un intervalo de recolección
Para una sola instancia, utilice esta configuración para establecer el intervalo de recolección en 30 segundos:
El ejemplo a continuación demuestra cómo cambiar el intervalo para una verificación personalizada hipotética que monitorea un servicio llamado my_service en dos servidores separados:
Después de verificar que su verificación se está ejecutando, reinicie el Agent para incluir la verificación y comenzar a reportar datos.
Escribiendo verificaciones que ejecutan programas de línea de comandos
Es posible crear una verificación personalizada que ejecute un programa de línea de comandos y capture su salida como una métrica personalizada. Por ejemplo, una verificación puede ejecutar el comando vgs para reportar información sobre grupos de volúmenes.
Debido a que el intérprete de Python que ejecuta las verificaciones está incrustado en el entorno de ejecución Go multihilo, no se admite el uso de los módulos subprocess o multithreading de la biblioteca estándar de Python. Para ejecutar un subproceso dentro de una verificación, utilice la función get_subprocess_output() del módulo datadog_checks.base.utils.subprocess_output. El comando y sus argumentos se pasan a get_subprocess_output() en forma de lista, con el comando y sus argumentos como una cadena dentro de la lista.
Por ejemplo, un comando que se ingresa en el símbolo del sistema de esta manera:
vgs -o vg_free
debe pasarse a get_subprocess_output() de esta manera:
Cuando ejecute el programa de línea de comandos, la verificación captura la misma salida que al ejecutarlo en la línea de comandos en el terminal. Realice el procesamiento de cadenas en la salida y llame a int() o float() en el resultado para devolver un tipo numérico.
Si no realiza el procesamiento de cadenas en la salida del subproceso, o si no devuelve un entero o un flotante, la verificación parece ejecutarse sin errores pero no reporta ninguna métrica o evento. La verificación también falla en devolver métricas o eventos si el usuario del Agent no tiene los permisos correctos en los archivos o directorios referenciados en el comando, o los permisos correctos para ejecutar el comando pasado como argumento a get_subprocess_output().
Aquí hay un ejemplo de una verificación que devuelve los resultados de un programa de línea de comandos:
# ...fromdatadog_checks.base.utils.subprocess_outputimportget_subprocess_outputclassLSCheck(AgentCheck):defcheck(self,instance):files,err,retcode=get_subprocess_output(["ls","."],self.log,raise_on_empty_output=True)file_count=len(files.split('\n'))-1#len() returns an int by defaultself.gauge("file.count",file_count,tags=['TAG_KEY:TAG_VALUE']+self.instance.get('tags',[]))
Enviando datos desde un balanceador de carga
Un caso de uso común para escribir una verificación personalizada del Agent es enviar métricas de Datadog desde un balanceador de carga. Antes de comenzar, siga los pasos en Configuración.
Para expandir los archivos para enviar datos desde su balanceador de carga:
Reemplace el código en custom_checkvalue.py con lo siguiente (reemplazando el valor de lburl con la dirección de su balanceador de carga):
Actualice el archivo custom_checkvalue.yaml (reemplazando ipaddress con la dirección IP de su balanceador de carga):
conf.d/custom_checkvalue.yaml
init_config:instances:- ipaddress:1.2.3.4
Reinicie su Agent. Dentro de un minuto, deberá ver una nueva métrica aparecer en el Resumen de Métricas llamada coreapp.update.value que envía las métricas desde su balanceador de carga.
Utilice el siguiente bloque try/except para hacer que la verificación personalizada sea compatible con cualquier versión del Agent:
try:# first, try to import the base class from new versions of the Agentfromdatadog_checks.baseimportAgentCheckexceptImportError:# if the above failed, the check is running in Agent version < 6.6.0fromchecksimportAgentCheck# content of the special variable __version__ will be shown in the Agent status page__version__="1.0.0"classHelloCheck(AgentCheck):defcheck(self,instance):self.gauge('hello.world',1,tags=['TAG_KEY:TAG_VALUE']+self.instance.get('tags',[]))