Logrotate: การตั้งค่าการหมุนเวียนบันทึก ตัวเลือกที่เกี่ยวข้องกับขนาดและการมีอยู่ของไฟล์บันทึก ตัวเลือกที่เกี่ยวข้องกับการส่งบันทึก

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

การกำหนดค่า logrotate

การกำหนดค่า logrotate แบ่งออกเป็นส่วนต่างๆ โดยปกติส่วนหลักจะถูกจัดเก็บไว้ในไฟล์ /etc/logrotate.conf ไฟล์นี้อาจมีส่วนสำหรับการหมุนเวียนบันทึก เช่นเดียวกับคำสั่ง “include /etc/logrotate.d” ซึ่งรวมถึงไฟล์การกำหนดค่าจากไดเร็กทอรี /etc/logrotate.d ดังนั้น ในการสร้างงานการหมุนเวียนใหม่ คุณเพียงแค่ต้องสร้างไฟล์การกำหนดค่าและวางลงในไดเร็กทอรีนี้ ขอแนะนำให้ตั้งชื่อไฟล์เหมือนกับชื่อของบริการที่จะหมุนเวียนบันทึก

นี่คือตัวอย่างไฟล์การกำหนดค่า /etc/logrotate.conf:

# หมุนไฟล์บันทึกรายสัปดาห์ ทุกสัปดาห์ # เก็บไฟล์บันทึกที่ค้างอยู่เป็นเวลา 4 สัปดาห์ หมุน 4 # สร้างไฟล์บันทึกใหม่ (ว่าง) หลังจากหมุนเวียนไฟล์เก่า สร้าง # ไม่แสดงข้อคิดเห็น สิ่งนี้ หากคุณต้องการให้ไฟล์บันทึกของคุณถูกบีบอัด #compress # แพ็คเกจปล่อยข้อมูลการหมุนเวียนบันทึกลงในไดเร็กทอรีนี้รวมถึง /etc/logrotate.d # ไม่มีแพ็คเกจเป็นเจ้าของ wtmp หรือ btmp -- เราจะหมุนเวียนพวกมันที่นี่ /var/log/wtmp ( missok รายเดือนสร้าง 0664 root utmp หมุน 1 ) /var/log/btmp ( missok รายเดือนสร้าง 0660 root utmp หมุน 1 )

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

แต่ละไฟล์ในไดเร็กทอรี /etc/logrotate.d สามารถมีส่วนได้ตั้งแต่หนึ่งส่วนขึ้นไป แต่ละส่วนก็มีลักษณะเช่นนี้ มุมมองทั่วไปดังนั้น:

ชื่อไฟล์บันทึก (พารามิเตอร์การหมุน)

ตัวเลือกการหมุนคือสิ่งที่ให้ความยืดหยุ่นในการหมุน logrotate มีตัวเลือกค่อนข้างมาก แต่สามารถแบ่งออกเป็นหลายกลุ่มได้ นี่คือตัวเลือกที่สามารถใช้ในไฟล์คอนฟิกูเรชัน:

ตัวเลือกที่กำหนดช่วงเวลาการหมุน:

ตัวเลือกการบีบอัดบันทึก:

บีบอัด บีบอัดบันทึกระหว่างการหมุน โดยค่าเริ่มต้น gzip ใช้สำหรับการบีบอัด
บีบอัดcmd คำสั่ง/โปรแกรมที่จะใช้ในการบีบอัดบันทึก
ตัวเลือกการบีบอัด ตัวเลือกคำสั่งการหมุนที่จะใช้เมื่อบีบอัดบันทึก
คลายการบีบอัด cmd คำสั่งคลายซิปบันทึก ค่าเริ่มต้นคือ gunzip
บีบอัด ระบุนามสกุลไฟล์ที่จะระบุสำหรับบันทึกที่บีบอัด
ความล่าช้าในการบีบอัด เลื่อนการบีบอัดบันทึกออกไปจนกว่าจะหมุนเวียนครั้งถัดไป ดังนั้น เวอร์ชันล่าสุดบันทึกหลังจากการหมุนจะไม่ถูกบีบอัด และบันทึกก่อนหน้าจะถูกบีบอัด
ไม่มีการบีบอัด อย่าบีบอัดบันทึกระหว่างการหมุน
nodelaycompress อย่าหน่วงเวลาการบีบอัดจนกว่าจะวนซ้ำครั้งถัดไป ตัวเลือกนี้โอเวอร์โหลดตัวเลือกความล่าช้าในการบีบอัด

ตัวเลือกการคัดลอก:

