syslog-ngでmysqlデータベースにログを書き込む

980 ワード

ここ数日syslog-ngで複数のリモートホストプログラムのログを受け取り、一定のフォーマットでデータベースに書き込む必要があります.リモートホストからのデータが
‘data1’,‘data2’,‘data3’
data 1,data 2,data 3をそれぞれデータベースlogのtableテーブルのa,b,cフィールドに格納する必要がある.次の3つのステップを通過するだけです
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);
") 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を再起動すればデータを書くことができます.最終的には、データをテキストに書き込み、プログラムでテキストを読み出してデータベースに書き込むしかありません.