ความสัมพันธ์ของ rsyslog และ journald บน Ubuntu 16.04


18

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

ข้อความส่วนใหญ่ดูเหมือนจะปรากฏขึ้นทั้งใน/var/log/syslogและผ่านjournalctlแต่ฉันไม่สามารถดูการกำหนดค่าที่ชัดเจนใด ๆ สำหรับการส่งต่อระหว่างสองทั้งใน/etc/systemd/journald.conf(ซึ่งเป็นพื้นทั้งหมดออกความเห็นโดยค่าเริ่มต้น) หรือ/etc/rsyslog.conf /etc/rsyslog.d/50-default.confฉันพยายามค้นหาเอกสารอย่างเป็นทางการหรือแม้กระทั่งโพสต์บล็อกที่อธิบายว่ามีการตั้งค่า hese สองใน Ubuntu แต่ยังไม่พบอะไรเลย

เพื่อเป็นการเพิ่มความสับสนของฉันฉันได้ดำเนินการlogger -p local1.info Testในพื้นที่และพบว่าไม่มีอะไรที่ถูกเขียนขึ้นเพื่อในขณะที่ข้อความไม่แสดงขึ้นภายใต้/var/log/syslogjournalctl

คำถามของฉันคือ:

  1. journald และ rsyslog ทำงานร่วมกันบน Ubuntu 16.04 อย่างไร (โดยค่าเริ่มต้น)
  2. ทำไมข้อความที่ส่งมาจากการloggerปรากฏในวารสาร แต่ไม่ใช่ใน syslog?

อัปเดต: การเปิดใช้งานloggerไม่ได้ตามที่คาดไว้เป็นความผิดพลาดในตอนท้ายของฉันดังนั้นจึงไม่เกี่ยวข้องกับคำถามหลัก

คำตอบ:


12

โดยค่าเริ่มต้นrsyslogคือการใช้โมดูล "imuxsock" โมดูลให้:

ความสามารถในการรับข้อความ syslog ผ่านทาง Unix sockets ที่สำคัญที่สุดนี้เป็นกลไกที่ที่ syslog (3) โทรส่งข้อความ syslog เพื่อ rsyslogd [1]

มันเป็นไปได้สำหรับrsyslogการนำเข้าโครงสร้างข้อความเข้าสู่ระบบจาก systemd วารสารใช้โมดูลที่ชื่อ "imjournal" [2]

มันสามารถโหลดได้เช่น:

module(load="imjournal") 

ใน:

/etc/rsyslog.conf

ในทางกลับกัน "systemd-journald" รวบรวมข้อมูลทั้งหมดเอง:

man systemd-journald

systemd-journald เป็นบริการระบบที่รวบรวมและจัดเก็บข้อมูลการบันทึก มันสร้างและรักษาวารสารที่มีโครงสร้างและจัดทำดัชนีโดยยึดตามข้อมูลการบันทึกที่ได้รับจากแหล่งข้อมูลที่หลากหลาย:

   ·   Kernel log messages, via kmsg
   ·   Simple system log messages, via the libc syslog(3) call
   ·   Structured system log messages via the native Journal API, 
       see sd_journal_print(4)
   ·   Standard output and standard error of system services
   ·   Audit records, via the audit subsystem

คุณสามารถปิดการใช้งานในขณะที่คุณยังคงสามารถเข้าถึงระบบบันทึกการใช้rsyslogdjournalctl

$ sudo systemctl mask rsyslogd
$ sudo systemctl stop syslog.socket
$ sudo systemctl stop rsyslog.service
$ systemctl is-active rsyslog.service 
inactive
$ logger -p mail.info Helllooo
$ journalctl

ตัวอย่างเช่น centos กำลังใช้โมดูล "imuxsock" เพื่อดักจับข้อมูล "systemd-journald" ทั้งหมดผ่านrsyslogขณะที่ opensuse ไม่มี "syslog" เลย


หากต้องการค้นหาสาเหตุที่ข้อความของคุณไม่ได้จบลง/var/log/syslogคุณควรตรวจสอบไฟล์นี้:

less /etc/rsyslog.d/50-default.conf

มองหา*.infoดูที่พวกเขาจะถูกเก็บไว้ก็อาจจะมีไฟล์อื่น ๆ messagesเช่น

สำหรับฉันมันปรากฏขึ้นทั้งในและjournalctlsyslog


logger -p .info helloไม่ถูกต้อง คุณยังไม่ได้ให้ชื่อสิ่งอำนวยความสะดวกใด ๆ
luv.preet

อัปเดตคำตอบ ....
Ravexina

