Syslog-ng3.5 & mysql 日志服务器
最近公司要做一个日志集中收集的日志服务器,所以有了这篇攻略。
1、安装部署
CentOS本身的yum源没有syslog-ng,所以需要先安装EPEL源
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -ivh epel-release-latest-6.noarch.rpm --force
安装syslog-ng
yum install syslog-ng –y
启动syslog-ng服务
systemctl start syslog-ng
2、修改配置文件
yum安装的配置文件路径
vi /etc/syslog-ng/syslog-ng.conf
1. template是默认没有的,可以根据需要自己写
options里create_dirs()默认是no,修改成yes,就是是否能自动创建文件的意思
其他使用默认配置。
2. 配置source,也就是日志来源
默认的s_sys中是syslog-ng自带的,system()用来收集系统产生的日志,internal()用来收集syslog-ng自己内部产生的日志。
配置的s_udp用来收集514端口上收到的udp消息(也支持tcp)(有防火墙的小伙伴一定要把UDP或TCP对应的端口号打开)
3. 配置目的地
这里可以配置想要日志存放的地方,可以是文件,可以转发给其他的syslog,可以存数据库,也可以发给文件服务器…就说存数据库和文件吧。
file()里可以指定存放日志的位置和文件格式以及文件名。

program()配合pipe()可以直接把日志存到想存的数据库(需要提前准备好数据库和表)。
先创建好pipe文件 mkfifo /var/log/mysql.pipe。
program("/usr/bin/mysql -h127.0.0.1 -uxxxx -pxxxx database < /var/log/mysql.pipe")
database对应数据库名。
官方文档里也提供了sql()方法,但是试了下发现不能用,不知道是不是我的版本有问题。
syslog-ng提供了几个类似$HOST的变量,配置里可以使用,比如:
我想每天生成一个新的日志文件,并且通过HOST-LEVEL-20200110.log分成多个日志文件
5. 配置filter
过滤器支持正则,也支持 and ,not,or这种逻辑规则,默认的配置里已经演示过了
6. 配置log
这个就是把之前配置的destination啊,filter啊,source啊添加进来就好了,可以有多个。
然后重启syslog-ng
systemctl restart syslog-ng
3、测试一下
代码里就按照syslog日志的规则组装下UDP消息,发送到对应端口就好。
当然也可以集成到logback或log4j里,不过我写到aop里了,logger还是用来记录写异常信息好了,syslog用来记录比较关键的操作。
先康康文件里有没有
再来康康数据库里有没有
这里有3.5的官方文档,里面比较全