สำเนา คัดลอกไฟล์บันทึก แต่อย่าเปลี่ยนต้นฉบับ ตัวเลือกนี้สามารถใช้ได้เมื่อคุณต้องการสร้างสแน็ปช็อตของการเข้าสู่ระบบ ช่วงเวลาหนึ่งแทนการหมุน หรือเมื่อใช้เพื่อตัดทอนบันทึก โปรแกรมภายนอก- หากใช้อ็อพชันการคัดลอก อ็อพชันสร้าง หากระบุไว้ จะไม่มีผลตั้งแต่นั้นเป็นต้นมา บันทึกเก่ายังคงอยู่
คัดลอกตัดทอน ตัดไฟล์ต้นฉบับเป็น ขนาดเป็นศูนย์หลังจากสร้างสำเนาแทนการเปลี่ยนชื่อไฟล์ต้นฉบับและสร้างไฟล์ใหม่ ตัวเลือกนี้ใช้เมื่อไม่สามารถบอกโปรแกรมเขียนบันทึกให้ปิดหมายเลขอ้างอิงที่เกี่ยวข้องกับไฟล์บันทึกและเปิดไฟล์ใหม่ได้ โปรแกรมดังกล่าวสามารถเขียนต่อได้ ไฟล์เก่า- ข้อแม้ประการหนึ่งเมื่อใช้ตัวเลือกนี้คือ การคัดลอกจะใช้เวลาระยะหนึ่ง ดังนั้นจึงไม่สามารถคัดลอกไฟล์ได้ทันที ในระหว่างการคัดลอก รายการอาจถูกเพิ่มลงในบันทึกที่จะหายไปเมื่อไฟล์ถูกตัดให้มีขนาดเป็นศูนย์ เมื่อใช้ตัวเลือกนี้ ตัวเลือกการสร้างจะไม่มีผลเช่นกัน เนื่องจากไฟล์เก่ายังคงอยู่
ไม่มีการคัดลอก อย่าคัดลอกไฟล์บันทึกต้นฉบับ ตัวเลือกนี้จะโอเวอร์โหลดตัวเลือกการคัดลอก
nocopytruncate อย่าตัดทอนไฟล์บันทึกต้นฉบับหลังจากสร้างสำเนาแล้ว ตัวเลือกนี้โอเวอร์โหลดตัวเลือก copytruncate

ตัวเลือกสำหรับการสร้างไฟล์บันทึกใหม่ (หลังจากหมุนไฟล์เก่า):

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

ตัวเลือกที่เกี่ยวข้องกับการลบไฟล์บันทึก:

ตัวเลือกที่เกี่ยวข้องกับวันที่:

วันที่ข้อความ ใช้วันที่แทนตัวเลขในชื่อไฟล์บันทึกเก่า เมื่อใช้ตัวเลข ชื่อจะมีลักษณะดังนี้: logfile.1.gz, logfile.2.gz และอื่นๆ
ข้อความโหนด อย่าใช้วันที่ในชื่อของไฟล์บันทึกเก่า ตัวเลือกนี้โอเวอร์โหลดตัวเลือก dateext
dateformat รูปแบบสตริง ระบุสตริงรูปแบบสำหรับวันที่ที่จะเพิ่มลงในชื่อบันทึก สตริงรูปแบบคล้ายกับที่ใช้ในคำสั่ง date แต่รูปแบบที่ถูกต้องเท่านั้นคือ %Y(หมายเลขปีสี่หลัก), %m(หมายเลขเดือนสองหลัก), %d(วันสองหลักของเดือน) และ %s(เวลายูนิกซ์ จำนวนวินาทีตั้งแต่ 00:00 01/01/1970) ค่าเริ่มต้นคือ "-%Y%m%d" ค่าลบจะรวมอยู่ในเทมเพลตด้วย ซึ่งสามารถละเว้นได้เมื่อระบุเทมเพลต ควรสังเกตว่า logrotate ใช้การเรียงลำดับเพื่อกำหนดว่าไฟล์เก่าใดที่ต้องถูกลบ ดังนั้นสตริงวันที่จะต้องเคารพการเรียงลำดับที่ถูกต้อง นั่นคือเหตุผลว่าทำไมจึงมักเขียนปีขึ้นก่อน แล้วจึงเขียนเดือนและตามด้วยวันเท่านั้น
วันที่เมื่อวานนี้ ใช้วันที่ของเมื่อวานเพื่อหมุนเวียน ดังนั้นวันที่ในชื่อไฟล์จะตรงกับวันที่ของไฟล์ที่อยู่ภายในไฟล์เก็บถาวร

ตัวเลือกที่เกี่ยวข้องกับการส่งบันทึก:

ตัวเลือกที่เกี่ยวข้องกับขนาดและการมีอยู่ของไฟล์บันทึก:

