У меня есть 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 (сервер пересылки). В идеале подойдет и более детальная конфигурация.