मैं एक होस्ट के FQDN के बजाय लघु होस्टनाम को लॉग करने के लिए rsyslogd कैसे प्राप्त करूं?


22

मैं Ubuntu 10.04 LTS पर स्टॉक rsyslogd (4.2.0-2ubuntu8.1) का उपयोग करके एक साधारण केंद्रीकृत syslog सर्वर को लागू करने का प्रयास कर रहा हूं। इस बिंदु पर मेरे पास मेरे सभी क्लाइंट नोड्स हैं जो केंद्रीय सर्वर पर लॉग भेजते हैं, लेकिन क्लाइंट लॉग संदेश भेज रहे हैं जिसमें उनके FQDN के बजाय उनके लघु होस्टनाम शामिल हैं।

उबंटू rsyslogd मैनपेज के अनुसार:

यदि दूरस्थ होस्ट होस्ट के समान डोमेन में स्थित है, तो rsyslogd चल रहा है, पूरे fqdn के बजाय केवल साधारण होस्टनाम लॉग किया जाएगा।

मेरे लिए यह समस्याग्रस्त है, क्योंकि मैं वातावरण के बीच छोटे नामों का पुन: उपयोग कर रहा हूं, जैसे core1.example.com और core1.stg.example.com दोनों ही अपने संदेशों को core1 के रूप में लॉग करते हैं।

क्लाइंट और सर्वर दोनों के पास समान / आदि / डिफ़ॉल्ट / 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 पर" निर्दिष्ट करता है, मुझे FQDN होस्टनाम को syslog संदेशों में देखने की उम्मीद है, लेकिन सेटिंग का कोई प्रभाव नहीं पड़ा है। अधिकांश अन्य सेटिंग्स जो मैंने rsyslog के लिए पाई हैं, उनका लक्ष्य FQDNs से डोमेन को अलग करने के बजाय उन्हें बनाए रखना है। मुझे लगता है कि समस्या की जड़ यह है कि मेरे ग्राहक पहली जगह में एफक्यूडीएन नहीं भेजते हैं, लेकिन मैं यह नहीं देखता कि उस व्यवहार को कैसे लागू किया जाए।

क्या कोई इस बात पर टिप्पणी कर सकता है कि मुझे क्या याद आ रहा है? मुझे लगता है कि मैं केवल एकमात्र व्यक्ति नहीं हूं जिसे लॉग संदेश में FQDNs को शामिल करने की आवश्यकता है।


मैंने बाद में अपने सर्वर पर Ubuntu 11.04 से rsyslog 4.6.4-2ubuntu4 पैकेज और मेरे क्लाइंट नोड्स का सबसेट बनाया और स्थापित किया है, लेकिन परिणामस्वरूप इस व्यवहार में बदलाव नहीं देखा गया है।
cwjohnston

जवाबों:


38

मैं इस मुद्दे में भी भाग गया। यहाँ है कि मैं इसे कैसे ठीक करने में सक्षम था।

  1. क्लाइंट पर / etc / होस्ट्स फ़ाइल को संशोधित करते हैं ताकि वांछित होस्टनाम लोकलहोस्ट से पहले आ जाए।

    127.0.0.1 hostnameforlogs लोकलहोस्ट

  2. क्लाइंट और सर्वर इस कथन को शामिल करने के लिए /etc/rsyslog.conf को संशोधित करें:

    $ PreserveFQDN पर

  3. सर्वर पर मैंने rsyslog.conf में टेम्पलेट्स के लिए% HOSTNAME% चर का उपयोग किया:


1
इसे उत्तर के रूप में चिह्नित किया जाना चाहिए
एरजब

1
कृपया उत्तर के रूप में उपरोक्त को चिह्नित करें।
ग्रेग अन्नडेल

1
4 साल बाद इस जवाब में अभी भी पैर हैं। एक क्रिसमस पर क्रिसमस की पूर्व संध्या पर मैट की मदद करने के लिए धन्यवाद।
जो

7

होस्टनाम rsyslog भेजने को बदलने के लिए, निम्नलिखित निर्देशों को किसी भी मॉड्यूल के लोड होने से पहले /etc/rsyslog.conf में पहली पंक्ति के रूप में जोड़ें:

$LocalHostName yourhostname

वैकल्पिक रूप से, rsyslog को पूरी तरह से योग्य डोमेन नाम (FQDN, जैसे system1.example.com) के साथ भेजने के बजाय केवल hostname (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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.