ตามที่ฉันบันทึกไว้ในการแก้ไขของฉันloggerไม่ทำงานเป็นความผิดของฉันดังนั้นตอนนี้ได้รับการแก้ไขแล้ว (ขอบคุณสำหรับเคล็ดลับต่อไป) สำหรับบันทึกแสดงในสองแห่งบันทึกย่อของคุณimuxsockน่าจะเป็นกุญแจสำคัญ: ดูเหมือนว่าทั้ง rsyslog และ journald กำลังฟังข้อความ syslog ในเครื่องดังนั้นเหตุใดจึงบันทึกเหล่านั้นลงในสองบันทึกแยกต่างหาก
motns

ฉันตามข้างบนบน Ubuntu และตอนนี้ฉันไม่ได้รับบันทึกจากคนตัดไม้ hmm: root @ T: ~ # logger -p mail.info Helllooo root @ T: ~ # journalctl ไม่พบไฟล์เจอร์นัล - ไม่มีรายการ - ความคิดใด ๆ
Hackeron

คำตอบที่ดี สิ่งที่ฉันหายไปคือบันทึกเกี่ยวกับวิธีการที่ journald รู้จักการเปิดซ็อกเก็ต syslog (หรือถ้าไม่มันจะได้รับข้อความ syslog เป็นอย่างอื่น) เมื่อ rsyslog ถูกปิดใช้งาน? หรือจำเป็นต้องกำหนดค่าเจอร์นัลด์ด้วยตนเองหรือไม่
Matthijs Kooijman

4

Systemd เป็นระบบเริ่มต้นที่ใช้เพื่อเริ่มบริการเมื่อระบบบูทขึ้น Journald รับผิดชอบในการสร้างบันทึกสำหรับบริการที่เริ่มโดย systemd โดยการรวม journald เข้ากับ systemd แม้แต่ข้อความกระบวนการบูตที่เร็วที่สุดก็สามารถใช้ได้กับ journald

Rsyslog เป็น daemon ที่สร้างขึ้นเป็นพิเศษสำหรับการประมวลผลบันทึกไม่มีส่วนเกี่ยวข้องกับเจอร์นัล สามารถบันทึกได้หลายวิธีและส่งออกได้หลายวิธี ไม่ได้เปิดใช้งานโดยค่าเริ่มต้นว่าจะใช้ข้อความบันทึกจาก journald ด้วย เพื่อที่คุณจะต้องเขียนในไฟล์ /etc/rsyslog.conf

$ModLoad imjournal # im -> input module
OR
load(type="imjournal")

ตอนนี้ก็จะยอมรับบันทึกจาก journald ด้วย แต่ฉันขอแนะนำให้คุณไม่ควรเปลี่ยนไฟล์ /etc/rsyslog.conf ของคุณ

ในตอนท้ายของไฟล์ /etc/rsyslog.conf จะมีบรรทัดเขียน

$IncludeConfig /etc/rsyslog.d/*.conf

หมายความว่าไฟล์ทั้งหมดที่มี. conf อยู่ท้ายโฟลเดอร์ใน /etc/rsyslog.d/ ควรรวมอยู่ในระหว่างการโหลด rsyslog ดังนั้นการกำหนดค่าที่กำหนดเองทั้งหมดของคุณควรไปในไฟล์เหล่านี้

ฉันขอแนะนำให้คุณสร้างไฟล์ /etc/rsyslog.d/journald.conf และวางตัวอย่างด้านล่างลงไป

ด้านล่างนี้เป็นตัวอย่างข้อมูลจากหน้าอย่างเป็นทางการของ rsyslog ของ imjournal

module(load="imjournal" PersistStateInterval="100"
   StateFile="/path/to/file") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages

action(type="mmjsonparse")
action(type="omfile" file="/var/log/ceelog" template="CEETemplate")

บรรทัดที่ 1 - โหลดโมดูล imjournal เพื่อรับบันทึกจากเจอร์นัล

2 - โมดูล mmjsonparse ถูกโหลดใช้ในการแยกวิเคราะห์บันทึก

3 - พวกเขามีโครงสร้างเป็นรูปแบบที่อธิบายไว้ในแม่แบบ

4 - แยกวิเคราะห์บันทึกเหล่านั้นโดยใช้โมดูล mmjsonparse

5 - มันส่งบันทึกเหล่านั้นไปยังไฟล์คือ / var / log / ceelog ตามโครงสร้างที่ให้ไว้ในแม่แบบที่กำหนดโดยใช้โมดูล omfile (ไฟล์โมดูลเอาท์พุท - เอาท์พุทเป็นไฟล์) โมดูล

ทำการเปลี่ยนแปลงในการกำหนดค่าตามความต้องการของคุณ


ขอบคุณสำหรับคำอธิบาย แต่ฉันคิดว่าคำตอบของ @Ravexina ใกล้จะช่วยให้ฉันเข้าใจว่าเกิดอะไรขึ้นกับ rsyslog และ journald ตามค่าเริ่มต้น (ไม่มีการกำหนดค่าเพิ่มเติม)
motns
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.