วันจันทร์ที่ 27 เมษายน พ.ศ. 2558

การติดตั้ง php syslog viewer บน ubuntu

การติดตั้ง php syslog viewer บน ubuntu

อ้างอิง http://citec.us/forum/index.php?showtopic=23359&mode=threaded&pid=55496 จัดทำเมื่อ 1/12/2008
ทดลองบน Ubuntu 8.04
บทนำ
  1. ติดตั้ง syslog-ng ด้วยคำสั่ง
    apt-get install syslog-ng
  2. ดาวน์โหลดโปรแกรม php syslog viewer ด้วยคำสั่ง
    wget http://downloads.sourceforge.net/phpsyslogviewer/phpsyslogviewer-7.2.1.tar.bz2
  3. ติดตั้งโปรแกรม bzip2 ด้วยคำสั่ง
    apt-get install bzip2
  4. แตกไฟล์ phpsyslogviewer ด้วยคำสั่ง
    tar xjvf phpsyslogviewer-7.2.1.tar.bz2
  5. ดาวน์โหลดโปรแกรม speedupd ซึ่งเป็นโปรแกรมเร่งความเร็วให้เอนจิ้นป้อนข้อมูลสู่ฐานข้อมูล mysql ด้วยคำสั่ง
    wget http://jaist.dl.sourceforge.net/sourceforge/phpsyslogviewer/speedupd-7.3.2.tar.bz2
  6. ในโฟลเดอร์ install ของ phpsyslogviewer จะมีสคริปที่ใช้ติดตั้งตารางต่าง ๆ ให้กับฐานข้อมูล เราจะต้องทำการสร้างฐานข้อมูลเสียก่อน มิฉะนั้นจะพบกับข้อผิดพลาดและไม่สามารถรันสคริปดังกล่าวผ่านได้ มีขั้นตอนดังนี้
    1. เปลี่ยนไดเร็กทอรี่ไปยังโฟลเดอร์ phpsyslogviwer-7.2.1
    2. เข้าสู่ mysql ด้วยคำสั่ง
      mysql -u root -p แล้วป้อนรหัสผ่านของ root
    3. สร้างฐานข้อมูลชื่อ syslogng ด้วยคำสั่ง
      mysql>create database syslogng;
    4. ออกจาก mysql ด้วยคำสั่ง
      mysql>exit;
    5. สร้างตารางข้อมูลด้วยการใช้ script จากไฟล์ install/phpsyslogviewer.sql ด้วยคำสั่ง
      mysql -u root -p syslogng < install/phpsyslogviewer.sql
  7. ป้อนค่า username และ password เข้าไปในไฟล์ intalll/newuser.sql.php ดังเช่น
    $user = "myuser"; // Your Username
    $pass = "mypassword"; // Your Password
  8. ติดตั้งโปรแกรม php5-cli เพื่อให้รันคำสั่ง php ผ่าน command line ด้วยคำสั่ง
    apt-get install php5-cli
  9. รันภาษา php-command line เพื่อ insert ข้อมูล user และ pass เข้าสู่ตารางข้อมูล user ของฐานข้อมูล syslogng ด้วยคำสั่งดังนี้
    php install/newuser.sql.php
  10. รันภาษา php-command line ด้วยคำสั่งต่อไปนี้
    php install/newuser.sql.php | mysql -u root -p syslogng
  11. จัดการเว็บไดเรคทอรีเพื่อให้สามารถเรียกดูข้อมูลผ่านเวบบราวเซอร์ได้ ด้วยการสำเนาไฟล์ ด้วยคำสั่งดังนี้
    cp -R htdocs /var/www/phpsyslogviewer
  12. แก้ไขไฟล์คอนฟิกคือ /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
  13. รันคำสั่งต่อไปนี้
    chown root:www-data /var/www/phpsyslogviewer/config.php
    chmod 440 /var/www/phpsyslogviewer/config.php
  14. เข้าดูเว็บไซต์ของ phpsyslogviewer ได้ที่ http://ipaddress/phpsyslogviewer และจะได้หน้าต่างดังรูป


  15. เมื่อ Login แล้วจะได้หน้าต่างดังนี้


  16. ติดตั้งแพ็คเกจ 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
  17. ตอนนี้เราจะได้แพ็คเกจตระกูล 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
  18. ต่อไปเป็นการกำหนดค่าให้กับ 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); };
  19. สร้างสคริปเพื่อทำไปน์สำหรับส่งค่าสตรีมจากไปน์สู่ฐานข้อมูล งานนี้เป็น bash สคริปครับ ฟังดูวุ่นวายแต่ทำจริงง่ายมากครับ ให้สร้าง script file ด้วยคำสั่งต่อไปนี้
    # vim syslog2mysql.sh
  20. แล้วใส่ข้อมูลต่อไปนี้ลงไปในไฟล์  แล้วบันทึกไฟล์

    #!/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

  21. ทำการเปลี่ยนสิทธิไฟล์ แล้วรันคำสั่งต่อไปนี้
    # chmod +x syslog2mysql.sh

    # ./syslog2mysql.sh &

    # /etc/init.d/syslog-ng start
  22. เมื่อเปิดข้อมูลผ่านเว็บดูจะไ้ด้ดังรูป ซึ่งเ็ป็นตัวอย่างที่มี Total Hosts จำนวน 1 Hosts

จบครับ