Author: kanakorn.h

  • การใช้งาน error_log() ของ PHP ในการบันทึกค่าต่างๆ

    ในการเฝ้าระวังระบบที่เป็น PHP Web Application บางครั้งก็ต้องการเก็บค่าบางอย่างลง Log file

    ทำไงดี ?

    อาจจะใช้วิธี สร้างไฟล์ไว้ในพื้นที่ ที่ web user สามารถเขียนได้ แล้วก็จัดการเอง ด้วย function พวก fopen(), fwrite(), fclose(); เช่น

    $fp = fopen(‘/var/log/mylog.txt’, ‘a’);
    fwrite($fp, ‘20121207:some text’);
    fclose($fp);

    เป็นต้น ซึ่ง ก็พอจะทำได้ แต่ต้องคำนึงถึงเรื่อง permission ในการเขียน และพวกสิทธิต่างๆ

    ใน PHP เราสามารถบันทึกสิ่งต่างๆลงไปในไฟล์ System Log ได้เลย โดยใช้ฟังก์ชั่น error_log
    นอกจากนั้น ยังสามารถเลือกให้เป็นการส่ง email แทนการเขียน log ลงไฟล์ก็ได้ หรือ จะเลือกเขียนลงไฟล์อื่นที่แยกไปจาก System Log ก็ได้

    การใช้งาน

    error_log(message, message_type, destination, options)

    message: เป็นข้อความที่ต้องการบันทึก
    message_type: ใช้ค่า 0,1,3,4 ซึ่งมีความหมายดังนี้

    0: เป็นค่า Default ซึ่งเขียนลงไปใน System Log (ตามที่ระบุในค่า error_log ของ PHP ในไฟล์ php.ini)
    1: เลือกให้ส่ง message ในรูปแบบ email ไปยัง destination โดยใช้ Header ของ email ตาม options
    3: เลือกให้เขียน message ลงในไฟล์ที่กำหนดใน destination (ไม่ใช่ system log) โดยจะต้องเขียน newline ต่อท้ายบรรทัดเอง
    4:  เลือกให้เขียนลงไปใน SAPI (จากการทดสอบบน apache บน Ubuntu พบว่า เขียนลงที่เดียวกับ System Log)

    destination: หาก message_type=1 ให้ระบบ email address ที่ต้องการส่งถึง, หาก message_type=3 ให้ระบุตำแหน่งของไฟล์ที่ต้องการเขียน

    options: ในกรณี message_type=1 สามารถระบุ header ของ email ได้

    ลองเขียน PHP ตามนี้ ลงในไฟล์ test-error_log.php

    <?php
    #ini_set(‘error_log’,’/var/log/myother.log’);
    echo ‘error_log = ‘ . ini_get(‘error_log’) . “\n”;
    error_log(“This is error_log #0”, 0);
    error_log(“This is error_log #1”, 1, “username.s@yourdomain.com”, “Subject: Message Type #1\n”);
    error_log(“This is error_log #3”, 3, “/var/log/mytest.log”);
    error_log(“This is error_log #4”, 4);
    ?>

    แล้วใช้คำสั่ง
    php  test-error_log.php

    ผลที่ออกมานั้น ถ้า

    1. ใน php.ini ไม่ได้ระบุว่า error_log เขียนไปที่ไหน (error_log=) ก็จะแสดงผลออกมาทาง stderr

    error_log =
    This is error_log #0
    This is error_log #4

    จะมี email ส่งถึงตัวเรา มี Subject ว่า Message Type #1 และมีข้อความว่า “This is error_log #1”
    และจะมี log file เกิดขึ้นที่  /var/log/mytest.log โดยมีข้อความว่า “This is error_log #3”

    2. ถ้าใน php.ini ระบุว่า error_log แล้ว เช่น เขียนไปที่ syslog ผลที่ได้คือ

    error_log =  syslog

    จะมี email ส่งถึงตัวเรา มี Subject ว่า Message Type #1 และมีข้อความว่า “This is error_log #1”
    จะมี log file เกิดขึ้นที่  /var/log/mytest.log โดยมีข้อความว่า “This is error_log #3”
    และใน syslog file เช่น /var/log/syslog จะมีข้อความว่า (ทำนองนี้)

    Dec 7 11:11:11 blade3 php: This is error_log #0
    Dec 7 11:11:12 blade3 php: This is error_log #4

    3. ถ้าลอง uncomment โดยเอาเครื่องหมาย # ออกจากบรรทัด
    #ini_set(‘error_log’,’/var/log/myother.log’);
    ก็จะได้ผลว่า

    error_log = /var/log/myother.log

    จะมี email ส่งถึงตัวเรา มี Subject ว่า Message Type #1 และมีข้อความว่า “This is error_log #1”
    จะมี log file เกิดขึ้นที่  /var/log/mytest.log โดยมีข้อความว่า “This is error_log #3”
    และใน /var/log/myother.log จะมีข้อความว่า (ทำนองนี้)

    Dec 7 11:11:11 blade3 php: This is error_log #0
    Dec 7 11:11:12 blade3 php: This is error_log #4

    ครับ

  • Mail Clustering with Cyrus Murder

    ปัจจุบันมีการใช้งาน e-mail มากขึ้น และมีการเก็บข้อมูลต่างๆใน email ไว้เป็นจำนวนมาก ทำให้ Mail Server ของหน่วยงานเดิม อาจจะมีเนื้อที่ไม่เพียงพอต่อการใช้งาน ทำให้ต้องมีการขยายพื้นที่ Mail Server ให้มากขึ้น

    วิธีการที่นิยมใช้กันคือ ซื้อระบบใหม่ที่มี Harddisk ใหญ่ขึ้น หรือ ต่อกับระบบ Storage ที่ใหญ่ขึ้น (เช่น SAN หรือ Storage Cluster)

    วิธีการนี้ เรียกว่า Scale-Up ซึ่งเมื่อมีการใช้งานต่อไป แล้วข้อมูลจัดเก็บมากขึ้น ก็ต้องวางแผนในการซื้อระบบที่ใหญ่ขึ้นไปอีก

    ข้อดี:
    1. เป็นวิธีการที่นิยมทำกัน
    2.ได้ระบบใหม่ที่มีศักยภาพสูงขึ้นเรื่อยๆ

    ข้อเสีย:
    1. เมื่อจะย้ายระบบใหม่ จะเกิด Downtime เพราะต้องหยุดการทำงานของระบบเดิมทั้งระบบ
    2.  ในการย้ายข้อมูล email ซึ่งมีปริมาณมาก ต้องใช้เวลานาน และเสี่ยงต่อข้อมูลที่ไม่เป็นปัจจุบันที่สุดด้วย (ล่าสุดที่ทำการย้ายข้อมูลขนาด 300 GB ซึ่งลักษณะ email ที่ใช้เก็บข้อมูลเป็นไฟล์เล็กๆจำนวนมาก ต้องใช้เวลาถึง 18 ชั่วโมง)
    3. และที่หลีกเลี่ยงไม่ได้ ระบบแบบเดิมนี้ เป็น “Single Point of Failure” กล่าวคือ  ถ้าระบบเสียหาย ก็จะกระทบกับผู้ใช้ทั้งหมด

     

    แต่มีอีกแนวทางหนึ่ง เรียกว่าการ Scale-Out คือ การใช้ระบบที่เป็น Mail Cluster แทน เมื่อมีความต้องการขยายพื้นที่ ก็เพียงแต่ซื้อเครื่องใหม่ แล้วเพิ่มเข้าสู่ระบบ Cluster แล้วเริ่มต้นใช้งานต่อเนื่องได้

    แนวทาง Scale-Out ทำให้สามารถขยายพื้นที่จัดเก็บได้เรื่อยๆ อย่างต่อเนื่อง

    ข้อดี:
    1.ลดปัญหา Single Point of Failure โดยการกระจายที่จัดเก็บไปใน Server ต่างๆใน Cluster เมื่อเกิดความเสียหากับเครื่องใดเครื่องหนึ่ง ก็จะไม่กระทบกับผู้ใช้ทั้งหมด
    2. เมื่อต้องการพื้นที่จัดเก็บเพิ่ม ไม่ต้องหยุดการทำงานทั้งระบบ เพียงเพิ่มเครื่องใหม่เข้าใน Cluster แล้วปรับแต่งค่าเพียงเล็กน้อย ก็สามารถใช้งานได้เลย

    ข้อเสีย:
    1. ระบบมีความซับซ้อนยิ่งขึ้น มีระบบต้องเฝ้าระวังมากขึ้น

    ในระบบ PSU E-Mail Service ใช้โอเพนซอร์สซอฟต์แวร์ในการบริการ Email คือ cyrus-imapd ซึ่งสามารถสร้างระบบ Mail Cluster ด้วยการติดตั้งแพคเกจที่ชื่อว่า cyrus-murder ได้

    Cyrus Murder ประกอบไปด้วย Server 3 ประเภท
    1. Backend Servers: ทำหน้าที่เก็บ Mailbox ของผู้ใช้, โดยแต่ละเครื่องจะรายงานรายละเอียดของ Mailbox ที่อยู่บนเครื่องตนเอง ให้ MUPDATE Server ทราบ
    2. Frontend Servers: ทำหน้าที่บริการ IMAP/POP ให้กับ Mail Client และ บริการ SMTP เพื่อส่งถึง Mailbox ที่อยู่บน Backend Servers ที่ถูกต้อง โดยอาศัยบริการของ MUPDATE Server เพื่อให้ทราบว่า Mailbox ที่ต้องการติดต่อด้วย อยู่บน Backend Server เครื่องใด
    3. MUPDATE Servers: ทำหน้าที่เป็นฐานข้อมูลกลางของ Mailbox ทั้งหมดใน Backend Cluster โดยรับรายงานจาก Backend Servers และบริการตอบ Fronend Servers ว่า Mailbox ที่ต้องการติดต่อด้วย อยู่บน Backend Server เครื่องใด

    อ่านต่อ:

    – ระบบ Cyrus Murder ทำงานอย่างไร
    – วิธีการติดตั้ง Backend Server และการนำเข้าระบบ
    – วิธีการติดตั้ง Frontend Server และการนำเข้าระบบ
    – วิธีการติดตั้ง MUPDATE Server และการนำเข้าระบบ

  • แล้วจะ Login เข้ามาเขียน Blog ได้ยังไง ??

    วิธีการคือ คลิกที่ “เขียนเรื่องเล่า” แล้วจึงพบปุ่ม Login