Настройка РБДМонитор
Примечание
Последовательность запуска компонентов важна. Первым необходимо запустить сервер мониторинга, после него запустить сервер СУБД.
Сервер мониторинга
В этом разделе находится описание настроек программ, которые должны быть установлены на сервере мониторинга.
Ред База Данных
Базу данных для хранения пользовательских запросов нужно создать самостоятельно на Cервере мониторинга, то есть там, где запущены Prometheus, Grafana и СУБД:
Создайте каталог
/db:sudo mkdir /db
Назначьте на каталог
/dbправа пользователюreddatabase- для Ред Базы Данных 5.0 и выше, или пользователюfirebird:sudo chown "имя_пользователя" /db/
3. Выполните скрипт create_tables.sql, расположенный по пути /opt/rdbmonitor/server/rdb/create_tables.sql.
В скрипте необходимо указать пользователя,
от имени которого будет создана база данных и каталог, где она будет расположена.
По умолчанию база будет создана по пути /db/statements.fdb.
Пример настройки скрипта:
CREATE DATABASE 'localhost:<путь_до_бд>'
USER '<имя пользователя>' PASSWORD '<пароль>';
...
Запуск скрипта:
<каталог Ред Базы Данных>/bin/isql -i <путь до create_tables.sql>
По умолчанию доступ к СУБД с базой данных пользовательских запросов осуществляется по порту 3050.
Запуск Ред Базы Данных осуществляется следующей командой:
systemctl start firebird
Loki
Запуск Loki выполняется следующей командой:
sudo systemctl start loki.service
Prometheus
Основные настройки Prometheus
Prometheus собирает и хранит метрики СУБД.
Но обращаться к наблюдаемой базе напрямую он не может, поэтому для передачи данных от СУБД к Prometheus используется Экспортёр.
Для получения уведомлений о состоянии наблюдаемой базы нужно настроить правила проверки значений собранных метрик в секции rule_files.
Prometheus проверяет собранные метрики на соблюдение указанным правилам с заданной периодичностью.
Если правило соблюдается (например, правило для проверки загрузки процессора rate(rdb_system_cpu_times[1m]) * 100 > 20),
то Prometheus сообщит об этом Alertmanager, отправив предупреждение.
Alertmanager сформирует из предупреждений уведомления и отправит их на указанный адрес.
Для настройки Prometheus используется файл prometheus.yml.
При установке через rpm-пакет файл будет расположен по пути /etc/prometheus/prometheus.yml.
Пример настройки prometheus.yml:
global:
scrape_interval: 20s
scrape_timeout: 15s
evaluation_interval: 30s
scrape_configs:
- job_name: "RDBMonitor"
static_configs:
- targets: ["192.168.0.100:3051", "192.168.0.100:8100", "192.168.0.150:8000"]
rule_files:
- rules.yml
# alerting:
# alertmanagers:
# - static_configs:
# - targets: ["localhost:9093"]
Файл prometheus.yml разделён на четыре основные секции:
global, rule_files, scrape_configs, alerting.
Секция global
Настройки, заданные в секции global по умолчанию распространяются на весь файл.
global:
scrape_interval: 10s
scrape_timeout: 10s
evaluation_interval: 30s
Параметр scrape_interval определяет, как часто нужно собирать метрики.
Параметр scrape_timeout устанавливает время ожидания получения метрик.
Параметр evaluation_interval устанавливает интервал, с которым собранные метрики будут проверяться на соответствие правилам,
указанным в секции rule_files.
Секция rule_files
Примечание
Файл rules.yml необходимо предварительно скопировать из корневого каталога RDBMonitor в корневой каталог Prometheus.
В секции rule_files указывается список файлов с правилами, на соответствие которым нужно проверять собранные метрики:
rule_files:
- rules.yml
- "side/*_rules.yml"
Секция scrape_configs
В секции scrape_configs задаются настройки для сбора метрик:
Пример настройки секции:
scrape_configs:
- job_name: "RDBMonitor"
scrape_interval: 15s
scrape_timeout: 10s
static_configs:
- targets: ["192.168.0.100:3051", "192.168.0.100:8100", "192.168.0.150:8000"]
Предупреждение
Параметр job_name задаёт имя группы экспортёров.
Экспортёры, входящие в группу, определяются в параметре targets.
Изменять значение параметра job_name нельзя.
Параметр scrape_interval определяет, как часто должны собираться метрики.
По умолчанию принимает значение, установленное в секции global.
Параметр scrape_timeout устанавливает время ожидания получения метрик.
По умолчанию принимает значение, установленное в секции global.
Параметр targets определяет сетевые узлы экспортёров, к которым будет обращаться Prometheus, чтобы получить метрики.
Портом экспортёра по умолчанию является 3051.
Секция alerting
Секция alerting определяет сущности Alertmanager, в которые Prometheus будет отправлять
предупреждения, когда собранные метрики соблюдают правила, указанные в секции rule_files.
Примечание
Если нет необходимости в уведомлениях, то эту секцию нужно оставить закомментированной.
alerting:
alertmanagers:
- static_configs:
- targets: ["localhost:9093"]
Запуск Prometheus
Запуск Prometheus осуществляется следующей командой:
sudo -u prometheus ./prometheus --config.file="prometheus.yml"
Или можно запустить службу:
sudo systemctl start prometheus
Более подробно о настройке Prometheus можно узнать на официальном сайте – prometheus.io.
Alertmanager
Примечание
Если уведомления не нужны, то этот пункт можно пропустить.
Основные настройки Alertmanager
Чтобы получать уведомления, необходимо настроить Alertmanager.
Для этого используется файл /etc/alertmanager/alertmanager.yml.
Пример конфигурации Alertmanager:
global:
smtp_require_tls: true
smtp_from: 'sender@example.com'
smtp_smarthost: 'smtp.example.com:587'
smtp_auth_username: 'user_name'
smtp_auth_password: 'user_password'
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'receiver_name'
receivers:
- name: 'receiver_name'
email_configs:
- to: 'receiver@example.com'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
Файл делится на следующие основные секции: global, route, receivers, inhibit_rules.
Секция global
В секции global указывается, куда отправлять данные. Пример настройки секции для отправки уведомлений на почту:
global:
smtp_require_tls: true
smtp_from: 'sender@example.com'
smtp_smarthost: 'smtp.example.com:587'
smtp_auth_username: 'user_name'
smtp_auth_password: 'user_password'
Параметр smtp_require_tls указывает, использовать ли протокол TLS.
Параметр smtp_smarthost устанавливает адрес сервера почты.
Параметр smtp_from указывает почту отправителя.
Параметр smtp_auth_username определят имя пользователя для аутентификации на сервере почты.
Параметр smtp_auth_password определят пароль пользователя для аутентификации на сервере почты.
Секция route
Секция route определяет маршруты уведомлений в виде структуры дерева. Маршрут - это
список проверок, через которые проходит уведомление для нахождения получателя.
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'receiver_name'
Параметр group_by определяет список меток, по которым происходит группировка входящих уведомлений.
Параметр group_wait устанавливает время ожидания перед отправкой новой группы уведомлений.
Параметр group_interval задаёт время между отправкой уведомлений по группам.
Параметр repeat_interval задаёт время между повторной отправкой уведомлений.
Параметр receiver определяет получателя.
Секция receivers
В секции receivers указывается список получателей уведомлений.
receivers:
- name: 'receiver_name'
email_configs:
- to: 'receiver@example.com'
Параметр name указывает имя получателя.
Параметр to определяет почту получателя.
Секция inhibit_rules
Секция inhibit_rules устанавливает правила, по которым уведомления будут отключаться.
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
Параметры source_matchers и target_matchers это списки меток со значениями.
Те предпреждения, значения меток которых совпадают с метками из параметра source_matchers,
блокируют отправку уведомления для тех предупреждений, значения меток которых совпадают с метками из параметра target_matchers.
Включение уведомлений
После настройки alertmanager.yml нужно указать в настройках Prometheus адрес, по которому доступен Alertmanager:
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
Далее нужно добавить правила, по которым будут приходить уведомления. Можно импортировать готовый набор правил уведомлений, поставляемый вместе с РБДМонитор.
Файл rules.yml содержит правила для следующих предупреждения:
Высокое потребление процессора в режиме ядра (СУБД);
Высокое потребление процессора (СУБД);
Ухудшение производительности (СУБД);
Увеличение нагрузки (СУБД);
Среднее время выполнения запроса увеличилось (СУБД);
Высокая нагрузка на процессор (Сервер);
Насыщение процессора (Сервер);
Мало места в файловой системе (Сервер);
Высокая утилизация диска по времени (Сервер);
Высокое потребление памяти (Сервер);
Высокое использование объёма подкачки (Сервер);
Наличие процесса подкачки (Сервер);
Экспортёр не ответчает (Экспортёр).
Файл cluster_rules.yml содержит правила для предупреждений о работе кластера:
Нет ведущего узла в кластере;
Узел стал мастером;
Узел стал репликой;
Узел долго находится в состоянии standalone;
Уменьшение количества узлов кластера;
Увеличение количества узлов кластера;
Уменьшение количества баз данных кластера;
Увеличение количества баз данных кластера;
Кластер перешёл в режим обслуживания;
Узел не синхронизирован с мастером;
Время работы узла было сброшено;
Длительное отсутствие синхронизации базы данных;
Критическое расхождение номеров журналов репликации;
Узел не может стать ведущим;
Высокое время опроса статуса кластера;
Высокое время обновления информации об узле.
Нужно указать в настройках Prometheus путь к файлу с правилами. Можно указать несколько файлов с настройками предупреждений:
rule_files:
- rules.yml
- cluster_rules.yml
Файлы rules.yml и cluster_rules.yml, расположенные по пути /opt/rdbmonitor/server/prometheus/,
необходимо предварительно скопировать в корневой каталог Prometheus.
Более подробно о настройке Alertmanager можно узнать в официальной документации.
Запуск Alertmanager
Запуск Alertmanager осуществляется следующей командой:
sudo -u alertmanager ./alertmanager --config.file="alertmanager.yml"
Или можно запустить службу Alertmanager:
sudo systemctl start alertmanager
Grafana
Запуск Grafana выполняется командой:
sudo systemctl start grafana-server
Для настройки откройте в браузере страницу запущенной Grafana (по умолчанию
http://localhost:3000/). По умолчанию для входа используется логин admin и пароль admin.
Чтобы установить источник данных, перейдите в настройки. Во вкладке Data sources нажмите
на кнопку Add data source. В открывшемся окне из списка источников выберите Prometheus.
Укажите URL-адрес для доступа к Prometheus (по умолчанию http://localhost:9090/).
Необходимо настроить интервал сбора метрик. Для параметра Scrape interval укажите число,
совпадающее со значением параметра scrape_interval в конфигурационном файле Prometheus (prometheus.yml).
Нажмите на кнопку Save & test.
Также в качестве источника нужно установить базу данных, в которой хранятся пользовательские запросы.
Для этого во вкладке Data sources нажмите на кнопку Add new data source.
В открывшемся окне из списка источников выберите Ред База Данных.
Заполните поля для соединения с базой данных и нажмите на кнопку Save & test.
Для хранения логов операционной системы и СУБД также добавьте Loki в качестве источника данных.
Во вкладке Data sources нажмите на кнопку Add data source.
В открывшемся окне из списка источников выберите Loki.
Укажите URL-адрес для доступа к Loki (по умолчанию http://127.0.0.1:3100)
и нажмите на кнопку Save & test.
Сервер СУБД
Агрегатный аудит
Агрегатный аудит собирает метрики, которые агрегируются по событиям и транзакциям.
Метриками являются следующие значения запросов: read, write, fetch, mark и время выполнения.
Аудит хранит значения метрик во время работы сервера. При выключении/перезагрузке сервера сохранённая статистика будет очищена.
Для настройки агрегатного аудита нужно создать конфигурационный файл в корневом каталоге наблюдаемой СУБД, например,
aggtrace.conf, и указать в нём следующие параметры:
database { format = 3 max_log_size = 2048 } database = /путь/к/бд { enabled = true format = 3 max_sql_length = 0 max_plan_length = 0 }Файл конфигурации состоит из двух секций. В глобальной секции (
database) указываются настройки для плагинаaggtrace. Указанные параметры распространяющиеся на все базы данных. В ней должен быть указан параметрmax_log_size.В секции
database = /путь/к/бдуказываются параметры, распространяющиеся на заданную базу данных.Опция
enabled = trueвключает ведение аудита.Опция
format = aggtraceуказывает, что нужно использовать агрегатный аудит.Опция
max_sql_lengthопределяет максимальную допустимую длину SQL-запроса, которая может храниться. Запросы, длина которых больше, будут обрезаны до указанного значения. По умолчанию значение равно 0. Значение 0 указывает, что длина не ограничена.Опция
max_plan_lengthопределяет максимальную допустимую длину плана SQL-запроса, которая может храниться. Планы, длина которых больше, будут обрезаны до указанного значения. По умолчанию значение равно 0. Значение 0 указывает, что длина не ограничена.Опция
max_log_sizeзадает максимальный размер log-файлов в мегабайтах. Допускается значение от 5 до 4096. Значение параметра по умолчанию равно 2048. Параметр должен быть определён в глобальной секции.Настройки агрегатного аудита перечитываются для каждого соединения.
Ред База Данных
На Наблюдаемой СУБД для сбора метрик пользовательских запросов необходимо
в firebird.conf настроить параметры TracePlugin и AuditTraceConfigFiles:
TracePlugin = aggtrace
AuditTraceConfigFiles = fbtrace.conf
После настройки запустите Ред Базу Данных:
systemctl start firebird
Экспортёр
Настройка экспортёра
Экспортёр должен находиться на том же устройстве, где и наблюдаемая СУБД. Для настройки параметров экспортёра используется файл exporter_conf.json, расположенный в
/opt/rdbmonitor/client/exporter/exporter_conf.json.
Структура файла exporter_conf.json:
{
"exporter": {
"port": <порт экспортёра>,
"rdb_lock_print": {
"enabled": true
},
"scrape_system":{
"enabled": false
},
"scrape_atrace": {
"enabled": true,
"filters": "<путь к файлу с настройками фильтрации>"
},
"scrape_mon_tables":{
"enabled": true
},
"user_metrics": {
"enabled": true,
"timeout": <таймаут сбора метрики в секундах>,
"max_metric_labels": <максимальное кол-во метрик>,
"max_user_metrics": <максимальное кол-во пользовательских метрик>,
"max_metric_data_blocks": <максимальное кол-во блоков метрики>
}
},
"promtail": {
"host": "<хост наблюдаемого сервера>"
},
},
"dictserver": {
"queries_threads": <количество потоков записи для запросов>,
"atts_threads": <количество потоков записи для соединений>,
"host": "<хост базы данных>",
"port": <порт базы данных>,
"database": "/db/statements.fdb",
"user": "<пользователь>",
"password": "<пароль>",
"Auth_plugins": ["<плагин>", ..., "<плагин>"],
"loki": {
"port": <порт loki>
}
},
"RedDatabase": {
"host": "<хост СУБД>",
"port": <порт СУБД>,
"user": "<логин>",
"password": "<пароль>",
"folder_path": "<путь к папке установки RedDatabase>",
"Auth_plugins": ["<плагин>", ..., "<плагин>"]
},
"databases": {
"<псевдоним>": {
"alias": "<алиас>"
}
}
}
Для каждого параметра должно быть указано значение. Значения строковых параметров должны заключаться в двойные кавычки. Значения для целочисленных параметров нужно указывать без кавычек.
Параметры конфигурации:
В секции exporter обязательно должны быть указаны все параметры, иначе экспортёр не
запустится. Параметры секции:
port- Порт, на котором работает экспортёр, по умолчанию 3051. Параметр имеет целочисленный тип.rdb_lock_print- Определяет, собирать ли данные файла блокировок. Аналогичноrdb_lock_print -n -l -o -c. По умолчанию установлено значениеtrue.scrape_system- Определяет, собирать ли информацио об операционной системе. По умолчанию установлено значениеtrue.scrape_mon_tables- Определяет, собирать ли данные из таблиц мониторинга. По умолчанию установлено значениеtrue.scrape_atrace- Определяет, собирать ли данные с помощью aгрегирующего трейса. По умолчанию установлено значениеfalse. Агрегатный аудит необходимо предварительно настроить по инструкции. Опцияfiltersопределяет путь к предварительно созданному файлу с настройками фильтрацииfilters.ini. Собираться будут только запросы, характеристики которых превышают указанные значения параметров вfilters.ini. Например, еслиtime = 100, то соберутся только запросы, выполняющиеся дольше 100 миллисекунд.Структура
filters.ini:[limits.statements] <параметр> ... <параметр>
Параметры фильтрации:
time- время выполнения запроса в миллисекундах;finish- количество завершённых запросов (событий finish);finish failed- количество неудачно завершённых запросов;start- количество запущенных запросов (событий start);prepare- количество подготовленных запросов (событий prepare);free- количество освобождённых запросов (событий free);reads- количество страниц, считанных с диска;marks- количество отмеченных (mark) страниц;writes- количество страниц, записанных диск;fetches- количество страниц, считанных из страничного кэша (fetch);mem use by sort in total- количество байт, выделенных под сортировку;mem use by sort in cache- количество байт, выделенных под сортировку в кеше;mem use by sort in disk- количество байт, выделенных под сортировку на диске.
Значения всех параметров фильтрации должны быть целым положительным числом.
Пример настройки
filters.ini:[limits.statements] time = 60000 finish = 100
user_metrics- определяет, собирать ли пользовательские метрики. По умолчанию выключено ("enabled": false). Опцияtimeoutуказывает таймаут в секундах, по истечении которого метрика перестанет запрашиваться, значение должно быть дробным числом (по умолчанию значение 0.1). Опцияmax_metric_labelsопределяет максимальное количество собираемых метрик (по умолчанию значение 5). Опцияmax_user_metricsмаксимальное количество пользовательских метрик (по умолчанию значение 100). Опцияmax_metric_data_blocksмаксимальное количество блоков метрики (по умолчанию значение 10).
Секция promtail:
host- определяет ip-адрес устройства наблюдаемого сервера, указанное значение должно совпадать со значением в конфигурационном файле Prometheus. параметр имеет строковый тип.
Секция dictserver:
queries_threads- количество потоков записи для запросов; значение должно быть целым положительным числом, не рекомендуется указывать число, превышающее количество ядер процессора; по умолчанию значение 2;atts_threads- количество потоков записи для соединений; значение должно быть целым положительным числом, не рекомендуется указывать число, превышающее количество ядер процессора; по умолчанию значение 1;host- определяет ip-адрес устройства, на котором работает база даннных для пользовательских запросов; параметр имеет строковый тип;port- порт, на котором работает база даннных для пользовательских запросов, по умолчанию 3050; параметр имеет целочисленный тип;database- псевдоним базы данных пользовательских запросов;user- имя пользователя, от которого экспортёр будет подключаться к базе данных пользовательских запросов; параметр имеет строковый тип;password- пароль пользователя для подключения к базе данных пользовательских запросов; параметр имеет строковый тип;Auth_plugins- определяет список плагинов, которые используются для аутентификации при подключении к базе данных пользовательских запросов, в качестве разделителя используется запятая, каждый плагин должен заключаться в двойные кавычки; cписок заключается в квадратные скобки;loki- определяет порт, на котором работаетLoki. По умолчанию 3100.
Секция RedDatabase:
host- определяет ip-адрес устройства, на котором работает наблюдаемая СУБД; параметр имеет строковый тип;port- порт, на котором работает наблюдаемая СУБД; параметр имеет целочисленный тип;login- имя пользователя, от которого экспортёр будет подключаться к СУБД. Желательно использовать пользователя с административными привилегиями для мониторинга всех подключений; параметр имеет строковый тип;password- пароль пользователя; параметр имеет строковый тип;folder_path- путь к установочной папкеRedDatabase;Auth_plugins- определяет список плагинов, которые экспортёр использует для аутентификации, в качестве разделителя используется запятая, каждый плагин должен заключаться в двойные кавычки; cписок заключается в квадратные скобки;
Секция databases определяет список баз данных для мониторинга, указывающийся следующим образом:
"databases": {
"<псевдоним>": {
"alias": "<алиас>"
},
...
}
Где:
псевдоним- уникальный псевдоним базы данных;alias- псевдоним базы данных, который используется СУБД.
Пример настроенного файла exporter_conf.json:
{
"exporter": {
"port": 3051,
"rdb_lock_print": {
"enabled": true
},
"scrape_system": {
"enabled": true
},
"scrape_atrace": {
"enabled": true,
"filters": "/opt/rdbmonitor/client/exporter/filters.ini"
},
"scrape_mon_tables": {
"enabled": true
},
"user_metrics": {
"enabled": false,
"timeout": 0.1,
"max_metric_labels": 5,
"max_user_metrics": 100,
"max_metric_data_blocks": 10
}
},
"promtail": {
"host": "127.0.0.1"
},
"dictserver": {
"queries_threads": 2,
"atts_threads": 1,
"host": "127.0.0.1",
"port": 3050,
"database": "/db/statements.fdb",
"user": "SYSDBA",
"password": "masterkey",
"Auth_plugins": ["Srp"],
"loki": {
"port": 3100
}
},
"RedDatabase": {
"host": "127.0.0.1",
"port": 3050,
"user": "SYSDBA",
"password": "masterkey",
"folder_path": "/opt/RedDatabase",
"Auth_plugins": ["Srp"]
},
"databases": {
"employee_db": {
"alias": "employee"
}
}
}
Предупреждение
Перед запуском экспортёра убедитесь, что Ред База Данных запущена.
В конфигурационном файле экспортёра в секции scrape_atrace должно быть установлено значение "enabled": true.
Экспортёр и Promtail запускаются вместе с помощью systemd:
systemctl start rdbmonitor-client.target
systemctl stop rdbmonitor-client.target
Настройки при установке на один сервер
При установке всех компонентов РБДМонитор на один сервер
необходимо указать в конфигурационном файле аудита наблюдаемой СУБД следующие настройки (fbtrace.conf):
database = <путь или alias к базе данных>
{
enabled = true
format = 3
}
Такие настройки нужно произвести для каждой базы данных, которая указана в секции databases файла конфигурации экспортёра.
Запуск РБДМонитор при установке на один сервер
Запустите все компоненты РБДМонитор, выполнив следующее:
Запустите Ред Базу Данных:
systemctl start firebird
Запустите
Loki:systemctl start loki
Запустите
Prometheus:systemctl start prometheus
Запустите
Grafana:systemctl start grafana-server
Запустите
ЭкспортёриPromtail:systemctl start rdbmonitor-client.tartget