Я пытаюсь отправить журналы из тюрьмы в хост-систему на FreeBSD 10.
Я думаю, что все настроено правильно, но я не могу заставить его работать.
Отправка журналов напрямую из Nginx 1.7 работает, но не отправка журналов через системный журнал (например, PHP-FPM).
Это мой хозяин /etc/rc.conf
:
syslogd_flags="-a 10.0.0.1/24:* -v -v -C"
Мой хозяин etc/syslog.conf
:
+ABCD
*.=info /var/log/jails/ABCD/nginx-access.log
*.=error /var/log/jails/ABCD/nginx-error.log
*.* /var/log/jails/ABCD/all.log
Это тюрьма etc/rc.conf
:
syslogd_flags="-ss -v -v"
И тюрьма etc/syslog.conf
:
!php-fpm
*.* @127.0.0.1
etc/hosts
настроен в обеих системах.
Отправка журналов вручную непосредственно на хост с logger
работает.
Используя функцию отладки, я вижу, что тюрьма пересылает журналы, которые я создаю вручную с помощью logger -t php-fpm
:
Logging to FORW 127.0.0.1
Но журналы никогда не поступают на хост. Там отладчик не получает никаких сообщений. То же самое и со встроенной функцией системного журнала Nginx.
Я уже пробовал установить syslogd_flags="-s -v -v"
. После этого я больше не могу отправлять журналы вручную, и ситуация не меняется.
Как упоминает @citrin, -ss
флаг - это не то, что вам нужно.
Следующее работает для меня на FreeBSD 12.1, без vnet
виртуализация настроена.
192.168.1.1 - это IP-адрес хоста.
192.168.1.68 - это IP джейла.
Убедитесь, что хост и тюрьма могут пинговать друг друга.
Убедитесь, что у вас нет правил брандмауэра, блокирующих UDP-порт 514 между хостом и тюрьмой.
В тюрьме:
# sysrc syslogd_enable=yes
# sysrc syslogd_flags="-s -vv"
# cat /etc/syslog.conf
*.* @192.168.1.1
# grep 192.168 /etc/hosts
# 192.168.0.0 - 192.168.255.255
192.168.1.68 jail
192.168.1.1 host
# service syslogd stop
# service syslogd start
На хосте:
# sysrc syslogd_enable="yes"
# sysrc syslogd_flags="-a 192.168.1.68 -vv"
# tail -4 /etc/syslog.conf
+jail
*.* /var/log/test-jail.log
# touch /var/log/test-jail.log
# grep 192.168 /etc/hosts
# 192.168.0.0 - 192.168.255.255
192.168.1.1 vlan3
192.168.1.68 jail
# service syslogd stop
# service syslogd start
Если это все еще не работает для вас, есть несколько хороших советов по устранению неполадок в Страница справочника FreeBSD на syslogd
. Наиболее заметным является использование -d
переключить на стороне хоста:
# sysrc syslogd_flags="-d -a 192.168.1.68 -vv"
Это дает много информации, поэтому внимательно прочтите ее.
Наконец, удаленное ведение системного журнала иногда немного неудобно, по причинам, возможно, более старшим администратором может быть добавлено в комментарии. У меня самый лучший успех, когда я не ссылаться на записи / etc / hosts в syslogd_flags
строка. Для меня лучше использовать буквальные IP-адреса. Это может быть связано с тем, что вы не используете законное полное доменное имя и / или настоящее DNS-имя. Если позволит время, я изучу эти возможности и обновлю этот ответ.
Обновить:
После настройки нескольких тестовых записей DNS и опробования различных конфигураций, я думаю, что все трудности, которые у меня были ранее, были вызваны либо поспешной работой и / или непоследовательным вниманием к деталям. Как только у меня будет твердый /etc/syslog.conf
framework как для тюрьмы, так и для хоста, вместе с записями брандмауэра, удобными для системного журнала, похоже, что моя удаленная запись журнала от тюрьмы к хосту работает с использованием либо собственных имен DNS, /etc/hosts
записи или необработанные IP-адреса.
С участием -ss
flags syslogd не открывает никаких сокетов, событие для отправки журналов на другой хост. Использование в тюрьме syslogd_flags="-s -b localhost"
Настройте php-fpm в тюрьме для входа через сокет unix в локальный syslogd и убедитесь, что сообщения от php-fpm могут быть записаны локальным syslogd в файл.
php-fpm.conf:
error_log = syslog;
syslog.facility = local7
/etc/syslog.conf
!*
local7.* /var/log/for-test-php.log
Если сообщения записываются для входа в тюрьму, замените путь к файлу на @ 10.x.x.x, где 10.x.x.x - это IP-адрес основного хоста, доступного из тюрьмы.
На главном хосте вы можете запустить syslogd на переднем плане, чтобы проверить, получены ли сообщения:
service syslogd stop
syslogd -a 10.0.0.1/24:* -v -v -d
....
Ctrl+C
service syslogd start