rsyslogd服务的配置和使用

日志分析是一个成熟的应用中必不可少的,由于现阶段很多系统都是通过多机负载的方式提供服务,多机的设置带来的问题是日志文件也会存放在多台主机之上。如果简单的进行非实时的日志分析,这样的局面只要进行一次日志合并就好了,不会影响太大,但对于实时日志分析而言,这样做的麻烦多多。你当然可以采用nfs或者其他类似的文件共享实现,这样的问题又会出现在时间同步上,同样的,日志的频繁更新,以及TCP的通讯代价,造成当分析较多主机的时候同样也会有诸多问题。

syslogd服务在几乎所有的Linux发行版中都会存在(或者用一个兼容的服务取代),且大部分都是默认安装的。它的优势在于使用了相对通讯成本较低的udp服务传输日志主体,而且采用统一的日志时间戳记,更方便的是,它还会自动的将主机戳记纪录在日志内容头部。

还是老样子,以Ubuntu为例吧。

Ubuntu用的是rsyslogd服务,这是一个增强版本的syslogd,它支持数据使用插件、直接调用模板、异步写数据库等相对高级的功能。默认是被安装的,但只对本机开放。它udp方式的日志传输是基于灵活的插件实现的,很容易启用。

vi /etc/rsyslogd.conf

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

/etc/rsyslogd restart重启系统之后,它就会监听514端口的udp请求。当然,它也支持TCP方式的514监听,配置同样也是被注释了而已,大家自己研究吧。

增加一个日志纪录设备

默认的设备定义共有24个,建议使用local0(16)~local7(23)作为自定义的日志设备。默认情况下,ubuntu的日志设备定义保存在/etc/rsyslog.d下。我们新建一个local1设备,默认存储路径/var/log/test.log则方法如下:

vi /etc/rsyslog.d/90-local1.conf

local1.* /var/log/test.log
#local1.info /va/log/test.info.log

说到这里,syslog共有info到emerg总计7个“疼痛等级”,这里采用一个统配“*”代表所有报错等级,您自己可以分别处理了。

重启系统,开始测试。

import logging
from logging.handlers import SysLogHandler
import time

handler = SysLogHandler(address=("192.168.1.206", 514), facility='local1')

logging.getLogger().addHandler(handler)

for i in range(0,2000):
    time.sleep(0.1)
    msg = "abc %s" % i
    logging.error(msg)

在另一台主机上执行,日志服务器端将会获得日志。

java用户可以通过log4j的配置进行定向,系统日志可以通过http://wiki.loggly.com/nginxlogging介绍的方式实现日志文件监控+推送。

此外分享一个PHP的方法

function mgsyslog($level,$msg)
{
	$server="192.168.1.206";
	$port=518;
	$facility=17;
	$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的
今天有个同事在配置Apache
想必各位平时在用任何网络设备的
很多情况下,我们往往需要通过对

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据