ขนาดสูงสุด บันทึกจะถูกหมุนเวียนเมื่อขนาดเกินขนาดที่ระบุ แม้กระทั่งก่อนช่วงการหมุนเวียนครั้งถัดไป (รายวัน รายสัปดาห์ รายเดือน รายปี) เนื่องจากการหมุนเวียนดังกล่าวไม่ได้ขึ้นอยู่กับเวลา จึงไม่สมเหตุสมผลที่จะใช้วันที่ในชื่อไฟล์
ขนาดย่อเล็กสุด บันทึกจะถูกหมุนเมื่อมีขนาดใหญ่กว่าขนาดที่ระบุ แต่ไม่เร็วกว่าช่วงเวลาการหมุนที่สอดคล้องกัน (รายวัน รายสัปดาห์ รายเดือน รายปี)
ขนาดขนาด บันทึกจะถูกหมุนเมื่อมีขนาดใหญ่กว่าจำนวนไบต์ที่ระบุ หากระบุตัวอักษร k หลังขนาด ขนาดจะคำนวณเป็นกิโลไบต์ ถ้า M เป็นเมกะไบต์ ถ้า G เป็นกิกะไบต์ ตัวอย่างเช่น 1G หรือ 10M
ไม่ว่างเปล่า หมุนไฟล์บันทึกแม้ว่าจะว่างเปล่าก็ตาม ใช้เป็นค่าเริ่มต้น
การแจ้งเตือน อย่าหมุนไฟล์บันทึกหากว่างเปล่า โอเวอร์โหลดตัวเลือก ifempty
หายไป หากไฟล์บันทึกหายไป ให้ไปที่ไฟล์ถัดไปโดยไม่มีข้อความแสดงข้อผิดพลาด
การเสนอชื่อ หากไฟล์บันทึกหายไป จะเกิดข้อผิดพลาดขึ้น ตัวเลือกนี้ถูกกำหนดไว้ตามค่าเริ่มต้น

ตัวเลือกที่เกี่ยวข้องกับไดเร็กทอรีที่เก็บบันทึก:

ไฟล์การตั้งค่าสำหรับ logrotate ช่วยให้คุณสามารถรันสคริปต์ระหว่างการหมุนเวียนบันทึก วิธีนี้ทำให้คุณสามารถดำเนินการบางอย่างในแต่ละขั้นตอนของการหมุนได้

ตัวเลือกการดำเนินการสคริปต์:

