วิธีดูและกำหนดค่าไฟล์ log Linux บน Ubuntu และ CentOS

ผู้ดูแลระบบ Linux มักจะต้องดูไฟล์ log ที่ถูกบันทึกหากพบเจอปัญหาและแก้ไข เนื่องจาก Linux และแอพพลิเคชันที่ทำงานบน Linux สามารถสร้างข้อความประเภทต่างๆ ได้ทั้งหมด ซึ่งจะถูกบันทึกไว้ในไฟล์บันทึกต่างๆ Linux ใช้ชุดของไฟล์ configuration ไดเร็กทอรี โปรแกรม คำสั่ง และเดมอน (daemons) เพื่อสร้าง จัดเก็บ และนำไฟล์กลับมาใช้จากบันทึกเหล่านี้ การรู้ว่าระบบเก็บไฟล์บันทึกไว้ที่ไหนและสามารถใช้คำสั่งที่เกี่ยวข้อง จะช่วยประหยัดเวลาระหว่างการแก้ไขปัญหาได้ (สำหรับระบบปฏิบัติการที่เราใช้ทดสอบคือ CentOS 8 , Ubuntu 20)

ขั้นตอนที่ 1 – การตรวจสอบตำแหน่งไฟล์บันทึกเริ่มต้น

ตำแหน่งเริ่มต้นสำหรับไฟล์บันทึกใน Linux คือ /var/log สามารถดูรายการไฟล์บันทึกในไดเร็กทอรีด้วยคำสั่งต่อไปนี้

ls -l /var/log

หากใช้กับระบบ CentOS จะปรากฎดังภาพ

ขั้นตอนที่ 2 – การดูเนื้อหาไฟล์ที่ถูกบันทึก

รายละเอียดต่อไปนี้คือไฟล์ที่ถูกบันทึกทั่วไปบางส่วนที่พบภายใต้คำสั่ง /var/log

  • wtmp
  • utmp
  • dmesg
  • messages
  • maillog or mail.log
  • spooler
  • auth.log or secure

ไฟล์ wtmp และ utmp เป็นไฟล์ติดตามผู้ใช้ที่เข้าสู่ระบบและออกจากระบบ จะทำให้ไม่สามารถอ่านเนื้อหาของไฟล์เหล่านี้ได้โดยตรงโดยใช้คำสั่ง cat ในเทอร์มินัล จะมีคำสั่งเฉพาะอื่น ๆ แยกต่างหาก หากต้องการดูว่าใครกำลังล็อกอินเข้าสู่เซิร์ฟเวอร์ Linux ให้ใช้คำสั่ง who คำสั่งนี้รับค่าจากไฟล์ /var/run/utmp (สำหรับ CentOS และ Debian) หรือ /run/utmp (สำหรับ Ubuntu)

ขั้นตอนที่ 3 – การใช้ rsyslog Daemon

กลไกสำคัญสำหรับการบันทึกคือ rsyslog daemon บริการนี้รับผิดชอบในการฟังข้อความบันทึกจากส่วนต่างๆ ของระบบ Linux และกำหนดเส้นทางข้อความไปยังไฟล์บันทึกที่เหมาะสมในไดเร็กทอรี /var/log นอกจากนี้ยังสามารถส่งต่อข้อความบันทึกไปยังเซิร์ฟเวอร์ Linux อื่นได้อีกด้วย

ไฟล์การกำหนดค่า rsyslog

rsyslog daemon รับข้อมูลองค์ประกอบต่าง ๆ จากไฟล์ rsyslog.conf ที่อยู่ภายใต้ไดเร็กทอรี /etc ไฟล์ rsyslog.conf จะบอก rsyslog daemon ว่าจะบันทึกข้อความบันทึกไว้ที่ใดซึ่งเป็นคำสั่งที่มาจากสองส่วนภายในไฟล์ สามารถพบได้ที่ rsyslog.d/50-default.conf บน Ubuntu คำสั่งสองส่วนประกอบด้วยตัวเลือกและการดำเนินการ ทั้งสองส่วนคั่นด้วยช่องว่าง ส่วนที่เลือกจะระบุถึงแหล่งที่มาและความสำคัญของข้อความบันทึกคืออะไร และส่วนการดำเนินการบอกว่าจะทำอย่างไรกับข้อความ

