- Home »

Мониторинг MySQL и MariaDB с помощью Prometheus MySQL Exporter
Если ты когда-нибудь ловил себя на мысли «а что там с моим MySQL?» или «почему MariaDB вдруг решила поесть все CPU?», то этот пост для тебя. Здесь разберём, как быстро и без боли внедрить мониторинг MySQL/MariaDB с помощью связки Prometheus + MySQL Exporter. Это не просто «ещё один туториал» — я расскажу, как это реально работает, какие грабли бывают, и почему это must-have для любого, кто держит базы не только ради галочки. Погнали!
Зачем вообще мониторить MySQL/MariaDB?
- Поймать проблемы до того, как они станут катастрофой (например, runaway-запросы, медленные индексы, утечки соединений).
- Понять, что происходит внутри базы: сколько коннектов, какие ошибки, как ведёт себя репликация.
- Автоматизировать алерты и реакции на инциденты (например, если база вдруг ушла в swap или replication lag вырос).
- Визуализировать тренды — чтобы не гадать, а видеть, когда пора апгрейдить сервер или оптимизировать запросы.
Всё это — не абстракция, а реальная экономия времени, нервов и денег. Особенно если ты держишь свой сервер или арендуешь VPS или dedicated под проекты.
Как это работает?
Prometheus — это система сбора и хранения метрик, заточенная под мониторинг. Она умеет опрашивать разные источники (экспортеры), собирать метрики и хранить их в своей базе. Для MySQL/MariaDB есть специальный экспортер — mysqld_exporter (github.com/prometheus/mysqld_exporter), который подключается к базе, вытаскивает кучу статистики и отдаёт её Prometheus в виде HTTP-эндпоинта.
Выглядит это так:
- mysqld_exporter запускается на том же сервере, где крутится MySQL/MariaDB (или на отдельном, если есть доступ по сети).
- Экспортер периодически опрашивает базу, собирает метрики (connections, queries, innodb status, replication, ошибки и т.д.).
- Prometheus ходит на экспортер по HTTP (обычно порт 9104), забирает метрики и складывает у себя.
- Дальше можно строить графики, алерты, автоматизировать реакции и т.д. — хоть в Grafana, хоть в Prometheus Alertmanager.
Как быстро и просто всё настроить?
Давай по шагам, без воды. Я покажу на примере Ubuntu/Debian, но на CentOS/RHEL всё аналогично.
1. Создаём пользователя для мониторинга в MySQL/MariaDB
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'strong_password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;
Важно: не давай экспортеру больше прав, чем нужно. Если мониторишь репликацию — нужны права REPLICATION CLIENT.
2. Скачиваем и запускаем mysqld_exporter
Последние релизы — на GitHub. Можно через wget:
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.15.1.linux-amd64.tar.gz
cd mysqld_exporter-0.15.1.linux-amd64
Создаём файл с кредами (лучше не хранить пароль в переменных окружения):
echo "DATA_SOURCE_NAME='exporter:strong_password@(localhost:3306)/'" > .my.cnf_exporter
chmod 600 .my.cnf_exporter
Запускаем экспортер:
export DATA_SOURCE_NAME='exporter:strong_password@(localhost:3306)/'
./mysqld_exporter --config.my-cnf=".my.cnf_exporter" &
Проверь, что экспортер слушает порт 9104:
curl http://localhost:9104/metrics
Если видишь кучу метрик — всё ок!
3. Добавляем экспортер в Prometheus
В prometheus.yml добавь job:
- job_name: 'mysql'
static_configs:
- targets: ['localhost:9104']
Перезапусти Prometheus. Теперь метрики базы доступны для сбора и визуализации.
4. Визуализация: Grafana
Grafana — де-факто стандарт для красивых дашбордов. Есть готовые дашборды для MySQL/MariaDB, например MySQL Overview (ID 7362).
- Импортируй дашборд, укажи Prometheus как источник данных.
- Сразу увидишь кучу графиков: QPS, slow queries, InnoDB, replication lag и т.д.
Примеры, схемы, практические советы
Положительный кейс
У меня был проект на Laravel, где база периодически «подвисала». После внедрения мониторинга через mysqld_exporter выяснилось: в пике нагрузка на InnoDB buffer pool уходила в потолок, начинался swap, QPS падал. После увеличения innodb_buffer_pool_size и оптимизации пары запросов — проблема ушла. Без мониторинга это бы искали неделями.
Отрицательный кейс
На одном из серверов экспортер запускали под root, а пароль писали в /etc/environment. Итог: случайно слили креды в публичный git-репозиторий. Совет — всегда храни креды в отдельном файле с правами 600, не под root, и не в переменных окружения, если сервер общий.
Метод | Плюсы | Минусы | Рекомендации |
---|---|---|---|
mysqld_exporter + Prometheus | Гибко, масштабируемо, куча метрик, легко интегрируется с Grafana, автоматизация алертов | Требует отдельного сервиса, нужно настраивать права, не показывает query traces | Использовать для production, особенно если несколько серверов |
Percona Monitoring and Management (PMM) | Готовое решение, query analytics, удобный UI | Тяжелее, требует docker, больше ресурсов | Для крупных инсталляций, если нужен query analytics |
Мониторинг через Zabbix/Netdata | Интеграция с другими сервисами, простота | Меньше гибкости, меньше метрик, сложнее кастомизировать | Для небольших проектов или если уже есть Zabbix/Netdata |
Похожие решения и альтернативы
- Percona PMM — мощный комбайн, но тяжелее и сложнее в настройке. percona.com
- Netdata — быстро, просто, но меньше глубины по MySQL. netdata.cloud
- Zabbix — если у тебя уже есть Zabbix, можно мониторить MySQL через агент.
- Telegraf + InfluxDB — альтернатива Prometheus, но требует больше ручной настройки.
Статистика и сравнение
- mysqld_exporter — более 6.5k stars на GitHub, используется в крупных SaaS и облаках.
- Prometheus — топ-1 по популярности среди open-source мониторинга (по данным CNCF).
- В среднем, mysqld_exporter даёт 200+ метрик по состоянию базы, включая InnoDB, replication, errors, threads, connections, slow queries и т.д.
Интересные факты и нестандартные способы использования
- Можно мониторить не только локальные базы, но и кластеры Galera, реплики, даже Amazon RDS (если есть доступ по сети).
- mysqld_exporter поддерживает custom queries — можно добавить свои метрики (например, считать количество пользователей, заказов, что угодно).
- Через Prometheus Alertmanager можно автоматически слать алерты в Telegram, Slack, email — или даже запускать скрипты для автоматического failover.
- Можно строить SLA-дашборды: сколько времени база была доступна, сколько было ошибок, сколько раз превышался порог QPS.
- В связке с Ansible или Terraform можно автоматизировать развёртывание мониторинга на десятках серверов за минуты.
Новые возможности: автоматизация и скрипты
- Автоматический рестарт MySQL при превышении порога ошибок (через webhook от Alertmanager).
- Сбор кастомных бизнес-метрик (например, сколько новых пользователей за час) прямо из базы.
- Автоматизация масштабирования: если QPS растёт — скрипт может поднять read-replica или увеличить лимиты.
- Интеграция с CI/CD: мониторинг миграций, алерты при ошибках в schema changes.
Выводы и рекомендации
Мониторинг MySQL и MariaDB через Prometheus + mysqld_exporter — это не просто «чтобы было». Это реальный инструмент для предотвращения проблем, оптимизации работы базы и автоматизации рутины. Он гибкий, масштабируемый, легко интегрируется с другими системами (Grafana, Alertmanager, CI/CD, Telegram и т.д.). Если у тебя свой сервер или VPS — это must-have. Если ты на shared-хостинге — спроси у поддержки, можно ли поставить экспортер (или переходи на VPS или dedicated).
Рекомендую:
- Ставить mysqld_exporter на каждый сервер с MySQL/MariaDB.
- Давать экспортеру только нужные права.
- Использовать Grafana для визуализации, Alertmanager — для алертов.
- Не забывать про безопасность (креды, firewall, SSL).
- Автоматизировать развёртывание через ansible/terraform, если серверов много.
Мониторинг — это не роскошь, а необходимость. Не жди, пока база упадёт — внедри мониторинг сегодня и спи спокойно!
Официальные ссылки:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.