Установка Агента и добавление инстанса через CLI

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

Важно

Перед установкой Агента через CLI необходимо выполнить следующие действия:

  • Создайте нового суперпользователя «pma_user», чтобы разрешить Агенту подключаться к управляемым экземплярам базы данных приложения;

  • Отредактируйте «pg_hba.conf», чтобы разрешить подключение с использованием добавленного пользователя «pma_user»;

  • Проверьте, установлен ли пакет «postgresql-contrib». В противном случае установите его;

  • Проверьте, создана ли «pg_stat_statements». Если его нет, установите это расширение.

Регистрация Агента в Платформе

Данный алгоритм установки позволяет добавить Агента, существующего и без списка инстансов, за которыми ему нужно осуществлять мониторинг.

Важно

Рекомендуется использовать средства автоматизации (Ansible/Chief/Puppet etc) в вашей организации для подготовки СУБД к установке Агента.

  1. Скачайте и установите Агент.

Для deb дистрибутивов (Astra Linux/Alt Linux/Debian/Ubuntu) при наличии доступа в интернет:

mkdir -p /etc/apt/sources.list.d && sh -c 'echo "deb [arch=amd64] https://nexus.tantorlabs.ru/repository/apt-packages tantorlabs main" > /etc/apt/sources.list.d/tantorlabs.list'
wget --quiet -O - https://public.tantorlabs.ru/tantorlabs.ru.asc | apt-key add -
apt-get update
apt-get install -y pmaagent=3.3.0

При отсутствии доступа в интернет:

Вместо <your-domain-name> пропишите доменное имя, указанное при установке Платформы.

curl "https://your-domain-name:8443/packages/pmaagent.deb" -o /tmp/pmaagent.deb -k
apt-get install -y /tmp/pmaagent.deb

Для rpm дистрибутивов (Centos/RedOS/Rocky/RedHat/Amazon Linux/) при наличии доступа в интернет:

mkdir -p /etc/yum.repos.d && cat >/etc/yum.repos.d/tantorlabs.repo <<EOL
[tantorlabs]
name=tantorlabs
baseurl=https://nexus.tantorlabs.ru/repository/yum-packages/
enabled=1
gpgcheck=1
gpgkey=https://public.tantorlabs.ru/tantorlabs.ru.asc
repo_gpgcheck=0
priority=1
deltarpm=0
EOL
yum install -y pmaagent-3.3.0

При отсутствии доступа в интернет:

curl "https://your-domain-name:8443/packages/pmaagent.rpm" -o /tmp/pmaagent.rpm -k
yum install -y /tmp/pmaagent.rpm

Вместо <your-domain-name> пропишите доменное имя, указанное при установке Платформы.

  1. Создайте пользователя, от имени которого будет осуществляться подключение к СУБД. Для этого подключитесь к СУБД через psql на ведущей (master) СУБД под postgres пользователем:

Примечание

Права superuser нужны для выполнения задач обслуживания СУБД (vacuum/analyze/reindex) и управления пользовательскими запросами (terminate).

su - postgres
psql
CREATE ROLE pma_user WITH SUPERUSER LOGIN PASSWORD 'pma_user' CONNECTION LIMIT 5;

Примечание

Данный набор команд указан в качестве примера, укажите ваши настройки (user/password) для конкретной инсталляции СУБД.

  1. Настройте «pg_hba» для подключения к СУБД от имени пользователя, которого вы создали в предыдущей команде.

Найдите в системе «pg_hba»:

show hba_file;
\q

После введения команды в консоли получите:

hba_file
---------------------------------------------------
/var/lib/postgresql/tantor-se-15/data/pg_hba.conf
(1 строка)

Откройте данный файл через любой удобный редактор (например, nano):

nano /var/lib/postgresql/tantor-se-15/data/pg_hba.conf

Добавьте строку настройки подключения от имени пользователя «pma_user» к СУБД следующим образом:

local   all             pma_user                        md5

Зайдите под пользователем «pma_user»:

psql  -d postgres -U pma_user

Перечитайте конфигурацию:

select pg_reload_conf();

Задайте пароль:

\password

После этого проверьте что мы все выполнили правильно (вводим в интерактивном режиме пароль):

  1. Получите токен в интерфейсе Платформы на странице «Tokens», открыть которую можно нажав на значок профиля в верхнем правом углу → «Settings» («Настройки»). Подробнее о том, как получать токены, можно прочитать здесь.

  2. Используя полученный токен, зарегистрируйте Агента в Платформе, введя команды на сервере СУБД. Пример команды регистрации:

