Перейти к основному содержимому

Логирование

Логирование компонента Pangolin Pooler происходит в отдельном лог-файле по пути:

/pangolinlogs/pangolin-pooler/pangolin-pooler.log

Пример команды для просмотра лога компонента:

timeout 60s tail -f /pangolinlogs/pangolin-pooler/pangolin-pooler.log

Ротация файлов логирования

Файл для ротации файлов логирования компонента:

  • расположение при установке rpm/deb-пакета компонента:

    /opt/pangolin-pooler/share/doc/logrotate/pangolin-pooler/
  • конечное целевое расположение файла:

    /etc/logrotate.d/pangolin-pooler

Пример настроенного файла /etc/logrotate.d/pangolin-pooler для ротации:

/pangolinlogs/pangolin-pooler/pangolin-pooler.log {
rotate 10
su postgres postgres
missingok
sharedscripts
notifempty
compress
daily
create 0600 postgres postgres
postrotate
/bin/kill -HUP `cat /var/run/user/984/pangolin-pooler/pangolin-pooler.pid 2> /dev/null` 2>/dev/null ||true
endscript
}

Настройка вывода команды SHOW POOLS в лог Pangolin Pooler

Для анализа ошибок сессий при работе Pangolin Pooler в СУБД Pangolin реализована возможность вывода результата команды SHOW POOLS в лог Pangolin Pooler.

Включение/отключение вывода информации осуществляется через настройку параметра show_period конфигурационного файла pangolin-pooler.ini. Значение по умолчанию - 0 (запись в лог Pangolin Pooler отключена). В данном параметре устанавливается период (в секундах), с которым происходит запись в лог. Параметр рекомендуется настраивать на подготовительном этапе, чтобы в процессе исследования инцидента не получить отказ запуска сервиса при некорректных названиях/значениях параметра. В случае, если значение параметра show_period не задано, будет использоваться значение по умолчанию, что соответствует отключенному состоянию функциональности.

Также параметр может быть установлен командой: SET show_period = value администратором в консоли.

После изменения значения параметра перечитайте конфигурационный файл Pangolin Pooler для применения нового значения.

Внимание!

Установка некорректных (нечисловых) значений параметра show_period приводит к невозможности запуска сервиса pangolin-pooler.

Вывод производится в лог-файл, который указывается в файле конфигурации Pangolin Pooler, по умолчанию - pangolin-pooler.log, при этом вывод не может быть перенаправлен.

Пример формата вывода данных в лог-файл pangolin-pooler.log (маркер LOG POOLS):

2024-02-20 13:23:18.859 MSK [21524] LOG POOLS +-----------+-----------+-----------+------------+----------------------+-----------------------+-----------+------------------+-------------------+---------+---------+-----------+----------+---------+------------+----------+-------------+----------+-------------+-------------+
2024-02-20 13:23:18.859 MSK [21524] LOG POOLS | database | user | cl_active | cl_waiting | cl_active_cancel_req | cl_waiting_cancel_req | sv_active | sv_active_cancel | sv_being_canceled | sv_idle | sv_used | sv_tested | sv_login | maxwait | maxwait_us | avg_time | avg_time_us | max_time | max_time_us | pool_mode |
2024-02-20 13:23:18.859 MSK [21524] LOG POOLS +-----------+-----------+-----------+------------+----------------------+-----------------------+-----------+------------------+-------------------+---------+---------+-----------+----------+---------+------------+----------+-------------+----------+-------------+-------------+
2024-02-20 13:23:18.859 MSK [21524] LOG POOLS | pgbouncer | pgbouncer | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | statement |
2024-02-20 13:23:18.859 MSK [21524] LOG POOLS | postgres | postgres | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 46541 | 0 | 46541 | transaction |
2024-02-20 13:23:18.859 MSK [21524] LOG POOLS +-----------+-----------+-----------+------------+----------------------+-----------------------+-----------+------------------+-------------------+---------+---------+-----------+----------+---------+------------+----------+-------------+----------+-------------+-------------+

Диагностика ошибок

Сообщения системного журнала

Примеры и типы сообщений из лог-файла представлены в данном разделе.

Информационные сообщения:

