การติดตั้งและคอนฟิก PHP-Syslog-NG

ดัดแปลงโดย อดิศร  ขาวสังข์
อ้างอิง
http://planetit.ws/view/printview-2.html (Install Centralized Syslog Server with Web Interface) , http://code.google.com/p/php-syslog-ng/issues/detail?id=77
จัดทำเมื่อ 14/02/2009
ทดลองบน Ubuntu 8.10

บทนำ

PHP-Syslog-NG เป็น front-end สำหรับการดู syslog-ng message ที่ถูกเก็บผ่าน MySQL แบบ real-time มีคุณลักษณะที่สามารถค้นหา Log โดยอาศัย device, time, priority, message และ date

โดย default แล้ว ทุก message จากหลายแหล่งกำเนิด จะถูกวางสู่ฐานข้อมูล MySQL แล้ว PHP-Syslog-NG ซึ่งเป็น front-end interface ก็จะมองและอ่านจาก MySQL Database เื่มื่อมีการค้นหาผ่าน Web Interface

ขั้นตอนการติดตั้ง

  1. ทำการ update และ upgrade ubuntu ดังนี้
    # sudo apt-get update
    # sudo apt-get upgrade


  2. ติดตั้ง Syslog-NG ด้วยคำสั่ง
    # sudo apt-get install syslog-ng

  3. แก้ไขไฟล์คอนฟิกของ syslog-ng คือไฟล์ /etc/syslog-ng/syslog-ng.conf โดยให้มีค่าที่จำเป็นเป็นดังนี้
    stats_freq(43200);

    udp();

    use_dns(no);

    use_dns(yes);

    dns_cache(yes);



  4. ในส่วนของ PHP-Syslog-NG ในลำดับแรกให้ติดตั้ง paakage ที่ำจำเป็นสำหรับ PHP-Syslog-NG ดังนี้
    # sudo apt-get install mysql-server
    # sudo apt-get install apache2
    # sudo apt-get install php5
    # sudo apt-get install php5-cli
    # sudo apt-get install libapache2-mod-php5
    # sudo apt-get install php5-mysql
    # sudo apt-get install php5-gd
    # sudo apt-get install libice6
    # sudo apt-get install msttcorefonts


  5. เซ็ตรหัสผ่านของ mysql root ดังต่อไปนี้
    # mysql -u root
    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourpassword');


  6. เปลี่ยนไดเร็คทอรี่ด้วยคำสั่ง :
    # cd /usr/share

  7. ดาวน์โหลดและแตกไฟล์ PHP-Syslog-NG แล้วทำการ ลบ/สำเนา ไฟล์ที่ดาวน์โหลดมาจากไดเร็คทอรี่ดังนี้
    # sudo wget http://php-syslog-ng.gdd.net/current.tgz
    #
    ## Replace <version> with version you downloaded (mine is 2.9.3l)
    # sudo tar xzvf php-syslog-ng-<version>.tgz
    # sudo rm php-syslog-ng-2.9.3l.tgz


  8. กำหนดสิทธิ์ของไดเร็คทอรี่ที่ต้องการสำหรับ Apache ดังนี้
    # sudo chmod 777 html/config/ html/jpcache/

  9. เปิดไฟล์คอนของ php คือไฟล์ /etc/php5/apache2/php.ini แล้วกำหนดค่าที่จำเป็นดังนนี้
    max_execution_time : อย่างน้อยสุดเป็น 300
    memory_limit : อย่างน้อยสุดเป็น 128M


  10. ทำการสร้าง log directory ด้วยคำสั่งดังนี้
    # sudo mkdir -p /var/log/php-syslog-ng

  11. สร้าง virtual host ด้วยการสร้างไฟล์ /etc/apache2/sites-available/php-syslog-ng ดังนี้
    # cd /etc/apache2/sites-available
    # sudo vim php-syslog-ng


  12. ตัวอย่างในไฟล์ข้อมูลที่เป็น Virtual Host เป็นดังนี้
    หมายเหตุ : ในส่วนของผู้เีขียน ซึ่งเป็นการทดลอง ได้ทำการสร้างไฟล์ดังกล่าว และทำการ disable ไฟล์ที่เป็น default webpage คือไฟล์ /etc/apache2/site-available/default ด้วยการลบไฟล์ default ในตำแหน่ง /etc/apache2/site-enabled ออก
    <VirtualHost *>
        ServerName syslog.planetit.ws
        ServerAdmin alex@planetit.ws
     
        DocumentRoot /usr/share/php-syslog-ng/html
        <Directory />
            Options FollowSymLinks
            AllowOverride All
        </Directory>
     
        <Directory /usr/share/php-syslog-ng/html>
            # pcw No directory listings
            # Options Indexes FollowSymLinks MultiViews
            Options -Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
     
        ErrorLog /var/log/apache2/php-syslog-ng-error.log
     
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
     
        CustomLog /var/log/apache2/php-syslog-ng-access.log combined
        ServerSignature On
    </VirtualHost>

  13. Enable apache virtual host ด้วยคำสั่ง
    # sudo a2ensite php-syslog-ng

  14. Reload apache ด้วยคำสั่ง
    # sudo invoke-rc.d apache2 reload

  15. เปิด Browser ไปยัง http://<your_php-syslog-ng_url>/install แล้วจะได้ผลดังรูป


  16. คลิ๊กปุ่ม Next แล้วจะได้ดังรูป


  17. ให้ยอมรับ License ด้วยการคลิ๊กที่ช่อง I understand that this software released under the GNU/GPL License แล้วคลิ๊กปุ่ม Next ก็จะได้ผลดังรูป


  18. ให้ทำการป้อนค่าของ MySQL ดังตัวอย่างในรูป และก่อนที่จะทำการคลิ๊กปุ่ม Next ให้ทำการแ้้ก้ไขไฟล์
    usr/share/php-syslog-ng/html/install/sql/sample_data.sql ให้เป็นค่าใหม่ดังนี้ (ถ้าไม่แก้จะมีปัญหาไม่สามารถ insert ข้อมูลเข้าสู่ MySQL ได้)
    INSERT INTO `logs` (host, facility, priority, level, tag, datetime, program, msg, counter) VALUES ('srv-www-001','daemon','warning','alert','Tag','2006-06-15 22:25:32','Test Script','%AAA-3-IPILLEGALMSG: Fan 1 had a rotation error reported.',1),('as-3550-2','kern','info','alert','Tag','2006-06-15 22:25:34','Test Script','Duplicate address 10.10.2.2 on Vlan20',2),('as-3550- 2','mail','warning','crit','Tag','2006-06-15 22:25:36','Test Script','Line protocol on Interface FastEthernet0/7, changed state to up',3);

  19. เมื่อคลิ๊กปุ่ม Next จะได้ผลดังรูป


  20. ให้ทำการป้อนชื่อ Site name แล้ิวคลิ๊กปุ่ม Next แล้วจะได้ผลดังรูป


  21. จากรูปข้างบน ก็ไม่ต้องทำอะไรเพราะถูกต้องหมดแล้ว จากนั้นให้คลิ๊กปุ่ม Next ก็จะได้ดังรูป


  22. จากรูปข้างบนมีคำแนะนำให้ทำการลบไดเร็คทอรี่ที่ชื่อว่า Installation ออก ก็ต้องทำตามนะครับ อาจจะเปลี่ยนชื่อเสียก่ีอนก็ได้ หลังจากนั้นเมื่อเรียกใช้งานก็จะได้ผลดังรูปล่าง ซึ่งให้ป้อนชื่อ Username ที่ได้กำหนดไว้ ซึ่งก็คือ admin และรหัสผ่านตามที่ได้กำหนดไ้ว้ก่อน


  23. จากนั้นก็ได้จะได้ผลลัพท์ดังรูปถัดไป


  24. เมื่อทำการค้นหา้ข้อมูลก็จะได้ข้อมูลตัวอย่างดังรูป


  25. กลับไปยัง terminal console และเปลี่ยนไปยังไดเร็คทอรี่ /usr/share/php-syslog-ng/script ด้วยคำสั่ง
    # cd /usr/share/php-syslog-ng/scripts

  26. อัพเดตไฟล์ด้วย path ที่ถูกต้องโดยใช้ perl ดังนี้
    # sudo perl -i -pe 's/\/www\/php-syslog-ng/\/usr\/share\/php-syslog-ng/g' *

  27. เปิด crontab ด้วย root ดังนี้
    # sudo crontab -e -u root

  28. ก็อปปี้บรรทัดต่อไปนี้ลงใน crontab
    @daily php /usr/share/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log
    @daily find /usr/share/php-syslog-ng/html/jpcache/ -atime 1 -exec rm -f '{}' ';'
    0,5,10,15,20,25,30,35,40,45,50,55 * * * * php /usr/share/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log

  29. ก็อปปี้ logrotate.d file ดังนี้
    # sudo cp /usr/share/php-syslog-ng/scripts/logrotate.d /etc/logrotate.d/php-syslog-ng

  30. แก้ไขคอนฟิกของ PHP-Syslog-NG คือไฟล์ /etc/syslog-ng/syslog-ng.conf ด้วยการก็อปปีบรรทัดต่อไปนี้ไปวางในส่วนท้ายของไฟล์
    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_all);
        destination(d_mysql);
    };

  31. ทำการ Reload sylog-ng deamon ด้วยคำสั่ง
    # sudo invoke-rc.d syslog-ng reload

  32. ตัวอย่างการคอนฟิกเครื่อง Client ให้แก้ไขไฟล์ /etc/syslog.conf โดยให้วางข้อความบรรทัดต่อไปนี้ไว้ส่วนบนสุดของไฟล์
    *.*    @<your_syslog-ng_server>
    ให้แทนที่ <your_syslog-ng_server> ด้วย remote syslog-ng server IP หรือ hostname

  33. ทำการ reload syslog ด้วยคำสั่ง
    # /etc/init.d/syslog reload

จบครับ