# pmaagent register --access-token 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJwbWEiLCJleHAiOjE3MTI5NTU1OTksImlhdCI6MTcwMzc1MTA0NSwic2NvcGUiOiJJTlNUQUxMIn0.Om6EK8vn4mSJeVyFQ7WqCBj9YtwWRQDJAHTgBDi8958' --host '10.128.0.121' --workspace-name '10.128.0.121' --endpoint 'tantor.domain.asdfa:4222'
Agent successfully registered

После этого в списке Агентов в интерфейсе Платформы (вкладка «Agents» при переходе в Пространство) появится новый Агент.

Добавление инстанса в Платформу

Далее в Платформу можно добавить инстанс. Можно добавлять инстансы двух типов:

  • SERVER - это инсталляция СУБД, запущенная непосредственно на сервере.

  • CONTAINER - это инсталляция СУБД, запущенная в контейнере типа docker.

  1. Зарегистрируйте инстанс в Платформе.

  • Пример добавления инстанса standalone (не Patroni) типа SERVER:

Добавьте следующие параметры в конфигурацию СУБД (пример):

echo "listen_addresses='*'" >/var/lib/postgresql/tantor-se-15/data/postgresql.auto.conf
echo 'host    postgres        pma_user        10.128.0.121/24            md5' >> /var/lib/postgresql/tantor-se-15/data/pg_hba.conf

Добавьте инстанс следующей командой:

pmaagent instances add --name '10.128.0.121' --environment 'SERVER' --type 'TantorDB' --db-host '10.128.0.121' --db-port '5432' --db-user 'pma_user' --db-pass 'postgres' --confirm
##########################################################################################
#                                PMA Agent. Version: 3.3.0.                              #
#                            Add on-premise PostgreSQL instance                          #
#                    Local date/time: Thursday, 28-Dec-23 21:04:59 MSK                   #
##########################################################################################
- Testing database connection using provided host [10.128.0.121]...                   [OK]
- Checking if the PostgreSQL instance is in recovery mode...                          [OK]
- Checking if the [postgresql-contrib] packaged is installed......                    [OK]
- Checking if the [pg_stat_statements] extension is installed......                   [OK]
- Checking if the [pg_store_plans] extension is installed......                       [OK]
- Creating the [pma_user] database user...                                            [OK]
- Checking the pg_hba configuration...                                                [OK]
- Updating the [/var/lib/postgresql/tantor-se-15/data/pg_hba.conf] file...            [OK]
- Reloading the PostgreSQL configuration...                                           [OK]
- Testing connection to database with provided parameters...                          [OK]
Instance [154a81d8-5a59-4381-b73c-ba6295304b46] has been added successfully

Перезапустите Агента Платформы командой:

# systemctl  restart pmaagent
  • Пример добавления инстанса standalone (не Patroni) типа CONTAINER:

pmaagent instances add --name 'demo-patroni1' --type 'PostgreSQL' --environment CONTAINER --container-target-id 64698910af9c --db-host '10.128.0.121' --db-port '5432' --db-user 'postgres' --db-pass 'postgres' --confirm
##########################################################################################
#                                PMA Agent. Version: 3.3.0.                              #
#                       Add PostgreSQL instance running in container                     #
#                    Local date/time: Thursday, 21-Dec-23 16:54:14 MSK                   #
##########################################################################################
- Parameters:
+ Type of instance                  : on-premise PostgreSQL
+ PostgreSQL default host           : 10.128.0.121
+           listener port           : 5432
+ Database name                     : postgres
+ PostgreSQL user (i.e. super user) : postgres
+                    password       : (* * * * * *)
+ PostgreSQL agent's user name      : postgres (this database user will be created. Agent connects to the monitored PostgreSQL instance using this user name)
+                    password       : (will be prompted to input)


