Страница 1 из 1

Мониторинг и оптимизация MySQL

Добавлено: 22 ноя 2011, 19:33
RomA
Предыстория:
Му уже довольно часто с много используем MySQL, а тем не менее это не самая лучшая БД для нагруженных решений, потому первое, куда я посмотрел, была база данных, тем более что по команде top это приложение было в самом начале, а команда atop -d красноречиво рассказывала что это же приложение активно использует жёский диск - всё это наводило на мысли, но сначала надо было убедиться ещё раз

Задача:
Мониторить основные параметры БД MySQL

Реализация:
Оказалось что для мониторинга MySQL в Zabbix уже всё готово, так что приступаем с ходу
В файле /usr/local/etc/zabbix/zabbix_agentd.conf раскоментарим следующие строки (ну и сразу добавим туда пароль на свой скуль)

Код: Выделить всё

UserParameter=mysql.ping,mysqladmin -uroot -pXXXXX ping|grep alive|wc -l
UserParameter=mysql.uptime,mysqladmin -uroot -pXXXXX status|cut -f2 -d":"|cut -f1 -d"T"
UserParameter=mysql.threads,mysqladmin -uroot -pXXXXX status|cut -f3 -d":"|cut -f1 -d"Q"
UserParameter=mysql.questions,mysqladmin -uroot -pXXXXX status|cut -f4 -d":"|cut -f1 -d"S"
UserParameter=mysql.slowqueries,mysqladmin -uroot -pXXXXX status|cut -f5 -d":"|cut -f1 -d"O"
UserParameter=mysql.qps,mysqladmin -uroot -pXXXXX status|cut -f9 -d":"
UserParameter=mysql.version,mysql -V
Повторюсь:
1) такие строки уже есть и с них надо просто решетку снять
2) добавляем -pXXXXX - то есть -pПАРОЛЬ к базе данных

теперь можно перегрузить агента

Код: Выделить всё

/usr/local/etc/rc.d/zabbix_agentd stop
/usr/local/etc/rc.d/zabbix_agentd start
Данные пошли в систему - теперь надо их принять - у zabbix есть шаблон с названием Template_App_MySQL - всё что нам надо - это прикрепить этот шаблон к хосту.
1.jpg
1.jpg (205.22 КБ) 7530 просмотров
Теперь надо набрать немного статистики, а потом проанализировать полученные данные и делать выводы

zabbix22 - Мониторинг MySQL

Добавлено: 20 мар 2014, 15:24
RomA
Вот и пришло время новых технологий и решений "из коробки" - пришёл заббикс 2.2 и теперь MySQL мониторится нативным шаблоном. Давайте посмотрим как это делается.
В ходе настроек будем опираться на статьи http://blog.volobuev.su/monitoring-mysql-v-zabbix/ и http://blog.themilkyway.org/2013/11/how ... app-mysql/

Итак, приступим. Сначало создадим в БД пользователя zabbix с паролем 123456 и перечитаем таблицу привилегий (команда попросит ввести ваш пароль на MySQL):

Код: Выделить всё

mysql -uroot -p -e"GRANT USAGE ON *.* TO 'zabbix'@'127.0.0.1' IDENTIFIED BY '123456'";
mysql -uroot -p -e"GRANT USAGE ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY '123456'";
mysql -uroot -p -e"flush privileges"
Теперь проверим что у нас всё получилось:

Код: Выделить всё

mysql -uzabbix -p123456 -e"status"
Если статуст увидели - то хорошо, пошли дальше.
Нам надо определиться где будет лежать конфиг - я не стал изобретать велосипед и воспользовался стандартными путями - мои скрипты будут лежать в /usr/local/etc/zabbix22/zabbix - именно тут мы создаём файл конфигурации

Код: Выделить всё

cd /usr/local/etc/zabbix22/zabbix
touch .my.cnf
И вписываем в него наши параметры для подключения
[mysql]
user=zabbix
password=123456
[mysqladmin]
user=zabbix
password=123456
Теперь идём править файл конфигурации агента, в той его части, что следит за скулем - редактируем файл /usr/local/etc/zabbix22/zabbix_agentd.conf.d/userparameter_mysql.conf - там есть параметр HOME= в котором и надо прописать вот тот путь, где лежит конфиг подключения к MySQL - Соответственнно мой файл стал выглядеть так:
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/usr/local/etc/zabbix22/zabbix mysql -N | awk '{print $$2}'

UserParameter=mysql.size[*],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=/usr/local/etc/zabbix22/zabbix mysql -N

UserParameter=mysql.ping,HOME=/usr/local/etc/zabbix22/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
А теперь надо этот конфиг, подключить к основному конфигу Агента - правим /usr/local/etc/zabbix22/zabbix_agentd.conf вот эту часть
### Option: Include
#<----->You may include individual files or all files in a directory in the configuration file.
#<----->Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
#
# Mandatory: no
# Default:
# Include=

Include=/usr/local/etc/zabbix22/zabbix_agentd.conf.d/
Всё - теперь перезапускаем клиента и он начнёт отдавать данные по скулю. Правда появятся они не сразу, так как в шаблоне есть автообнаружение.

Собственно о шаблоне - приложу пару скриншотов, как это настраивается в самом интерфейсе zabbix:
1.jpg
1.jpg (130.17 КБ) 7408 просмотров
2.jpg
2.jpg (124.3 КБ) 7408 просмотров
На сегодняшний момент если БД была перезапущена, или сервер перезагрузился - то zabbix будет показывать что "MySQL не запущен" - после перезапуска агента всё становится на свои места. Такая фича. пока не боролся с ней