Professional Documents
Culture Documents
Centralized Log Server Using Syslog-NG & Php-Syslog-NG
Centralized Log Server Using Syslog-NG & Php-Syslog-NG
า
ระย
กรณี ดงั ต่อไปนี้ได้สมมุติวา่ ได้ติดตั้ง Apache Web Server และ Mysql Database ไปเรี ยบร้อยแล้ว
มิ น ที
า้ พ
1.ทาการติดตั้ง Syslog-ng ด้วยสาสั่งดังต่อไปนี้
ไอ
้าเจ
กร
จะปรากฏข้อความคล้ายๆดังต่อไปนี้
กร
3ร
า
ระย
มิ น ที
า้ พ
ไอ
และตามด้วย
กร
3ร
ผลที่ได้จะปรากฏคล้ายๆ ดังต่อไปนี้
Nov 15 01:13:42 mail syslog-ng[9278]: Termination requested via signal, terminating;
บา้
source s_all {
# message generated by Syslog-NG
internal();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)
unix-stream("/dev/log");
# messages from the kernel
file("/proc/kmsg" log_prefix("kernel: "));
# use the following line if you want to receive remote UDP logging messages
# (this is equivalent to the "-r" syslogd flag)
า
ระย
# udp();
มิ น ที
};
า้ พ
ไอ
# ที่ทาการเพิ่มขึ้นมา
้าเจ
กร
source tcp_message_open {
รม
กร
tcp(ip("0.0.0.0") port(514));
3ร
};
นั ้ 1
# ที่ทาการเพิ่มขึ้นมา
งู ช
source udp_message_open{
นส
udp(ip("0.0.0.0") port(514));
บา้
};
อธิบาย เป็ นการสร้าง source สาหรับใช้ในการรับข้อมูล ที่ชื่อ “ cp_me ge_open”, ”udp_me ge_open” โดย
ชื่อเหล่านี้สามารถแก้ไขได้ตามความเหมาะสม โดยที่ได้ทาการเปิ ด พอร์ ตทั้ง TCP/UDP เนื่องจาก ต้องการให้
สามารถรองรับการทางานกับ syslogd(ซึ่งจะใช้งาน UDP 514) ซึ่ งเป็ นเครื่ องมือแบบเก่าที่ถูก build in ลงใน
Linux/Unix ทุก distribute สาหรับ syslog-ng สามารถรองรับการทางานได้ท้ งั TCP/UDP
หลังจากที่ได้มีการเพิ่มเข้าไปแล้วให้ทาการ restart syslog-ng
sudo /etc/init.d/syslog-ng restart
อีกครั้งแล้วทาการตรวจสอบการทางานของพอร์ ตที่เปิ ดขึ้น
comsec@mail:~$ netstat -an |grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN //พอร์ตที่เปิ ดขึ้นมา
udp 0 0 0.0.0.0:514 0.0.0.0:* //พอร์ตที่เปิ ดขึ้นมา
udp 0 0 192.168.200.2:45918 192.168.200.1:514 ESTABLISHED //มีการเชื่อมต่อ
ในการทดสอบจะทาการทดสอบ จากระบบ Window โดย window จะทาการส่ ง log มายัง ubuntu server
โดย Window (192.168.200.1), Ubuntu Centralize log Server (192.168.200.2)
โดย ระบบปฏิบตั ิการ วินโดว์ จะต้องทาการติดตั้งโปรแกรมที่ชื่อ NTSyslog โดยมีวธิ ี การติดตั้งดังต่อไปนี้
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้
บา้
นส กร
งู ช รม
นั ้ 1 กร
3ร ไอ
มิ น ที
้าเจ
า้ พ
ระย
า
บา้
นส กร
งู ช รม
นั ้ 1 กร
3ร ไอ
มิ น ที
้าเจ
า้ พ
ระย
า
ถ้า Service อยูใ่ นสถานะหยุดการทางาน (STOP) ให้ทาการเริ่ มการทางาน (START)
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
ทาการกาหนดเครื่ องที่รับล็อกจากเครื่ องวินโดว์ ก็คือ Centralized log server นั้นเองในที่น้ ีคือ 192.168.200.2
งู ช
นส
บา้
เป็ นหน้าที่ใช้ในการกาหนด Facility ในการส่ งล็อก
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้
การติดตั้ง Snare (ปรับปรุ ง เมื่อ 5 สิ งหาคม 2553)
ในการส่ ง log file ไปยังเครื่ อง syslog-ng นั้น เราสามารถใช้งานได้อีกโปรแกรม คือ Snare โดยมาขั้นตอน
การติดตั้งและปรับแต่ง (ในการติดตั้งและปรับแต่งนี้ ได้ทาโดยใช้ Windows 7 เป็ นตัวลูกข่ายที่จะส่ ง logไปให้
เครื่ องแม่ข่าย) ดังนี้
เข้าไปที่ เวบ n e http://www.intersectalliance.com/ ซึ่งจะมีให้เลือก โดยไปที่ download ไฟล์ โดยมี
ให้เลือก สาหรับตระกูลของระบบปฏิบตั ิการ ซึ่งสามารสนับสนุนได้หลากหลายระบบปฏิบตั ิการ ในที่น้ ี
ทางผูท้ าการทดสอบได้ทาการติดตั้งคือ SnareSetupVista-1.1.5-MultiArch
วิธีการติดตั้งมีดงั นี้
1. ให้ทาการเรี ยกตัว โปรแกรมขึ้นมาเพื่อทาการติดตั้ง โดยจะแสดงหน้าจอดังนี้
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
า
ระย
มิ น ที
4. เลือก Next เพื่อดาเนิ นการติดตั้งต่อไป
า้ พ
ไอ
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
ติดตั้งต่อไป
นั ้ 1
งู ช
นส
บา้
7. กด Install เพื่อดาเนินการติดตั้ง
า
8. กด Next เพื่อ
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้
วิธีการปรับแต่ งเพือ่ ให้ snare ส่ งข้ อมูลไป ยัง syslog-ng (กรณีของ windows )
1. Start All Programs InterSect Alliance Snare For Windows หรื อ เปิ ด web brownser
ขึ้นมา แล้วใส่ ข้อความ ดังนี้ URL : localhost:6161
2. เลือกที่ Network Configuration
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
destination d_192.168.200.1{
file("/var/log/server/event_192.168.200.1.log");
};
filter f_192.168.200.1{
host("192.168.200.1");
};
log {
source(udp_message_open);
filter(f_192.168.200.1);
destination(d_192.168.200.1);
};
อธิบาย
า
ระย
ในการประกาศที่ destination <Variable name> จะเป็ นการประกาศว่าตัวแปรที่ชื่อ “d_192.168.200.1”
มิ น ที
า้ พ
ต้องการให้ไปเก็บหรื อส่ งล็อคไปที่ใด ในที่น้ ีกาหนดเป็ น ไฟล์ในตาแหน่ง
ไอ
้าเจ
กร
า
ระย
Jun 4 22:27:12 192.168.200.1 NT: <MySQL;I100;> C:\MySQL\MySQL Server 5.1\bin\mysqld-nt: ready
มิ น ที
า้ พ
ไอ
for connections. Version: '5.1.19-beta-community-nt-debug' socket: '' port: 3306 MySQL Community
้าเจ
กร
Server (GPL) For more information, see Help and Support Center at http://www.mysql.com.
รม
Normal shutdown For more information, see Help and Support Center at http://www.mysql.com.
นั ้ 1
Shutdown complete For more information, see Help and Support Center at http://www.mysql.com.
นส
ทาการแตกไฟล์ดว้ ยคาสัง่
comsec@mail:~$ file php-syslog-ng-2.9.8.tgz
นั ้ 1
php-syslog-ng-2.9.8.tgz: gzip compressed data, from Unix, last modified: Sun May 11 02:43:05 2008
งู ช
php-syslog-ng/html/
….
…
php-syslog-ng/html/install/php-syslog-ng/upgrades/2.9.6_to_2.9.7.patch
php-syslog-ng/upgrades/2.9.7_to_2.9.8.patch
ไฟล์ config ที่จาเป็ นต่อการปรับแต่ง syslog-ng ก็จะมีอยูแ่ ล้วในไดเร็ คทรอรี่ น้ ี โดยโครงสร้างของไฟล์ php-
syslog-ng จะประกอบด้วยดังต่อไปนี้
Php-syslog-ng
|--upgrades ใช้ในการ upgrade จาก version ที่ตากว่า
|--html ใช้เป็ น code ในการแสดงที่หน้าบราวเซอร์ รวมทั้ง โครงสร้างฐานข้อมูลที่ใช้ในการเก็บ
logs
|--scripts ใช้เป็ นที่เก็บ script ต่างรวมทั้งไฟล์ config syslog-ng ด้วย
comsec@mail:~$ cd php-syslog-ng/html/install/sql/
comsec@mail:~/php-syslog-ng/html/install/sql$ ls
cemdb.sql.gz
dbsetup.sql เป็ นโครงสร้าง Database ที่ใช้ในการเก็บข้อมูล
า
ระย
drop_table.sql
มิ น ที
า้ พ
sample_data.sql เป็ นตัวอย่างข้อมูลที่จะเก็บลงใน Database
ไอ
้าเจ
กร
รม
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
+--------------------+
| Database |
า
ระย
+--------------------+
มิ น ที
า้ พ
ไอ
| information_schema |
้าเจ
กร
| cacti |
รม
| mysql |
กร
3ร
| syslogdb |
นั ้ 1
+--------------------+
4 rows in set (0.11 sec)
งู ช
นส
Database changed
mysql> show tables;
+--------------------+
| Tables_in_syslogdb |
+--------------------+
| actions |
| cemdb |
| logs |
| search_cache |
| user_access |
| users |
+--------------------+
6 rows in set (0.00 sec)
mysql> select count(*) from logs;
+----------+
| count(*) |
+----------+
| 3|
+----------+
า
ระย
1 row in set (0.00 sec)
มิ น ที
า้ พ
ทาการกาหนด ผูม้ ีสิทธิ์ เข้าใช้งาน Database ที่ชื่อ syslogdb
ไอ
้าเจ
กร
User:: syslogadmin
รม
Pass:: syslogadminpassword
กร
3ร
นั ้ 1
ขั้นตอนถัดมาก็คือ ทาการปรับแต่ง syslog-ng ให้เขียน log ลงสู่ Database ซึ่งจะมี script config ของ syslog-ng
รองรับไว้อยูแ่ ล้วเราสามารนาใช้งานได้ทนั ที่ แต่เนื่องจากเราได้ทาการ config ไปบางส่ วนแล้ว เราจะเอาเฉพาะ
บางส่ วนที่จะถูกนามาใช้งานในที่น้ ีเท่านั้น
comsec@mail:~$ cd php-syslog-ng/scripts/
comsec@mail:~/php-syslog-ng/scripts$ nano syslog-ng.conf
ทาการ copy เฉพาะส่ วนดังนี้
source s_everything { internal(); pipe("/proc/kmsg"); unix-stream("/dev/log"); udp(); };
destination d_mysql {
program("/usr/bin/mysql -usyslogadmin -psyslogadmin syslog"
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_everything);
มิ น ที
า้ พ
destination(d_mysql);
ไอ
้าเจ
กร
};
รม
กร
3ร
source udp_message_open{
งู ช
udp(ip("0.0.0.0") port(514));
นส
};
บา้
destination d_mysql {
program("/usr/bin/mysql -usyslogadmin -psyslogadminpassword syslogdb"
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_everything);
destination(d_mysql);
};
######
# destinations
า
ระย
passwordsyslogadminpassword
มิ น ที
า้ พ
database name syslogdb
ไอ
้าเจ
กร
รม
ครั้ง
3ร
นั ้ 1
...done.
บา้
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
า
ระย
Reading table information for completion of table and column names
มิ น ที
า้ พ
You can turn off this feature to get a quicker startup with -A
ไอ
้าเจ
กร
รม
Database changed
กร
3ร
+----------+
| count(*) |
งู ช
นส
+----------+
| 18 |
บา้
+----------+
1 row in set (0.00 sec)
mysql>
ณ ตอนนี้ เราก็สามารถนา log มาเก็บลงสู่ Databases ได้แล้ว ขั้นตอนต่อไปจะเป็ นการ config เพื่อ สร้างหน้า web
interface เพื่อทาการตรวจสอบ log ผ่าน หน้า browser ได้
า
ระย
comsec@mail:~/php-syslog-ng/html$ sudo nano /etc/apache2/sites-available/default
มิ น ที
า้ พ
ไอ
้าเจ
กร
AllowOverride None
งู ช
Options None
นส
Order allow,deny
บา้
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้
บา้
หน้าของการยอมรับเงื่อนไขในการใช้งาน
นส กร
งู ช รม
นั ้ 1 กร
3ร ไอ
มิ น ที
้าเจ
า้ พ
ระย
า
ส่ วนของการปรับแต่งให้ php-syslog-ng สามารถเชื่อมต่อกับ MYSQL ได้จะต้องใช้งานตัวแปรที่จาเป็ นคือ
ไอพีของเครื่ องที่ติดตั้ง MySQL โดย default จะเป็ น localhost
MySQL username/MySQL password จะเป็ นรหัสของ user บน Mysql ที่มีสิทธิ์ในการสร้าง
Databases,tables โดยทัว่ ไปจะกาหนดเป็ น user ที่เป็ น root
MySQL Database Name จะเป็ นชื่อของ database ที่จะใช้ในการเก็บข้อมูล ในที่น้ ีเราใช้เป็ น syslogdb
MySQL Port เป็ น พอร์ตที่ mysql ใช้ในการสร้างการเชื่อมต่อโดยทัว่ ไปจะเป็ น 3306
Syslog User name/password เป็ น user ที่ใช้ในการเข้าใช้งาน ฐานข้อมูลแบบอ่านข้อมูลได้อย่างเดียว
Syslog Admin name/password เป็ น user ที่ใช้ในการเข้าใช้งาน ฐานข้อมูลแบบสามารถเขียนได้
Install the sample unless
Drop existing Table ทาการลบตารางก่อนที่จะมีการติดตั้งฐานข้อมูล syslog
Back Old Table จะทาการBackup ตารางเก่าก่อนที่จะมีการติดตั้งฐานข้อมูล syslog
Install Sample Data หลังจากติดตั้งฐานข้อมูลและตารางของ syslog แล้วจะมีการลงตัวอย่าง
ข้อมูลในตาราง
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้
ตั้งชื่อของ php-syslog-ng ที่สอดคล้องกับ site ที่ทางาน
า
ระย
หน้าแสดงตาแหน่งของไฟล์ php-syslog-ng โดย
มิ น ที
า้ พ
URL จะเป็ นการแสดงตาแหน่งที่จะต้องเรี ยกผ่าน URL
ไอ
้าเจ
Install Path จะเป็ นตาแหน่งจริ งๆที่ได้ทาการติดตั้งลงบน ระบบ
กร
รม
Admin Password เป็ นรหัสผ่านของ บัญชีผใู้ ช้งาน Admin ซึ่งจะใช้ในการ login ในครั้งแรก
นั ้ 1
งู ช
นส
บา้
หน้าแสดงเตือนให้ใช้งาน User/password ด้านล่างนี้ในการเข้าใช้งานระบบในสิ ทธิ์ Admin
า
ระย
มิ น ที
า้ พ
ไอ
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
โมเดลในการใช้ งาน Sylog-ng ทางานเป็ น Centralized Log Serverc แบ่งตาม Service คือ
Syslogd(โดย default มีอยูบ่ นทุก Unix/Linux/Network-Device)-------------Syslog-ng
Window---------------------------------------------------------Syslog-ng
สาหรับกรณี Syslogd(192.168.200.4)Syslog-ng(192.168.200.2)
า
ระย
Syslogd จะทางานบน CentOS
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
UDP:514
Syslogd
กร
Syslog-ng
3ร
CentOS
Ubuntu Server
นั ้ 1
งู ช
/etc/syslog.conf /etc/syslog-ng/syslog-ng.conf
นส
โดยการทางานจะต้องมีการ Config Service Syslogd ของ CentOS ให้รองรับการส่ ง log ไปยัง Syslog-ng Server
บา้
า
ระย
# Everybody gets emergency messages
มิ น ที
*.emerg *
า้ พ
ไอ
้าเจ
กร
uucp,news.crit /var/log/spooler
3ร
นั ้ 1
local7.* /var/log/boot.log
นส
า
ระย
comsec@mail:~$ sudo nana /etc/syslog-ng/syslog-ng.conf
มิ น ที
destination d_192.168.200.4{
า้ พ
ไอ
้าเจ
file("/var/log/server/event_192.168.200.4.log");
กร
รม
};
กร
filter f_192.168.200.4{
3ร
host("192.168.200.4");
นั ้ 1
};
งู ช
log{
นส
source(udp_message_open);
บา้
filter(f_192.168.200.4);
destination(d_192.168.200.4);
destination(d_mysql);
};
เป็ นอันว่าทางฝั่ง syslog-ng สามารถรองรับการส่ ง log มาที่เครื่ อง Central log Server แล้ว
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้
UDP:514
Syslog-ng
Syslog-ng
Ubuntu
Ubuntu Server
/etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf
โดยการทางานจะต้องมีการ Config Service Syslog-ng ของ Ubuntu ให้รองรับการส่ ง log ไปยัง Syslog-ng Server
โดยตาแหน่งของไฟล์ config ได้แสดงดังรู ปด้านบนแล้ว
ทางด้าน Syslog-ng จะมีการเพิ่ม config ดังนี้
า
mongkon@snmpagent:~$ sudo vim /etc/syslog-ng/syslog-ng.conf
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
udp("192.168.200.2");
กร
3ร
};
นั ้ 1
log {
งู ช
source(s_all);
นส
filter f_192.168.200.3{
host("192.168.200.3");
};
destination d_192.168.200.3{
file("/var/log/server/event_192.168.200.3.log");
};
log {
า
ระย
source(udp_message_open);
มิ น ที
า้ พ
filter(f_192.168.200.3);
ไอ
้าเจ
กร
destination(d_192.168.200.3);
รม
destination(d_mysql);
กร
3ร
};
นั ้ 1
เป็ นอันว่าทางฝั่ง syslog-ng สามารถรองรับการส่ ง log มาที่เครื่ อง Central log Server แล้ว
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
ตัวอย่างกรณี ที่ตอ้ งการรับ log จาก ตัวอุปกรณ์ Network Router ซึ่งถึงเป็ น Syslogd ตัวหนึ่ง
เราจะทาการ config ให้ router ทาการส่ ง log มายัง log Server ด้วยคาสั่งดังต่อไปนี้
R5#config terminal
Enter configuration commands, one per line. End with CNTL/Z.
R5(config)#logging 192.168.200.2
R5(config)#end
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
destination d_R5-192.168.200.254{
3ร
file("/var/log/server/event_R5-192.168.200.254.log");
นั ้ 1
};
งู ช
filter f_R5-192.168.200.254{
นส
host("192.168.200.254");
บา้
};
log{
source(udp_message_open);
filter(f_R5-192.168.200.254);
destination(d_R5-192.168.200.254);
destination(d_mysql);
};
เป็ นอันว่าทางฝั่ง syslog-ng สามารถรองรับการส่ ง log มาที่เครื่ อง Central log Server แล้ว
แล้วทาการตรวจสอบที่ หน้าเว็บของ php-syslog-ng จะได้หน้าดังนี้
า
ระย
มิ น ที
า้ พ
ไอ
้าเจ
กร
รม
กร
3ร
นั ้ 1
งู ช
นส
บา้