Configurar Zabbix para que pueda monitorear una base de datos MySQL es bastante fácil, sin embargo en la versión 4 existen algunos pasos que se deben seguir para evitar problemas entre el Zabbix Server y el Zabbix cliente.
Guia de Zabbix
En este caso voy a trabajar con el template official de Zabbix para MySQL que se puede encontrar en el siguiente link:
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/mysql
Aca podemos encontrar 2 archivos que tenemos que descargar:
- template_db_mysql.conf : Que sera la configuracion que ira del lado del host/agente.
- template_db_mysql.xml : Sera el template que cargaremos en nuestro servidor Zabbix.
Paso 1: Hay que mover el archivo template_db_mysql.conf al directorio /etc/zabbix/zabbix_agent.conf.d/
Archivo template_db_mysql.conf
#template_db_mysql.conf created by Zabbix for "Template DB MySQL" and Zabbix 4.2
#For OS Linux: You need create .my.cnf in zabbix-agent home directory (/var/lib/zabbix by default)
#For OS Windows: You need add PATH to mysql and mysqladmin and create my.cnf in %WINDIR%\my.cnf,C:\my.cnf,BASEDIR\my.cnf https://dev.mysql.com/doc/refman/5.7/en/option-files.html
#The file must have three strings:
#[client]
#user=zbx_monitor
#password=<password>
#
UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
Esta es la configuracion por defecto que trae el archivo cuando lo leemos.
Se puede ver que hay que crear un archivo .my.cnf ubicado en /var/lib/zabbix/, que contendra el usuario de la base de datos MySQL y su password, en este caso zbx_monitor.
Archivo .my.cnf
[client]
user=zbx_monitor
password=passw0rd
Paso siguiente es crear el usuario zbx_monitor en la base de datos del MySQL con permisos sobre la misma.
CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '<password>';
GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
Reiniciamos el agente zabbix y listo, ya podemos empezar a recibir datos de la base de datos en el servidor Zabbix.
PROBLEMA
Sin embargo usando esta guia de la pagina oficial de Zabbix, me producia el siguiente error que pude encontrar en los logs del servidor.
/var/log/zabbix/zabbix_server.log
ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' (using password: NO)
Este error me torturo un par de noches, pero despues de buscar durante varios dias una solucion en internet y en los foros de Zabbix, termine encontrando un mix de soluciones en un portal chino y en el mismo foro de Zabbix.
SOLUCION
1) En un principio, instalando zabbix-agent con apt, no se genera un directorio zabbix en /var/lib/, por lo tanto tenemos que generarlo nosotros mismos:
mkdir /var/lib/zabbix
Adentro de ese directorio, creamos el archivo
.my.cnf; donde
implemento el primer cambio.
El error que aparece en los logs del servidor Zabbix, muestran a un usuario
zabbix tratando de conectarse a la base de datos, sin embargo en la guía configure y cree un usuario
zbx_monitor.
Sin ganas de dar muchas vueltas decidi simplemente crear un usuario
zabbix en el
MySQL y garantizarle los mismos permisos que al usuario
zbx_monitor.
También implemente el usuario y el password para
mysqladmin (cosa que en la guía no se especifica).
CREATE USER 'zabbix'@'%' IDENTIFIED BY '<password>';
GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix'@'%';
Archivo .my.cnf
[client]
user=zabbix
password=passw0rd
[mysqladmin]
user=zabbix
password=passw0rd
2) Aunque hayamos cambiado el usuario y se haya agregado los permisos para mysqladmin, el Zabbix server sigue sin obtener los datos.
Esto ocurre por que aun en nuestro archivo de configuracion template_db_mysql.conf, no existe una clara referencia al archivo .my.cnf.
Para esto debemos modificar las lineas de los UserParameter.
Tenemos que especificar en que directorio se encuentra el archivo, asignándole al PATH HOME el directorio con ruta absoluta del archivo .my.cnf.
Este PATH se debe especificar despues del key del UserParameter y antes del comando a ejecutar.
Explicacion:
UserParameter=key, <PATH> <comando>
Ejemplo
UserParameter=mysql.ping[*],HOME=/var/lib/zabbix mysqladmin -h"$1" -P"$2" ping
Al final debemos cambiar el archivo template_db_mysql.conf de esto:
UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
A esto:
UserParameter=mysql.ping[*],HOME=/var/lib/zabbix mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*],HOME=/var/lib/zabbix mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*],HOME=/var/lib/zabbix mysql -h"$1" -P"$2" -sNX -e "show slave status"
3) Por ultimo queda incluir todos los archivos .conf de la carpeta zabbix_agentd.conf.d/ para que el agente los pueda reconocer e incluir correctamente.
Esto se hace en el archivo zabbix_agentd.conf.
Comentar, editar o borrar esta linea
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
Por esta linea:
Include=/etc/zabbix/zabbix_agentd.conf.d/
Aunque el archivo tiene esta linea incluida por defecto, en la cual se usa el comodín * para incluir todos los archivos de tipo .conf, no debería haber cambios entre una forma o la otra en la implementacion ya que las 2 lineas hacen lo mismo, pero el problema es que si lo hay.
Una vez esto hecho solo hay que reiniciar el agente zabbix; y el servidor Zabbix (con un host previamente configurado) empezaría a recibir los datos del MySQL.
Espero que esta guía ayude a implementar o solucionar problemas de MySQL con Zabbix.
Comentarios
Publicar un comentario