Esta página te guía por el proceso para crear un check básico personalizado del Agent “Hello world!”. También te muestra cómo cambiar el intervalo mínimo de recopilación para el check.
Configuración
Instalación
Antes de crear un check del Agent personalizado, instala el Datadog Agent.
Para trabajar con la última versión del Agent, tu check del Agent personalizado debe ser compatible con Python 3.
Configuración
Cambia al directorio conf.d de tu sistema. Para más información sobre dónde encontrar el directorio conf.d, consulta archivos de configuración del Agent.
En el directorio conf.d, crea un nuevo archivo de configuración para tu nuevo check de Agent. Nombra el archivo custom_checkvalue.yaml.
Edita el archivo para incluir lo siguiente:
conf.d/custom_checkvalue.yaml
init_config:instances:[{}]
Crea un archivo de check en el directorio checks.d. Nombra el archivo custom_checkvalue.py.
Naming your checks:
It's a good idea to prefix your check with custom_ to avoid conflicts with the name of a pre-existing Datadog Agent integration. For example, if you have a custom Postfix check, name your check files custom_postfix.py and custom_postfix.yaml instead of postfix.py and postfix.yaml.
The names of the configuration and check files must match. If your check is called custom_checkvalue.py, your configuration file must be named custom_checkvalue.yaml.
Si tienes problemas para que el check personalizado funcione, comprueba los permisos del archivo. El archivo del check debe ser legible y ejecutable por el usuario del Agent. Para conocer más pasos para solucionar problemas, consulta Solución de problemas de un check del Agent.
Actualización del intervalo de recopilación
Para cambiar el intervalo de recopilación de tu check, utiliza el ajuste min_collection_interval de tu archivo custom_checkvalue.yaml y especifica un ajuste en segundos. El valor por defecto es de 15 segundos. Debes añadir el min_collection_interval a nivel de instancia. Si tu check personalizado está configurado para monitorizar múltiples instancias, debes configurar el intervalo individualmente por instancia.
Establecer el min_collection_interval en 30 no garantiza que la métrica se recopile cada 30 segundos. El recopilador del Agent intenta ejecutar el check cada 30 segundos, pero el check podría terminar en cola detrás de otras integraciones y checks, según cuántas integraciones y checks estén habilitados en el mismo Agent. Si un método check tarda más de 30 segundos en completarse, el Agent se da cuenta de que el check sigue en ejecución y se salta su ejecución hasta el siguiente intervalo.
Fijar un intervalo de recopilación
Para una única instancia, utiliza esta configuración para establecer el intervalo de recopilación en 30 segundos:
El siguiente ejemplo muestra cómo cambiar el intervalo de un hipotético check personalizado que monitoriza un servicio llamado my_service en dos servidores distintos:
Después de verificar que tu check está funcionando, reinicia el Agent para incluir el check y comenzar a reportar datos.
Escribir checks que ejecuten programas de línea de comandos
Es posible crear un check personalizado que ejecute un programa de línea de comandos y capture su salida como un archivo de métrica personalizada. Por ejemplo, el check puede ejecutar el comando vgs para obtener información sobre grupos de volúmenes.
Debido a que el intérprete de Python que ejecuta los checks está incrustado en el tiempo de ejecución de múltiples subprocesos de Go, no se permite el uso de los módulos subprocess o multithreading de la biblioteca estándar de Python. Para ejecutar un subproceso dentro de un check, utiliza la funciónget_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 lista.
Por ejemplo, un comando que se introduce en el símbolo del sistema de la siguiente manera:
Cuando ejecutas el programa de línea de comandos, el check captura la misma salida que al ejecutar la línea de comandos en el terminal. Haz el procesamiento en cadena en la salida y llama a int() o float() en el resultado para devolver un tipo numérico.
Si no haces un procesamiento por cadena de la salida del subproceso, o si no devuelve un entero o un número flotante, el check parece ejecutarse sin errores, pero no informa de ninguna métrica o evento. El check tampoco devuelve métricas o eventos si el usuario del Agent no tiene los permisos correctos en cualquiera de los archivos o directorios referenciados en el comando, o los permisos correctos para ejecutar el comando pasado como argumento a get_subprocess_output().
He aquí un ejemplo de check 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',[]))
Envío de datos desde un balanceador de carga
Un caso de uso común para escribir un check personalizado de Agent es enviar métricas de Datadog desde un balanceador de carga. Antes de empezar, sigue los pasos de Configuración.
Para ampliar los archivos para enviar datos desde tu balanceador de carga:
Sustituye el código de custom_checkvalue.py por el siguiente (sustituyendo el valor de lburl por la dirección de tu balanceador de carga):
Actualiza el archivo custom_checkvalue.yaml (sustituyendo ipaddress por la dirección IP de tu balanceador de carga):
conf.d/custom_checkvalue.yaml
init_config:instances:- ipaddress:1.2.3.4
Reinicia tu Agent. En un minuto, deberías ver aparecer una nueva métrica en el Resumen de métrica llamado coreapp.update.value que envía las métricas desde tu balanceador de carga.
Utiliza el siguiente bloque try/except para hacer que el check personalizado sea compatible con cualquier versión del Agent:
intenta:# primero intenta importar la clase de base de versiones nuevas del Agentfromdatadog_checks.baseimportAgentCheckexceptImportError:# si falla, el check se está ejecutando en el Agent versión < 6.6.0fromchecksimportAgentCheck# el contenido de la variable especial __version__ se mostrará en la página de estado del Agent__version__="1.0.0"classHelloCheck(AgentCheck):defcheck(self,instance):self.gauge('hello.world',1,tags=['TAG_KEY:TAG_VALUE']+self.instance.get('tags',[]))