ตัวเลือกจะถูกแบ่งออกเป็นสองส่วนอีกครั้งโดยคั่นด้วยจุด (.) ส่วนแรกก่อนจุดเรียกว่า facility (ต้นกำเนิดของข้อความ) และส่วนที่สองหลังจุดเรียกว่า priority (ระดับความรุนแรงของข้อความ) ทั้ง facility และ priority จะมีการดำเนินการร่วมกันเพื่อเป็นการบอก rsyslog ว่าต้องทำอย่างไรเมื่อมีการสร้างข้อความบันทึกที่ตรงกับเกณฑ์ที่กำหนด

คุณสามารถดูข้อความที่ตัดตอนมาจากไฟล์ CentOS /etc/rsyslog.conf ด้วยคำสั่งนี้

cat /etc/rsyslog.conf

เพื่อให้เข้าใจว่าทั้งหมดตามภาพด้านบนหมายถึงอะไร สามารถดูความหมายได้ ดังนี้

  • auth หรือ authpriv: ข้อความที่มาจากเหตุการณ์การอนุญาตและความปลอดภัย
  • kern: ข้อความใดๆ ที่มาจาก Linux kernel
  • mail: ข้อความที่สร้างโดยระบบ mail ย่อย
  • cron: ข้อความที่เกี่ยวข้องกับ Cron daemon
  • daemon: ข้อความที่มาจาก daemons
  • news: ข้อความที่มาจากระบบข่าวย่อยในเครือข่ายต่าง ๆ 
  • lpr: การพิมพ์ข้อความบันทึกที่เกี่ยวข้อง
  • user: ข้อความบันทึกที่มาจากโปรแกรมผู้ใช้
  • local0 ถึง local7: สงวนไว้สำหรับการใช้งานในเครื่อง

และนี่คือรายการที่มีการเรียงลำดับความสำคัญจากน้อยไปหามาก:

  • debug: ข้อมูลการดีบักจากโปรแกรม
  • info: ข้อความให้ข้อมูลที่เรียบง่าย – ไม่จำเป็นต้องดำเนินการใด ๆ
  • notice: สภาวะที่อาจต้องได้รับการดูแล
  • warn: คำเตือน
  • err: ผิดพลาด
  • crit: สภาพวิกฤติ
  • alert: สภาวะที่ต้องการการแทรกแซงโดยทันที
  • emerg: ภาวะฉุกเฉิน

หลังจากนี้จะเป็นการอธิบายถึงผลลัพธ์ต่าง ๆ ที่ได้จากไฟล์กัน

สิ่งนี่เป็นเพียงการบอก rsyslog daemon ให้บันทึกข้อความทั้งหมดที่มาจาก cron daemon ในไฟล์ชื่อ /var/log/cron เครื่องหมายดอกจัน (*) หลังจุดหมายความว่าข้อความที่มีลำดับความสำคัญทั้งหมดจะถูกบันทึก ในทำนองเดียวกัน หากมีการระบุ facility เป็นเครื่องหมายดอกจัน ก็จะหมายถึงแหล่งที่มาทั้งหมด

facility และ priority สามารถเกี่ยวข้องกันได้หลายวิธีในรูปแบบเริ่มต้น เมื่อมีการระบุลำดับความสำคัญเพียงรายการเดียวหลังจุด หมายความว่าเหตุการณ์ทั้งหมดที่เท่ากับหรือมากกว่าลำดับความสำคัญนั้นจะถูกดักไว้ ดังนั้นคำสั่งต่อไปนี้ทำให้ข้อความใด ๆ ที่มาจากระบบ mail ย่อย ที่มีลำดับความสำคัญของคำเตือนหรือสูงกว่าถูกบันทึกไว้ในไฟล์เฉพาะภายใต้ /var/log

การดำเนินการนี้จะบันทึกทุกข้อความเท่ากับหรือมากกว่าลำดับความสำคัญในการเตือน แต่จะทิ้งทุกอย่างไว้ด้านล่าง ดังนั้นข้อความที่มีข้อผิดพลาด ,อาจส่งผลร้ายแรง หรือการแจ้งเตือนต่าง ๆ  ที่เกิดขึ้นจะถูกบันทึกไว้ในไฟล์นี้ด้วย นอกจากนี้การใช้เครื่องหมายเท่ากับ (=) หลังจุดจะทำให้บันทึกเฉพาะลำดับความสำคัญที่ระบุเท่านั้น ดังนั้นหากเราต้องการให้จับเฉพาะข้อความที่มาจากระบบย่อยของเมลต้องมีความระวัง

facility หลายรายการในบรรทัดเดียวกันสามารถคั่นด้วยเครื่องหมายจุลภาค แหล่งที่มาหลายรายการ (facility.priority) ในบรรทัดเดียวกันจะคั่นด้วยเครื่องหมายอัฒภาค เมื่อ action ถูกทำเครื่องหมายด้วยเครื่องหมายดอกจัน หมายถึงผู้ใช้ทั้งหมด นี่คือรายการในไฟล์ CentOS rsyslog.conf 

