วันอาทิตย์ที่ 13 เมษายน พ.ศ. 2557

Config Syslog-ng Sent Logs to Database Mysql Base on ubuntu การคอนฟิก Syslog-ng ลง database mysql บนระบบปฎิบัติการ Ubuntu

เนื่องจากมีปัญหามากมายในการ คอนฟิก เพื่อเก็บ Logs ลงบน Database โดยใช้เจ้าตัว Syslog-ng  ซึ่งส่วนตัวผมนั้น อ่านทั้งเว็ปที่เป็นภาษาไทย และเว็ปที่เป็นภาษาประกิด แล้วเกิดความฉงน งงงวยมากให้การ Config ให้อีเจ้า Log เนียะ มันลง Database ให้ได้ วันนี้ผมก็จะมาเขียน แบบ Step by Step เลยนะครับ บอกเลยว่าได้แน่นอน 100%

1.ทำการลง mysql database ก่อนนะครับ ตามลิ้งนี้ 

2.ทำการลง Syslog-ng ด้วยคำสั่ง sudo apt-get install syslog-ng 
รอจนมันลงเสร็จนะครับ

3.ทำการ restart syslog-ng ด้วยคำสั่ง  /etc/init.d/syslog-ng restart








4.start mysql service ด้วยคำสั่ง chkconfig --level 2345 mysqld on; service mysqld start


5.ทำการ test service ของ mysql ด้วยคำสั่ง mysql -u username -p แล้ว Enter แล้ว ใส่ password












แล้วพิมพ์ คำสั่ง exit เพื่อออกจาก mysql

6.สร้างฐานข้อมูลที่เราจะรับค่าเข้ามา
โดยจะมีข้อมูลประมาณนี้นะครับ 
  1. CREATE TABLE `logs` (
  2. `host` varchar(32) DEFAULT NULL,
  3. `facility` varchar(10) DEFAULT NULL,
  4. `priority` varchar(10) DEFAULT NULL,
  5. `level` varchar(10) DEFAULT NULL,
  6. `tag` varchar(10) DEFAULT NULL,
  7. `datetime` datetime DEFAULT NULL,
  8. `program` varchar(15) DEFAULT NULL,
  9. `msg` text,
  10. `seq` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  11. PRIMARY KEY (`seq`),
  12. KEY `host` (`host`),
  13. KEY `program` (`program`),
  14. KEY `datetime` (`datetime`),
  15. KEY `priority` (`priority`),
  16. KEY `facility` (`facility`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


7.สร้าง pipe 


โดยเราจะเช็ค pipe ว่ามีแล้วหรือยังด้วยคำสั่ง ls -alh /tmp/mysql.syslog-ng.pipe
หากยังไม่มี ให้สร้าง pipe ขึ้นมาด้วยคำสั่ง mkfifo /tmp/mysql.syslog-ng.pipe

8.ทำการ config file syslog-ng.conf โดยเข้าไปที่ /etc/syslog-ng 






เมื่อเข้าไปแล้ว ใช้คำสั่ง vi
ทำการเพิ่มโคตเข้าไปยังส่วนท้ายของ file ดังนี้ โดยการเขียนไฟล์ด้วย vi จะต้องกด s เพื่อทำการเขียนหรือแก้ใขไฟล์ 
ทำการเพิ่ม เข้าไปยังส่วนท้ายของ file 
source src {
    unix-dgram("/var/run/log");
    unix-dgram("/var/run/lobpriv" perm (0600));
    udp(
        ip(0.0.0.0) port(514)
    );
    tcp(
        ip(0.0.0.0) port(514)
    );
    internal();
    #file("/dev/klog");     
};

source net {
    udp();
};



destination d_mysql {
       pipe("/tmp/mysql.syslog-ng.pipe"
                     template("INSERT INTO logs
                    (host, facility, priority, level, tag, datetime,program, msg)
                     VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL','$TAG',
                     '$YEAR-$MONTH-$DAY  $HOUR:$MIN:$SEC','$PROGRAM', '$MSG' );\n") template-escape(yes));
};



log { source(s_src); destination(d_mysql); };
#log { source(src); destination(d_mysql); };
log { source(net); destination(d_mysql); };


เช็คว่า filter f_dbg {level(debug);}; ถูก คอมเม้นไว้หรือไม่ หากถูกคอมเม้นด้วยเครื่องหมาย # ข้างหน้าอยู่ให้ปลดออก 

9. สร้าง  bash script สำหรับ pipe ของ  syslog-ng กับ mysql


10.ทำการเพิ่มคำสั่งลงไปใน file syslogng-mysql-pipe.sh

#!/bin/sh
#
# File: syslogng-mysql-pipe.sh
#
# Take input from a FIFO and run execute it as a query for
# a mysql database.
#
# IMPORTANT NOTE:  This could potentially be a huge security hole.
# You should change permissions on the FIFO accordingly.
#
# this script is taken from http://arttechnologyevolution.blogspot.com/2014/04/config-syslog-ng-sent-logs-to-database.html
#

if [ -e /tmp/mysql.syslog-ng.pipe ]; then
        while [ -e /tmp/mysql.syslog-ng.pipe ]
                do
                        mysql -uYourUsername --password=YourPassword YourDatabase < /tmp/mysql.syslog-ng.pipe
        done
else
        mkfifo /tmp/mysql.syslog-ng.pipe
fi

ในส่วนของ YourUsername ให้ใส่ Username ของในการเข้า Database เรา 
YourPassword คือพาสเวิดที่เข้า Database
YourDatabase คือ Database ที่เราสร้างขึ้น 

11.ทำการรันสคริป ด้วยคำสั่ง 
/etc/syslog-ng/syslogng-mysql-pipe.sh &

12.แล้วทำการ Restart Syslog-ng ด้วยคำสั่ง 
/etc/init.d/syslog-ng restart

13.ทำการเช็คข้อมูล Log ใน Database ว่ามารึยัง


หรือจะเข้าไปดูผ่าน PHPMyadmin ก็ได้นะครับ
 การ Config Syslog-ng ลง Database ก็มีแต่เพียงเท่านี้ หากทำตามกระผมแล้วมีปัญหาก็คอมเม้น ได้นะครับ เพราะผมเข้ามาดูบ่อยอยู่ครับ 
บทความต่อไปจะเป็นการ ทำ central logs database นะครับ (ขอเวลาศึกษาแปบ)