Тип сообщенияСообщениеДиагностика
INFO
Authentication method "md5" isn't allowed for non security admin role "<username>"Доступ в БД через Pooler с использованием сквозной аутентификации с использованием запрещенных слабых методов аутентификации (например, md5)
<command_name> command issuedВыполнение команды из административной консоли Pangolin Pooler. Список команд доступен в разделе «Управление и использование»
Admin disappeared when suspended, doing RESUMEАдминистратор отключился во время приостановки — выполняется команда RESUME
Zone '<name>' serial changed: old=<n> new=<n>Обновлена DNS-зона
User '<user>' removed from locked user list.Пользователь разблокирован
Server connections dropped, exitingВсе серверные соединения завершены
NDC mode switched to '<mode>'Переключен режим NDC
Got SIGTERM/SIGINT/SIGQUIT/...Получен системный сигнал — выполнение остановки или паузы
Got SIGUSR1/SIGUSR2, pausing/resuming activityУправление активностью через сигналы — пауза или возобновление
Kernel file descriptor limit: <soft>/<hard>;...Диагностика лимитов ОС — дескрипторы и ожидаемое использование
Stale pidfile, removingНайден устаревший PID-файл, который будет удален
Got SIGHUP, re-reading configПолучен сигнал перечитать конфигурацию
Old process not found, try to continue normallyСтарый процесс не найден
Listening on <addr>Pooler слушает на указанном адресе
Socket passed from service manager (fd <n>)Получен сокет от управляющего процесса
Got pooler socket: <addr>Получено сокет соединение
Plugin to get passphrase for PKCS#12 file is loadedЗагружен плагин расшифровки PKCS#12
Plugin to get certificate from Secret storage is loadedЗагружен плагин извлечения TLS-сертификата
Client certificates caching: <on/off>Состояние кеширования клиентских TLS-сертификатов
Sending SHUTDOWNИнициировано завершение работы
Waiting for old pidfile to go awayОжидание завершения предыдущего процесса
Old process killed, resuming workПредыдущий процесс завершен
Disko over, going backgroundЗавершение и переход в фоновый режим
SUSPEND finished, sending SHOW FDSПосле завершения SUSPEND выполняется диагностика
SHOW FDS finishedКоманда SHOW FDS завершена
takeover_init: launching connectionИнициализация takeover-соединения
AUDIT
Login attempt tls=<yes/no>Использование TLS при подключении пользователя
Connection receivedЗафиксировано входящее подключение
Login failedНеуспешная попытка подключения
Closing because: client close request (age=<N>s)Клиент самостоятельно завершил соединение. age — продолжительность соединения в секундах
Send auth startup packetОтправка стартового пакета аутентификации клиентом. Обычно предшествует проверке пользователя
Auth server login okУспешная аутентификация пользователя сервером базы данных
DEBUG
RESET_AUTH reset context: user=<user> dbname=<db> ...Контекст аутентификации сброшен с помощью команды RESET_AUTH
Got admin query: <query>Получен административный запрос
TLS cert login: <subject>Подключение с TLS-сертификатом
Admin console connection for user: <user>Установлено соединение с административной консолью
DNS lookup failed: <name> - <error>Ошибка DNS-запроса
zone_register(<zone>): <name>Зарегистрирована DNS-зона
Send notify message (PAUSE MODE is enabled)Отправлено уведомление в режиме PAUSE
NDC suspending timeout has endedТаймер приостановки NDC завершен
Launching new connection to satisfy min_pool_sizeУстановлено новое соединение для min_pool_size
locked_user_list removing 2 for: <user>Пользователь удален из списка заблокированных
Loading auth_file: "<file>"Загрузка конфигурационного файла аутентификации
NDC mode did not change: mode='<mode>'Режим NDC остался прежним

Предупреждающие сообщения (тип WARNING):

