ในการกำหนดค่าของฉันฉันได้ rsyslog ผู้ที่อยู่ในความดูแลของการเปลี่ยนแปลงต่อไปของการใช้/home/user/my_app/shared/log/unicorn.stderr.log imfileเนื้อหาถูกส่งไปยังเซิร์ฟเวอร์บันทึกข้อมูลระยะไกลอื่นโดยใช้ TCP
เมื่อล็อกไฟล์หมุน rsyslog หยุดส่งข้อมูลไปยังเซิร์ฟเวอร์ระยะไกล
ฉันลองโหลด rsyslog ใหม่ส่งสัญญาณ HUP และเริ่มต้นใหม่พร้อมกัน แต่ไม่มีอะไรทำงาน
วิธีเดียวที่ฉันจะพบว่าใช้งานได้จริงสกปรก:
- หยุดบริการลบไฟล์ rsyslog stat และเริ่ม rsyslog อีกครั้ง ทั้งหมดที่อยู่ในเบ็ด postrotate ในไฟล์ logrotate ของฉัน
kill -9rsyslog และเริ่มต้นใหม่
มีวิธีที่เหมาะสมสำหรับฉันที่จะทำเช่นนี้โดยไม่ต้องสัมผัส rsyslog internals?
ไฟล์ Rsyslog
$ ModLoad ตราสัญลักษณ์ $ ModLoad ไม่ทำงาน $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ เทมเพลตโดยไม่ต้องมีรูปแบบ "[สภาพแวดล้อม] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag unicorn-stderr $ InputFileStateFile สถิติยูนิคอร์น-stderr ข้อมูล $ InputFileSeverity $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # ส่งต่อไปยังเซิร์ฟเวอร์ระยะไกล ถ้า $ syslogtag มี 'apache-' ดังนั้น @@ my_server: 5000; WithoutTimeFormat : syslogtag, มี, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
ไฟล์บันทึก
/home/user/my_app/shared/log/*.log {
ประจำวัน
missingok
dateext
หมุน 30
การบีบอัด
notifempty
นามสกุล gz
copytruncate
สร้างผู้ใช้ 640 คน
sharedscripts
โพสต์หมุน
(หยุด rsyslog && rm / var / spool / rsyslog / stat- * && เริ่ม rsyslog 2> & 1) || จริง
endscript
}
FYI ไฟล์สามารถอ่านได้สำหรับผู้ใช้ rsyslog เซิร์ฟเวอร์ของฉันสามารถเข้าถึงได้และไฟล์บันทึกอื่น ๆ ที่ไม่หมุนในรอบเดียวกันยังคงถูกติดตามอย่างถูกต้อง
ฉันใช้ Ubuntu 12.04
post-rotate(ซึ่งไม่ใช่สิ่ง) แทนpostrotateเพราะสคริปต์ logrotate ดั้งเดิมที่คุณควรทำงานได้ดีกับ rsyslog (ถ้าสคริปต์ postrotate ทำงานอยู่ ) ...