CentOS 6.x から正式採用された、従来の syslogd に変わる syslog サーバです。
設定内容は、基本的にsyslogd を周到しているらしいのですが、改良されてよりよくなっている点などを中心に記述します。
従来の設定方法では、/etc/rc.d/init.d/syslogd で
vi /etc/rsyslog.conf
下記の部分をコメントアウトする
# Provides UDP syslog reception
#$ModLoad imudp.so
#$UDPServerRun 514
↓
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
ファイルを保存後、サービスの再起動を行う。
※CentOS 6.3 (32bit)で確認したところ、上記のようにはなっておらず、下記のようになっていました。
$ModLoad imudp
$UDPServerRun 514
.soが無くなっているだけです。
/etc/rc.d/init.d/rsyslog restart
ちなみに、rsyslogdは、従来のUDPによるsyslog受信に加えて、後述するTCPによるsyslogの受信を行うこともできるようになっています。
TCPで受信することにより、受信ログの取りこぼしが出にくくなるのではないでしょうか?
ドメイン名を含めたFQDNで記録をしようとするが、ローカルネットワーク上の同一ドメインホストからのアクセスに対して、ホスト名しか記録されないらしい。
そこで、ローカルネットワーク上のホストからも、FQDN名称で記録できるようにするためのパラメータ。
/etc/rsyslog.conf
$PreserveFQDN on
を追加する
rsyslog で、新たにログを取得させるための設定方法
NetScreenの場合
touch /var/log/netscreen.log
local7.* /var/log/netscreen.log
実際のログが飛んでくるのを待つのではなく、任意の値のログを受信させることが出来るコマンドです。
logger
# logger -p daemon.crit syslog-ng install ok
(「-p」でファシリティとプライオリティを指定しています)
# tail /var/log/syslog
Oct 15 05:21:31 △△ ○○: syslog-ng install ok
←loggerコマンドで入力したメッセージがそのまま出力されています
iptables -A INPUT -s 192.168.100.1 -p udp -m udp --dport 514 -j ACCEPT
# /etc/init.d/iptables save
facilityのキーワード一覧
priorityのキーワード一覧
※下に行くほど重要度が高くなってくる
冗長構成のシステムを構築することが多くなってきています。
確かにシステム的には、冗長構成を構築していることにより、対障害時の耐久性は上がりますが、
Apacheなどで悪背うsログが複数に分散されるため、集計を行う場合などに非常に困難を要します。
手順としては、下記のような手順となります。
apache側で、ログの出力先をsyslogに変更します。
/etc/rsyslog.conf(送り側:apacheが稼働しているサーバ)でrsyslogサーバへの転送設定。
/etc/rsyslog.conf(受け側)で、受信したsyslogデータを、指定したディレクトrに出力させる設定を行う。
/etc/httpd/conf/httapd.conf
ErrorLog syslog:local1
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vcombined
CustomLog |/usr/local/bin/apache_syslog.pl vcombined
/usr/local/bin/apache_syslog.pl
#!/usr/bin/perl
use Sys::Syslog qw( :DEFAULT setlogsock );
setlogsock('unix');
openlog('apache', 'cons,pid', 'local0');
while ($log = <STDIN>) {
syslog('debug', $log);
}
closelog
/etc/httpd/conf/extra/httpd-ssl.conf
ErrorLog syslog:local3
TransferLog syslog:local2
※rsyslogで他のrsyslogに対してデータ転送を行う場合、
UDPによる転送
$ModLoad imudp
$UDPServerRun 514
local0.debug @172.16.1.16
TCPによる転送
$ModLoad imtcp
$InputTCPServerRun 514
local1.debug @@172.16.1.16
/etc/rsyslog.conf (送り側)
*.info;mail.none;authpriv.none;cron.none;local0.none;local1.none;local2.none;local3.none -/var/log/messages
local0.debug @@172.16.1.16
local1.debug @@172.16.1.16
local2.debug @@172.16.1.16
local3.debug @@172.16.1.16
$WorkDirectory /var/spool/rsyslog
$ActionQueueFileName uniqName
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
$MaxMessageSize 8k
/etc/rsyslog.conf
$ModLoad imtcp
$InputTCPServerRun 514
$RepeatedMsgReduction off
$template MsgFormat, "%msg:2:$%\n"
$template httpd_access, "/var/log/httpd/access_log"
$template httpd_error, "/var/log/httpd/error_log"
$template ssl_httpd_access, "/var/log/httpd/ssl_access_log"
$template ssl_httpd_error, "/var/log/httpd/ssl_error_log"
local0.debug -?httpd_access;MsgFormat
local1.debug -?httpd_error;MsgFormat
local2.debug -?ssl_httpd_access;MsgFormat
local3.debug -?ssl_httpd_error;MsgFormat
&~
※この &~ が無いと、次に続く、
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
によって、ログに記録されてしましますので、必ずつけるようにしましょう!!
これで、受け側サーバの/var/log/httpdにaccess_logが作成されます。
これをAWSTATSなどで、集計をかけるとOK!
リモートホストから受けたログを、それぞれ別々のログファイルとして記録したい場合、下記のような方法で、振り分けて記録することができます。
# do this in FRONT of the local/regular rules
:fromhost-ip, isequal, "192.168.0.10" /var/log/remote/host.log
& ~
:fromhost-ip, startswith, "192.168.2." /var/log/remote/network.log
& ~