一,简介
rsyslogd是一个加强版的syslogd,具有各种各样的新功能,典型的有:
1,直接将日志写入到数据库。
2,日志队列(内存队列和磁盘队列)。
3,灵活的模板机制,可以得到多种输出格式。
4,插件式结构,多种多样的输入、输出模块。
二,下载、安装
下载地址: http://www.rsyslog.com/Downloads-index-req-viewdownload-cid-1-orderby-dateD.phtml
安装: 经典的tar zxvf,configure,make,make install过程。
三,配置示例:
以下rsyslog.conf只有5行,但实现了udp日志接收、将日志写入到文件、将日志写入到数据库的功能。
$ModLoad imudp.so
# provides UDP syslog reception
$UDPServerRun 518
# start a UDP syslog server at standard port 514
*.* /tmp/rsys.log
$ModLoad ommysql
*.* :ommysql:192.168.120.67,log,mg,123qwe
详细配置示例,参见: http://www.rsyslog.com/doc-sample.conf.html
四,syslog客户端 rsyslogd可以兼容系统原有的syslog配置文件,可以近乎完美的替换掉原有的syslogd。
但我希望rsyslogd是一个独立的系统,所以我将其配置为侦听518 UDP端口的独立服务器。 然后我使用PHP语言编写了一个简单的syslog客户端,通过UDP协议,直接将日志消息发送给 rsyslogd日志服务,达到最大的灵活性。
以下是syslog客户端代码:
function mgsyslog($level,$msg)
{
$server="192.168.120.67";
$port=518;
$facility=1;
$pid=posix_getpid();
$process="PHP[${pid}]";
$actualtime = time();
$month = date("M", $actualtime);
$day = substr(" ".date("j", $actualtime), -2);
$hhmmss = date("H:i:s", $actualtime);
$timestamp = $month." ".$day." ".$hhmmss;
$hostname=gethostname();
$pri = "<".($facility*8 + $level).">";
$header = $timestamp." ".$hostname;
$message = substr($pri.$header." ".$process.": ".$msg, 0, 1024);
$fp = fsockopen("udp://".$server, $port, $errno, $errstr);
if ($fp)
{
fwrite($fp, $message);
fclose($fp);
return true;
}
return false;
}
具体的syslog协议可以参见RFC3164。
五,总结 PHP的所有日志都可以使用上面定制的syslog客户端发送到集中的日志服务器。 然后可以集中查看、处理。
另外,一个方便的WEB日志查看器可以在下面的地址获得: http://loganalyzer.adiscon.com/ 安装简单方便,用起来也不错。