¿Cómo se puede depurar un script del Método de entrada de datos en Cacti?

8

(Ver abajo para actualizaciones ...)

He escrito un script de método de entrada de datos para Cacti (en Ruby, para recopilar estadísticas de beanstalkd) y funciona desde la línea de comando (devuelve un solo entero simple, como se documenta aquí ) cuando se ejecuta como la cuenta de usuario de Cacti pero la herramienta Cacti en sí no está cosechando ningún dato y no hay nada en los registros.

Aquí está la configuración de los métodos de entrada de datos: Método de entrada de datos de cactus http://img.skitch.com/20091009-gh7g1kukn9yradj6y2iqrd5qm1.jpg

Y aquí está el gráfico resultante (después de que se haya agregado a la plantilla de gráfico de un host y se haya dejado ejecutar lo suficiente como para recopilar datos): Cacti Graph http://img.skitch.com/20091009-xq1kn3qxkteb5hb11wtx6tbs8m.jpg

Actualización n. ° 1 : Parece que Cacti podría estar eliminando el medio ambiente:

sudo su - cacti -c 'env -i / script / beanstat --host 10.11.12.13 --port 11300 --stat current-waiting'
/ script / beanstat: 4: en `require ': no ​​se carga ese archivo - rubygems (LoadError)
    desde / script / beanstat: 4

Si ese es el caso, ¿cómo podría solucionarlo?

Actualización n. ° 2 : esta respuesta en stackoverflow.com parece haber resuelto el problema del entorno, pero aún no hay datos en el gráfico.

Actualización n. ° 3 : Gracias a la sugerencia de @ Heath, aumenté el nivel de registro de la encuesta y capté esto:

ADVERTENCIA: El resultado de CMD no es válido. Resultado parcial: U

No he tenido suerte Buscando en Google lo que significa "Resultado parcial: U". El script solo imprime un único valor entero.

Actualización n. ° 4 : Finalmente conseguí que esto funcionara. El problema central era la falta de entorno cuando se ejecuta el script de shell. Tuve que resolver eso prefijando mi script Ruby con las siguientes líneas:

#! / bin / sh
RUTA = / usr / local / bin: $ RUTA
exec ruby ​​-x "/ full / ruta / al / script / directorio" $ 0 "$ @"
#! / usr / bin / env ruby

Y el problema secundario fue la configuración adecuada de los Métodos de entrada de datos (uno para cada métrica separada que quería recopilar, a pesar de que todos usaban el mismo script) que alimenta las Fuentes de datos que alimenta las Plantillas de datos (o viceversa, I ' m todavía no está claro en eso) que alimenta las plantillas de gráficos que deben asignarse a los dispositivos y luego se agregan a los árboles de gráficos. En resumen, es una gran debacle con basura para la documentación y espero no tener que volver a hacerlo nunca más.

Actualización n. ° 5 : he compartido mi script en GitHub http://github.com/trak3r/cacti-beanstalkd-script

Ted de teflón
fuente

Respuestas:

4

Cuando intentaba depurar un script personalizado, me pareció útil que el script agregara alguna información a un archivo temporal cada vez que se ejecutaba; de esa manera podría asegurarme de que se llamara como esperaba. Cosas como los argumentos de línea cmd, el entorno y qué valor (es) iba a devolver. También es posible que desee redirigir stderr a un archivo de registro para detectar la salida de error del script.

Veo que hizo un Método de entrada de datos y una Plantilla de gráfico; ¿también hiciste una plantilla de datos?

Brezo
fuente
Olvide mencionar; ¿Has intentado aumentar el nivel de registro de sondeo?
Heath
Sí, también hice una plantilla de datos; IIRC era un requisito previo para agregar los puntos de datos a la plantilla de gráfico.
Teflon Ted
Buena idea en el nivel de registro de encuestador; Lo subí un poco más. Gracias.
Teflon Ted