Pandora FMS community forums

Full Version: Problemas con dos agentes en Python y PHP
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hola,

Tengo dos programas que ejecuto desde un agente para recoger dos datos incrementales :

- Uno escrito en python contacta con un servidor mysql y extrase un select count(*).
- El otro es el myprofi (http://myprofi.sourceforge.net/) que evalua el log de mysql, saca estadísticas y recupero el valor que me interesa.

Los programas se ejecutan desde consola sin problemas. Si configuro cada agente por separado funcionan correctamente, pero cuando los meto juntos en el mismo fichero de configuración el que consulta las visitas web, el programa en python, deja de funcionar, no importa el orden en que los ponga.

¿Alguna idea por donde puede venir el error? Gracias.

Os pongo la confguración cuando los dos están juntos y falla el de consulta web :


server_ip      192.168.0.3
server_path    /var/spool/pandora/data_in
temporal /tmp
logfile /var/log/pandora/pandora_agent.log
interval        30
debug          0
udp_server 0
udp_server_port 41122
udp_server_auth_address 0.0.0.0
group P
server_port    41121
transfer_mode tentacle
# User the agent will run as
pandora_user root

module begin
module_name sql_visitesweb
module_type generic_data_inc
module_exec /usr/bin/python /usr/local/bin/cons_sql_totalregistres.py
module_description Numero de visites des de la ultima consulta
module_end

module begin
module_name sql_select
module_type generic_data_inc
module_exec php /usr/local/src/parser.php  -type "select" /var/log/mysql/mysql.$
module_description Numero de consultes SELECT des de la ultima consulta
module_end


El código del programa python es muy simple :

#!/usr/bin/python
import MySQLdb
conn = MySQLdb.connect(host="xxxxx",user="yyyyy",passwd="ooooo")
cursor=conn.cursor()
cursor.execute("SELECT count(*) FROM db.log")
row=cursor.fetchone()
cursor.close()
conn.close()
print row[0]

Lo unico que se me ocurre es que pueda ser un problema de permisos si el agente se ejecuta con permisos que no sean root.

De python no se mucho, pero entiendo que la ultima linea: print row[0], vuelta a salida estándar un único numero, verdad ?. Recuerda que pandora espera un unico dato, sin nada que lo pueda confundir (espacios en blanco, caracteres que no sean numericos...

Solo por probar, prueba a cambiar el tipo de modulo a async_string a ver que te esta devolviendo y con eso quizas tengas mas pistas. Otra opcion es poner el agente en modo debug y echarle un vistazo directamente al XML.

(04-05-2011, 04:34 PM)Kitus link Wrote: [ -> ]Hola,

Tengo dos programas que ejecuto desde un agente para recoger dos datos incrementales :

- Uno escrito en python contacta con un servidor mysql y extrase un select count(*).
- El otro es el myprofi (http://myprofi.sourceforge.net/) que evalua el log de mysql, saca estadísticas y recupero el valor que me interesa.

Los programas se ejecutan desde consola sin problemas. Si configuro cada agente por separado funcionan correctamente, pero cuando los meto juntos en el mismo fichero de configuración el que consulta las visitas web, el programa en python, deja de funcionar, no importa el orden en que los ponga.

¿Alguna idea por donde puede venir el error? Gracias.

Os pongo la confguración cuando los dos están juntos y falla el de consulta web :


server_ip       192.168.0.3
server_path     /var/spool/pandora/data_in
temporal /tmp
logfile /var/log/pandora/pandora_agent.log
interval        30
debug           0
udp_server 0
udp_server_port 41122
udp_server_auth_address 0.0.0.0
group P
server_port     41121
transfer_mode tentacle
# User the agent will run as
pandora_user root

module begin
module_name sql_visitesweb
module_type generic_data_inc
module_exec /usr/bin/python /usr/local/bin/cons_sql_totalregistres.py
module_description Numero de visites des de la ultima consulta
module_end

module begin
module_name sql_select
module_type generic_data_inc
module_exec php /usr/local/src/parser.php  -type "select" /var/log/mysql/mysql.$
module_description Numero de consultes SELECT des de la ultima consulta
module_end


El código del programa python es muy simple :

#!/usr/bin/python
import MySQLdb
conn = MySQLdb.connect(host="xxxxx",user="yyyyy",passwd="ooooo")
cursor=conn.cursor()
cursor.execute("SELECT count(*) FROM db.log")
row=cursor.fetchone()
cursor.close()
conn.close()
print row[0]
Buenas.

Puede ser también por un tema de tiempos de ejecución. Has probado a crear un script en Python simplón y rápido en plan:

Code:
#!/usr/bin/python
print "1"


Saludos.
Hola,

Ahora ya funciona correctamente. Era un cúmulo de fallos y una solución evidente :

- Algún carácter de retorno de final de linea "incorrecto". Arreglado con Notepad++.
- El agente se ejecutaba cada 30 segundos, y al poner la opción para limitar el tiempo de ejecución del módulo he visto que algunos tardaba tanto (o se colgaban)  que se solapaba con la ejecución. Al poner un límite he podido ver los módulos que fallaban y los he arreglado.
- Borrar las bases de datos manualmente. Como estoy haciendo tantas pruebas al final he borrando las tablas de módulos y agentes a manija y ha acabado de solucionar el problema con los últimos módulos-

Gracias por todo!