CentOS จะบันทึกไว้ใน /var/log/secure การกำหนดค่าสำหรับ rsyslog อาจมาจากไฟล์ที่กำหนดเองอื่นๆ เช่นกัน ไฟล์องค์ประกอบต่าง ๆ แบบกำหนดเองเหล่านี้มักจะอยู่ในไดเร็กทอรีที่แตกต่างกันภายใต้ /etc/rsyslog.d ไฟล์ rsyslog.conf รวมไดเร็กทอรีเหล่านี้โดยใช้คำสั่ง $IncludeConfig

นี่คือลักษณะผลลัพธ์ที่อยู่ใน Ubuntu

ตรวจสอบเนื้อหาภายใต้ไดเร็กทอรี /etc/rsyslog.d ด้วย

สำหรับปลายทางของข้อความบันทึกไม่จำเป็นต้องเป็นไฟล์บันทึก สามารถส่งข้อความไปยังคอนโซลของผู้ใช้ได้ ในกรณีนี้ ฟิลด์การดำเนินการจะมีชื่อผู้ใช้(usernames) หากมีผู้ใช้มากกว่าหนึ่งรายต้องการรับข้อความ ชื่อผู้ใช้จะถูกคั่นด้วยเครื่องหมายจุลภาค หากจำเป็นต้องถ่ายทอดข้อความไปยังผู้ใช้ทุกคน ข้อความนั้นจะระบุด้วยเครื่องหมายดอกจัน (*) ในช่องการทำงาน

เนื่องจากการเป็นส่วนหนึ่งของระบบปฏิบัติการเครือข่าย rsyslog daemon ไม่เพียงบันทึกข้อความบันทึกในเครื่องเท่านั้น แต่ยังส่งต่อไปยังเซิร์ฟเวอร์ Linux อื่นในเครือข่ายหรือทำหน้าที่เป็นพื้นที่เก็บข้อมูลสำหรับระบบอื่นได้อีกด้วย daemon จะรับฟังข้อความบันทึกในพอร์ต UDP 514

ขั้นตอนที่ 4 – การสร้างและทดสอบข้อความบันทึกของตัวเอง

เราสามารถสร้างไฟล์บันทึกเองได้ เพื่อดำเนินการสร้างจะต้องทำดังต่อไปนี้

  1. เพิ่มข้อกำหนดคุณสมบัติไฟล์บันทึกในไฟล์ /etc/rsyslog.conf
  2. รีสตาร์ท rsyslog daemon
  3. ทดสอบการกำหนดค่าโดยใช้ logger utility

ในตัวอย่างต่อไปนี้ จะเพิ่มสองบรรทัดใหม่ในไฟล์ rsyslog.conf ของระบบ CentOS Linux ดังที่คุณเห็น ด้วยคำสั่งต่อไปนี้ แต่ละคำสั่งมาจากสิ่งอำนวยความสะดวกที่เรียกว่า local4 และมีลำดับความสำคัญที่แตกต่างกัน

vi /etc/rsyslog.conf

ถัดไป รีสตาร์ทเพื่อโหลดข้อมูลไฟล์ที่กำหนดค่าใหม่

/etc/init.d/rsyslog restart

หากต้องการสร้างข้อความบันทึกทันที logger application จะเรียกว่า 

logger -p local4.info " This is a info message from local 4"

เมื่อดูภายใต้ไดเร็กทอรี /var/log จะแสดงให้เห็นถึงไฟล์ใหม่สองไฟล์ ขนาดของ local4info.log ไม่ใช่ศูนย์ ดังนั้นเมื่อเปิดมัน คุณจะเห็นข้อความถูกบันทึกไว้

cat /var/log/local4info.log

ขั้นตอนที่ 5 – การ Rotating log ไฟล์

