nginx + syslog

环境:
WEB主机:FREEBSD8.2 + nginx 1.0.6 
日志服务器:FREEBSD8.2 + splunk

需求:
将nginx的access日志以及error日志全部尽数以syslog的方式发送到日志服务器备份以便备查,同时不能影响本地日志的生成,也就是本地也有日志,远程主机也有日志。

解决思路:
网络GOOGLE大神告诉我,nginx必须要打一个补丁才能让其完成这项神圣的工作。wiki.nginx.org上有第三方的module,patch地址如下:
https://github.com/yaoweibin/nginx_syslog_patch
下载1.0.6的patch备用。

解决方法:
我的nginx都是以ports方式进行安装的,所以相对比较麻烦,如果是自己下载的tarball编译安装的话就按照上边地址里所说的方法进行patch就可以了,我这里主要将ports的方式。

首先,停止现有nginx
/usr/local/etc/rc.d/nginx stop
记得备份你的nginx配置
cp -r /usr/local/etc/nginx /root/
然后去ports打补丁以及重新安装nginx
cd /usr/ports/www/nginx
make deinstall clean
因为需要打补丁,所以必须要注意不能按照常规方式安装ports,要分步骤进行。
因为所有配置不变,所以沿用原有的config,不进行config修改了。

make configure
目录下出现了work目录了,这里就是源代码的目录

首先需要修改nginx的一个源代码头文件

ee /usr/ports/www/nginx/work/nginx-1.0.6/src/core/ngx_config.h

在开头处加入以下内容

#define NGX_ENABLE_SYSLOG 1

保存退出,然后进行patch

cd /usr/ports/www/nginx/work/nginx-1.0.6

patch -p1 < /root/syslog_0.8.54.patch

我是将patch文件放在root目录下的,你可以根据自己的patch存放位置修改。

补丁完成后,开始安装ports

cd /usr/ports/www/nginx

make install clean

完成之后,nginx就已经支持同时本地日志以及syslog发送日志了

查看并修改自己的nginx.conf

在配置中加入一行

syslog local7 nginx; #我需要发送infomation以及debug等所有信息;
然后日志记录的配置按照以下方式进行配置,发送syslog并记录到本地,那么中间用符号“|”进行分割。

access_log syslog:info|/var/log/nginx/www.scetc.net.access.log;

修改完成后

/usr/local/sbin/nginx -t

测试没有问题的话,启动nginx

/usr/local/etc/rc.d/nginx start

OK,现在nginx已经可以开始发送日志了,但是,日志主机上还是收不到,为什么?因为nginx只是知道将日志以syslog方式发送出来,具体发送到哪儿,他不知道啊……修改syslog.conf……

ee /etc/syslog.conf

加入一行

local7.* @172.16.254.3


表示将local7的所有日志,都发送到172.16.254.3 的默认标准端口:UDP514。

这里有一点,需要注意,我的网络设备的日志都是发送到splunk的,也是用的UDP 514端口,但是如果这样的话,那么就和这个混合在一起了,不便于区分,于是我修改了发送端口

ee /etc/service

找到514/udp,我修改为了8514,然后重启syslogd

service syslogd restart

OK,到SPLUNK上进行添加相应的数据源,UDP的8514端口,一切完成。

你可能感兴趣的:(nginx + syslog)