用syslogng将日志写入mysql数据库

这几天需要通过syslog-ng接受多台远程主机程序的日志,并按一定格式写入数据库。假如远程主机过来的数据是

‘data1’,‘data2’,‘data3’

需要把data1,data2,data3分别存储到数据库log下的table表的a,b,c字段中。只需要通过以下三步

1、修改/etc/syslog-ng/syslog-ng.conf,添加

source s_remote {
        #按需要填写
};

destination d_mysql{
        program("/usr/bin/mysql -uroot -p log < /var/log/mysql.pipe");
        pipe("/var/log/mysql.pipe"
                template("INSERT INTO table(a, b, c)  VALUES($MSGONLY);\n") template-escape(no));
};


log {
        source(s_remote);
      # filter();
        destination(d_mysql);
};

2、建立mysql.pipe文件按

#mkfifo /var/log/mysql.pipe

3、重新启动syslog-ng

service syslog-ng restart

PS:由于远程服务器过来的log数据太多,过一段时间就会发现很多记录收到了但没有进入mysql数据库,重启syslog-ng就又可以写数据。最终只能通过把数据写入文本,再用程序读取文本把数据写入数据库。

原文地址:https://www.cnblogs.com/bo083/p/2235114.html