ข้อความ Upstart log บน Ubuntu 13.X อยู่ที่ไหน?


28

ใน Ubuntu 12.04 ฉันสามารถค้นหาข้อความบันทึกการพุ่งพรวด/var/log/syslogได้

คำสั่ง:

# initctl log-priority info
# initctl emit hello

เข้าสู่ระบบ:

Apr  1 01:56:56 precise64 kernel: [ 8365.820425] init: Connection from private client
Apr  1 01:56:56 precise64 kernel: [ 8365.821130] init: Handling hello event

บน Ubuntu 13.10 ข้อความไม่ปรากฏในsyslogหรือที่อื่นภายใต้/var/logไดเรกทอรีแม้ว่าคำสั่งจะlogger helloทำงานตามที่คาดไว้ ฉันควรจะมองหาพวกเขาที่อื่น? มีการตั้งค่ากำหนดที่ฉันต้องเปลี่ยนที่ไหนสักแห่ง?

มีคำถามเกี่ยวกับ Server Faultจากใครบางคนที่ดูเหมือนจะมีปัญหาเดียวกันบน Ubuntu 13.04 และที่นี่และที่นี่ที่อาจอธิบายถึงปัญหาเดียวกัน น่าเสียดายที่คำถามเหล่านี้ไม่ได้นำไปสู่ปัญหา

คำตอบ:


39

แก้ไข 2016-06-02

หากคุณกำลังพยายามที่จะหา "ข้อความเข้าสู่ระบบพุ่งพรวด" /var/log/upstart/โดยทั่วไปการตรวจสอบ นั่นคือสิ่งที่ Upstart บันทึกstdoutและstderrจากบริการพุ่งพรวด ขอบคุณคำตอบของ leopd สำหรับการชี้เรื่องนี้

หากคุณกำลังมองหาข้อความบันทึกจากการพุ่งพรวดตัวเองที่กำหนดค่าinitctl log-priorityและปล่อยโดยinitctl emitอ่าน!

เวอร์ชั่นสั้น

รายการบันทึกควรแสดงเป็น dmesg แม้จะมีที่พวกเขาไม่ได้/var/logแสดงขึ้นโดยเริ่มต้นใน

หากคุณต้องการสิ่งเหล่านี้/var/logด้วยให้เพิ่ม$KLogPermitNonKernelFacility onการกำหนดค่าของ rsyslogd ฉันแนะนำให้สร้างไฟล์ที่กำหนดเอง/etc/rsyslog.d/60-custom.confเพื่อหลีกเลี่ยงการแก้ไข/etc/rsyslog.confเนื่องจากจัดการโดย dpkg ตอนนี้ข้อความพุ่งพรวดควรจะแสดงขึ้นมาใน/var/log/syslogเมื่อคุณตั้งพุ่งพรวดของlog-priorityไปinfoหรือเพื่อให้

รุ่นยาว

นี้เอาฉันวันที่จะติดตามลง แต่เห็นได้ชัดว่าพุ่งพรวด (1.5) จะไม่ได้เข้าสู่ระบบเพื่อ syslog, ที่อยู่, syslog()มันไม่ได้เรียกใช้ฟังก์ชัน แต่พุ่งพรวดเข้าสู่ระบบในบัฟเฟอร์แหวนเคอร์เนลซึ่งเป็นสิ่งที่ dmesg อ่าน ตอนนี้ฉันไม่คิดว่ามันเป็นไปได้ที่กระบวนการพื้นที่ผู้ใช้จะเขียนลงในบัฟเฟอร์นั้น แต่เห็นได้ชัดว่าพวกเขาสามารถเขียนได้/dev/kmsgและนั่นคือสิ่งที่ Upstart ทำ นั่นคือส่วนแรกของปริศนา

ส่วนที่สองคือมีความเชื่ออย่างกว้างขวางว่าข้อความที่เขียนไปยังบัฟเฟอร์วงแหวนเคอร์เนลจะถูกคัดลอกโดยอัตโนมัติไปยัง syslog โดยเคอร์เนล (อย่างน้อยนั่นคือสิ่งที่ฉันคิดเสมอ) ปรากฎว่าสิ่งนี้เกิดขึ้นจริงโดย daemon พื้นที่ผู้ใช้ตามธรรมเนียม klogd ซึ่งทำงานควบคู่กับ syslogd เห็นได้ชัดว่า rsyslogd จะแทนที่ syslogd แต่เห็นได้ชัดว่ามันจะแทนที่ klogd เช่นกัน (เรียงลำดับจาก: ดูโน้ตที่ส่วนท้าย)

