Bagaimana cara mendapatkan rsyslogd untuk mencatat FQDN server alih-alih nama host pendeknya?

22

Saya mencoba menerapkan server syslog terpusat sederhana menggunakan stock rsyslogd (4.2.0-2ubuntu8.1) di Ubuntu 10,04 LTS. Pada titik ini saya memiliki semua node klien saya mengirim log ke server pusat, tetapi klien mengirim pesan log yang berisi nama host pendek mereka, bukan FQDN mereka.

Per halaman rsyslogd Ubuntu:

Jika host jarak jauh terletak di domain yang sama dengan host, rsyslogd sedang berjalan, hanya nama host sederhana yang akan dicatat daripada seluruh fqdn.

Ini bermasalah bagi saya, karena saya menggunakan kembali nama pendek di antara lingkungan, misalnya core1.example.com dan core1.stg.example.com keduanya mencatat pesan mereka sebagai core1.

Baik klien dan server memiliki / etc / default / rsyslog yang sama:

RSYSLOGD_OPTIONS="-c4"

dan file /etc/rsyslogd.conf yang sama:

$ModLoad imuxsock
$ModLoad imklog
$PreserveFQDN on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$IncludeConfig /etc/rsyslog.d/*.conf

Klien memiliki file /etc/rsyslog.d/remote.conf ini, memberi tahu mereka untuk mengirim ke server jarak jauh:

*.* @@syslog.example.com

dan server menggunakan file /etc/rsyslog.d/server.conf ini:

$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

Karena klien dan server berbagi konfigurasi yang menentukan "$ PreserveFQDN aktif", saya berharap untuk melihat nama host FQDN dalam pesan syslog, tetapi pengaturan tampaknya tidak berpengaruh. Sebagian besar pengaturan lain yang saya temukan untuk rsyslog ditujukan untuk melepaskan domain dari FQDN alih-alih mempertahankannya. Saya pikir akar masalahnya adalah bahwa klien saya tidak mengirim FQDN sejak awal, tetapi saya tidak melihat bagaimana memaksakan perilaku itu.

Adakah yang bisa berkomentar tentang apa yang mungkin saya lewatkan? Saya membayangkan saya bukan satu-satunya orang yang membutuhkan FQDN untuk dimasukkan dalam pesan log.

cjjohnston
sumber
Saya kemudian telah membangun dan menginstal paket rsyslog 4.6.4-2ubuntu4 dari Ubuntu 11.04 di server saya dan subset dari node klien saya, tetapi belum melihat perubahan dalam perilaku ini sebagai hasilnya.
cwjohnston

Jawaban:

38

Saya mengalami masalah ini juga. Inilah cara saya memperbaikinya.

  1. Pada klien memodifikasi file / etc / hosts sehingga nama host yang diinginkan datang sebelum localhost.

    127.0.0.1 hostnameforlog localhost

  2. Pada klien dan server modifikasi /etc/rsyslog.conf untuk memasukkan pernyataan ini:

    $ PreserveFQDN aktif

  3. Di server saya menggunakan variabel% HOSTNAME% untuk templat di rsyslog.conf:

Matt McMillan
sumber
1
Ini harus ditandai sebagai jawabannya
ErJab
1
Silakan tandai di atas sebagai jawabannya.
Greg Annandale
1
Setelah 4 tahun, jawaban ini masih memiliki kaki. Terima kasih telah membantu Matt pada malam Natal devop.
Joe
7

Untuk mengubah pengiriman hostname rsyslog, tambahkan direktif berikut sebagai baris pertama di /etc/rsyslog.conf sebelum modul apa pun dimuat:

$LocalHostName yourhostname

Atau, untuk mengirim rsyslog dengan nama domain yang memenuhi syarat (FQDN, seperti system1.example.com) alih-alih hanya nama host (system1), gunakan arahan:

$PreserveFQDN on

Ini jarang dibutuhkan. Kami sarankan untuk menggunakan nama host (tanpa nama domain) kecuali Anda memiliki sistem yang bernama identik.

Cara alternatif untuk mengaturnya (yang memungkinkan Anda mengirim log yang berbeda sebagai nama host yang berbeda) adalah dengan menetapkan templat khusus:

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

Ini bisa jadi bug. Dukungan FQDN adalah atau dikenal miring , meskipun tidak ada bug FQDN terdaftar yang berlaku.

Sebagai solusinya, jika Anda tidak melakukan relai, gunakan %FROMHOST%alih-alih% HOSTNAME%.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Menggunakan %FROMHOST%memang memberi saya FQDN, tetapi tampaknya merupakan hasil dari pencarian terbalik pada alamat IP node klien. Karena sistem saya berjalan pada AWS EC2, sayangnya, ini akan selalu menghasilkan FQDN yang tidak memiliki arti langsung bagi saya.
cwjohnston
0

Saya hanya bisa berbicara dengan 7.6.x, tetapi $PreserveFQDNhanya itu yang diperlukan agar bisa berfungsi. Anda dapat menghindari keharusan untuk mengacaukan /etc/hostsjika FQDN node Anda sudah diatur dengan benar.

Contoh untuk sistem CentOS / RHEL:

$ -> vi /etc/sysconfig/network

# Change this
HOSTNAME=service-a-1

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

Pastikan untuk reboot.

Mike Purcell
sumber
0

Anda dapat menggunakan ini di konfigurasi rsyslog sisi klien.

$LocalHostName {{HOSTNAME}}

dan ganti {{HOSTNAME}}dengan nama host yang diinginkan atau Anda dapat menentukannya pada setiap klien menggunakan kumis secara otomatis.

Rahul Shaw
sumber