Мониторинг MySQL в ZABBIX

MySQL в ZABBIX
http://www.zabbix.com/

Мониторинг любой СУБД необходим как для поиска узких мест в производительности, так и для дальнейшего “тюнинга”, а потому вопрос отслеживания основных параметров является достаточно актуальным. Это не касается каких-то небольших серверов, речь идет о достаточно ресурсоемких приложениях, тесно взаимодействующих с СУБД. MySQL умеет отдавать данные о собственной производительности, вопрос лишь в том как их подцепить к системе мониторинга, в нашем случае Zabbix. Об этом и пойдет речь в этой статье.


Вводная статья по шаблонам мониторинга ZABBIX – Шаблоны ZABBIX.

Если вам интересна тематика ZABBIX, рекомендую обратиться к основной статье – Система мониторинга ZABBIX, в ней вы найдете дополнительную информацию.


Настройка мониторинга MySQL в ZABBIX

Создаем каталог для скриптов, если его все ещё у вас нет. Сразу назначаем права и меняем владельца:
root@debian7:~# mkdir -m 750 /usr/local/etc/zabbix_agent_scripts
root@debian7:~# chown root:zabbix /usr/local/etc/zabbix_agent_scripts

Создаем скрипт:
root@debian7:~# nano /usr/local/etc/zabbix_agent_scripts/mysql-stats.sh

Со следующим содержанием:

#!/bin/bash
##### OPTIONS VERIFICATION #####
if [[ -z “$1” || -z “$2″ ]]; then
exit 1
fi
##### PARAMETERS #####
RESERVED=”$1″
METRIC=”$2″
USER=”${3:-user}”
PASS=”${4:-pass}”
#
MYSQLADMIN=”/usr/bin/mysqladmin”
MYSQL=”/usr/bin/mysql”
CACHE_TTL=”55″
CACHE_FILE=”/tmp/zabbix.mysql-stats.cache”
EXEC_TIMEOUT=”1″
NOW_TIME=date '+%s'
##### RUN #####
if [ “${METRIC}” = “alive” ]; then
${MYSQLADMIN} -u${USER} -p${PASS} ping | grep alive | wc -l | head -n1
exit 0
fi
if [ “${METRIC}” = “version” ]; then
${MYSQL} -V | sed -e ‘s/^.*\(ver.*\)$/\1/gI’ | head -n1
exit 0
fi
#
if [ -s “${CACHE_FILE}” ]; then
CACHE_TIME=stat -c"%Y" "${CACHE_FILE}"
else
CACHE_TIME=0
fi
DELTA_TIME=$((${NOW_TIME} – ${CACHE_TIME}))
#
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
sleep $((${EXEC_TIMEOUT} – ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
echo “” >> “${CACHE_FILE}” # !!!
DATACACHE=${MYSQLADMIN} -u${USER} -p${PASS} extended-status 2>&1
echo “${DATACACHE}” > “${CACHE_FILE}” # !!!
chmod 640 “${CACHE_FILE}”
fi
#
cat “${CACHE_FILE}” | grep -iw “$METRIC” | cut -d’|’ -f3 | head -n1
#
exit 0

Изменим владельца скрипта и сделаем его исполняемым для владельца и группы, назначив соответствующие права:
root@debian7:~# chown root:zabbix /usr/local/etc/zabbix_agent_scripts/mysql-stats.sh
root@debian7:~# chmod 550 /usr/local/etc/zabbix_agent_scripts/mysql-stats.sh

Далее необходимо создать пользователя в MySQL.
root@debian7:~# mysql -u root -p
mysql> grant usage on *.* to ‘zabbix’@’localhost’ identified by ‘your-password’ 1;
mysql> flush privileges;
mysql> quit;

Следующий шаг будет создание каталога для пользовательских параметров. В принципе вы можете добавлять эти параметры в самом конце конфигурационного файла zabbix-агента, но грамотней будет в этом же конфиге определить внешний путь для дополнительных параметров, что я и сделал. Создаем каталог и сразу назначаем ему права и меняем владельца:
root@debian7:~# mkdir -m 750 /usr/local/etc/zabbix_agent_configs
root@debian7:~# chown root:zabbix /usr/local/etc/zabbix_agent_configs
Далее открываем конфигурационный файл zabbix-агента, ищем параметр “Include” (необходимо его раскомментировать), его значением будет определенный выше путь для дополнительных конфигурационных файлов.
root@debian7:~# nano /usr/local/etc/zabbix_agentd.conf
Include=/usr/local/etc/zabbix_agent_configs/

Создаем файл с дополнительными пользовательскими параметрами, выставляем ему необходимые права и меняем владельца:
root@debian7:~# nano /usr/local/etc/zabbix_agent_configs/mysql.conf

UserParameter=mysql-stats[*],/usr/local/etc/zabbix_agent_scripts/mysql-stats.sh “none” “$1” user-name user-pass
Надо отметить, что в файле необходимо прописать в открытом виде имя пользователя и пароль, так что позаботьтесь о безопасности, не назначая дополнительных прав пользователю.

root@debian7:~# chown root:zabbix /usr/local/etc/zabbix_agent_configs/mysql.conf
root@debian7:~# chmod 550 /usr/local/etc/zabbix_agent_configs/mysql.conf

Перезапускаем агента:
root@debian7:~# service zabbix-agent restart

Остается импортировать новый шаблон на zabbix-сервер. Скачать готовый шаблон для мониторинга MySQL можно тут: Шаблон для мониторинга MySQL Stats (agent)

Для надежности проверим как отдаются данные:
root@debian7:~# zabbix_get -s 127.0.0.1 -k mysql-stats[questions]

Вместо “127.0.0.1” вставьте адрес вашего сервера с MySQL.

Настройка завершена. Ниже небольшой пример поступающих данных:

zabbix mysql monitoring 01

Вопрос анализа данных в этой статье не рассматривается, т.к. он упирается в комплексное отслеживания совокупности зависящих друг от друга параметров, которые нельзя рассматривать по-одному.


Мониторинг параметров MySQL в Zabbix

Яндекс.Метрика