MySQL
Escrito por Hitfy
Template: Template_MySQL_VS_Padrao
As coletas do monitoramento de MySQL são realizadas por meio de consultas via Driver ODBC, realizadas pelo Proxy.
Realizar os procedimentos abaixo na máquina do Proxy:
Instalação do Driver ODBC do Linux
Fazer download do MySQL Connector:
CentOS 8/Oracle Linux 8:
Fazer download da última versão do mysql80-community-release-el8 pelo site:
http://repo.mysql.com/
Exemplo para versão 8:
wget http://repo.mysql.com/mysql80-community-release-el8.rpm
Instalar mysql80-community-release rpm:
rpm -Uvh mysql80-community-release*rpm
Instalar o pacote unixODBC-devel:
yum install unixODBC-devel
Instalar o pacote mysql-connector-odbc:
dnf --enablerepo=mysql-connectors-community install mysql-connector-odbc
*Caso o S.O. seja versão RHEL 7 / Oracle Linux 7:
wget https://dev.mysql.com/get/Downloads/Connector-ODBC/9.1/mysql-connector-odbc-setup-9.1.0-1.el7.x86_64.rpm
Instalar o pacote:
rpm -ivh mysql-connector-odbc-setup-9.1.0-1.el7.x86_64.rpm yum install unixODBC-devel yum install mysql-connector-odbc
Configuração do MySQL ODBC Driver
Acessar o arquivo odbc.ini:
vi /etc/odbc.ini
Adicionar a entrada:
[mysql] Description = MySQL test database Driver = MySQL Server = IP do host Port = 3306
Observação: É necessário editar o arquivo odbc.ini para incluir uma entrada para cada base de dados monitorada.
Criar o arquivo de configuração:
vi /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
Copiar e colar todas as linhas da entrada abaixo no arquivo de configuração criado:
cat << 'EOF' > /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf # For all the following commands HOME should be set to the directory that has .my.cnf file with password information. # Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert]. # Key syntax is mysql.status[variable]. UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}' # Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data]. # Key syntax is mysql.size[<database>,<table>,<type>]. # Database may be a database name or "all". Default is "all". # Table may be a table name or "all". Default is "all". # Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both". # Database is mandatory if a table is specified. Type may be specified always. # Returns value in bytes. # 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N' UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive UserParameter=mysql.version,mysql -V EOF
Criação do usuário de monitoramento no Banco de Dados
Criar usuário:
CREATE USER 'usuario'@'ip_banco' IDENTIFIED BY 'senha';
Exemplo:
CREATE USER 'monitoramentohit'@'127.0.0.1' IDENTIFIED BY 'm0nit0rvS';
Atribuir permissões:
GRANT REPLICATION CLIENT, PROCESS, SHOW DATABASES, SHOW VIEW ON *.* TO 'usuario'@'ip_banco';
Exemplo:
GRANT REPLICATION CLIENT, PROCESS, SHOW DATABASES, SHOW VIEW ON *.* TO 'monitoramentohit'@'127.0.0.1';
Aplicar permissões:
FLUSH PRIVILEGES;
Teste de Conexão (Realizar no Proxy)
Execute o comando abaixo, substituindo os dados pelas credenciais do usuário de monitoramento e nome do banco (O mesmo que está na entrada do odbc.ini):
isql -v mysql usuario senha
Caso retorne a mensagem abaixo, a configuração foi realizada com sucesso.
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
Aplicar o Template no Host
Criar o template para o cliente, seguindo o procedimento já estabelecido. Criar o seguinte template para os clientes:
Template_MySQL_VS_<Cliente>: associado ao Template_MySQL_VS_Padrao
Observação: Para bancos na versão 8 ou superior, seguir a mesma lógica, porém utilizando o seguinte template:
Template_MySQL_v8_<Cliente>: associado ao Template_MySQL_v8_Padrao
Depois da criação do template, criar as seguintes macros em cada host que será monitorado (corresponde a cada instância de banco de dados):
{$MYSQL_DSN} = <DSN criado no arquivo /etc/odbc.ini>
{$MYSQL_PASSWORD} = <usuário de monitoramento>
{$MYSQL_USERNAME} = <senha do usuário de monitoramento>