Я пытаюсь реализовать простой централизованный сервер системного журнала, используя стандартный rsyslogd (4.2.0-2ubuntu8.1) на Ubuntu 10.04 LTS. На этом этапе все мои клиентские узлы отправляют журналы на центральный сервер, но клиенты отправляют журнальные сообщения, которые содержат свое короткое имя хоста вместо своего полного доменного имени.
Согласно справочной странице по Ubuntu rsyslogd:
Если удаленный хост находится в том же домене, что и хост, на котором работает rsyslogd, в журнал будет записано только простое имя хоста, а не весь fqdn.
Это проблематично для меня, так как я повторно использую короткие имена между средами, например, core1.example.com и core1.stg.example.com, оба записывают свои сообщения как core1.
И клиент, и сервер имеют одинаковый файл / etc / default / rsyslog:
RSYSLOGD_OPTIONS="-c4"
и тот же файл /etc/rsyslogd.conf:
$ModLoad imuxsock
$ModLoad imklog
$PreserveFQDN on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$IncludeConfig /etc/rsyslog.d/*.conf
Клиенты имеют этот файл /etc/rsyslog.d/remote.conf, который сообщает им об отправке на удаленный сервер:
*.* @@syslog.example.com
и сервер использует этот файл /etc/rsyslog.d/server.conf:
$ModLoad imtcp
$InputTCPServerRun 514
$DirGroup root
$DirCreateMode 0755
$FileGroup root
$template PerHostAuth,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/auth.log"
$template PerHostCron,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/cron.log"
$template PerHostSyslog,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/syslog"
$template PerHostDaemon,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/daemon.log"
$template PerHostKern,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/kern.log"
$template PerHostLpr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/lpr.log"
$template PerHostUser,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/user.log"
$template PerHostMail,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.log"
$template PerHostMailInfo,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.info"
$template PerHostMailWarn,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.warn"
$template PerHostMailErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/mail.err"
$template PerHostNewsCrit,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.crit"
$template PerHostNewsErr,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.err"
$template PerHostNewsNotice,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/news.notice"
$template PerHostDebug,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/debug"
$template PerHostMessages,"/srv/rsyslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages"
auth,authpriv.* ?PerHostAuth
*.*;auth,authpriv.none -?PerHostSyslog
cron.* ?PerHostCron
daemon.* -?PerHostDaemon
kern.* -?PerHostKern
lpr.* -?PerHostLpr
mail.* -?PerHostMail
user.* -?PerHostUser
mail.info -?PerHostMailInfo
mail.warn ?PerHostMailWarn
mail.err ?PerHostMailErr
news.crit ?PerHostNewsCrit
news.err ?PerHostNewsErr
news.notice -?PerHostNewsNotice
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -?PerHostDebug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -?PerHostMessages
Поскольку и клиент, и сервер совместно используют конфигурацию, в которой указано «$ PreserveFQDN on», я ожидаю увидеть имена хостов FQDN в сообщениях системного журнала, но, похоже, этот параметр не дал никакого эффекта. Большинство других настроек, которые я нашел для rsyslog, направлены на удаление доменов из полных доменных имен вместо их сохранения. Я думаю, что корень проблемы в том, что мои клиенты не отправляют FQDN в первую очередь, но я не вижу, как заставить это поведение.
Кто-нибудь может прокомментировать то, что мне может не хватать? Я полагаю, что я не единственный человек, которому нужны полные доменные имена для включения в сообщения журнала.
Ответы:
Я столкнулся с этой проблемой также. Вот как я смог это исправить.
На клиентах измените файл / etc / hosts так, чтобы желаемое имя хоста предшествовало localhost.
127.0.0.1 hostnameforlogs localhost
На клиентах и сервере измените /etc/rsyslog.conf, чтобы включить этот оператор:
$ PreserveFQDN на
На сервере я использовал переменную% HOSTNAME% для шаблонов в rsyslog.conf:
источник
Чтобы изменить имя хоста, отправляемое rsyslog, добавьте следующую директиву в качестве самой первой строки в /etc/rsyslog.conf перед загрузкой любых модулей:
В качестве альтернативы, чтобы rsyslog отправлял с полным доменным именем (FQDN, например system1.example.com) вместо простого имени хоста (system1), используйте директиву:
Это редко нужно. Мы рекомендуем использовать имя хоста (без имени домена), если у вас нет систем с одинаковыми именами.
Альтернативный способ установить его (который позволяет вам отправлять разные журналы как разные имена хостов) - это установить собственный шаблон:
источник
Это может быть ошибка. Поддержка FQDN является или, как было известно, шаткой , хотя ни одна из зарегистрированных ошибок FQDN, кажется, не применима.
В качестве обходного пути, если вы не выполняете ретрансляцию, используйте
%FROMHOST%
вместо% HOSTNAME%.источник
%FROMHOST%
дает мне полное доменное имя, но, похоже, это результат обратного просмотра IP-адреса клиентского узла. Поскольку мои системы работают на AWS EC2, это, к сожалению, всегда приводит к полному доменному имени, которое не имеет для меня непосредственного значения.Я могу говорить только с 7.6.x, но это
$PreserveFQDN
было все, что нужно для его работы. Вы можете избежать возни,/etc/hosts
если полное доменное имя вашего узла настроено правильно.Пример для систем CentOS / RHEL:
Обязательно перезагрузите компьютер.
источник
Вы можете использовать это в конфигурации rsyslog на стороне клиента.
и замените его
{{HOSTNAME}}
на желаемое имя хоста, или вы можете автоматически определить его на каждом клиенте, используя усы .источник