เรียนรู้เกี่ยวกับการบันทึกทั่วไป / logrotation บน linux?


13

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

แหล่งข้อมูลใดที่คุณจะแนะนำให้คนที่อยู่ในสถานการณ์นั้นบริโภค (แบบฝึกหัดหน้าคนหนังสือ) เพื่อเรียนรู้เกี่ยวกับการบันทึก

บันทึกใดที่ผู้ใช้ Linux ปกติอ่านเป็นรายวัน / รายเดือน ข้อสันนิษฐานนั้นถูกต้องแม้กระทั่งถูกเขียนขึ้นเพื่อความสามารถในการอ่านของมนุษย์หรือโดยทั่วไปแล้วจะมีการประเมินและใช้งานโดยเครื่องมืออื่น ๆ ?

ผู้ใช้ปกติและนักพัฒนาซอฟต์แวร์ * nix ควรรู้อะไรเกี่ยวกับบันทึกเหล่านี้

คุณต้องรู้อะไรบ้างเกี่ยวกับการหมุนเวียนบันทึกหากคุณไม่คาดหวังให้จัดการเว็บเซิร์ฟเวอร์ระดับมืออาชีพที่มีกิจกรรมมากมาย


คุณรังเกียจไหมถ้าฉัน (หรือคุณ) แก้ไขชื่อเพื่ออ่าน "บน linux" แทนที่จะเป็น "บน Ubuntu" เพราะสิ่งเหล่านี้เป็นคำถามเดียวกัน (ดูคำตอบของฉัน)? ด้วยวิธีนี้เราจึงมีโอกาสน้อยที่จะจบลงด้วยคำถามที่ซ้ำกันแบบปิดใน "การบันทึกการเรียนรู้บนซุ้มโค้ง", "การบันทึกการเรียนรู้บน CentOS" ฯลฯ
goldilocks

ฉันไม่คิดเช่นชนิดของการเปลี่ยนแปลงตราบใดที่คำตอบที่ดี :)
erikbwork

คำตอบ:


18

[สิ่งนี้ถูกเขียนขึ้นเมื่อไม่กี่ปีก่อนที่จะมีการยอมรับวารสารในระบบ systemd อย่างกว้างขวางและไม่ได้สัมผัสกับมัน ปัจจุบัน (ปลายปี 2561) ทั้ง journald และ (r) syslog ดังที่อธิบายไว้ด้านล่างนี้ถูกนำมาใช้กับเครื่อง distros เช่น Debian สำหรับคนอื่นคุณอาจต้องติดตั้ง rsyslog หากคุณต้องการใช้งานควบคู่ แต่การรวมเข้ากับ journald นั้นตรงไปตรงมา]

ฉันจะไม่หารือเกี่ยวกับการบันทึกเกี่ยวกับ Ubuntu โดยเฉพาะอย่างยิ่งเนื่องจากหัวข้อเป็นมาตรฐานสำหรับ linux โดยทั่วไป (และฉันเชื่อว่าส่วนใหญ่หรือทั้งหมดของสิ่งที่ฉันต้องพูดก็เป็นจริงโดยทั่วไปสำหรับรสชาติใด ๆ * ระวัง แต่ไม่ ใช้คำของฉันสำหรับสิ่งนั้น) ฉันจะไม่พูดเกี่ยวกับ "วิธีอ่านบันทึก" มากไปกว่าการตอบคำถามนี้:

ข้อสันนิษฐานนั้นถูกต้องแม้กระทั่งถูกเขียนขึ้นเพื่อความสามารถในการอ่านของมนุษย์หรือโดยทั่วไปแล้วจะมีการประเมินและใช้งานโดยเครื่องมืออื่น ๆ ?

ฉันเดาว่าขึ้นอยู่กับแอปพลิเคชัน แต่โดยทั่วไปแล้วอย่างน้อยในเรื่องของ syslog (ดูด้านล่าง) พวกเขาควรอ่านได้ "ความหมายสำหรับฉัน" เป็นปัญหาอีกแล้วฮ่า ๆ อย่างไรก็ตามมันอาจถูกจัดโครงสร้างด้วยวิธีการแยกวิเคราะห์ด้วยเครื่องมือมาตรฐาน (grep, awk ฯลฯ ) เพื่อวัตถุประสงค์เฉพาะที่ง่ายขึ้น

สิ่งแรกคือมีความแตกต่างระหว่างแอปพลิเคชันซึ่งทำการบันทึกของตนเองและแอปพลิเคชันที่ใช้ตัวบันทึกระบบ Apache โดยค่าเริ่มต้นเป็นแบบเดิมแม้ว่าจะสามารถกำหนดค่าให้ทำในภายหลัง (ซึ่งฉันคิดว่าคนส่วนใหญ่จะพิจารณาว่าไม่พึงประสงค์) แอปพลิเคชันที่ทำการบันทึกของตนเองสามารถทำได้ในลักษณะใดก็ตามโดยใช้ตำแหน่งใด ๆ สำหรับไฟล์ดังนั้นจึงไม่มีอะไรจะพูดเกี่ยวกับเรื่องนั้นมากนัก syslogคนตัดไม้ระบบเรียกโดยทั่วไปว่า

syslog

"Syslog" เป็นมาตรฐานที่ใช้กับกระบวนการ daemonโดยทั่วไปเรียกว่าsyslogd (d สำหรับ daemon!) เด่น syslog rsyslogdภูตในปัจจุบันการใช้งานบนลินุกซ์รวมทั้งอูบุนตูเป็น Rsyslogd จะทำมาก แต่ตามที่กำหนดค่าออกจากกล่องบน distros ที่สุดมันจำลอง syslog /var/logแบบดั้งเดิมซึ่งเรียงลำดับสิ่งที่เป็นไฟล์ข้อความธรรมดาใน คุณอาจพบเอกสารสำหรับมันใน/usr/share/doc/rsyslog-doc-[version](ระวังยังมี/usr/share/doc/rsyslog-[version]แต่นั่นเป็นเพียงประกาศจากแพคเกจแหล่งเช่นNEWSและChangeLog) หากอยู่ที่นั่นก็คือ html แต่ Stack Exchange ไม่อนุญาตให้ฝังลิงก์ไฟล์ในเครื่อง:

file://usr/share/doc/rsyslog-doc/index.html

ดังนั้นคุณสามารถลองคัดลอกที่วางไว้ หากไม่มีอยู่อาจเป็นส่วนหนึ่งของแพ็คเกจแยกต่างหากที่ไม่ได้ติดตั้ง สอบถามระบบบรรจุภัณฑ์ของคุณ (เช่นapt-cache search rsyslog | grep doc)

การกำหนดค่าที่อยู่ใน/etc/rsyslog.confซึ่งมีหน้าคู่มือman rsyslog.confแม้ว่าในขณะที่หน้าคู่มือทำการอ้างอิงที่ดีมันอาจจะแทรกซึมน้อยกว่าเป็นบทนำ โชคดีที่พื้นฐานของหุ้น rsyslog.conf เป็นไปตามแบบดั้งเดิมของ syslog.conf ซึ่งมีการนำเสนอและแบบฝึกหัดมากมาย หนึ่งนี้เช่น; สิ่งที่คุณต้องการที่จะไปจากที่ในขณะที่ peering rsyslog.conf ท้องถิ่นของคุณเป็นความเข้าใจของสิ่งอำนวยความสะดวกและจัดลำดับความสำคัญ ( "ความสำคัญ" คือบางครั้งเรียกว่าLogLevel) เนื่องจากสิ่งเหล่านี้เป็นส่วนหนึ่งของมาตรฐาน syslog ดังกล่าว เหตุผลที่มาตรฐานนี้มีความสำคัญเนื่องจาก rsyslog ได้รับข้อมูลผ่านเคอร์เนลและสิ่งที่เคอร์เนลใช้คือมาตรฐาน

เกี่ยวกับการที่มี$คำสั่งใน rsyslog.conf เหล่านี้มีความเฉพาะเจาะจง rsyslog และถ้าคุณติดตั้งที่แพคเกจ doc rsyslog_conf_global.htmlตัวเลือกที่คุณจะพบคำแนะนำเกี่ยวกับพวกเขาใน

ขอให้สนุก ... ถ้าคุณอยากรู้เกี่ยวกับวิธีการใช้งานใช้ตัดไม้ระบบดูที่และman loggerman 3 syslog

เข้าสู่ระบบการหมุน

