Вопрос или проблема
У меня следующая проблема с 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
подключается без каких-либо затруднений.
Анализ проблемы
-
Настройка rsyslog: Ваш файл конфигурации
/etc/rsyslog.d/20-pgsql.conf
указывает на использование модуляompgsql
для отправки журналов в базу данных PostgreSQL. Конфигурация включает параметры, такие как сервер, база данных, имя пользователя и пароль:module (load="ompgsql") *.* action(type="ompgsql" server="rsyslog-postgres" db="rsyslog" uid="rsyslog" pwd="rsyslog")
-
Ошибка подключения: Логи сигнализируют о том, что модуль не может установить соединение с сервером PostgreSQL, выдавая сообщение об ошибке
db error (1): no connection to the server
. -
Работа с 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")
Это может устранить проблемы, связанные с сетевыми настройками.
Общие рекомендации
-
Логирование: Улучшите логирование rsyslog, чтобы получить детальные сообщения об ошибках. Это может помочь выявить другие проблемы, не показанные в текущем выводе.
-
Тестирование на другом сервере: Как показано в примере, перемещение rsyslog на другой сервер может устранить проблему. Это может указывать на конфигурационные проблемы, специфичные для первоначального окружения.
-
Версии и зависимости: Убедитесь, что используемые версии rsyslog и PostgreSQL совместимы. Обновления в модулях могут привести к изменениям в работе.
-
Форматирование конфигурации: Проверьте правильность оформления конфигурационных файлов. Например, лишние или отсутствующие пробелы, символы могут привести к ошибкам.
Заключение
Проблема с подключением rsyslog к PostgreSQL через модуль ompgsql может быть вызвана множеством факторов — от настройки сети и разрешения имен до прав доступа в базе данных. Систематический подход к выявлению и устранению этих проблем позволит вам успешно настроить интеграцию rsyslog с PostgreSQL. Если проблема сохраняется, рассмотрите варианты переноса или переустановки функций с учётом конфигурационных изменений.