ส่วนที่สามคือข้อความที่เขียนไปยังบัฟเฟอร์วงแหวนเคอร์เนลจากพื้นที่ผู้ใช้จริง ๆ แล้วดูแตกต่างจากข้อความที่เขียนจากพื้นที่เคอร์เนล: พวกเขามีสิ่งอำนวยความสะดวกที่แตกต่างกัน dmesg มีตัวเลือกไม่กี่ตัวที่โต้ตอบกับสิ่งนี้: -xจะแสดงสิ่งอำนวยความสะดวก (และลำดับความสำคัญ) ในขณะที่-uและ-kบอกให้ dmesg แสดงเฉพาะข้อความส่วนอำนวยความสะดวกของผู้ใช้และข้อความส่วนอำนวยความสะดวกเคอร์เนลตามลำดับ

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

ข้อมูลมากกว่านี้

syslog

รหัสสามารถเขียน syslog โดยการเรียกฟังก์ชั่น glibc ที่อธิบายไว้ในsyslog() เห็นได้ชัดว่าฟังก์ชั่นเหล่านี้เขียนถึงman 3 syslog /dev/logรหัสสามารถอ่านได้จาก syslog โดยการอ่าน/dev/logและนี่คือสิ่งที่syslogdและสิ่งทดแทนจะทำ rsyslogdอ่าน/dev/logโดยใช้imuxsockโมดูลอินพุต

บัฟเฟอร์วงแหวนเคอร์เนล

พื้นที่เคอร์เนลเขียนไปยังบัฟเฟอร์นี้โดยการเรียกใช้ฟังก์ชันเคอร์เนลprintk()ดังนั้นบางครั้งจึงเรียกว่าบัฟเฟอร์การพิมพ์ /dev/kmsgพื้นที่ของผู้ใช้สามารถเขียนไปโดยการเขียน พื้นที่ผู้ใช้สามารถอ่านจากบัฟเฟอร์นี้ได้หลายวิธี: สามารถอ่านได้/proc/kmsg(สิ่งที่ dmesg ทำตามค่าเริ่มต้น) หรือสามารถอ่านได้จาก/dev/kmsgหรือเรียกใช้การเรียกของระบบsyslog()ซึ่งอธิบายไว้ในman 2 syslogและแตกต่างอย่างสิ้นเชิงจากฟังก์ชัน glibc ที่syslog()อธิบายไว้ ในman 3 syslog. glibc จัดเตรียม wrapper ให้กับการเรียกของระบบที่เรียกsyslog()ว่าklogctl()เพื่อช่วยบรรเทาความสับสนนี้

ตามปกติแล้วklogdอ่านจากหนึ่งในอินเตอร์เฟสเหล่านี้จากนั้นเรียกใช้ฟังก์ชัน glibc syslog()เพื่อคัดลอกไปยัง syslog rsyslogd อ่านหนึ่งในอินเทอร์เฟซเหล่านี้ผ่านทางimklogอินพุตโมดูล แต่ AFAIK ไม่รบกวนการเรียก glibc syslog()ซึ่งเป็นสาเหตุที่ไม่เหมือนกับ klogd มันประมวลผลเอาท์พุทimklogแบบเดียวกับที่มันประมวลผลเอาท์พุทจากโมดูลอินพุตอื่น ๆ มีข้อแม้เพิ่มเติมที่imklogเอาต์พุตทั้งหมดมีkernสิ่งอำนวยความสะดวกโดยไม่คำนึงถึงข้อความเครื่องมืออำนวยความสะดวกที่มีในบัฟเฟอร์วงแหวนเคอร์เนล

อ้างอิง


4
ขอบคุณสำหรับคำอธิบายในเชิงลึกว่าทำไมสิ่งนี้ถึงไม่ทำงานและจะแก้ไขได้อย่างไร หนึ่งในคำตอบของคำถามที่เชื่อมโยงที่กล่าวถึงdmesgแต่มันก็ไม่สมเหตุสมผลหากไม่มีบริบทที่ระบุไว้ที่นี่
Bradd Szonye

16

ฉันเจอของฉันแล้ว /var/log/upstart/


ผมพบว่าเหมืองในแฟ้ม/var/log/upstart/job.logที่jobเป็นชื่อของงานของฉัน
Kenny Evitt

AFAIK นั่นคือสิ่งที่ stdout / stderr จากงานไป คำถามนี้เกี่ยวกับข้อความบันทึกจากการพุ่งพรวดตัวเองที่ไม่เกี่ยวข้องกับงานเฉพาะใด ๆ
Vanessa Phipps
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.