ภายหลังการหมุน/ท้ายบท เส้นระหว่างคำว่า postrotate และ endscript ซึ่งแต่ละคำควรแยกจากกัน จะดำเนินการโดยใช้ /bin/sh หลังจากหมุนไฟล์บันทึก โดยปกติแล้วสคริปต์จะถูกส่งผ่านเป็นอาร์กิวเมนต์แรก ชื่อเต็มไฟล์บันทึกพร้อมเส้นทาง หากมีการระบุคำสั่ง sharedscripts รายการไฟล์จะถูกส่งไป วิธีนี้ทำให้คุณสามารถรันสคริปต์สำหรับไฟล์ทั้งหมดได้ในคราวเดียว
หมุนล่วงหน้า/endscript เส้นระหว่างคำว่า prerotate และ endscript ซึ่งแต่ละคำจะต้องแยกจากกัน จะถูกดำเนินการโดยใช้ /bin/sh ก่อนที่จะหมุนไฟล์บันทึก โดยทั่วไปแล้ว สคริปต์จะถูกส่งผ่านชื่อเต็มของไฟล์บันทึกโดยมีพาธเป็นอาร์กิวเมนต์แรก หากมีการระบุคำสั่ง sharedscripts รายการไฟล์จะถูกส่งไป
สคริปต์ที่ใช้ร่วมกัน ใน โหมดปกติสคริปต์จะถูกดำเนินการหนึ่งครั้งสำหรับแต่ละไฟล์ที่ระบุสำหรับการหมุน ด้วยวิธีนี้ สคริปต์สามารถดำเนินการได้หลายครั้ง หนึ่งครั้งสำหรับแต่ละไฟล์ที่ระบุสำหรับการหมุนเวียน หากมีการระบุคำสั่ง sharedscripts สคริปต์จะถูกดำเนินการทีละครั้ง แต่รายการไฟล์จะถูกส่งผ่านไปยังสคริปต์เหล่านั้นเป็นอาร์กิวเมนต์ หากไม่มีการหมุนไฟล์บันทึก สคริปต์จะไม่ถูกดำเนินการ หากมีข้อผิดพลาดเกิดขึ้นระหว่างการเรียกใช้สคริปต์ การดำเนินการจะไม่เสร็จสมบูรณ์สำหรับบันทึกทั้งหมด
nosharedscripts เรียกใช้สคริปต์ก่อนการหมุนเวียนและภายหลังการหมุนเวียนสำหรับแต่ละบันทึกที่กำลังหมุนเวียน นี่เป็นค่าเริ่มต้น นอกจากนี้ คำสั่งนี้ยังโอเวอร์โหลดสคริปต์ที่ใช้ร่วมกันอีกด้วย สคริปต์จะถูกส่ง เส้นทางที่แน่นอนเพื่อบันทึกไฟล์ หากมีข้อผิดพลาดเกิดขึ้นระหว่างการเรียกใช้สคริปต์ การดำเนินการจะไม่เสร็จสิ้นเพียงรายการเดียว ไฟล์ปัจจุบันบันทึก.
นำหน้า/endscript เส้นระหว่างคำว่า preremove และ endscript ซึ่งแต่ละคำควรอยู่ในบรรทัดแยกกัน จะดำเนินการโดยใช้ /bin/sh ก่อนที่จะลบไฟล์บันทึกเก่า logrotate จะส่งชื่อของไฟล์ที่จะถูกลบไปยังสคริปต์เป็นอาร์กิวเมนต์
การกระทำแรก/ส่วนท้าย เส้นระหว่างการดำเนินการแรกและ endscript ซึ่งแต่ละเส้นจะต้องอยู่ในบรรทัดแยกกัน จะถูกดำเนินการโดยใช้ /bin/sh หนึ่งครั้งก่อนที่จะหมุนไฟล์บันทึก และก่อนที่จะดำเนินการส่วน prerotate สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อมีการหมุนเวียนไฟล์บันทึกอย่างน้อยหนึ่งไฟล์เท่านั้น รายการไฟล์ทั้งหมดในส่วนปัจจุบันจะถูกส่งผ่านไปยังสคริปต์เป็นอาร์กิวเมนต์ หากสคริปต์ล้มเหลว จะไม่มีการเรียกใช้งานอื่น
สุดท้าย/endscript เส้นระหว่าง Lastaction และ endscript ซึ่งแต่ละเส้นจะต้องอยู่ในบรรทัดแยกกัน จะถูกดำเนินการโดยใช้ /bin/sh เพียงครั้งเดียวหลังจากหมุนไฟล์บันทึกแล้ว และแม้กระทั่งหลังจากดำเนินการส่วนหลังการหมุนแล้วเท่านั้น สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อมีการหมุนไฟล์บันทึกอย่างน้อยหนึ่งไฟล์ รายการไฟล์ทั้งหมดในส่วนปัจจุบันจะถูกส่งผ่านไปยังสคริปต์เป็นอาร์กิวเมนต์ หากสคริปต์ล้มเหลว จะไม่มีการเรียกใช้งานอื่น

ตัวเลือกวัตถุประสงค์ทั่วไป:

ส่วนขยาย ไฟล์บันทึกที่มีนามสกุลที่ระบุสามารถเก็บไว้ได้หลังจากการหมุนเวียน หากใช้การบีบอัด ส่วนขยายที่มีประเภทไฟล์เก็บถาวร (ปกติคือ .gz) จะปรากฏขึ้นหลังส่วนขยาย ตัวอย่างเช่น หากไฟล์บันทึกของคุณชื่อ mylog.foo และคุณต้องการรับไฟล์ mylog.1.foo.gz ระหว่างการหมุนเวียน ไม่ใช่ mylog.foo.1.gz
หมุนปริมาณ ไฟล์บันทึกจะถูกหมุนเวียนตามจำนวนครั้งที่ระบุก่อนที่จะถูกลบหรือส่งไปยังที่อยู่ที่ระบุในคำสั่งเมล หากจำนวนเป็น 0 เวอร์ชันเก่าจะถูกลบออกแทนที่จะหมุนเวียน
หมายเลขเริ่มต้น ระบุตัวเลขที่ใช้เป็นพื้นฐานในการนับเลขระหว่างการหมุน ตัวอย่างเช่น หากคุณระบุ 0 ไฟล์ต้นฉบับจะถูกหมุนเป็นไฟล์ที่ลงท้ายด้วย .0 และจากนั้นตามลำดับที่เพิ่มขึ้น หากคุณระบุ 9 ลำดับเลขจะเริ่มที่ .9 ไม่ว่าในกรณีใด ไฟล์จะถูกหมุนตามจำนวนครั้งที่ระบุไว้ในคำสั่งการนับ
กลุ่มผู้ใช้ su ดำเนินการหมุนเวียนบันทึกภายใต้ผู้ใช้และกลุ่มที่ระบุแทนผู้ใช้เริ่มต้น (โดยปกติคือรูท) หากผู้ใช้หรือกลุ่มไม่มีสิทธิ์เพียงพอที่จะทำการหมุนเวียน จะเกิดข้อผิดพลาดขึ้น
รวมไฟล์หรือไดเร็กทอรี logrotate อ่าน ไฟล์ที่ระบุและแทรกตามที่เป็นอยู่ในไฟล์การกำหนดค่า ณ ตำแหน่งที่มีการแทรกคำสั่งรวม หากมีการระบุไดเร็กทอรี ไฟล์จากไดเร็กทอรีจะถูกจัดเรียงตามตัวอักษร จากนั้นจึงแทรกลงในการกำหนดค่า นอกจากนี้หากไฟล์ไม่ได้ ไฟล์ปกติพวกเขาจะถูกละเลย สิ่งเหล่านี้อาจเป็น เช่น การตั้งชื่อไปป์หรือไดเร็กทอรี ไฟล์ที่มีนามสกุลที่ระบุในไดเร็กทอรี tabooext จะถูกละเว้นเช่นกัน
รายการ tabooext [+] เปลี่ยนรายการส่วนขยายที่ถูกละเว้นในปัจจุบัน หากรายการนำหน้าด้วย + รายการปัจจุบันจะเสริมด้วยรายการที่ระบุ หากไม่ได้ระบุ + รายการจะถูกแทนที่ ตามค่าเริ่มต้น รายการจะรวมส่วนขยายต่อไปนี้ตั้งแต่แรก: .rpmsave, .rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, .ucf-old, .ucf-dist, .ucf- ใหม่, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-*

