Як змусити rsyslogd записати FQDN сервера замість короткого імені хоста?


22

Я намагаюся реалізувати простий централізований сервер syslog, використовуючи запас rsyslogd (4.2.0-2ubuntu8.1) на Ubuntu 10.04 LTS. На даний момент у мене всі вузли клієнтів надсилають журнали на центральний сервер, але клієнти надсилають повідомлення журналу, які містять своє коротке ім'я хоста замість FQDN.

На сторінці сторінки 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 у повідомленнях syslog, але налаштування, схоже, не мало жодного ефекту. Більшість інших налаштувань, які я знайшов для rsyslog, спрямовані на вилучення доменів з FQDN, а не на їх збереження. Я думаю, що корінь проблеми полягає в тому, що мої клієнти в першу чергу не надсилають FQDN, але я не бачу, як змусити цю поведінку.

Хтось може прокоментувати те, що я можу пропустити? Я думаю, що я не єдина людина, якій потрібні FQDN для включення до журналу повідомлень.


Згодом я створив і встановив пакет rsyslog 4.6.4-2ubuntu4 з Ubuntu 11.04 на своєму сервері та підмножину моїх клієнтських вузлів, але в результаті не помітив зміни в цій поведінці.
cwjohnston

Відповіді:


38

Я також зіткнувся з цим питанням. Ось як мені вдалося це виправити.

  1. На клієнтах модифікуйте файл / etc / hosts, щоб бажане ім’я хоста було перед localhost.

    127.0.0.1 ім'я хостаforlogs localhost

  2. На клієнтах та сервері модифікуйте /etc/rsyslog.conf, щоб включити це твердження:

    $ PreserveFQDN увімкнено

  3. На сервері я використовував змінну% HOSTNAME% для шаблонів у rsyslog.conf:


1
Це слід позначити як відповідь
ErJab

1
Будь ласка, позначте вище як відповідь.
Грег Аннандейл

1
Через 4 роки у цієї відповіді все ще є ноги. Дякуємо за те, що допомогли Метту в різдвяну ніч.
Джо

7

Щоб змінити ім'я хоста, який відправляє rsyslog, додайте таку директиву як перший рядок у /etc/rsyslog.conf перед завантаженням будь-яких модулів:

$LocalHostName yourhostname

Крім того, щоб rsyslog надсилав із повнокваліфікованим доменним іменем (FQDN, таким як system1.example.com) замість просто імені хоста (system1), використовуйте директиву:

$PreserveFQDN on

Це рідко потрібно. Рекомендуємо використовувати ім’я хоста (без доменного імені), якщо у вас немає ідентичних систем.

Альтернативний спосіб його встановлення (що дозволяє надсилати різні журнали як різні імена хостів) - це встановлення користувальницького шаблону:

$template MyTemplate, "<%pri%> %timestamp% MySpoofedHostName %syslogtag% %msg%\n"
$ActionForwardDefaultTemplate MyTemplate

4

Це може бути помилка. Підтримка FQDN є або, як відомо, непростою , хоча жодна з зареєстрованих помилок FQDN, здається, не застосовується.

Як вирішення, якщо ви не здійснюєте ретрансляцію, використовуйте %FROMHOST%замість% HOSTNAME%.


1
Використання %FROMHOST%дає мені FQDN, але, здається, це результат зворотного пошуку IP-адреси клієнтського вузла. Оскільки мої системи працюють на AWS EC2, це, на жаль, завжди дасть FQDN, який не має для мене негайного значення.
cwjohnston

0

Я можу говорити лише до 7.6.x, але $PreserveFQDNбуло все, що потрібно, щоб він працював. Ви можете уникати возитися, /etc/hostsякщо FQDN вашого вузла налаштовано правильно.

Приклад для систем CentOS / RHEL:

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

# To this
HOSTNAME=service-a-1.sn1.vpc3.example.com

Обов’язково перезавантажте.


0

Ви можете використовувати це в налаштуваннях rsyslog на стороні клієнта.

$LocalHostName {{HOSTNAME}}

і замінити {{HOSTNAME}}на потрібне ім'я хоста, або ви можете детемплатизувати його на кожному клієнті, використовуючи вуса автоматично.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.