Тип сообщенияСообщениеДиагностика
WARNING
TLS certificate does not contain DNS or IPСертификат TLS не содержит IP или DNS. Возможны ошибки проверки подлинности
Unsupported startup parameter in options: <key>=<value>Использован неподдерживаемый параметр запуска
Authentication context expired. user: db=<db> user=<user>Истек срок действия контекста аутентификации. Пользователю потребуется повторная аутентификация
dns(<name>): req failed, no memОшибка DNS-запроса из-за нехватки памяти
DNS lookup failed: <name>: result=<code>Ошибка разрешения DNS-имени. Проверьте сетевые настройки
samerole is not supportedУсловие доступа samerole не поддерживается Pangolin Pooler
samegroup is not supportedУсловие доступа samegroup не поддерживается Pangolin Pooler
hba line <n>: Ident map <name> is malformed. It is not in map=value format.Ошибка формата карты ident в конфигурации pg_hba
hba line <n>: Ident map <name> is not found in ident config fileУказанная карта ident отсутствует в конфигурации
hba line <n>: Unknown typeУказан неизвестный тип подключения в pg_hba
hba line <n>: Did not find addressПропущен IP-адрес или CIDR-маска в pg_hba
hba line <n>: Invalid maskНекорректная маска подсети в pg_hba
Ignore 'user' for database '<database_name>' because auth_proxy is onПараметр user игнорируется, так как включен режим прокси-аутентификации
Ignore 'auth_username' for database '<database_name>' because auth_proxy is onПараметр auth_username игнорируется в режиме сквозной аутентификации
Ignore 'auth_dbname' for database '<database_name>' because auth_proxy is onПараметр auth_dbname игнорируется врежиме сквозной аутентификации
Invalid SCRAM secret for user <username>Задан некорректный SCRAM-секрет
Invalid grace SCRAM verifier for user "<username>"Неверный SCRAM grace-пароля верификации
Invalid salt length in grace SCRAM verifier for user <username>Некорректная длина salt
Wrong salt in grace SCRAM verifier for user <username>Неправильное значение salt в верификации
Wrong iterations in grace SCRAM verifier for user <username>Некорректное количество итераций SCRAM верификаций
Server login failed: <level> <message>Неудачный вход на сервер
show_stats_setup: initialization failedНе удалось инициализировать показ статистики
event_add failed: <reason>Ошибка добавления события в цикл обработки. Возможная причина — ошибка ОС
Hostname cannot be receivedОшибка получения имени хоста. Возможна сетевая или системная ошибка
Unix peer uid failed: <reason>Ошибка получения UID клиента при соединении по Unix-сокету

Сообщения об ошибке:

Тип сообщенияСообщениеДиагностика
FATAL
No pg_hba.conf entry for host "<IP-Address>", user "user1", database "postgres", SSL onУбедитесь, что в pg_hba.conf есть правило, разрешающее подключение от указанного пользователя, хоста и к нужной базе
Password authentication failed for user "user1" DETAIL: User "user1" has no password assignedУ пользователя отсутствует пароль, либо он не задан в системе или в файле аутентификации
Role is blocked due to fail authentication attemptsУчетная запись заблокирована из-за превышения количества неуспешных попыток входа
Token authentication failed for user "<username>"Аутентификация не удалась из-за изменения пароля пользователя в СУБД. Требуется выполнить переподключение
PgBouncer does not allow to use weak authentication type: "trust"Использование слабых типов аутентификации (таких как, например, trust) запрещено при активном механизме сквозной аутентификации
The userlist file contains a password that cannot be represented as plain textPangolin Pooler, с активным механизмом сквозной аутентификации, не работает с файлом userlist.txt, содержащим пароль в открытом виде
The '<username>' user cannot be used as he is not admin_users or stat_usersОшибка после добавления пользователя в userlist.txt. Pangolin Pooler разрешает указывать пользователей в файле userlist.txt только предварительно заданных в admin_users и stat_users
cmd regex compilation errorОшибка компиляции регулярного выражения команды. Проверьте корректность шаблона
Set/word/str regex compilation errorНекорректное регулярное выражение в команде SET (ключ, значение)
Why waiting client in client_proto()Некорректное состояние клиента, WAITING при обработке протокола
Why canceling client in client_proto()Некорректное состояние клиента, CANCEL при обработке протокола
Bad client state: <int>Обнаружено некорректное внутреннее состояние клиента. Возможна ошибка в логике соединений
Cannot create initial cachesОшибка инициализации кеша Pooler (пользователи, БД, соединения и другое)
Cannot initialize snowflake generatorНе удалось инициализировать генератор уникальных идентификаторов
sbuf_pause failedОшибка при приостановке работы буфера сокета. Возможна проблема на уровне ОС
Broken fd packetПолучен поврежденный пакет на файловом дескрипторе
Failed to convert address: <addr>Не удалось интерпретировать сетевой адрес. Проверьте формат и данные
Unknown task: <task_name>Попытка выполнить неизвестную задачу. Возможен сбой конфигурации
Socket takeover failedОшибка при захвате сокета (при миграции или перезапуске)
takeover_create_link: failed to find pairНе удалось найти «парное» соединение для takeover
Got bad CMD from old bouncer: <cmd>Старый экземпляр Pangolin Pooler передал неизвестную или недопустимую команду
Command send failedНе удалось отправить команду в backend или другой компонент
Cannot create initial auth cachesОшибка инициализации кеша аутентификации
PgBouncer does not allow to use unix socket if auth_proxy = onПри включенной сквозной аутентификации нельзя использовать Unix-сокеты. Используйте TCP/IP
Failed to load a legacy provider introduced in OpenSSL 3.0.0OpenSSL не может загрузить старый провайдер. Проверьте OpenSSL-конфигурацию
TLS setup failedОшибка реализации TLS-соединения. Проверьте сертификаты и параметры подключения
PgBouncer should not run as rootЗапуск под пользователем root завершился неудачно
ERROR
TLS certificate name mismatchИмя, указанное в TLS-сертификате, не совпадает с ожидаемым именем пользователя/сервера. Проверьте сертификат
TLS configuration could not be reloaded, keeping old configurationОшибка при перезагрузке TLS-конфигурации. Используется предыдущее значение
Authentication database "<database_name>" is not configuredУказанная база данных не настроена как источник аутентификации
Cannot use the reserved "<database_name>" database as an auth_dbnameПопытка использовать зарезервированную БД как auth_dbname. Выберите другую БД
TLS connection requiredПодключение должно выполняться по защищенному TLS-каналу. Проверьте настройки клиента
TLS client certificate requiredСервер ожидает клиентский TLS-сертификат, но он не был предоставлен
Certificate authentication failedАутентификация на основе сертификата завершилась неудачно. Возможные причины: имя не совпадает или отсутствует сертификат
Ident map: <map_name> does not have a matchЗначение из карты соответствия (ident map) не может быть сопоставлено. Проверьте файл конфигурации
Incorrect auth type <type_code>Указан неподдерживаемый тип аутентификации. Проверьте настройки
'set_pool():' failed to allocate new userПревышен лимит подключений или исчерпаны ресурсы Pooler для выделения пула
PAM can't be used together with database authenticationОдновременное использование PAM и встроенной аутентификации запрещено. Используйте только один механизм
SCRAM authentication failed: user has MD5 secretПользователь имеет MD5-хеш пароля, а клиент требует SCRAM. Обновите формат пароля
Invalid SCRAM response (nonce does not match)SCRAM пароля клиента некорректен. Проверьте и повторите попытку
Password authentication failedНекорректный пароль. Убедитесь в правильности введенных данных
SASL authentication failedАутентификация SASL не удалась. Возможно, ошибка со стороны клиента или несовместимый формат
'ids' of peers must be a number larger than 0 and at most 65536ID узла должен быть числом от 1 до 65536. Проверьте настройки репликации или кластера
Out of memoryНедостаточно памяти для выполнения операции. Проверьте настройки или нагрузку на систему
Syntax error in connection stringОбнаружена синтаксическая ошибка в строке подключения. Проверьте формат и параметры
Invalid port: <val>Значение порта в строке подключения некорректно. Ожидается числовое значение
Unrecognized connection parameter: <key>Найден неподдерживаемый параметр в строке подключения
Host was not provided for peer <peer_id>В конфигурации не указан обязательный параметр host для указанного узла
Cannot create peer, no memory?Не удалось создать подключение к пирингу. Возможная причина — нехватка памяти
Invalid pool mode: <val>Указан неверный режим пула. Поддерживаемые значения: session, transaction, statement
Broken auth fileФайл аутентификации поврежден или содержит ошибки. Проверьте его целостность
Username too long in auth fileИмя пользователя в файле аутентификации превышает допустимую длину
Password too long in auth fileПароль в файле аутентификации превышает допустимую длину
Cannot do MD5 authentication: wrong password typeТребуется формат MD5, но пароль задан в другом формате
Cannot do SCRAM authentication: password is SCRAM secret but client authentication did not provide SCRAM keysSCRAM не является поддерживаемым методом, но пароль пользователя — в формате SCRAM
Server login failed: wrong password typeОшибка входа из-за несовпадения типа пароля
SCRAM exchange protocol errorНарушение протокола SCRAM
Could not load plugin to get PKCS#12 file specified in file "<file_path>"Ошибка загрузки плагина для обработки PKCS#12-файла. Проверьте путь к файлу и совместимость плагина
Unknown clientКлиент не распознан. Возможно, используется устаревшая или несовместимая версия
Подсказка

