Мониторинг MySQL с Prometheus mysqld_exporter и Performance Schema
- Отсутствие метрик реального времени по QPS, медленным транзакциям, блокировкам строк и состоянию Buffer Pool.
- Высокая нагрузка на базу данных при опросе стандартными скриптами мониторинга.
- Ошибки прав доступа
Access denied for user 'mysqld_exporter'при сборе системных метрик.
1. Создание сервисного пользователя с минимальными правами
CREATE USER 'mysqld_exporter'@'127.0.0.1' IDENTIFIED BY 'ExporterPassword123' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'127.0.0.1';
FLUSH PRIVILEGES;2. Создание файла аутентификации экспортера
Создайте защищенный файл /etc/.mysqld_exporter.cnf:
[client]
user=mysqld_exporter
password=ExporterPassword123
host=127.0.0.1
port=3306chmod 400 /etc/.mysqld_exporter.cnf
chown prometheus:prometheus /etc/.mysqld_exporter.cnf3. Настройка сервиса Systemd для mysqld_exporter
Создайте unit-файл /etc/systemd/system/mysqld_exporter.service:
[Unit]
Description=Prometheus MySQL Exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/mysqld_exporter \
--config.my-cnf=/etc/.mysqld_exporter.cnf \
--collect.global_status \
--collect.global_variables \
--collect.info_schema.innodb_metrics \
--collect.info_schema.innodb_tablespaces \
--collect.perf_schema.eventsstatements \
--collect.perf_schema.tablelocks
Restart=always
[Install]
WantedBy=multi-user.target4. Запуск и проверка сбора метрик
systemctl daemon-reload
systemctl enable --now mysqld_exporter
curl -s http://localhost:9104/metrics | grep mysql_global_status_threads_connected Частые вопросы (FAQ)
Почему не стоит включать все флаги коллектора perf_schema без разбора?
Сбор тяжелых метрик из performance_schema на СУБД с десятками тысяч таблиц может создать ощутимую нагрузку на CPU при каждом цикле скрейпинга (scrape interval).
Зачем указывать опцию MAX_USER_CONNECTIONS 3 для пользователя экспортера?
Это защитный барьер: в случае сбоев или утечки соединений в системе мониторинга экспортер не сможет занять все свободные слоты max_connections и уронить продакшен.