pgpool-II достаточно известный балансировщик и пулер соединений для PostgreSQL и не нуждается в представлении. До версии 4.2 у pgpool-II были достаточно скудные настройки логирования — это писать лог в syslog или stderr, в версии 4.2 появился полноценный лог-коллектор в котором можно легко настроить логирование в отдельный файл, сделать ротацию и прочие полезные вещи, прям как в PostgreSQL (собственно logging collector оттуда и был портирован в pgpool-II 4.2).
В статье ниже я расскажу как быстро настроить логирование в отдельный файл для pgpool-II версий 3.x, 4.0 и 4.1, там где нет logging collector.
Исходные данные: CentOS Linux 7 + pgpool-II 4.0.x
Задача: Настроить логгирование pgpool-II 4.0.x в отдельный файл через syslog
Вроде бы задача простая, открываем официальную документацию на версию 4.0.x и настраиваем, но дьявол кроется в деталях.
Важно отметить, что в CentOS Linux 7 используется rsyslog, который обладает огромным функционалом и очень гибок — это большой плюс.
По умолчанию pgpool-II будет писать все в общий журнал /var/log/messages, что не очень удобно для последующего чтения и парсинга, например с помощью системы мониторинга, того же Zabbix.
Мы настроим логирование в отдельный каталог /var/log/pgpool в файл pgpool.log, а так же сделаем архивирование и ротацию логов.
Приступим:
1. Создаем правило для rsyslog для перенаправления логов в отдельный файл, создадим файл /etc/rsyslog.d/pgpool.conf
template(name="PGpoolMsg" type="string" string="%msg:::drop-last-lf%\n") if ( $programname startswith "pgpool" ) then { action(type="omfile" file="/var/log/pgpool/pgpool.log" template="PGpoolMsg") stop }
Здесь все довольно просто:
а) Обратите внимание на строку $programname startswith «pgpool», по умолчанию написано pgpool, что соответствует параметру syslog_ident из файла конфигурации pgpool-II;
б) Указание template создает отдельный шаблон с форматом строки лога, т.к. pgpool-II сам добавляет в лог информацию о дате, времени и pid (см. параметр log_line_prefix у pgpool-II), то нам не нужно добавлять их же от rsyslog и мы задаем формат строки без временных меток, просто пишем в лог строку %msg
в) В остальном все просто, пишем в лог-файл /var/log/pgpool/pgpool.log строку нужного формата от нужного programname и останавливаемся (stop);
2. Создадим каталог для логов, пустой лог и назначим владельца и права:
mkdir /var/log/pgpool chmod 755 /var/log/pgpool touch /var/log/pgpool/pgpool.log chmod 644 /var/log/pgpool/pgpool.log chown -R postgres:postgres /var/log/pgpool
Обратите внимание, что владельцем каталога /var/log/pgpool я установил пользователя postgres и в сценарии ротации файл лога ниже так же будет фигурировать пользователь postgres.
Проверьте наличие этого пользователя в системе, если его вдруг нет, то создайте.
3. Проверим настройки логирования в конфиге /etc/pgpool-II/pgpool.conf, у меня такие:
log_destination = 'syslog' logdir = '/var/log/pgpool'
Я привел те параметры которые отличаются от параметров по умолчанию, все остальные параметры логирования у меня стандартные.
4. Перезапустим rsyslogd
systemctl restart rsyslog
5. После этого в файл /var/log/pgpool/pgpool.log должна начать добавляться информация.
Перезапуск самого pgpool-II не потребуется.
Смотрим
tail -f /var/log/pgpool/pgpool.log
и радуемся результату.
6. Настроим ротацию лога
Создадим файл /etc/logrotate.d/pgpool с таким содержимым:
/var/log/pgpool/pgpool.log { daily rotate 14 compress delaycompress missingok create 0644 postgres postgres sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
Теперь у нас есть отдельный лог для pgpool-II и настроена его архивирование и ротация.
На этом все, до скорых встреч.
Если у Вас возникли вопросы или Вы хотите, чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.