Home » Мониторинг MySQL и MariaDB с помощью Prometheus MySQL Exporter
Мониторинг MySQL и MariaDB с помощью Prometheus MySQL Exporter

Мониторинг 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, если серверов много.

Мониторинг — это не роскошь, а необходимость. Не жди, пока база упадёт — внедри мониторинг сегодня и спи спокойно!

Официальные ссылки:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked