คุณต้องการเครื่องมือหมุนบันทึกแบบใด
คุณต้องการเครื่องมือหมุนบันทึกแบบใด
คำตอบ:
จากประสบการณ์ของฉัน logrotate นั้นยอดเยี่ยม มันยืดหยุ่นมากและทำงานได้ดีกับซอฟต์แวร์ส่วนใหญ่
อย่างไรก็ตามมีปัญหาบางอย่างกับมันและเนื่องจาก cronolog เป็นหลักสิ่งอำนวยความสะดวกการหมุนบันทึกการใช้เว็บฉันจะเขียนประสบการณ์ของฉันกับ logrotate + apache ซึ่งเป็นปัญหา:
เมื่อหมุนบันทึกเราจะต้องแจ้งให้ apache ทราบว่ามีการหมุนบันทึกราวกับว่า logrotate เปลี่ยนชื่อ access.log เป็น access.log.1, apache จะเขียนไปยัง access.log.1 ต่อไปตามที่เขียนไปยัง inode และ การเปลี่ยนชื่อไฟล์ไม่มีผลกับหมายเลข inode
บนเดเบียนจำหลัก (และอาจ distros อื่น ๆ ), logrotate จะถูกใช้ในการหมุนบันทึก apache ตอนนี้ apache มีการรีสตาร์ทอย่างนุ่มนวลที่แนะนำกระบวนการลูก apache ให้จบการทำงานเมื่อพวกเขาเสร็จสิ้นการให้บริการการเชื่อมต่อที่มีอยู่ apache จากนั้นอ่านการกำหนดค่าของมันอีกครั้งวางไข่กระบวนการลูกใหม่ซึ่งเริ่มเขียนลงในไฟล์บันทึกใหม่ หมุน)
ฟังดูเหมือนเป็นโซลูชันที่ยอดเยี่ยม แต่การรีสตาร์ทที่นุ่มนวลไม่สามารถทำงานได้ในเงื่อนไขบางอย่าง (เช่นการโหลดจำนวนมาก) ดังนั้นนักพัฒนาเดเบียนจึงตัดสินใจใช้ apache รีสตาร์ทแทนการรีสตาร์ทอย่างนุ่มนวลในการกำหนดค่า apache logrotate โชคไม่ดีที่ทำให้การเชื่อมต่อทั้งหมดถูกยกเลิกพร้อมกันซึ่งไม่ดีสำหรับไซต์ที่มีการโหลดจำนวนมาก นอกจากนี้การรีสตาร์ท apache ยังสามารถทำให้เกิดปัญหาเช่นการหยุด apache และไม่เริ่มต้น (รวมถึงในบางสถานการณ์การโหลด) ดูลิงค์ข้อผิดพลาดด้านล่างเพื่อดูรายละเอียด
บรรทัดล่างคือ logrotate ยอดเยี่ยม แต่สามารถนำไปสู่ปัญหาบางประการสำหรับบางโปรแกรม ฉันไม่ได้มีประสบการณ์กับ cronolog มากนัก แต่เนื่องจากมันเขียนบันทึกผ่านไพพ์มันไม่จำเป็นต้องมี apache reloads เมื่อมันหมุนไฟล์ล็อกซึ่งโดยทั่วไปจะแก้ปัญหาทั้งหมดที่อธิบายไว้ข้างต้น
ข้อบกพร่อง logrotate / apache debian ที่เกี่ยวข้อง:
ฉันชอบการเขียนเรียงความ แต่มันไม่ได้เป็นความพึงพอใจที่แข็งแกร่งจริงๆ
logrotate เริ่มจาก cron และหากระบบไม่ทำงานด้วยเหตุผลบางอย่างเมื่อการหมุนเกิดขึ้นไฟล์ล็อกของคุณจะไม่หมุน
ฉันยังต้องการให้ไฟล์บันทึกมีวันที่ (% Y% m.combined.access.log) ในชื่อเพราะฉันเก็บบันทึกเหล่านั้นไว้เป็นเวลานาน ในระบบส่วนใหญ่โดยค่าเริ่มต้น apache logrotate จะตั้งชื่อไฟล์ access.log, access.log.1 และอื่น ๆ อาจเป็นไปได้ที่จะใช้วันที่ใน logfiles กับ logrotate แต่ฉันไม่สามารถหาวิธีที่จะทำครั้งสุดท้ายที่ฉันดู
เคยใช้ logrotate เท่านั้น มันเป็นสิ่งที่ Debian ใช้เป็นค่าเริ่มต้นและฉันไม่เคยมีข้อร้องเรียนใด ๆ
ฉันเกือบจะใช้เฉพาะในช่วง
cronolog
มาพร้อมกับ Debian และฉันอนุญาตให้มันทำงานต่อไปสำหรับบริการระบบเช่นบันทึกเซิร์ฟเวอร์อีเมล แต่สำหรับ Apache และไฟล์บันทึกก็ทั้งหมดlogrotate
logrotate
lighttpd
cronolog
หนึ่งในเหตุผลที่ฉันใช้cronolog
คือการกำหนดค่าทั้งหมดที่เกิดขึ้นในบรรทัดไฟล์บันทึกของการกำหนดค่าเว็บเซิร์ฟเวอร์
เช่นในlighttpd
ไฟล์ปรับแต่งคุณสามารถใส่:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"
และรับไฟล์บันทึกใหม่ทุกสัปดาห์โดยไม่มีการกำหนดค่าอื่นใด หรือคุณสามารถสร้างสรรค์และทำสิ่งต่อไปนี้
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"
และรับไฟล์บันทึกที่แสดงปริมาณการใช้งานในแต่ละวัน เช่นทุกวันอาทิตย์ทุกวันอังคาร
สิ่งที่ดีกว่าคือแม้ว่าเซิร์ฟเวอร์จะไม่ทำงานตามระยะเวลาใดก็ตามไฟล์บันทึกที่ถูกต้องจะถูกนำมาใช้เมื่อรีสตาร์ท