ฉันจะรับ rsyslogd เพื่อบันทึก FQDN ของเซิร์ฟเวอร์แทนที่จะเป็นชื่อโฮสต์แบบสั้นได้อย่างไร


22

ฉันพยายามที่จะใช้เซิร์ฟเวอร์ syslog แบบรวมศูนย์แบบง่ายโดยใช้สต็อก rsyslogd (4.2.0-2ubuntu8.1) บน Ubuntu 10.04 LTS ณ จุดนี้ฉันมีโหนดลูกค้าของฉันทั้งหมดส่งบันทึกไปยังเซิร์ฟเวอร์กลาง แต่ลูกค้ากำลังส่งข้อความบันทึกที่มีชื่อโฮสต์สั้น ๆ ของพวกเขาแทน FQDN ของพวกเขา

สำหรับ manpage rsyslogd ของ Ubuntu:

หากรีโมตโฮสต์อยู่ในโดเมนเดียวกับโฮสต์ 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 hostnameforlogs localhost

  2. บนไคลเอนต์และเซิร์ฟเวอร์แก้ไข /etc/rsyslog.conf เพื่อรวมคำสั่งนี้:

    $ PreserveFQDN บน

  3. บนเซิร์ฟเวอร์ฉันใช้ตัวแปร% HOSTNAME% สำหรับเทมเพลตใน rsyslog.conf:


1
ควรทำเครื่องหมายเป็นคำตอบ
ErJab

1
โปรดทำเครื่องหมายข้างบนเป็นคำตอบ
Greg Annandale

1
หลังจาก 4 ปีคำตอบนี้ยังมีขา ขอบคุณที่ช่วย Matt ในวันคริสต์มาสอีฟ
Joe

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}}ด้วยชื่อโฮสต์ที่ต้องการหรือคุณสามารถ detemplatize ในแต่ละไคลเอ็นต์โดยใช้หนวดโดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.