Cómo monitorear Apache Solr con Zabbix a través de JMX y no morir en el intento

Cómo monitorear Apache Solr con Zabbix a través de JMX y no morir en el intento

Hace unos días me encontré con la necesidad de monitorear un Apache Solr con Zabbix y te cuento lo que tuve que hacer...

Jamás había escuchado sobre Solr, así que primero que tuve que hacer fue leer que era y cómo funcionaba, una vez más o menos entendido, como iba la mano, entendí que necesitaba un template para Zabbix que sea capaz de "leer" todo lo que a través del monitoreo de JMX me tiraba el Solr.

En la página de Zabbix solo hay dos soluciones y funcionan hasta ahí nomás, no hay explicaciones claras, así que agarre una de ellas, que tenía un script en Python y me puse a jugar.

En Docker Desktop levante dos contenedores, uno con Zabbix (que ya les mostraré como hacerlo funcionar, no es tan plug and play) y el otro con Solr y me puse a hacer pruebas. Finalmente, le di la vuelta al asunto.

Ya monitorea el Solr
Ya monitorea el maldito Solr

Para monitorear el Solr, en este caso particular, solo necesitaba los datos de la JVM, cuanta memoria usa y demás, no era tan importante el contenido o por ejemplo, la cantidad de documentos que tenía en cada core (instancia), así que lo primero que hice fue editar el archivo solr.in.sh, mi versión era la 5.5.1, así que quedaba de esta manera:

vi /opt/solr-5.5.1/bin/solr.in.sh 

Buscar el siguiente parámetro y lo cambie a true:

ENABLE_REMOTE_JMX_OPTS=true

Luego busque esta línea, la descomente y especifique un puerto.

RMI_PORT=18983

Reinicie el Solr con el siguiente comando...

systemctl restart solr

Una vez que está listo, procedí a descargar el template, que yo lo dejé en este repositorio de Github:

xe-nvdk/zabbix-recipes
In this project, you can find recipes for monitoring things with Zabbix - xe-nvdk/zabbix-recipes

Descargados los archivos y puestos en su lugar corrí el script de Python para asegurarme de que traiga algún datos, sí eso está ok en el caso de ustedes, pasan al Zabbix y configuran el template, si no es así, modifican la siguiente línea en el archivo solr-pypoll.py y especificas el puerto que elegí cuando configure JMX.

fqdn = 'http://127.0.0.1:18983/'

Una vez que lo subí, fui a la configuración del Host en Zabbix y agregue la interfaz JMX, acordate del puerto, fijate como queda con la siguiente imagen.

Asegurate de poner la IP del servidor Solr y el puerto

Si esta todo bien y vemos el tab de verde donde dice JMX quiere decir que se esta conectando, entonces, lo que me queda por hacer es linkear el template al host y al cabo de un ratito, empecé a ver data en el Zabbix, especificamente en Monitoring / Latest Data.

Zabbix recibiendo info de Solr
Acá esta Zabbix recibiendo datos a través de JMX

Parece todo bastante sencillo y en algún punto lo es, lo que no fue fácil es llegar a eso, agarrar y escribir el script en Python y probar y probar hasta que funcione. Así que bueno, espero que esto te sirva. Cualquier duda o comentario, podés dejarla abajo en los comentarios.