Пример команды для проверки вывода лога компонента, файла pangolin-pooler.log:

timeout 60s tail -f /pangolinlogs/pangolin-pooler/pangolin-pooler.log

Коды возврата при использовании сквозной аутентификации

В таблице ниже приведены возможные коды возврата, которые возникают в логе Pangolin Pooler при использовании сквозной аутентификации.

СостояниеНазваниеPangolin PoolerPangolin DBMS
STATUS_OK (0)Аутентификация выполнена успешно+
STATUS_ERROR (-1)Аутентификация не прошла+
STATUS_EOF (-2)Произошел разрыв между Pooler и Pangolin DBMS+
STATUS_HANDSHAKE_OK (10)Выполнился обмена пакетами на старте между Pooler и Pangolin DBMS+
STATUS_WAITING_DATA (11)Выполняется обмен данными+
STATUS_TIMEOUT_EXPIRED (12)Сработал таймер аутентификации++

Пример записи в логе

Ниже приведен фрагмент лога Pangolin Pooler. Он показывает последовательность событий, происходящих во время подключения клиента, его аутентификации, активности в системе и последующего отключения.

  1. Попытка входа пользователя test в базу test_db с клиента по адресу <IP-Address>, порт <port>. Аутентификация выполняется без использования TLS:

    2022-08-17 14:12:48.194 MSK AUDIT test_db/test@<IP-Address>:<port> login attempt tls=no
  2. Регулярная статистика соединения: число транзакций и запросов в секунду, входящий/исходящий трафик, среднее время выполнения транзакции, запроса и ожидания. В данном случае активность низкая:

    2022-08-17 14:13:46.990 MSK [1230] LOG stats: 0 xacts/s, 0 queries/s, in 3 B/s, out 4 B/s, xact 3284 us, query 355 us, wait 6 us
  3. Отсутствует активность — соединение не используется, трафик и задержки нулевые:

    2022-08-17 14:15:46.991 MSK [1230] LOG stats: 0 xacts/s, 0 queries/s, in 0 B/s, out 0 B/s, xact 0 us, query 0 us, wait 0 us
  4. Соединение с клиентом закрывается по его инициативе (client close request). Продолжительность соединения — 1789 секунд (~30 минут):

    2022-08-17 14:16:42.393 MSK AUDIT test_db/test@<IP-Address>:<port> closing because: client close request (age=1789s)
  5. Получено новое соединение от того же клиента (порт <port>):

    2022-08-17 14:16:42.414 MSK AUDIT test_db/test@<IP-Address>: connection received
  6. Предупреждение: истек срок действия аутентификационного контекста клиента. Возможно, между соединениями прошло слишком много времени, либо внутренний кеш аутентификации обновился:

    2022-08-17 14:16:42.414 MSK [1230] WARNING C-0x2278d78 (21474): (nodb)/test@<IP-Address>:<port> authentication context expired. user: db=test_db user=test
  7. Новая попытка входа без TLS:

    2022-08-17 14:16:42.414 MSK AUDIT test_db/test@<IP-Address>:<port> login attempt tls=no
  8. Отправка стартового пакета аутентификации от клиента:

    2022-08-17 14:16:42.414 MSK AUDIT test_db/test@<IP-Address>:<port> send auth startup packet
  9. Аутентификация клиента прошла успешно:

    2022-08-17 14:16:42.492 MSK AUDIT test_db/test@<IP-Address>:<port> auth server login ok
  10. Сводка статистики показывает, что клиент ведет небольшую активность:

    2022-08-17 14:16:46.991 MSK [1230] LOG stats: 0 xacts/s, 0 queries/s, in 3 B/s, out 4 B/s, xact 3962 us, query 450 us, wait 12 us
  11. Снова отсутствие активности на соединении:

    2022-08-17 14:17:46.991 MSK [1230] LOG stats: 0 xacts/s, 0 queries/s, in 0 B/s, out 0 B/s, xact 0 us, query 0 us, wait 0 us

Такие логи позволяют анализировать жизненный цикл соединения: от момента подключения до закрытия. Особенно полезны события AUDIT — они показывают каждое подключение, аутентификацию и причину завершения соединения. LOG stats помогает отслеживать нагрузку и поведение клиента.