Ir al contenido principal

Destacados

Ruteando en Proxmox con 1 IP publica

La idea de este articulo es explicar como utilizar la misma IP publica de un Proxmox para poder tener conexión a Internet. Para empezar si se quiere esconder las VM detrás de la IP publica del Proxmox se puede utilizar un ruteo hacia la red de las mismas. Debemos tener una interfaz virtual creada (vmbr0 en mi caso) y tener habilitada la ruta para esta interfaz. A continuación muestro la configuración del archivo interfaces de mi Proxmox. vi /etc/network/interfaces En el puerto donde entra la IP publica es necesario habilitar el proxy arp , para mi caso seria la interfaz eno1. auto eno1 iface eno1 inet static ... ... post-up echo 1 >/proc/sys/net/ipv4/conf/eno1/proxy_arp Para la interfaz virtual la configuración quedaría de la siguiente manera:...

Monitoreando MySQL con Zabbix 4

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

Voy a empezar explicando tal cual se encuentra en el sitio oficial de Zabbix la implementacion para MySQLhttps://www.zabbix.com/integrations/mysql

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:

  1. template_db_mysql.conf : Que sera la configuracion que ira del lado del host/agente.
  2. 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

Entradas populares