เมื่อมีการเขียนข้อมูลลงในไฟล์บันทึกมากขึ้นเรื่อยๆ ข้อมูลเหล่านั้นก็ใหญ่ขึ้นเรื่อยๆ สิ่งนี้ทำให้เกิดปัญหาด้านประสิทธิภาพมากขึ้น นอกจากนี้การจัดการไฟล์ยังยุ่งยากอีกด้วย ทำให้ Linux ใช้แนวคิดในการหมุนเวียนไฟล์บันทึกแทนที่จะล้างข้อมูลหรือลบทิ้ง เมื่อหมุนเวียนบันทึก ไฟล์บันทึกใหม่จะถูกสร้างขึ้น และไฟล์บันทึกเก่าจะถูกเปลี่ยนชื่อและบีบอัดหรือไม่ก็ได้ ไฟล์บันทึกอาจมีเวอร์ชันเก่าเหลืออยู่หลายเวอร์ชันที่ออนไลน์อยู่ ไฟล์เหล่านี้จะย้อนกลับไปในช่วงระยะเวลาหนึ่งและจะแสดงถึงงานที่ค้างอยู่ เมื่อสร้าง Backlogs ครบตามจำนวนที่กำหนด การหมุนเวียนบันทึกใหม่จะทำให้ไฟล์บันทึกที่เก่าที่สุดถูกลบ

ไฟล์การกำหนดค่า logrotate

เช่นเดียวกับ rsyslog logrotate ยังขึ้นอยู่กับไฟล์กำหนดค่าและชื่อของไฟล์นี้คือ logrotate.conf มันอยู่ภายใต้ /etc

cat /etc/logrotate.conf

ตามค่าเริ่มต้น ไฟล์บันทึกจะถูกหมุนเวียนทุกสัปดาห์โดยเหลือสี่ไฟล์ที่ค้างอยู่ในสถานะออนไลน์ในแต่ละครั้ง เมื่อโปรแกรมทำงาน ไฟล์บันทึกใหม่ที่ว่างเปล่าจะถูกสร้างขึ้น และไฟล์เก่าจะถูกบีบอัด (เป็นทางเลือก) ข้อยกเว้นเพียงอย่างเดียวคือสำหรับไฟล์ wtmp และ btmp wtmp ติดตามการเข้าสู่ระบบ และ btmp ติดตามความพยายามเข้าสู่ระบบที่ไม่ถูกต้อง ไฟล์บันทึกทั้งสองนี้จะต้องหมุนเวียนทุกเดือน และจะไม่มีการส่งคืนข้อผิดพลาดหากพบไฟล์ wtmp หรือ btmp ก่อนหน้านี้

เนื้อหาของ rsyslog แสดงวิธีนำไฟล์บันทึกกลับมาใช้ซ้ำจำนวนหนึ่ง

cat /etc/logrotate.d/rsyslog

อย่างที่เห็น ไฟล์ข้อความจะถูกเริ่มต้นใหม่ทุกวันโดยเก็บบันทึกออนไลน์เป็นเวลา 4 วัน ไฟล์บันทึกอื่นๆ จะถูกหมุนเวียนทุกสัปดาห์ สิ่งที่น่าสังเกตก็คือคำสั่งหลังการหมุนเวียน นี่เป็นการระบุการดำเนินการที่เกิดขึ้นหลังจากการหมุนเวียนบันทึกทั้งหมดเสร็จสิ้น

ขั้นตอนที่ 6 – ทดสอบการหมุน (logrotate)

logrotate สามารถเรียกใช้ด้วยตนเองเพื่อรีไซเคิลไฟล์ตั้งแต่หนึ่งไฟล์ขึ้นไป และในการทำลักษณะนี้ต้องระบุไฟล์การกำหนดค่าที่เกี่ยวข้องเป็น argument ของคำสั่ง หากต้องการดูวิธีการทำงาน ต่อไปนี้เป็นรายการไฟล์บันทึกบางส่วนภายใต้ไดเร็กทอรี /var/log ในเซิร์ฟเวอร์ CentOS 

ls -l /var/log

เนื้อหาบางส่วนของไฟล์ logrotate.conf มีลักษณะดังต่อไปนี้

cat /etc/logrotate.conf

ถัดไป รันคำสั่ง logrotate

logrotate -fv /etc/logrotate.conf

ข้อความจะถูกเลื่อนไปเมื่อมีการสร้างไฟล์ใหม่ หรือพบข้อผิดพลาด ฯลฯ เมื่อเรียบร้อยแล้วจะตรวจสอบไฟล์เมล ไฟล์ที่ปลอดภัย หรือข้อความใหม่ ได้

ls -l /var/log/mail*

ls -l /var/log/messages*
ls -l /var/log/secure*

จากรูปข้างต้น ไฟล์บันทึกใหม่ทั้งสามไฟล์ได้ถูกสร้างขึ้นแล้ว ไฟล์บันทึกเมลและไฟล์ที่ปลอดภัยยังคงว่างเปล่า แต่ไฟล์ข้อความใหม่มีข้อมูลบางส่วนอยู่แล้ว

Was this article helpful?

Related Articles