rsyslog ompgsql не может подключиться к серверу, в то время как psql может

Вопрос или проблема

У меня следующая проблема с Ubuntu 24.04.1:

  • сервис rsyslog настроен для логирования в PostgreSQL с использованием модуля ompgsql
  • при запуске сервиса rsyslog модуль ompgsql выдает сообщение об ошибке ompgsql.c: pgsql, DBError(silent): db error (1): no connection to the server
  • при подключении с помощью psql все работает как ожидается.

Вот мой конфигурационный файл:

/etc/rsyslog.d/20-pgsql.conf
module (load="ompgsql")
*.* action(type="ompgsql" server="rsyslog-postgres" db="rsyslog" uid="rsyslog" pwd="rsyslog")

Вывод логов:

1703.733789103:main Q:Reg/w0  : ompgsql.c: initPgSQL: host=rsyslog-postgres port=5432 dbname=rsyslog uid=rsyslog
1703.734128454:main Q:Reg/w0  : ompgsql.c: initPgSQL: ssl status: 0
1703.734158855:main Q:Reg/w0  : ompgsql.c: writePgSQL: select 'a' as a
1703.734186486:main Q:Reg/w0  : ompgsql.c: postgres query execution failed: PGRES_FATAL_ERROR
1703.734205567:main Q:Reg/w0  : ompgsql.c: initPgSQL: host=rsyslog-postgres port=5432 dbname=rsyslog uid=rsyslog
1703.734502896:main Q:Reg/w0  : ompgsql.c: initPgSQL: ssl status: 0
1703.734530467:main Q:Reg/w0  : ompgsql.c: postgres query execution failed: PGRES_FATAL_ERROR
1703.734566269:main Q:Reg/w0  : ompgsql.c: pgsql, DBError(silent): db error (1): no connection to the server

Рабочая команда psql:

export PGPASSWORD=rsyslog
psql -h rsyslog-postgres -U rsyslog rsyslog

Как уже сказано, rsyslog не может подключиться, в то время как команда psql может. Я в замешательстве, как такое может быть.

Я столкнулся с той же проблемой: rsyslog и postgresql работают на одном виртуальном сервере ubuntu, rsyslog не может подключиться к базе данных postgres. Попробовал множество решений, но безрезультатно. Затем я перенес rsyslog на другой виртуальный сервер, и это сработало как по волшебству – никаких проблем с подключением к postgres.

*.* action(type="ompgsql" server="rsyslog-postgres" db="rsyslog" uid="rsyslog" pwd="rsyslog")

Это заставляет rsyslog использовать tcp для подключения к postgres, поэтому ‘rsyslog-postgres’ должен быть указан как DNS-хост на сервере rsyslog, в отличие от случая, когда rsyslog был настроен на использование UNIX-сокета postmaster, что происходит, если postgres находится на том же хосте, что и rsyslog, но вы изменяете строку подключения на следующую:

*.* action(type="ompgsql" db="rsyslog" uid="rsyslog" pwd="rsyslog")

Это может противоречить контрольным механизмам доступа в postgres.

Ответ или решение

Необходимость интеграции систем логирования и управления базами данных часто приводит к возникновению вопросов, связанных с настройкой и подключением. В данном случае мы рассмотрим проблему подключения модуля rsyslog ompgsql к серверу PostgreSQL, когда команда psql подключается без каких-либо затруднений.

Анализ проблемы

  1. Настройка rsyslog: Ваш файл конфигурации /etc/rsyslog.d/20-pgsql.conf указывает на использование модуля ompgsql для отправки журналов в базу данных PostgreSQL. Конфигурация включает параметры, такие как сервер, база данных, имя пользователя и пароль:

    module (load="ompgsql")
    *.* action(type="ompgsql" server="rsyslog-postgres" db="rsyslog" uid="rsyslog" pwd="rsyslog")
  2. Ошибка подключения: Логи сигнализируют о том, что модуль не может установить соединение с сервером PostgreSQL, выдавая сообщение об ошибке db error (1): no connection to the server.

  3. Работа с psql: При выполнении команды psql с экпортируемым паролем, подключение проходит успешно:

    export PGPASSWORD=rsyslog
    psql -h rsyslog-postgres -U rsyslog rsyslog

Варианты причин проблемы

  • DNS разрешение: Убедитесь, что rsyslog-postgres корректно разрешается в IP-адрес сервера PostgreSQL. При наличии проблем с DNS, rsyslog не сможет установить соединение.

  • Настройки доступа PostgreSQL: Проверьте файл конфигурации pg_hba.conf. Убедитесь, что у пользователя rsyslog есть права на доступ к базе данных rsyslog с хоста, откуда запускается rsyslog:

    host    rsyslog    rsyslog    <IP_адрес_или_маска>    md5
  • Различие в окружении: Возможно, rsyslog работает с другим окружением или правами, которые могут мешать подключению. Убедитесь, что rsyslog запущен с нужными правами.

  • Проблемы с сокетом: Если PostgreSQL и rsyslog работают на одной машине, возможно, использование UNIX-сокета вместо TCP поможет устранить ошибки соединения. Измените конфигурацию следующим образом:

    *.* action(type="ompgsql" db="rsyslog" uid="rsyslog" pwd="rsyslog")

    Это может устранить проблемы, связанные с сетевыми настройками.

Общие рекомендации

  1. Логирование: Улучшите логирование rsyslog, чтобы получить детальные сообщения об ошибках. Это может помочь выявить другие проблемы, не показанные в текущем выводе.

  2. Тестирование на другом сервере: Как показано в примере, перемещение rsyslog на другой сервер может устранить проблему. Это может указывать на конфигурационные проблемы, специфичные для первоначального окружения.

  3. Версии и зависимости: Убедитесь, что используемые версии rsyslog и PostgreSQL совместимы. Обновления в модулях могут привести к изменениям в работе.

  4. Форматирование конфигурации: Проверьте правильность оформления конфигурационных файлов. Например, лишние или отсутствующие пробелы, символы могут привести к ошибкам.

Заключение

Проблема с подключением rsyslog к PostgreSQL через модуль ompgsql может быть вызвана множеством факторов — от настройки сети и разрешения имен до прав доступа в базе данных. Систематический подход к выявлению и устранению этих проблем позволит вам успешно настроить интеграцию rsyslog с PostgreSQL. Если проблема сохраняется, рассмотрите варианты переноса или переустановки функций с учётом конфигурационных изменений.

Оцените материал
Добавить комментарий

Капча загружается...