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>