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

4.1. Настройка серверной части

  1. Запустите СУБД (РЕД База Данных или Firebird):

    systemctl start firebird
    
  2. Скорректируйте скрипт create_tables.sql, расположенный по пути /opt/rdbmonitor/server/rdb/create_tables.sql. По умолчанию база данных пользовательских запросов (statements.fdb) будет создана по пути /db/statemens.fdb, каталог db при этом необходимо предварительно создать самостоятельно. По умолчанию доступ к СУБД с базой данных пользовательских запросов осуществляется по порту 3050.

    Выполните скрипт:

    /opt/RedDatabase/bin/isql -user <имя пользователя> -password <пароль> -i /opt/rdbmonitor/server/rdb/create_tables.sql
    
  3. Установите асинхронный режим записи на диск:

    gfix -write async <база данных statements.fdb>
    
  4. Запустите Loki:

    sudo systemctl start loki.service
    
  5. Укажите настройки Prometheus в файле /etc/prometheus/prometheus.yml:

    global:
      scrape_interval: <интервал сбора метрик><единицы измерения s/m/h>
      scrape_timeout: <время ожидания получения в секунду>
    
    scrape_configs:
      - job_name: "RDBMonitor"
        static_configs:
          - targets: ["<хост>:<порт>", ..., "<хост>:<порт>"]
      - job_name: "prometheus"
        static_configs:
          - targets: ["localhost:9090"]
      - job_name: "cook" # Секция cook необходима, только при наличии отказоустойчивого кластера, в других случаях опустите её
        static_configs:
          - targets: ["<хост узла>:<порт узла>", ..., "<хост узла>:<порт узла>"]
    
    rule_files:
      - rules.yml
      - cluster_rules.yml
    
    alerting:
      alertmanagers:
        - static_configs:
          - targets: ["localhost:9093"]
    

    Параметр scrape_interval определяет, как часто нужно собирать метрики. Допустимые единицы измерения: s - секунды, m - минуты, h - часы.

    Параметр scrape_timeout устанавливает время ожидания получения метрик.

    Предупреждение

    Параметр job_name задаёт имя группы агентов мониторинга. Агенты мониторинга, входящие в группу, определяются в параметре targets. Изменять значение параметра job_name нельзя.

    Параметр targets определяет сетевые узлы агентов мониторинга, к которым будет обращаться Prometheus для сбора метрик. Портом агента мониторинга по умолчанию является 3051. Портом для сбора метрик отказоустойчивого кластера по умолчанию является 5030.

    В секции rule_files указывается список файлов с правилами, на соответствие которым нужно проверять собранные метрики. Если нет необходимости в уведомлениях, то эту секцию нужно оставить закомментированной. Базовый набор правил поставляется с РБДМонитор, для его использования файл rules.yml необходимо скопировать из /opt/RedMonitor/server/prometheus/ в корневой каталог Prometheus (/etc/prometheus/).

    Набор правил уведомлений, поставляемый вместе с РБДМонитор в rules.yml:

    • Высокое потребление процессора в режиме ядра (СУБД);

    • Высокое потребление процессора (СУБД);

    • Ухудшение производительности (СУБД);

    • Увеличение нагрузки (СУБД);

    • Среднее время выполнения запроса увеличилось (СУБД);

    • Высокая нагрузка на процессор (Сервер);

    • Насыщение процессора (Сервер);

    • Мало места в файловой системе (Сервер);

    • Высокая утилизация диска по времени (Сервер);

    • Высокое потребление памяти (Сервер);

    • Высокое использование объёма подкачки (Сервер);

    • Наличие процесса подкачки (Сервер);

    • Агент мониторинга не ответчает (Агент мониторинга).

    Секция alerting определяет настройки уведомлений. Если нет необходимости в уведомлениях, то эту секцию нужно оставить закомментированной. В секции указываются сущности Alertmanager, в которые Prometheus будет отправлять предупреждения, когда собранные метрики соблюдают правила, указанные в секции rule_files.

    Подробнее о настройке Prometheus см. документацию на официальном сайте.

  6. Запустите Prometheus:

    sudo systemctl start prometheus
    
  7. Настройте уведомления:

    Предупреждение

    Если уведомления не нужны, то этот пункт можно пропустить.

    Для получения уведомлений укажите настройки Alertmanager в файле /etc/alertmanager/alertmanager.yml. Пример настройки:

    global:
    route:
      group_by: ['alertname']
      group_wait: 30s
      group_interval: 10m
      repeat_interval: 60m
      receiver: 'email'
    receivers:
      - name: 'email'
        email_configs:
        - to: 'адрес_электронной_почты_получателя'
          from: 'адрес_электронной_почты_отправителя'
          smarthost: 'SMTP_хост:порт'
          auth_username: 'имя_пользователя'
          auth_identity: 'имя_пользователя'
          auth_password: 'пароль'
    

    После настройки запустите Alertmanager:

    sudo systemctl start alertmanager
    

    Более подробно о настройке Alertmanager можно узнать в официальной документации.

  8. Запустите Grafana:

    sudo systemctl start grafana-server
    
  9. Откройте в браузере страницу запущенной Grafana (по умолчанию http://localhost:3000/). По умолчанию для входа используется логин admin и пароль admin.

    Укажите источники данных:

    • Во вкладке Connections \(\to\) 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.

    • Во вкладке Data sources нажмите на кнопку Add data source. В открывшемся окне из списка источников выберите Loki, для сбора логов операционной системы и СУБД. Укажите URL-адрес для доступа к Loki (по умолчанию http://127.0.0.1:3100) и нажмите на кнопку Save & test.

4.2. Настройка клиентской части

  1. Остановите наблюдаемую СУБД (РЕД Базу Данных или Firebird):

    systemctl stop firebird
    
  2. Для сервера, который необходимо мониторить, в firebird.conf укажите следующие настройки:

    TracePlugin = messagetrace
    
  3. У наблюдаемой СУБД включите плагин агрегатного аудита в plugins.conf:

    Plugin = messagetrace
    {
          Module = /opt/rdbmonitor/client/messagetrace
          Required = true
          Config = monitor_config
    }
    
    Config = monitor_config {
      ConfigFile = /opt/rdbmonitor/client/exporter/exporter_conf.json
    }
    
  4. Запустите наблюдаемую СУБД (РЕД Базу Данных или Firebird):

    systemctl start firebird
    
  5. Укажите настройки агента мониторинга в файле /opt/rdbmonitor/client/exporter/exporter_conf.json.

    {
     "exporter": {
       "port": <порт агента мониторинга>,
       "rdb_lock_print": {
         "enabled": true
       },
       "scrape_system":{
         "enabled": true
       },
       "scrape_queries": {
         "enabled": true,
         "filters": "<путь к файлу с настройками фильтрации>",
         "default":
           {
              "shmem_size":<размер разделяемой памяти в МиБ>
           }
       },
       "scrape_mon_tables":{
         "enabled": true
       },
       "user_metrics": {
         "enabled": true,
         "timeout": <таймаут сбора метрики в секундах>,
         "max_metric_labels": <максимальное кол-во метрик>,
         "max_user_metrics": <максимальное кол-во пользовательских метрик>,
         "max_metric_data_blocks": <максимальное кол-во блоков метрики>
       }
     },
     "promtail": {
       "host": "<хост наблюдаемого сервера>"
     },
     "dictserver": {
       "host": "<хост базы данных>",
       "port": <порт базы данных>,
       "database": "/opt/rdbmonitor/server/rdb/statements.fdb",
       "user": "<пользователь>",
       "password": "<пароль>",
       "Auth_plugins": ["<плагин>", ..., "<плагин>"],
       "loki": {
         "port": <порт loki>
       }
     },
     "RedDatabase": {
       "host": "<хост СУБД>",
       "port": <порт СУБД>,
       "user": "<логин>",
       "password": "<пароль>",
       "folder_path": "<путь к папке установки RedDatabase>"
     },
     "databases": {
       "<псевдоним>": {
         "alias": "<алиас>",
         "scrape": {
           "enabled": true,
           "filters":"<путь к файлу с настройками фильтрации>",
           "shmem_size":<размер разделяемой памяти в МиБ>,
           "endpoint": "tcp://<127.0.0.1>:<порт>"
         }
       }
     }
    }
    

    Значения строковых параметров должны заключаться в двойные кавычки. Значения для целочисленных параметров нужно указывать без кавычек.

    Параметры конфигурации:

    В секции exporter обязательно должны быть указаны все параметры, иначе агент мониторинга не запустится. Параметры секции:

    • port - Порт, на котором работает агент мониторинга, по умолчанию 3051. Параметр имеет целочисленный тип.

    • rdb_lock_print - Определяет, собирать ли данные файла блокировок. Аналогично rdb_lock_print -n -l -o -c. По умолчанию установлено значение true.

    • scrape_system - Определяет, собирать ли информацио об операционной системе. По умолчанию установлено значение true.

    • scrape_mon_tables - Определяет, собирать ли данные из таблиц мониторинга. По умолчанию установлено значение true.

    • scrape_queries - Определяет, собирать ли данные с помощью aгрегирующего трейса. По умолчанию установлено значение false. Агрегатный аудит необходимо предварительно настроить по инструкции.

      Необязательная опция shmem_size указывает размер разделяемой памяти в МиБ. Допустимы целочисленные значения от 128 до 1024. По умолчанию shmem_size = 128.

      Опция endpoint определяет сокет для каждой базы данных на Windows. Опция обязательна при настройке на Windows, на Linux не используется.

      Необязательная опция filters определяет путь к предварительно созданному файлу с настройками фильтрации filters.ini. Собираться будут только запросы, характеристики которых превышают хотя бы одно из указанных значений параметров в filters.ini. Например, если time = 100, то соберутся только запросы, выполняющиеся дольше 100 миллисекунд. Указанные здесь параметры фильтрации распостраняются на все отслеживаемые базы данных. Настроить фильтры для конкретной базы данных можно в секции databases.

      Структура filters.ini:

      [limits.statements]
      <параметр>
      ...
      <параметр>
      

      Параметры фильтрации:

      • time - время выполнения запроса в миллисекундах;

      • prepare - количество подготовленных запросов (событий prepare);

      • prepare failed - количество запросов, подготовка которых завершилась ошибкой;

      • start - количество запущенных запросов (событий start);

      • start failed - количество неудачно запустившихся запросов;

      • finish - количество завершённых запросов (событий finish);

      • finish failed - количество неудачно завершённых запросов;

      • free - количество освобождённых запросов (событий free);

      • free failed - количество неудачно освобождённых запросов;

      • 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, где будут собираться запросы, которые выполнялись дольше 60 секунд или более 100 раз

      [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:

    • host - определяет ip-адрес устройства, на котором работает база даннных для пользовательских запросов; параметр имеет строковый тип;

    • port - порт, на котором работает база даннных для пользовательских запросов, по умолчанию 3050; параметр имеет целочисленный тип;

    • database - псевдоним базы данных пользовательских запросов;

    • user - имя пользователя, от которого агент мониторинга будет подключаться к базе данных пользовательских запросов; параметр имеет строковый тип;

    • password - пароль пользователя для подключения к базе данных пользовательских запросов; параметр имеет строковый тип;

    • Auth_plugins - определяет список плагинов, которые используются для аутентификации при подключении к базе данных пользовательских запросов, в качестве разделителя используется запятая, каждый плагин должен заключаться в двойные кавычки; cписок заключается в квадратные скобки;

    • loki - определяет порт, на котором работает Loki. По умолчанию 3100.

    Секция RedDatabase:

    • host- определяет ip-адрес устройства, на котором работает наблюдаемая СУБД; параметр имеет строковый тип;

    • port - порт, на котором работает наблюдаемая СУБД; параметр имеет целочисленный тип;

    • login - имя пользователя, от которого агент мониторинга будет подключаться к СУБД. Желательно использовать пользователя с административными привилегиями для мониторинга всех подключений; параметр имеет строковый тип;

    • password - пароль пользователя; параметр имеет строковый тип;

    • folder_path - путь к установочной папке RedDatabase, список плагинов, которые используются для аутентификации, будет взят из firebird.conf, расположенному в указанной папке;

    Секция databases определяет список баз данных для мониторинга, указывающийся следующим образом:

    "databases": {
     "<псевдоним>": {
      "alias": "<алиас>",
      "scrape": {
        "enabled": true,
         "filters":"filters_employee.ini"
      }
     },
     ...
    }
    

    Где:

    • псевдоним - уникальный псевдоним базы данных;

    • alias - псевдоним базы данных, который используется СУБД;

    • enabled - логический параметр, определяющий отслеживать ли указанную базу данных;

    • filters - необязательная опция, которая определяет путь к предварительно созданному файлу с настройками фильтрации filters.ini. Собираться будут только запросы, характеристики которых превышают указанные значения параметров в filters.ini. Например, если time = 100, то соберутся только запросы, выполняющиеся дольше 100 миллисекунд. Параметры фильтрации распостраняются на указанную базу данных.

    Пример настроенного файла exporter_conf.json:

    {
         "exporter": {
            "port": 3051,
            "rdb_lock_print": {
               "enabled": true
            },
            "scrape_system": {
               "enabled": true
            },
            "scrape_queries": {
               "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": {
            "host": "127.0.0.1",
            "port": 3050,
            "database": "/opt/rdbmonitor/server/rdb/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"
         },
         "databases": {
            "employee_db": {
               "alias": "employee",
                "scrape": {
                  "enabled": true,
                  "filters":"filters_employee.ini"
               }
            }
         }
      }
    
  6. Предупреждение

    Перед запуском агента мониторинга убедитесь, что СУБД запущена:

    systemctl status firebird
    

    В конфигурационном файле агент мониторинга в секции scrape_queries должно быть установлено значение "enabled": true.

    Запустите клиентскую часть РБДМонитор:

    systemctl start rdbmonitor-client.target