rsyslogdを取得して、短いホスト名ではなくサーバーのFQDNをログに記録するにはどうすればよいですか?


22

Ubuntu 10.04 LTSでストックrsyslogd(4.2.0-2ubuntu8.1)を使用して、シンプルな集中型syslogサーバーを実装しようとしています。この時点で、すべてのクライアントノードが中央サーバーにログを送信していますが、クライアントは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」を指定する構成を共有しているため、syslogメッセージにFQDNホスト名が表示されるはずですが、設定は効果がなかったようです。rsyslogで見つけた他のほとんどの設定は、ドメインを保持するのではなく、FQDNからドメインを削除することを目的としています。問題の根本は、クライアントが最初にFQDNを送信しないことですが、その動作を強制する方法がわかりません。

誰かが私が行方不明になっている可能性についてコメントできますか?ログメッセージにFQDNを含める必要があるのは私だけではないと思います。


その後、サーバーとクライアントノードのサブセットにUbuntu 11.04からrsyslog 4.6.4-2ubuntu4パッケージをビルドしてインストールしましたが、結果としてこの動作の変化は確認していません。
cwjohnston

回答:


38

私もこの問題に遭遇しました。修正方法は次のとおりです。

  1. クライアントで、/ etc / hostsファイルを変更して、目的のホスト名がlocalhostの前に来るようにします。

    127.0.0.1 hostnameforlogs localhost

  2. クライアントとサーバーで/etc/rsyslog.confを変更して、次のステートメントを含めます。

    $ PreserveFQDN on

  3. サーバーでは、rsyslog.confのテンプレートに%HOSTNAME%変数を使用しました。


1
これは答えとしてマークする必要があります
ErJab 14年

1
上記を回答としてマークしてください。
グレッグアナンデール

1
4年後、この答えにはまだ足があります。クリスマスイブのdevopsでマットを手伝ってくれてありがとう。
ジョー

7

rsyslogが送信するホスト名を変更するには、モジュールがロードされる前に、/ etc / rsyslog.confの最初の行として次のディレクティブを追加します。

$LocalHostName yourhostname

あるいは、単にホスト名(system1)ではなく、完全修飾ドメイン名(system1.example.comなどのFQDN)でrsyslogを送信するには、ディレクティブを使用します。

$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}}目的のホスト名に置き換えるか、口ひげを使用して各クライアントで自動的にテンプレート化することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.