วิธีการเชิงบรรทัดฐานของการหมุนบันทึกคือผ่านเครื่องมือที่เรียกว่าlogrotate(และมีman logrotate) วิธีเชิงบรรทัดฐานของการใช้ logrotate คือcron daemonแม้ว่าจะไม่ต้องทำแบบนั้น (เช่นถ้าคุณปิดเดสก์ทอปของคุณทุกวันคุณอาจทำเพียงครั้งเดียวตอนบู๊ตก่อนที่ syslog จะเริ่มทำงานแต่ เห็นได้ชัดว่าหลังจากติดตั้งระบบไฟล์แล้ว rw)

มีการแนะนำที่ดีเพื่อ logrotate เป็นที่นี่ โปรดทราบว่าlogrotate ไม่ได้มีไว้สำหรับ syslogเท่านั้น แต่สามารถใช้กับไฟล์ใด ๆ ได้เลย ไฟล์การกำหนดค่าพื้นฐานคือ/etc/logrotate.confแต่เนื่องจากการกำหนดค่ามีคำสั่ง "รวมถึง" สิ่งทั่วไปส่วนใหญ่จะเข้าสู่แต่ละไฟล์ใน/etc/logrotate.dไดเรกทอรี (ที่นี่ d มีไว้สำหรับไดเรกทอรีไม่ใช่ daemon; logrotate ไม่ใช่ daemon)

สิ่งสำคัญที่ควรพิจารณาเมื่อใช้ logrotate คือแอปพลิเคชันจะทำงานซ้ำเมื่อล็อกไฟล์ได้รับการ "หมุน" หรือกล่าวอีกนัยหนึ่งคือย้าย - ในขณะที่แอปพลิเคชันทำงานอยู่ WRT (r) syslogd มันจะหยุดเขียนลงในบันทึกนั้น (ฉันคิดว่ามีเหตุผลด้านความปลอดภัยสำหรับเรื่องนี้) วิธีปกติในการจัดการกับสิ่งนั้นคือการบอก syslog ให้รีสตาร์ท (และเปิดไฟล์ทั้งหมดใหม่อีกครั้ง) ซึ่งเป็นสาเหตุที่คุณจะเห็นpostrotateคำสั่งในไฟล์ logrotate conf ที่ส่ง SIGHUP ไปยัง syslog daemon


2
หากคุณพูดถึงsyslog-ngเช่นกันคุณจะได้เขียนทั้งหมดที่มีการพูดในการบันทึก linux คำตอบที่ยอดเยี่ยม
Nils

ฉันเรียนรู้มากและมีแหล่งข้อมูลให้อ่านมากขึ้น ขอบคุณ! Btw ทำไมการใช้ระบบบันทึกการทำงานของ Apache จึงไม่ดี และไฟล์ไหนที่ฉันควรอ่าน
erikbwork

@ erikb85 1) ส่วนใหญ่เป็นเพราะ Apache สร้างผลลัพธ์จำนวนมาก ฉันไม่ได้กำหนดค่า apache ในเวลานานดังนั้นฉันจำไม่ได้ว่ามันยืดหยุ่นแค่ไหนที่ WRT ส่งสิ่งเฉพาะไปยัง syslog (แต่ฉันเดาว่ายืดหยุ่นมาก) 2) บันทึก WRT ที่คุณต้องการอ่านดู /etc/rsyslog.confที่ตรรกะของคุณ ตัวอย่างเช่นมักจะสิ่งที่ดังกล่าวข้างต้นมีความสำคัญบางอย่างที่จะเข้าไปและสิ่งด้านล่างที่จะเข้าสู่/var/log/messages /var/log/noticeฉันชอบที่จะมีบันทึกที่มีทุกอย่างซึ่งทำให้ซ้อนทับสองและสาม แต่ถ้าคุณให้พวกเขาหมุนมันไม่ใช่เรื่องใหญ่
goldilocks

เพียงเพื่อยืนยันrsyslogไม่ใช่ dapper wrapper logrotateใช่มั้ย ทำไมเป็นเช่นนั้น
โทมัส

@Thomas พวกเขาดำเนินการตามวัตถุประสงค์ที่แตกต่างกันแม้ว่า (r) syslog สามารถใช้การหมุนเพื่อสำรองความต้องการ logrotate อย่างไรก็ตามการแยกพวกมันหมายความว่าคุณสามารถใช้ logrotate กับสิ่งอื่นที่ไม่ใช่ไฟล์ syslog
goldilocks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.