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を含める必要があるのは私だけではないと思います。
私もこの問題に遭遇しました。ここで私はそれを修正することができた方法です。
クライアントで/ etc/hostsファイルを変更して、目的のホスト名がlocalhostの前に来るようにします。
127.0.0.1 hostnameforlogs localhost
クライアントとサーバーで、/ etc/rsyslog.confを変更して、次のステートメントを含めます。
$ PreserveFQDN on
サーバーでは、rsyslog.confのテンプレートに%HOSTNAME%変数を使用しました。
Rsyslogが送信するホスト名を変更するには、モジュールがロードされる前に、/ etc/rsyslog.confの最初の行として次のディレクティブを追加します。
$LocalHostName yourhostname
または、単にホスト名(system1)の代わりに完全修飾ドメイン名(system1.example.comなどのFQDN)でrsyslogを送信させるには、次のディレクティブを使用します。
$PreserveFQDN on
これが必要になることはほとんどありません。同じ名前のシステムがない限り、ホスト名(ドメイン名なし)を使用することをお勧めします。
これを設定する別の方法(異なるホスト名として異なるログを送信できるようにする)は、カスタムテンプレートを設定することです。
$template MyTemplate, "<%pri%> %timestamp% MySpoofedHostName %syslogtag% %msg%\n"
$ActionForwardDefaultTemplate MyTemplate
バグかもしれません。 FQDNのサポートは不安定であることが判明しています 、ただし 登録されているFQDNのバグ は適用されないようです。
回避策として、リレーを行わない場合は、%HOSTNAME%の代わりに%FROMHOST%
を使用してください。
私は7.6.xとしか話せませんが、$PreserveFQDN
はそれが機能するために必要なすべてでした。ノードのFQDNが正しく設定されていれば、/etc/hosts
をいじる必要を回避できます。
CentOS/RHELシステムの例:
$ -> vi /etc/sysconfig/network
# Change this
HOSTNAME=service-a-1
# To this
HOSTNAME=service-a-1.sn1.vpc3.example.com
必ず再起動してください。
これはクライアント側のrsyslog設定で使用できます。
$LocalHostName {{HOSTNAME}}
{{HOSTNAME}}
を目的のホスト名に置き換えます。または、各クライアントで mustache を使用してホスト名を自動的に非テンプレート化できます。