Tuesday 29 August 2017

Logrotate copytruncate ไบนารี ตัวเลือก


หน้า man ของ logrotate กล่าวว่า: Im สับสนโดยนี้ ถ้าโปรแกรมไม่สามารถบอกได้ว่าจะปิดไฟล์บันทึกนั้นจะเขียนต่อไปเรื่อย ๆ ไม่ใช่สำหรับบางครั้ง หากการบีบอัดถูกเลื่อนไปสู่รอบการหมุนเวียนครั้งถัดไปโปรแกรมจะเขียนต่อไปยังไฟล์นั้นต่อไปแม้จะมีรอบการหมุนเวียนครั้งถัดไป วิธีการเลื่อนการแก้ปัญหาความเข้าใจของฉันคือ copytruncate ควรใช้เมื่อโปรแกรมไม่สามารถบอกให้ปิด logfile Im ทราบว่าข้อมูลบางเขียน logfile จะหายไปเมื่อสำเนาอยู่ในความคืบหน้า ฉันกำลังมองหาไฟล์ logrotate สำหรับ couchdb และมีตัวเลือกทั้ง copytruncate และ delaycompress ดูเหมือนว่าไม่มีจุดใดที่ใช้ delaycompress เมื่อ copytruncate มีอยู่แล้ว สิ่งที่ฉันขาดหายไปถาม Jul 21 11 ที่ 2: 14Im ทำงานบน Ubuntu 14 ด้วย rsyslog และ logrotate utility ที่เป็นค่าเริ่มต้น ในส่วนกำหนดค่า rsyslog logrotate etclogrotate. drsyslog config ฉันจะเห็นข้อมูลต่อไปนี้: จากสิ่งที่ฉันเข้าใจขอแนะนำให้ใช้ copytruncate ในสถานการณ์จำลองทั้งหมดเนื่องจากไม่ได้ย้ายบันทึกปัจจุบัน แต่จะตัดทอนบันทึกเพื่อให้กระบวนการใด ๆ กับไฟล์ที่เปิดอยู่ handler จะสามารถเขียนต่อได้ ดังนั้นการกำหนดค่าเริ่มต้นโดยใช้คุณลักษณะการโหลดซ้ำของ rsyslog แทนถาม 5 พ. ค. ที่เวลา 7:40 เพื่อตอบคำถามของคุณคุณจำเป็นต้องเข้าใจถึงการปิดการโหลดและ copytruncate ที่แตกต่างกัน: reload แฟ้มบันทึกเก่าจะถูกเปลี่ยนชื่อและกระบวนการเขียนลงในบันทึกนั้นจะได้รับการแจ้งเตือน (ผ่านทางสัญญาณ Unix) เพื่อสร้างแฟ้มบันทึกอีกครั้ง นี่คือวิธีการค่าใช้จ่ายที่ต่ำกว่าที่เร็วที่สุด: การดำเนินการ renamemove มีความรวดเร็วและมีเวลาดำเนินการคงที่ นอกจากนี้การดำเนินการเกือบจะเป็นอะตอม: นั่นหมายความว่ารายการบันทึก (เกือบ) จะไม่สูญหายไปในระหว่าง movereload ในทางกลับกันคุณต้องมีกระบวนการที่สามารถโหลดและเปิดไฟล์บันทึกใหม่ได้ Rsyslog เป็นกระบวนการดังกล่าวดังนั้นคอนฟิกูเรชัน logrotate เริ่มต้นใช้วิธีการโหลดซ้ำ copytruncate ไฟล์บันทึกเก่าถูกคัดลอกลงในไฟล์เก็บถาวรและจะถูกตัดทอนเพื่อลบเส้นบันทึกเก่า แม้ว่าการดำเนินการตัดทอนจะเร็วมากสำเนาอาจยาวมาก (ขึ้นอยู่กับว่าไฟล์บันทึกของคุณใหญ่แค่ไหน) นอกจากนี้รายการบันทึกบางรายการอาจสูญหายไประหว่างช่วงเวลาระหว่างการดำเนินการคัดลอก (โปรดจำไว้ว่าอาจช้า) และตัดทอน ด้วยเหตุผลเหล่านี้ copytruncate จะไม่ถูกใช้โดยปริยายสำหรับเซอร์วิสที่สามารถโหลดใหม่และสร้างไฟล์บันทึกใหม่ได้ ในทางกลับกันหากเซิร์ฟเวอร์ไม่สามารถโหลดไฟล์บันทึกใหม่ได้ copytruncate เป็นเดิมพันที่ปลอดภัยที่สุดของคุณ กล่าวคือไม่จำเป็นต้องมีการสนับสนุนระดับบริการ ตอบ 5 พฤษภาคม 15, 7:50 I'm จำกัด การล็อกไฟล์ของฉันไป 500M แต่ละดังนั้นการคัดลอกพวกเขา won39t เป็นปัญหา (หลายวินาทีที่มากที่สุด) ขอบคุณ ndash Mattan May 5 15 at 7:57 ขึ้นอยู่กับวิธีการเขียนบันทึก copytruncate ทำงานเฉพาะถ้าข้อความบันทึกถูกผนวกเข้ากับไฟล์ (เช่นอะไรก็ตาม loggg gtgt และไม่เมื่อมีการเปลี่ยนเส้นทางเอาท์พุท (เช่นอะไรก็ตาม gt logfile) สำหรับ rsyslog โดยเฉพาะมันอาจจะทำให้รู้สึกมากขึ้นที่จะออกจากสิ่งที่พวกเขาเป็น เหตุผลหลักคือ rsyslog มีคิวภายในที่สามารถใช้ในกรณีที่เอาท์พุทเอาต์พุตไม่พร้อมใช้งานการโหลดใหม่จะทำให้เกิด rsyslog เพื่อสร้างแฟ้มบันทึกของตนเองและ b) ทำให้เหตุการณ์ที่ถูกจัดคิวใด ๆ จะถูกล้างข้อมูลลงในไฟล์ การสร้าง อาจเป็น copytruncate ไม่เป็นอันตราย (แม้ว่าฉันจะกังวลเกี่ยวกับบรรทัดที่เขียนบางส่วนถูกตัดทอน) แต่ฉันมักจะคิดว่า copydeletereload ปลอดภัยจากจุดสมบูรณ์ของมุมมอง ดังกล่าวโดย faker เนื่องจาก rsyslog สามารถจัดการกับสถานการณ์ที่ไฟล์ของคุณไม่สามารถใช้งานได้นั่นจึงไม่ใช่เหตุผลที่น่าสนใจที่จะใช้ copytruncate และตามที่ SelmedanovPavel กล่าวถึง rsyslog จริงต้องกำหนดค่าเฉพาะเพื่อจัดการกับการตัดทอนอย่างถูกต้อง ดังนั้นถ้าเพียงเพราะใช้วิธีโหลดต้องเบี่ยงเบนน้อยกว่าค่าเริ่มต้น config ฉันจะเก็บไว้ คำตอบของคุณ 2017 Stack Exchange, Inc ต้องการใช้ log4j เพื่อเขียนแฟ้มบันทึกที่เกี่ยวข้องกับการตรวจสอบไปยังแฟ้มบันทึกเฉพาะให้พูด audit. log ฉันไม่ต้องการใช้ syslogappender (udp based) เพราะฉันไม่ต้องการความอดทนต่อการสูญหายของข้อมูล Plus, ฉันใช้ logrotate เพื่อหมุน audit. log เมื่อไฟล์ได้รับกับขนาดบาง. ฉันพบคือว่าเมื่อ logrotate หมุนไฟล์ audit. log เพื่อ audit. log.1, log4j ช่วยให้เขียนไป audit. log.1 อื่น ๆ กว่าการเขียนไป audit. log ฉันรู้ว่าฉันสามารถใช้ rollingfileappender เพื่อทำบันทึกการหมุนเวียนอื่นที่ไม่ใช่ logrotate ใช้ดังนั้นเมื่อ rollingfileappender ม้วนไฟล์จะสลับไปที่ไฟล์ใหม่โดยไม่ต้องยุ่งยาก แต่เหตุผลที่ฉันไม่สามารถใช้งาน rollingfileappender ได้ก็คือฉันต้องการใช้คุณลักษณะการหมุน logrotrot โพสต์เพื่อเรียกใช้สคริปต์บางตัวหลังจากการหมุนเกิดขึ้นซึ่งไม่สามารถให้บริการโดย rollfileappender อีกวิธีหนึ่งที่ฉันคิดว่าหมดหวังคือการเขียน log4j appender เองเพื่อปิดไฟล์บันทึก (audit. log.1) และเปิดไฟล์ใหม่ (audit. log) เมื่อตรวจพบไฟล์ถูกหมุน ฉันไม่เคยใช้ ExternallyRolledFileAppender แต่ถ้าเป็นไปได้ที่จะใช้โพสต์ logrotate หมุนเพื่อส่งสัญญาณไปยัง ExternallyRolledFileAppender และทำให้ log4j ทราบไฟล์จะถูกหมุนและเริ่มเขียนไฟล์ใหม่เพียงแค่สงสัยว่าจะมี appender บางอย่างที่ได้รับแล้ว inventedwritten หรือฉัน มีทางเลือกอื่นในการแก้ปัญหานี้

No comments:

Post a Comment