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

Отправка системного журнала из тюрьмы на хост не выполняется

Я пытаюсь отправить журналы из тюрьмы в хост-систему на 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