Мониторинг MySQL с помощью Proto Observability
На этой странице:
Сбор основных метрик MySQL
Убедитесь, что у вас установлен и настроен ProtoOBP агент.
Конфигурация MySQL
Для подключения агента ProtoOBP к MySQL необходимо создать пользователя с правами только на чтение для этого:
-
Создайте нового пользователя
protoobp
:CREATE USER 'protoobp'@'%' IDENTIFIED BY '<пароль>';
-
Задайте права для сбора метрик для пользователя
protoobp
:-
Для MySQL 5.6 и 5.7:
GRANT REPLICATION CLIENT ON *.* TO 'protoobp'@'%' WITH MAX_USER_CONNECTIONS 5; GRANT PROCESS ON *.* TO 'protoobp'@'%';
-
Для MySQL 8.0+:
GRANT REPLICATION CLIENT ON *.* TO 'protoobp'@'%' GRANT PROCESS ON *.* TO 'protoobp'@'%';
-
-
Если на сервере MySQL включена
performance_schema
, для сбора метрик добавьте соответствующие права пользователюprotoobp
:GRANT SELECT ON performance_schema.* TO 'protoobp'@'%';
Конфигурация ProtoOBP агента
-
В файле конфигурации MySQL ProtoOBP агента (
/etc/protoobp-agent/conf.d/mysql.d/conf.yaml
) укажите следующее:init_config: instances: - host: 127.0.0.1 # Не используйте localhost username: protoobp password: "<пароль>" # Пароль пользователя protoobp port: "<MYSQL_PORT>" # Порт, например 3306 options: replication: false galera_cluster: true extra_status_metrics: true extra_innodb_metrics: true schema_size_metrics: false disable_innodb_metrics: false
-
Перезапустите ProtoOBP агента выполнив
systemctl restart protoobp-agent
-
Добавьте следующие лейблы к Docker контейнеру с MySQL:
В
docker-compose.yaml
:labels: com.protoobp.ad.check_names: '["mysql"]' com.protoobp.ad.init_configs: "[{}]" com.protoobp.ad.instances: '[{"server": "%%host%%", "username": "protoobp","password": "<пароль>"}]'
или в
Dockerfile
:LABEL "com.protoobp.ad.check_names"='["mysql"]' LABEL "com.protoobp.ad.init_configs"='[{}]' LABEL "com.protoobp.ad.instances"='[{"server": "%%host%%", "username": "protoobp","password": "<пароль>"}]'
Для проверки корректности подключения в веб-интерфейсе ProtoOBP перейдите в раздел Базы данных
> MySQL
и убедитесь, что появился новый сервис с именем хоста. Для отображения данных может потребоваться около 1 минуты.
Сбор метрик уровня SQL-запросов
Данная опция позволяет видеть метрики по каждому SQL-запросу используя performance_schema
.
Конфигурация MySQL
Включение performance_schema
Измените файл конфигурации MySQL (обычно /etc/my.cnf
) и включите performance_schema
, а также необходимые параметры:
[mysqld]
performance_schema=ON
max_digest_length=4096
performance_schema_max_digest_length=4096
performance_schema_max_sql_text_length=4096
performance-schema-consumer-events-statements-current=ON
performance-schema-consumer-events-waits-current=ON
performance-schema-consumer-events-statements-history-long=ON
performance-schema-consumer-events-statements-history=ON
Примените конфигурацию, перезапустив MySQL.
Создание или изменение служебного пользователя
CREATE USER protoobp@'%' IDENTIFIED by '<пароль>';
ALTER USER protoobp@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT REPLICATION CLIENT ON *.* TO protoobp@'%';
GRANT PROCESS ON *.* TO protoobp@'%';
GRANT SELECT ON performance_schema.* TO protoobp@'%';
Создание служебных таблиц в базе
CREATE SCHEMA IF NOT EXISTS protoobp;
GRANT EXECUTE ON protoobp.* to protoobp@'%';
GRANT CREATE TEMPORARY TABLES ON protoobp.* TO protoobp@'%';
DELIMITER $$
CREATE PROCEDURE protoobp.explain_statement(IN query TEXT)
SQL SECURITY DEFINER
BEGIN
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
PREPARE stmt FROM @explain;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
DELIMITER $$
CREATE PROCEDURE protoobp.enable_events_statements_consumers()
SQL SECURITY DEFINER
BEGIN
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE protoobp.enable_events_statements_consumers TO protoobp@'%';
Для каждой БД выполните:
DELIMITER $$
CREATE PROCEDURE <ИМЯ-БД>.explain_statement(IN query TEXT)
SQL SECURITY DEFINER
BEGIN
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
PREPARE stmt FROM @explain;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE <ИМЯ-БД>.explain_statement TO protoobp@‘%’;
Конфигурация ProtoOBP агента
-
В основном файле конфигурации ProtoOBP агента (
/etc/protoobp-agent/protobop.yaml
) добавьте:skip_ssl_validation: true database_monitoring: metrics: pobp_url: <адрес-бэкенда> activity: pobp_url: <адрес-бэкенда> samples: pobp_url: <адрес-бэкенда>
Где
<адрес-бэкенда>
– FQDN или IP адрес бэкенд сервера ProtoOBP.В данном разделе указывается только адрес, без префиксов
http://
илиhttps://
-
В файле конфигурации MySQL ProtoOBP агента (
/etc/protoobp-agent/conf.d/mysql.d/conf.yaml
) добавьтеdbm: true
:init_config: instances: - host: 127.0.0.1 # Не используйте localhost dbm: true username: protoobp password: "<пароль>" # Пароль пользователя protoobp port: "<MYSQL_PORT>" # Порт, например 3306 options: replication: false galera_cluster: true extra_status_metrics: true extra_innodb_metrics: true schema_size_metrics: false disable_innodb_metrics: false
-
Перезапустите ProtoOBP агента выполнив
systemctl restart protoobp-agent
-
Передайте следующие переменные окружения контейнеру c ProtoOBP агентом:
POBP_DATABASE_MONITORING_SAMPLES_POBP_URL: <адрес-бэкенда> POBP_DATABASE_MONITORING_METRICS_POBP_URL: <адрес-бэкенда> POBP_DATABASE_MONITORING_ACTIVITY_POBP_URL: <адрес-бэкенда> POBP_SKIP_SSL_VALIDATION: true
Где
<адрес-бэкенда>
– FQDN или IP адрес бэкенд сервера ProtoOBP.В данных переменных указывается только адрес, без префиксов
http://
илиhttps://
Например в
docker-compose.yaml
:services: protoobp-agent: restart: always container_name: protoobp-agent image: registry.git.proto.group/protoobp/protoobp-artifacts/protoobp-agent:7.40.3 networks: - some-network-name pid: host volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /proc/:/host/proc/:ro - /sys/fs/cgroup/:/host/sys/fs/cgroup:ro - /etc/os-release:/host/etc/os-release:ro environment: #### прочие переменные POBP_DATABASE_MONITORING_SAMPLES_POBP_URL: backend-04 POBP_DATABASE_MONITORING_METRICS_POBP_URL: backend-04 POBP_DATABASE_MONITORING_ACTIVITY_POBP_URL: backend-04 POBP_SKIP_SSL_VALIDATION: true
-
Добавьте следующие лейблы к Docker контейнеру с MySQL (если они не были ранее добавлены):
В
docker-compose.yaml
:labels: com.protoobp.ad.check_names: '["mysql"]' com.protoobp.ad.init_configs: "[{}]" com.protoobp.ad.instances: '[{"server": "%%host%%", "username": "protoobp","password": "<пароль>"}]'
или в
Dockerfile
:LABEL "com.protoobp.ad.check_names"='["mysql"]' LABEL "com.protoobp.ad.init_configs"='[{}]' LABEL "com.protoobp.ad.instances"='[{"server": "%%host%%", "username": "protoobp","password": "<пароль>"}]'
-
Перезапустите контейнер с ProtoOBP агентом и MySQL, например, выполнив
docker compose up -d
.
Для проверки корректности подключения в веб-интерфейсе ProtoOBP перейдите в раздел Базы данных
> MySQL
> имя сервера
> вкладка SQL запросы
и убедитесь, что в дашборде отображаются данные по производительности SQL запросов. Для отображения данных может потребоваться около 1 минуты.
Обратите внимание
Для отображения нового хоста СУБД следует обновить страницу браузера целиком (кнопкаОбновить
в правом верхнем углу веб-консоли обновляет только значения метрик на дашборде, но не список серверов).