- WARNING: During the process, the PostgreSQL instance will be reconfigured and reloaded.
-  Please make sure the instance of PostgreSQL that is listening the port [5432]
-  is properly configured, and its client authentication (pg_hba) is consistent.
- Testing database connection using provided host [10.128.0.121]...                   [OK]
- Checking if the PostgreSQL instance is in recovery mode...                          [OK]
- Checking if the [postgresql-contrib] packaged is installed......                    [OK]
- Checking if the [pg_stat_statements] extension is installed......                   [OK]
- Checking if the [pg_store_plans] extension is installed......                       [OK]
- Creating the [postgres] database user...                                            [OK]
- Testing connection to database with provided parameters...                          [OK]
- Testing container connection using default parameters...                            [OK]
Instance [48631c53-7d14-4d69-984f-3d87612650b9] has been added successfully
postgres
  1. Зайдите в интерфейс Платформы и проверьте, что в списке инстансов появились новые экземпляры. Метрики появятся в течение двух минут.

    Также список инстансов можно посмотреть в CLI. Пример просмотра:

    pmaagent instances list
    Environment        Key                                         Name                DB Host             DB Port        DB Name
    SERVER             78cdbd4b-029b-40ea-972e-535f42b26855        10.128.0.121        10.128.0.121        5432           postgres
    

Удаление инстанса из Платформы

Пример удаления инстанса:

pmaagent instances remove --key 78cdbd4b-029b-40ea-972e-535f42b26855 --confirm

Важно

При удалении последнего инстанса, если это инстанс типа SERVER, мы разрегистрируем Агента в Платформе и конфигурация удаляется.

pmaagent instances list
Failed to load the configuration file. Сonfiguration file [/var/lib/pma/agent/agent.yml] not found.

Для просмотра справочной информации вы можете использовать следующие команды:

  • «pmaagent register –help» - справочная информация о регистрации Агента. Пример использования:

    pmaagent register --help
    Registering the pmaagent
    
    Usage:
    pmaagent register [flags]
    
    Flags:
        --access-token string     Access token. Used for authentication and authorization purposes
        --endpoint string         Bus endpoint
        --help                    help about any command
        --host string             IP address of host environment used to register the Agent
        --workspace-name string   Destination name of platform workspace. Value is case sensitive
    
    Global Flags:
    -c, --config-file string   Path to the configuration file (default "/var/lib/pma/agent/agent.yml")
    -s, --stdout               Send logging information to stdout.
                                By default it is the file destination specified in the configuration file
    
  • «pmaagent instances add –help» - справочная информация о добавлении инстанса. Пример использования:

    pmaagent instances add --help
    Add instance
    
    Usage:
    pmaagent instances add [flags]
    
    Flags:
        --aws-access-key-id string       AWS Access Key ID (https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html).
                                        AWS RDS instance only.
        --aws-secret-access-key string   AWS Secret Access Key. AWS RDS instance only.
    -y, --confirm                        Auto confirm all dialogs and command line interactions
        --container-host string          Published container host (https://docs.docker.com/engine/reference/commandline/port)
        --container-port uint16          Published container port
        --container-target-id string     Target managed/monitored container identifier (minimum 12 symbols)
        --db-host string                 PostgreSQL instance server host
    -d, --db-name string                 Monitored database name (default "postgres")
    -W, --db-pass string                 PostgreSQL database user password
    -p, --db-port uint16                 PostgreSQL instance server port (default 5432)
    -U, --db-user string                 Connect to the monitored PostgreSQL instance as specified database user.
                                        It should have privileged access credentials (default "postgres")
    -e, --environment string             Environment type. Possible values: ["CONTAINER" "XDATABOX" "SERVER" "RDS"] (default "SERVER")
    -h, --help                           help for add
        --name string                    Instance name
        --patroni-host string            Patroni instance host name or IP address
        --patroni-password string        Patroni instance user password
    -P, --patroni-port uint16            Patroni instance port
        --patroni-ssl                    Use SSL to connect to the Patroni instance (default false)
        --patroni-user string            Patroni instance user name
        --type string                    Instance type: ["PostgreSQL" "TantorDB" "RDS"] (default "PostgreSQL")
    
    Global Flags:
    -c, --config-file string   Path to the configuration file (default "/var/lib/pma/agent/agent.yml")
    -s, --stdout               Send logging information to stdout.
                                By default it is the file destination specified in the configuration
    
  • «pmaagent instances remove –help» - справочная информация об удалении инстанса. Пример использования:

    pmaagent instances remove --help
    Remove instance
    
    Usage:
    pmaagent instances remove [flags]
    
    Flags:
    -y, --confirm       Auto confirm all dialogs and command line interactions
    -h, --help          help for remove
        --key string    Key of the instance to remove
        --name string   Name of the instance to remove
    
    Global Flags:
    -c, --config-file string   Path to the configuration file (default "/var/lib/pma/agent/agent.yml")
    -s, --stdout               Send logging information to stdout.
                                By default it is the file destination specified in the configuration file