อ้างอิง http://citec.us/forum/index.php?showtopic=23359&mode=threaded&pid=55496 จัดทำเมื่อ 1/12/2008 ทดลองบน Ubuntu 8.04
บทนำ
- ติดตั้ง syslog-ng ด้วยคำสั่ง
apt-get install syslog-ng
- ดาวน์โหลดโปรแกรม php syslog viewer ด้วยคำสั่ง
wget http://downloads.sourceforge.net/phpsyslogviewer/phpsyslogviewer-7.2.1.tar.bz2
- ติดตั้งโปรแกรม bzip2 ด้วยคำสั่ง
apt-get install bzip2
- แตกไฟล์ phpsyslogviewer ด้วยคำสั่ง
tar xjvf phpsyslogviewer-7.2.1.tar.bz2
- ดาวน์โหลดโปรแกรม speedupd ซึ่งเป็นโปรแกรมเร่งความเร็วให้เอนจิ้นป้อนข้อมูลสู่ฐานข้อมูล mysql ด้วยคำสั่ง
wget http://jaist.dl.sourceforge.net/sourceforge/phpsyslogviewer/speedupd-7.3.2.tar.bz2
- ในโฟลเดอร์ install ของ phpsyslogviewer จะมีสคริปที่ใช้ติดตั้งตารางต่าง ๆ ให้กับฐานข้อมูล เราจะต้องทำการสร้างฐานข้อมูลเสียก่อน มิฉะนั้นจะพบกับข้อผิดพลาดและไม่สามารถรันสคริปดังกล่าวผ่านได้ มีขั้นตอนดังนี้
- เปลี่ยนไดเร็กทอรี่ไปยังโฟลเดอร์ phpsyslogviwer-7.2.1
- เข้าสู่ mysql ด้วยคำสั่ง
mysql -u root -p แล้วป้อนรหัสผ่านของ root
- สร้างฐานข้อมูลชื่อ syslogng ด้วยคำสั่ง
mysql>create database syslogng;
- ออกจาก mysql ด้วยคำสั่ง
mysql>exit;
- สร้างตารางข้อมูลด้วยการใช้ script จากไฟล์ install/phpsyslogviewer.sql ด้วยคำสั่ง
mysql -u root -p syslogng < install/phpsyslogviewer.sql
- ป้อนค่า username และ password เข้าไปในไฟล์ intalll/newuser.sql.php ดังเช่น
$user = "myuser"; // Your Username $pass = "mypassword"; // Your Password
- ติดตั้งโปรแกรม php5-cli เพื่อให้รันคำสั่ง php ผ่าน command line ด้วยคำสั่ง
apt-get install php5-cli
- รันภาษา php-command line เพื่อ insert ข้อมูล user และ pass เข้าสู่ตารางข้อมูล user ของฐานข้อมูล syslogng ด้วยคำสั่งดังนี้
php install/newuser.sql.php
- รันภาษา php-command line ด้วยคำสั่งต่อไปนี้
php install/newuser.sql.php | mysql -u root -p syslogng
- จัดการเว็บไดเรคทอรีเพื่อให้สามารถเรียกดูข้อมูลผ่านเวบบราวเซอร์ได้ ด้วยการสำเนาไฟล์ ด้วยคำสั่งดังนี้
cp -R htdocs /var/www/phpsyslogviewer
- แก้ไขไฟล์คอนฟิกคือ /var/www/phpsyslogviewer/config.php เพื่อกำหนดค่าที่สำคัญเกี่ยวกับฐานข้อมูลดังนี้
$db_user = "root"; // Database Username $db_pass = "rootpass"; // Database Password $db_host = "localhost"; // Database Hostname $db_name = "syslogng"; // Database Name
- รันคำสั่งต่อไปนี้
chown root:www-data /var/www/phpsyslogviewer/config.php chmod 440 /var/www/phpsyslogviewer/config.php
- เข้าดูเว็บไซต์ของ phpsyslogviewer ได้ที่ http://ipaddress/phpsyslogviewer และจะได้หน้าต่างดังรูป
- เมื่อ Login แล้วจะได้หน้าต่างดังนี้
- ติดตั้งแพ็คเกจ speedupd-7.3.2 เพื่อเร่งความเร็วให้เอนจิ้นป้อนข้อมูลสู่ฐานข้อมูล mysql ขั้นตอนนี้อาจยุ่งยากนิดหน่อย เพราะต้องทำการคอมไพล์แพ็คเกจด้วยตัวเองใหม่ ขอย้ำว่าต้องทำนะครับขั้นตอนนี้ มิฉะนั้นใครที่เคยใช้ phpsyslog-ng จะรู้ซึ้งว่าอึดอัดเป็นอย่างไร ให้ทำตามคำสั่งต่อไปนี้
tar xjvf speedupd-7.3.2.tar.bz2 cd speedupd-7.3.2 apt-get install debhelper cmake libdaemon-dev libconfuse-dev fakeroot dpkg-buildpackage -rfakeroot ถ้า่มีปัญหาให้อ่านดู อาจจะต้องติดตั้ง libmysqlclient15-dev เิพิ่มเติมด้วยคำสั่ง apt-get install libmysqlclient15-dev
- ตอนนี้เราจะได้แพ็คเกจตระกูล debian ชื่อว่า speedupd_7.3.0_i386.deb (สำหรับ 64 bit OS จะชื่อ speedupd_7.3.0_amd64.deb) ให้ติดตั้งแพ็คเกจและกำหนดค่าให้กับไฟล์ speedupd.confดังนี้
cd .. dpkg -i speedupd_7.3.0_i386.deb (สำหรับเครื่องที่เป็น 64 bit ใช้ speedupd_7.3.0_amd64.deb) vi /etc/speedupd.conf /etc/init.d/speedupd start
- ต่อไปเป็นการกำหนดค่าให้กับ syslog-ng ทำการส่งค่าไปเก็บยังฐานข้อมูลทำตามนี้เลยครับ ง่าย ๆ ผู้เขียนตัดวิธีการเก็บข้อมูลการจราจรคอมพิวเตอร์ส่วนอื่นออก เพื่อให้สามารถทำความเข้าใจได้ง่าย ๆ ครับ หากใครมีไฟล์คอนฟิคเก่าอยู่แล้วก็เพิ่มเติมเฉพาะส่วนที่ต้องการเก็บข้อมูลในฐานข้อมูลได้เลยครับ โดยให้แก้ไขในไฟล์ /etc/syslog-ng/syslog-ng.conf เป็นดังต่อไปนี้ ซึ่งถ้าส่วนไหนมีอยู่แล้วก็ไม่ต้องนะครับ
options { recv_time_zone (+07:00); send_time_zone (+07:00); sync (0); time_reopen (100); log_fifo_size (1000); long_hostnames (off); use_dns (no); use_fqdn (no); create_dirs (yes); chain_hostnames(yes); keep_hostname (yes); };
source s_sys { file ("/proc/kmsg" log_prefix("kernel: ")); unix-stream ("/dev/log"); internal(); udp(ip(0.0.0.0) port(514)); tcp(ip(0.0.0.0) port(514) keep-alive(yes)); };
destination d_mysql {pipe("/var/log/mysql.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)); };
filter f_kernel { facility (kern); }; filter f_messages { level(info..emerg) and not (facility(mail) or facility(authpriv) or facility(cron)); };
log {source(s_sys); filter(f_messages); destination(d_mysql); };
log {source(s_sys); filter(f_kernel); destination(d_mysql); };
- สร้างสคริปเพื่อทำไปน์สำหรับส่งค่าสตรีมจากไปน์สู่ฐานข้อมูล งานนี้เป็น bash สคริปครับ ฟังดูวุ่นวายแต่ทำจริงง่ายมากครับ ให้สร้าง script file ด้วยคำสั่งต่อไปนี้
# vim syslog2mysql.sh
- แล้วใส่ข้อมูลต่อไปนี้ลงไปในไฟล์ แล้วบันทึกไฟล์
#!/bin/bash if [ ! -e /var/log/mysql.pipe ] then mkfifo /var/log/mysql.pipe fi while [ -e /var/log/mysql.pipe ] do mysql -u root --password=radius syslogng < /var/log/mysql.pipe >/dev/null done
- ทำการเปลี่ยนสิทธิไฟล์ แล้วรันคำสั่งต่อไปนี้
# chmod +x syslog2mysql.sh
# ./syslog2mysql.sh &
# /etc/init.d/syslog-ng start
- เมื่อเปิดข้อมูลผ่านเว็บดูจะไ้ด้ดังรูป ซึ่งเ็ป็นตัวอย่างที่มี Total Hosts จำนวน 1 Hosts
จบครับ
|