และสุดท้ายก็เป็นตัวอย่างง่ายๆ

/var/log/mydaemon/mydaemon.log /var/log/mydaemon/error.log( # การหมุนรายวันทุกวัน # เริ่มการกำหนดหมายเลขจาก 0 เริ่มต้น 0 # หมุน 30 ครั้งก่อนที่จะลบ หมุน 30 # อย่าสร้างข้อผิดพลาดหากไม่มี ไฟล์บันทึกหายไป # ลบบันทึกโดยใช้คำสั่ง shred shred # ทำการเขียนซ้ำ 3 รอบ shredcycles 3 # การบีบอัดภายหลังการหมุนของบันทึกล่าสุด การบีบอัดล่าช้า # ดำเนินการภายหลังการหมุนเพียงครั้งเดียวที่แชร์สคริปต์ # หลังจากการหมุนให้ส่งสัญญาณ SIGHUP ให้กับโปรแกรมซึ่งเป็นผลมาจาก # บันทึก descriptors จะถูกเปิดอีกครั้ง # (หลายโปรแกรมรองรับพฤติกรรมนี้) postrotate kill -SIGHUP $(cat /var/run/mydaemon.pid) endscript )

หากคุณไม่เคยใช้ logrotate มาก่อนหรือเคยใช้งานแต่ไม่เคยปรับแต่งอย่างละเอียด ฉันหวังว่าข้อมูลนี้จะช่วยคุณได้

วันก่อนฉันประสบปัญหา แซมส์ปรากฎว่าไม่แสดงสถิติในช่วง 6 เดือนที่ผ่านมา เมื่อเริ่มรู้ว่าเกิดอะไรขึ้นกับเขา ฉันพบว่ามีไฟล์บันทึก ปลาหมึก-ก ( การเข้าถึง.log) เคยเป็น ขนาดใหญ่~20GB. หลังจากอ่านไปซักพักและศึกษาว่าเรื่องนี้เกี่ยวข้องกับอะไร ฉันก็สรุปได้ว่าเพื่อ แซมส์ไฟล์บันทึกมีขนาดใหญ่เกินไป และรายการจากบันทึกจะไม่ถูกถ่ายโอนไปยังฐานข้อมูล ซึ่งหมายความว่าเราจำเป็นต้องตรวจสอบให้แน่ใจว่าบันทึกไม่ขยายเป็นขนาดดังกล่าว เช่น กำหนดค่าการหมุนเวียนบันทึก ปลาหมึก-ก. เอาล่ะ มาเริ่มกันเลย ก่อนอื่นผมตรวจสอบว่าระบบมีหรือไม่ เข้าสู่ระบบ- โดยดำเนินการตามคำสั่ง logrotate อยู่ที่ไหนฉันได้รับ /usr/ports/sysutils/logrotate เป็นการตอบกลับ ซึ่งระบุว่าไม่มี logrotate ในระบบ ดังนั้นคุณต้องติดตั้งมัน เราดำเนินการ ลำดับต่อไปนี้คำสั่ง:

# ซีดี /usr/ports/sysutils/logrotate/
ทำ
# ทำการติดตั้ง

หลังการติดตั้งเสร็จสิ้น เข้าสู่ระบบเรามาตั้งค่าโปรแกรมกันดีกว่า ไฟล์การตั้งค่า เข้าสู่ระบบอยู่ในโฟลเดอร์ /usr/local/etc/ ไฟล์การตั้งค่าเรียกว่า logroate.conf.sample เปลี่ยนชื่อไฟล์โดยการคัดลอกไปยังไฟล์ logrotate.conf:

# ซีดี /usr/local/etc/
# LS
apache php.ini-dist slsh.rc
logrotate.conf.sample ปลาหมึกแนะนำ php.ini
pam.d rc.d อัปเดตไฟล์
php sams.conf xml2Conf.sh
php.conf sams.conf.sample xsltConf.sh
php.ini sams.core
# cp logrotate.conf.ตัวอย่าง logrotate.conf
#

มาเริ่มตั้งค่ากันเลย ดู ไฟล์มาตรฐานเช่น:

# ดู "man logrotate" เพื่อดูรายละเอียด
# หมุนเวียนไฟล์บันทึกทุกสัปดาห์
รายสัปดาห์
#เก็บ Backlogs ไว้ 4 สัปดาห์
หมุน 4
# สร้างไฟล์บันทึกใหม่ (ว่าง) หลังจากหมุนเวียนไฟล์เก่า
สร้าง
# ไม่แสดงความคิดเห็นหากคุณต้องการให้ไฟล์บันทึกของคุณถูกบีบอัด
บีบอัด
# แพ็คเกจ RPM จะปล่อยข้อมูลการหมุนเวียนบันทึกลงในไดเร็กทอรีนี้
รวม /usr/local/etc/logrotate.d
/var/log/lastlog (
รายเดือน
หมุน 1
}
# บันทึกเฉพาะระบบสามารถกำหนดค่าได้ที่นี่

บันทึกหลัก ปลาหมึก- และนี่คือไฟล์ การเข้าถึง.logซึ่งอยู่ในโฟลเดอร์ /usr/local/squid/logs ดังนั้น ให้เพิ่มบรรทัดต่อไปนี้ลงในไฟล์คอนฟิกูเรชัน:

/usr/local/squid/logs/access.log ( #— ไฟล์บันทึกใดที่เราจะหมุนเวียน
รายเดือน #—ความถี่ในการหมุนเวียนบันทึก—เดือนละครั้ง
หมุน 5 #- เท่าไหร่ รุ่นก่อนหน้าเก็บ
คัดลอกตัดทอน
ไม่มีการบีบอัด
การแจ้งเตือน
หายไป
สคริปต์ที่ใช้ร่วมกัน
หลังการหมุน #—คำสั่งที่จะดำเนินการหลังจากการหมุน

/usr/local/etc/rc.d/squid รีสตาร์ท #—คำสั่งการกำหนดค่าใหม่ของปลาหมึกเอง
บทลงท้าย
}
ดูเหมือนว่าจะเกี่ยวกับการหมุนเวียนบันทึกทั้งหมด

ป.ล.: คุณยังต้องกำหนดค่าการเปิดตัว เข้าสู่ระบบตามกำหนดการเราไปที่โฟลเดอร์ /etc และแก้ไขไฟล์ crontab ที่เพิ่มเข้าไปที่นั่น รายการถัดไป:
# เรียกใช้ logrotate ทุกวันแรกของเดือน
0 0 1 * * รูต /usr/local/sbin/logrotate -f /usr/local/etc/logrotate.conf

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

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

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

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

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

มาดูการตั้งค่าการหมุนเวียนโดยใช้ตัวอย่างบันทึกพร็อกซีเซิร์ฟเวอร์ squid ซึ่งทำให้ผู้อ่านของเราประสบปัญหาหลายประการ การตั้งค่าการหมุนพื้นฐานจะถูกบันทึกไว้ใน /etc/logrotate.confนอกจากนี้แต่ละบริการอาจมี การตั้งค่าของตัวเองการหมุนที่เก็บไว้ใน ไฟล์พิเศษในไดเร็กทอรี /etc/logrotate.dซึ่งมีการตั้งค่าซ้อนทับกับการตั้งค่า logrotate.conf.

วิธีการนี้ช่วยให้คุณสามารถกำหนดค่าการหมุนเวียนสำหรับแต่ละบริการเฉพาะได้อย่างยืดหยุ่นโดยไม่มีผลกระทบ การตั้งค่าทั่วไป- บริการนี้ถูกเรียกวันละครั้งผ่านตัวกำหนดตารางเวลา ครอน.

มาเปิดไฟล์กันดีกว่า /etc/logrotate.d/squidเรามีมัน มุมมองถัดไป:

#
#Logrotate การกระจายตัวของปลาหมึก
#
/var/log/squid/*.log (
รายวัน
บีบอัด
ความล่าช้าในการบีบอัด
หมุน 2
หายไป
ไม่มีการสร้าง
สคริปต์ที่ใช้ร่วมกัน
หมุนล่วงหน้า
ทดสอบ! -x /usr/sbin/sarg-รายงาน || /usr/sbin/sarg-รายงาน
บทลงท้าย
หลังการหมุน
ทดสอบ! -e /var/run/squid.pid || /usr/sbin/squid -k หมุน
บทลงท้าย
}

มาดูโครงสร้างของมันโดยละเอียดกันดีกว่า บรรทัดแรกระบุเส้นทางไปยังไฟล์บันทึกที่กำลังประมวลผล ใน ในกรณีนี้ไฟล์ทั้งหมดในไดเร็กทอรีได้รับการประมวลผล /var/log/squidตามตัวเลือกด้านล่าง:

  • รายวัน- กำหนดการหมุนรายวัน สำหรับการใช้งานรายสัปดาห์หรือรายเดือน รายสัปดาห์หรือ รายเดือน.
  • บีบอัด- ระบุให้บีบอัดบันทึกที่เก็บไว้ ซึ่งเป็นตัวเลือกตรงกันข้าม ไม่มีการบีบอัด.
  • ความล่าช้าในการบีบอัด- ห้ามบีบอัดบันทึกปัจจุบันจนกว่าจะหมุนครั้งถัดไป มักใช้ในกรณีที่มีการบันทึกอย่างต่อเนื่องเกิดขึ้นในบันทึก
  • หมุน 2- จำนวนการหมุนก่อนที่จะลบไฟล์ ในกรณีนี้ ไฟล์เก็บถาวรสองไฟล์จะถูกเก็บไว้
  • หายไป- หากไม่มีไฟล์บันทึก แสดงว่าทำงานต่อโดยไม่แสดงข้อความแสดงข้อผิดพลาด
  • ไม่มีการสร้าง- อย่าสร้างไฟล์บันทึกใหม่
  • สคริปต์ที่ใช้ร่วมกัน- ใช้สำหรับส่วนต่างๆ หมุนล่วงหน้าและ หลังการหมุน, ตัวเลือกนี้ระบุให้รันสคริปต์จากส่วนเหล่านี้หนึ่งครั้งก่อนและหลังการหมุน ทุกคนบันทึก มิฉะนั้นสคริปต์จะถูกดำเนินการก่อนและหลังการหมุน ทุกคนบันทึก.

ด้านล่างเป็นส่วนต่างๆ หมุนล่วงหน้าและ หลังการหมุนซึ่งแต่ละอันจะลงท้ายด้วยบรรทัด บทลงท้ายทุกอย่างที่อยู่ระหว่างบรรทัดเหล่านี้จะถูกดำเนินการก่อนและหลังกระบวนการหมุน

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

Logfile_rotate n

ที่ไหน n- จำนวนการหมุน (ค่าเริ่มต้น 0) เช่น ปลาหมึกเองสามารถเก็บบันทึกการหมุนได้หลายรอบ ซึ่งแต่ละรอบจะถูกประมวลผลโดย logrotate ด้วยการตั้งค่าเริ่มต้น คำสั่งนี้ทำให้บันทึกปลาหมึกหลักถูกล้าง

ส่วน หมุนล่วงหน้าเพิ่มโดยอัตโนมัติระหว่างการติดตั้งและหากไฟล์ /usr/sbin/sarg-รายงานมีอยู่และสามารถเรียกใช้งานได้ ให้รันมัน

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

อย่างที่คุณเห็น logrotate ช่วยให้คุณสามารถกำหนดค่ากระบวนการหมุนเวียนบันทึกได้อย่างยืดหยุ่น ดังนั้นหากเราต้องการสร้างสถิติการใช้ปลาหมึกเป็นรายเดือนเราต้องระบุระยะเวลาการหมุนเวียน-เดือนและในส่วน หมุนล่วงหน้าเปลี่ยนคำสั่งเพื่อสร้างรายงานประจำเดือน

เปิดเผยโดยฉัน ปลาหมึกตามบทความนี้ มันทำงานได้สำเร็จ แต่ฉันพบกับสถานการณ์ที่ฉันไม่เข้าใจทันทีว่าทำไมถึงบันทึก ปลาหมึกเก็บไว้น้อยมากและสำหรับ การวิเคราะห์โดยละเอียดการจราจรผ่านบริษัทมีไม่เพียงพอ

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

เราจะหมุนเวียนบันทึกโดยใช้บริการของระบบ เข้าสู่ระบบรวมอยู่ใน เซิร์ฟเวอร์อูบุนตู 14.04.

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

การตั้งค่าพื้นฐาน เข้าสู่ระบบเก็บไว้ใน /etc/logrotate.conf, การตั้งค่า บริการส่วนบุคคล(ในกรณีของเรา ปลาหมึก) ถูกเก็บไว้ใน /etc/logrotate.d/squidและการตั้งค่าเหล่านี้จะมีความสำคัญเหนือกว่า logrotate.conf- บริการนี้ถูกเรียกวันละครั้งผ่านตัวกำหนดตารางเวลา ครอน.

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

Sudo nano /etc/logrotate.d/squid

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

# การหมุนเวียนไฟล์บันทึกรายเดือน accesss.log /var/log/squid/access.log ( # รายวัน # การบีบอัดรายเดือนรายสัปดาห์ ความล่าช้าในการบีบอัดหมุน 2 missok nocreate sharedscripts การทดสอบภายหลังการหมุน ! -e /var/run/squid.pid || ทดสอบ ! - x /usr/sbin/squid ||. /usr/sbin/squid -$ endscript ) # การหมุนรายสัปดาห์ของไฟล์บันทึก cache.log /var/log/squid/cache.log ( # รายวัน รายสัปดาห์ # การบีบอัดรายเดือน ความล่าช้าในการบีบอัด หมุน 1 หายไป nocreate การทดสอบภายหลังการแชร์สคริปต์ ! -e /var/run/squid.pid ||. ทดสอบ ! -x /usr/sbin/squid ||.

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

รายวัน - ตั้งค่าการหมุนรายวันรายสัปดาห์ - ตั้งค่าการหมุนรายสัปดาห์รายเดือน - ตั้งค่าการบีบอัดการหมุนรายเดือน - ระบุบันทึกการบีบอัดไฟล์เก็บถาวร ตัวเลือกย้อนกลับคือ nocompress Delaycompress - อย่าบีบอัดบันทึกปัจจุบันจนกว่าจะถึงการหมุนครั้งถัดไป มักใช้ในกรณีที่การบันทึกเกิดขึ้นอย่างต่อเนื่องในบันทึก หมุน 2 - จำนวนการหมุนก่อนที่จะลบไฟล์ ในกรณีนี้ ไฟล์เก็บถาวรสองรายการจะถูกจัดเก็บ Missok - หากไม่มีไฟล์บันทึก แสดงว่าทำงานต่อไปโดยไม่แสดงข้อความแสดงข้อผิดพลาด nocreate - อย่าสร้างไฟล์บันทึกใหม่ sharedscripts - ใช้สำหรับส่วนก่อนและหลังการหมุน ตัวเลือกนี้ระบุให้เรียกใช้สคริปต์จากส่วนเหล่านี้หนึ่งครั้งก่อนและหลังการหมุนบันทึกทั้งหมด มิฉะนั้น สคริปต์จะถูกดำเนินการก่อนและหลังการหมุนแต่ละบันทึก ส่วนภายหลังการหมุนเวียนจะตรวจสอบว่า ปลาหมึกและเริ่มการหมุนเวียนบันทึกโดยพร็อกซีเซิร์ฟเวอร์เอง

ส่วนที่เพิ่มเข้าไป: ส่วนใดส่วนหนึ่งยังคงเป็นไปได้ หมุนล่วงหน้าจะถูกเพิ่มโดยอัตโนมัติเมื่อติดตั้งตัววิเคราะห์บันทึก ซาร์กและในกรณีที่ไฟล์ / usr/sbin/sarg-รายงานมีอยู่และสามารถเรียกใช้งานได้ ให้รันมัน ในกรณีของฉัน มันทำงานผ่าน cron ดังนั้นฉันจึงแยกมันออกจากการกำหนดค่า

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

Sudo นาโน /etc/squid/squid.conf

การหาเส้น logfile_rotate 6(หรือเพิ่มหากขาดหายไป) และเรานำมาสู่ความคิด

logfile_rotate 0

เบาะแส: ที่ไหน 6 - จำนวนการหมุน ปลาหมึกเก็บบันทึกหลายอินสแตนซ์ แต่ละไฟล์บันทึกจะถูกประมวลผล เข้าสู่ระบบ- ตัวเลข 0 แสดงว่าการหมุนไฟล์ถูกปิดใช้งาน ปลาหมึก

บันทึก Ctrl+Oและปิด Ctrl+Xไฟล์.

รีสตาร์ท Squid การตั้งค่าใหม่จะมีผล นี่เป็นวิธีที่ง่ายและสะดวกในการตั้งค่าการหมุนเวียนบันทึก