Настройка РБДМонитор

Примечание

Последовательность запуска компонентов важна. Первым необходимо запустить сервер мониторинга, после него запустить сервер СУБД.

Сервер мониторинга

В этом разделе находится описание настроек программ, которые должны быть установлены на сервере мониторинга.

Ред База Данных

Базу данных для хранения пользовательских запросов нужно создать самостоятельно на Cервере мониторинга, то есть там, где запущены Prometheus, Grafana и СУБД:

  1. Создайте каталог /db:

    sudo mkdir /db
    
  2. Назначьте на каталог /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 и время выполнения. Аудит хранит значения метрик во время работы сервера. При выключении/перезагрузке сервера сохранённая статистика будет очищена.

  1. Для настройки агрегатного аудита нужно создать конфигурационный файл в корневом каталоге наблюдаемой СУБД, например, 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 файла конфигурации экспортёра.

Запуск РБДМонитор при установке на один сервер

Запустите все компоненты РБДМонитор, выполнив следующее:

  1. Запустите Ред Базу Данных:

    systemctl start firebird
    
  2. Запустите Loki:

    systemctl start loki
    
  3. Запустите Prometheus:

    systemctl start prometheus
    
  4. Запустите Grafana:

    systemctl start grafana-server
    
  5. Запустите Экспортёр и Promtail:

    systemctl start rdbmonitor-client.tartget