SLES 9サーバー(ストックバージョン1.6.8のsyslog-ng)でsyslogdからsyslog-ngに移行しています。サーバーは、一部のリモートロガーのログホストです。
ログに出力されるホスト名に関して、syslogdの動作とのmaximum互換性を保証するようにsyslog-ngを構成するにはどうすればよいですか?ログを分析するためのカスタムスクリプトがいくつかあり、それらはおそらくホスト名に依存して同じままです。それらのいくつかはsyslogdによってFQDNとして報告されており、それらが今削除されると、名前の衝突が確実に発生します。
ちなみに、私はFQDNを削除するためにsyslogd-sまたは-lオプションを使用していません。
Syslog-ngオプションに関する現在の調査のスナップショット(更新:これは正しくありません。自己回答を参照してください):
options {
check_hostname(yes); # invalid chars?
keep_hostname(yes); # yes - if there is a hostname embedded in the message, it will
# be kept without overwrite/append
# see https://lists.balabit.hu/pipermail/syslog-ng/2002-August/003669.html
# note: RFC3164 allows either short hostname or IP, no FQDN
use_dns(yes); # if there is no hostname embedded in the message, try DNS
use_fqdn(no); # do not try to expand everything to FQDN? strip all FQDNs? strip only DNS-resolved FQDNs?
# old syslogd behaviour (?): use embedded hostname, print fqdn (strip only local
# domain + strip "-s" domains + strip domains for "-l" hosts)
chain_hostnames(no); # if keep_hostname(no) or hostname not embedded, attach (rather than assign)
# hostname/IP of *sender*; same as long_hostnames(off)
sync(0); # sync immediately
};
Syslog-ngのマニュアルがやや不十分であることがわかりました。
自己回答。 syslogdの動作を模倣することは不可能のようです。多くの実験の後、syslog-ngオプションに関する調査/推測の更新されたスナップショットを提供します。
options {
#####################################################################
### the flow of decisions for hostnames, syslog-ng 1.6.8:
use_dns(yes); # yes = first resolve the IP in $Host_FROM (the message sender)
keep_hostname(no); # no = ignore $Host embedded in the message (rare); overwrite $Host with $Host_FROM
# note: RFC3164 allows embedding short hostname or IP, not FQDN
use_fqdn(yes); # yes = expand everything to FQDN, including local name
# Note syslogd behaviour is incompatible: use FQDN, but strip local
# domain + strip "-s" domains + strip domains for "-l" hosts
chain_hostnames(no); # no = keep $FULLHOST same as $Host;
# do not expand $FULLHOST into either "src@$Host" for localhost,
# or to "$Host/$Host_FROM" for remote client
#long_hostnames(no); # synonym of chain_hostnames
### with default template, the resulting $FULLHOST is written to log
#####################################################################
check_hostname(yes); # invalid chars?
sync(0); # sync immediately
};
リモートシステムからのメッセージにはおそらくホスト名が埋め込まれていないことがわかりました。これにより、keep_hostnameが役に立たなくなります。
名前解決のパフォーマンスへの影響を減らすために、次のトリックを試すこともできます: http://www.balabit.com/dl/html/syslog-ng-v3.0-guide-admin-en.html/ ch07s04.html
「syslog-ngのマニュアルがやや不十分であることがわかりました。」 > syslog-ngのマニュアルとドキュメントに関するコメントとフィードバックは、documentation @ balabit.comまたはsyslog-ngメーリングリスト( https://lists.balabit.hu/mailman/listinfo/syslog-)で大歓迎です。 ng )。
Use_dns(yes)オプションが問題ないかどうかをお知らせください。次のリリースでは、ドキュメントのこの部分をより明確にするよう努めます。
use_dns(yes);
を除いて、あなたが持っているオプションはおそらくあなたが望むものです。これを有効にすると、syslog-ngはログの取得元のIPアドレスでDNSルックアップを実行します。これはbigパフォーマンスヒットです(DNSルックアップが返されるまでログを書き込めないためsyslog-ngがブロックする必要があるため、ログが入るとDNSルックアップが発生します)。ログにはエントリが含まれていません。syslog-ngはDNSホスト名を入力しようとしますが、従来のsyslogはログソースのIPアドレスを入力します。
正直なところ、絶対に必要な行はkeep_hostname(yes);
と(無効な文字を防ぐためだけに)check_hostname(yes);
だけです。残りは何も害はありませんが、厳密には必須ではありません(ただし、上記のように、不要なuse_dns(yes);
は例外です)。