Назад | Перейти на главную страницу

Rsyslog не пересылается при работе в качестве службы

У меня есть 2 локальные виртуальные машины с CentOS 7 для моделирования нашей производственной среды. 1 прокси-сервер и 1 централизованный (ELK) сервер. На сервере ELK запущен logstash для сбора всех системных журналов запущенных экземпляров. Прокси-сервер снабжен Rsyslog (и logrotate) через Ansible. Установите syslog и logrotate. Скопируйте конфигурацию. Перезапустить службу. Действительно базовая конфигурация, просто *.* @@IP.ADD.RE.SS:12345 в 10-logstash.conf находится в /etc/rsyslog.d/ а остальное стандартно. Но, похоже, он не отправляет журналы в logstash. Когда я хвостом /var/log/messages я вижу вывод прокси-контейнера, запущенного на экземпляре. Но ничего не передается на сервер регистрации.

Итак, я погуглил и нашел опцию DebuggingOnDemand. Когда я останавливаю службу rsyslogd и запускаю вручную sudo rsyslog -n он начинает пересылку журналов. Когда я бегу rsyslog -d (без sudo) Я получаю уведомление, что он не может записать файл .pid. Итак, я предполагаю, что когда он запускается как служба, у него недостаточно прав для правильной работы? Я не могу вручную запустить rsyslog без sudo. Но я могу запустить rsyslog как службу (sudo service rsyslog start) и подтвердил, что он работает.

Так в чем именно проблема? Это сам процесс? Он не может читать файлы журнала? Я не мог себе представить, что моя конфигурация неверна, поскольку rsyslog пересылает правильно при запуске вручную. Я не знаю, какие журналы или выходные данные предоставить, поэтому, если они необходимы, спросите, и я постараюсь предоставить.

rsyslogd -N 10 вывод (с другим файлом конфигурации, который, как подтверждено, работает в производственной среде, тот же сервер пересылки, но определено немного больше параметров)

rsyslogd: version 7.4.7, config validation run (level 10), master config /etc/rsyslog.conf
rsyslogd: module 'imuxsock' already in this config, cannot be added [try http://www.rsyslog.com/e/2221 ]
rsyslogd: $WorkDirectory: /rsyslog/work can not be accessed, probably does not exist - directive ignored [try http://www.rsyslog.com/e/2181 ]
rsyslogd: End of config validation run. Bye.

Заранее спасибо!

Определенно это связано с SELinux, но поскольку отключение SELinux - не лучший выбор, я исправляю проблему следующим образом:

sudo semanage port -d -t unreserved_port_t -p tcp 9092
sudo semanage port -a -t http_port_t -p tcp 9092

И перезапустите syslogd. Вы можете увидеть предупреждения SELinux с помощью этой команды:

tail -f /var/log/audit/audit.log

Я знаю, что этот вопрос старый, но у меня была такая же проблема. Основываясь на том, что было опубликовано, мне было трудно понять, что делать.

Для меня проблема была решена с помощью этой команды:

semanage port -m -t syslogd_port_t -p tcp 443

После этого мне просто пришлось отказаться от службы rsyslog:

systemctl restart rsyslog

Я также нашел статью, которая хорошо справляется с другими случаями, когда selinux может блокировать службу syslog / rsyslog.

https://support.logz.io/hc/en-us/articles/209486429-Troubleshooting-Rsyslog-SELinux-configuration

Надеюсь, это кому-то сэкономит время!

Нашел решение для этого отключения SELinux на хосте rsyslog (сервер пересылки). В идеале подойдет и более детальная конфигурация.