พบว่าหลายคน เวลาระบบมีปัญหาไม่รู้ว่าจะหาปัญหาที่ไหนดี ก็ขอเอารายการ log file ของแต่ละ service พร้อมวิธีอ่านคร่าวๆ มาให้ดูครับ
จริงๆ แล้วเรื่อง log กับเรื่อง monitor แบบเป็นกราฟ หรือประวัติย้อนหลัง (mrtg/munin/zabbix/cacti/… สารพัดจะใช้) ค่อนข้างเป็นเรื่องคู่กันพอสมควร เพราะจากที่ทำมา เวลาระบบมีปัญหา ก็จะใช้ตัว monitor ในการหาช่วงเวลาที่น่าจะเริ่มมีปัญหา ดูว่า “น่าจะ” เกิดปัญหาจาก service ไหนด้วยการไล่หลายๆ กราฟพร้อมๆ กัน (apache / mysql / traffic / load) แล้วก็ไปดู log ย้อนหลังอีกที…
ซึ่ง ต่อให้ดูขนาดนี้ก็ยังไม่ได้รับประกันว่าจะหาสาเหตุเจอหรอกนะ (อ้าว) แต่มันช่วยตัดบางประเด็นออกไปได้ครับ ส่วนมากการดู log พวกนี้จะใช้กรณีโดน hack / spam มากกว่า
ส่วนการ optimize เวลา server overload ให้ใช้ monitor คู่กับเครื่องมือดูสถานะแบบละเอียดของแต่ละ service (apache status / mytop / iostat อะไรพวกนี้) ครับ
[SIZE=6]1) Apache Web Server (httpd)[/SIZE]
ของ apache “โดยปกติ” (รวมถึงกรณีที่ติดตั้งผ่าน directadmin) จะอยู่ที่ /var/log/httpd ครับ ไฟล์สำคัญสุดเลยคือ /var/log/httpd/error_log ซึ่งเป็นการบอกสถานะการทำงานหลักของ apache ที่ไม่เกี่ยวกับโดเมนไหนครับ
ทีนี้ไอ้ไฟล์นี้เนี่ย บางทีใน log มันจะมีคำประมาณว่า [notice] กับ [warning] อยู่พอควร ไอ้พวกนั้นตัดๆ ไปได้เลยครับ ส่วนที่ควรดูคือพวก [error] ต่างๆ
แต่ทีนี้ไอ้ [error] บางทีจะมีประมาณว่า Directory index forbidden ไม่ก็ File does not exist อยู่บ้างพอควร ก็ช่างหัวมันไปเหมือนกัน ตัดๆ ออก แล้วจะเห็นอาการ error ชัดเจนขึ้น (ถ้ามันมีปัญหาน่ะนะ)
ส่วนกรณีที่มีปัญหาเป็นรายโดเมน (เช่นเว็บ error) ก็ต้องเข้าไปดูเป็นรายเว็บครับ สำหรับของ directadmin จะอยู่ที่ /var/log/httpd/domains/DOMAIN.COM.error.log
กรณีที่เป็น subdomain ก็เติมชื่อ sub ต่อท้ายไปอีกทีเป็น /var/log/httpd/domains/DOMAIN.COM.SUBDOMAIN.error.log ประมาณนี้ครับ วิธีดูก็เหมือนๆ กันแหละ อย่าไปสนใจไอ้พวก notice / warning เอามาเฉพาะ error ก็พอ
และถ้าจะดูการใช้งาน สำหรับ apache จะอยู่ที่ /var/log/httpd/access_log หรือแยกรายโดเมนของ directadmin ที่ /var/log/httpd/domains/DOMAIN.COM.log ครับ
[SIZE=6]2) Mail log หรือประวัติการส่งเมล[/SIZE]
อ่า อันนี้อาจต้องแยกเป็น mail server รายตัวเลย แต่ขอหลักๆ แค่ postfix กับ exim ละกันครับ
[SIZE=4]2.1) Postfix[/SIZE]
โดยปกติแล้ว postfix จะยิงเข้า syslog ครับ ซึ่งจะไปเก็บในไฟล์ชื่อ /var/log/maillog หรือบน debian ที่ /var/log/mail.log (ต่างกันแค่มีจุดกับไม่มี)
โดยจะมี prefix ระบุนำหน้าว่าเป็นของ service ย่อยตัวไหนใน postfix ตัวสำคัญๆ ก็มี
[LIST]
[]postfix/smtp : สำหรับเมลขาออก
[]postfix/qmgr : เป็นการทำงานของการ enqueue email เข้าในรายการคิวที่จะส่ง รวมถึงจัดสถานะสำหรับเมลที่ส่งไม่ผ่านเพื่อที่จะรอส่งซ้ำ
[*]postfix/smtpd : service ตัวที่ listen port 25 สำหรับรับเมลจาก server อื่นๆ (รวมถึง client ด้วย)
[/LIST]
โดยเมลแต่ละฉบับจะมีหมายเลข Queue ID กำกับตามหลังชื่อ service หลังจากนั้นจะเป็นรายละเอียดของ log ประจำ service นั้นๆ ครับ
ตัวอย่างเบื้องต้นสำหรับคิวการรับ แล้วส่งต่ออีเมล (forward) ไปที่อื่นก็ประมาณนี้ (อันนี้ grep มาเฉพาะ ID ของ email อันนี้เลย)
[SIZE=4]2.2) Exim[/SIZE]
Log ของ Exim อ่านยากพอควรครับ (เกลียดมัน) ไม่ใช่ดูปุ๊ปรู้ปั๊บแบบของ Postfix สำหรับ directadmin จะเก็บ log ไว้ที่ /var/log/exim/mainlog ครับ ซึ่งจะรวมทุกอย่างอยู่ในนี้หมดเลย และไม่ได้มีคำอธิบายชัดเจนมาก ส่วนมากเป็นตัวย่อทำให้อ่านยาก และต้องเดาพอสมควร
โดยโครงสร้าง log file จะเป็น <วันที่> <เวลา> <หมายเลขคิว> <ทิศทางการส่ง> แล้วตามด้วยรายละเอียดประจำ action นั้นๆ ครับ
ทิศทางการส่งหลักๆ จะมี 2 อันคือ <= (ลูกศรชี้ไปด้านซ้าย) หมายความว่าส่งเข้าหาเครื่องตัวเอง (เมลภายนอก รวมถึง mail ที่มาจาก outlook พวกนั้นด้วย ส่งเข้ามา)
กับ => (ลูกศรชี้ไปด้านขวา) เป็นเมลที่ส่งออกจาก exim (จากในคิว) ไปหา mailbox ของ user (กรณีส่งหาเครื่องตัวเอง) หรือไปหา mail server ภายนอกครับ
(จริงๆ มันมี == กับ ** ด้วย แต่นานๆ ทีโผล่ที ส่วนมากเป็นพวก mail ที่ตีกลับ หรือ รอส่งซ้ำอีกครั้ง)
ใน log จะบอกรายละเอียดให้พอสมควร สำหรับเมลขาเข้าจะบอกว่ารับจาก service ไหน ,ต้นทาง ip อะไร ,วิธีไหน ,subject ว่าอะไร ,ส่งจากใคร ,ถึงใคร
ส่วนเมลขาออก ก็จะบอกว่าส่งไปหาใคร ,จากใคร ,ส่งด้วยวิธีไหน (R=), ส่งผ่านอะไร (T=), ส่งไปหา ip ไหน (H=), และสถานะการส่ง (C=)
[SIZE=6]3) สถานะการทำงานของเครื่อง[/SIZE] (ปัญหา hardware ที่ไม่ได้เกิดที่ harddisk ลูกที่ใช้เก็บไฟล์ log)
ไฟล์นี้สำคัญมากครับ และส่วนมากทุก distro จะไว้ที่เดียวกันเลยคือ /var/log/messages ครับ
log ไฟล์นี้โดยปกติแล้วค่อนข้างไร้สาระพอสมควร คือมันจะมีอะไรก็ไม่รู้สารพัดสารเพปนไปมาเต็มไปหมดให้ดูยากเล่นๆ เพราะมันรวมข้อความจาก service เกือบทุกตัวที่ใช้ syslog เข้ามาด้วย แต่เวลามีปัญหาเกี่ยวกับอุปกรณ์อะไรก็ตาม (ที่ไม่ใช่ harddisk ลูกที่เก็บไฟล์นี้) มีปัญหา แนะนำให้เข้ามาดูไฟล์นี้ครับ เพราะอย่างเคสล่าสุดที่เพิ่งเจอ คือ อยู่ดีๆ การ์ด lan ก็ drop speed ลงมาเหลือ 100mbps ก็อาศัย log มาหาว่าเริ่มเป้นตั้งแต่เมื่อไหร่ และในเวลานั้นมีใครเข้าไปทำอะไรมาหน้าเครื่องรึเปล่าครับครับ
วิธีง่ายๆ ก็ grep ชื่ออุปกรณ์ที่มีปัญหาดูในไฟล์เลย มันก็จะแสดง log ที่เกี่ยวข้องกับอุปกรณ์ตัวนั้นออกมาเลยครับ
[root@someserver log]# cat messages|grep eth
Jan 29 14:09:58 someserver kernel: tg3 0000:20:00.0: eth0: Link is down
Jan 29 14:10:08 someserver kernel: tg3 0000:20:00.0: eth0: Link is up at 1000 Mbps, full duplex
Jan 29 14:10:08 someserver kernel: tg3 0000:20:00.0: eth0: Flow control is on for TX and on for RX
Jan 29 14:10:35 someserver kernel: tg3 0000:20:00.0: eth0: Link is down
Jan 29 14:10:58 someserver kernel: tg3 0000:20:00.0: eth0: Link is up at 100 Mbps, full duplex
Jan 29 14:10:58 someserver kernel: tg3 0000:20:00.0: eth0: Flow control is on for TX and on for RX
Jan 29 14:11:48 someserver kernel: tg3 0000:20:00.0: eth0: Link is down
Jan 29 14:12:06 someserver kernel: tg3 0000:20:00.0: eth0: Link is up at 100 Mbps, full duplex
Jan 29 14:12:06 someserver kernel: tg3 0000:20:00.0: eth0: Flow control is on for TX and on for RX
Jan 29 14:12:43 someserver kernel: tg3 0000:20:00.0: eth0: Link is down
Jan 29 14:13:02 someserver kernel: tg3 0000:20:00.0: eth0: Link is up at 100 Mbps, full duplex
Jan 29 14:13:02 someserver kernel: tg3 0000:20:00.0: eth0: Flow control is on for TX and on for RX
(tg3 คือชื่อ driver ที่ใช้ควบคุมการ์ดแลน eth0)
หรืออีกเคสนึง อันนี้ harddisk ใกล้จะพังแล้ว ก็จะเจออะไรประมาณนี้
Feb 2 23:28:31 rhea kernel: [2434610.975008] sd 4:0:2:0: [sdd] Unhandled sense code
Feb 2 23:28:31 rhea kernel: [2434610.975010] sd 4:0:2:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Feb 2 23:28:31 rhea kernel: [2434610.975013] sd 4:0:2:0: [sdd] Sense Key : Medium Error [current]
Feb 2 23:28:31 rhea kernel: [2434610.975018] sd 4:0:2:0: [sdd] Add. Sense: Unrecovered read error
Feb 2 23:28:31 rhea kernel: [2434610.975021] sd 4:0:2:0: [sdd] CDB: Read(10): 28 00 06 9f 1b d0 00 00 10 00
Feb 2 23:28:31 rhea kernel: [2434610.975028] end_request: I/O error, dev sdd, sector 111090640
Feb 2 23:28:33 rhea kernel: [2434612.782247] sd 4:0:2:0: [sdd] Unhandled sense code
Feb 2 23:28:33 rhea kernel: [2434612.782249] sd 4:0:2:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Feb 2 23:28:33 rhea kernel: [2434612.782252] sd 4:0:2:0: [sdd] Sense Key : Medium Error [current]
Feb 2 23:28:33 rhea kernel: [2434612.782256] sd 4:0:2:0: [sdd] Add. Sense: Unrecovered read error
Feb 2 23:28:33 rhea kernel: [2434612.782260] sd 4:0:2:0: [sdd] CDB: Read(10): 28 00 06 9f 1b d0 00 00 08 00
Feb 2 23:28:33 rhea kernel: [2434612.782267] end_request: I/O error, dev sdd, sector 111090640
เจ้ยยยย นี่มันสดๆ ร้อนๆ เลยนี่หว่า … ว่าแล้วก็ขอตัววิ่งไปเปลี่ยน harddisk ที่ idc ก่อนนะครับ ชะแว๊บ T_T