อัปเดต 2: ฉันได้ตอบคำถามนี้ผ่านคำถามใหม่ของฉันที่ลิงค์ด้านล่าง สาเหตุที่แท้จริงคือพฤติกรรมของ telegraf โดยค่าเริ่มต้นจะตัดการเชื่อมต่อ TCP 5 วินาทีหลังจากข้อความที่ได้รับล่าสุด อาจเป็นเพราะการออกแบบ แต่ฉันมีปัญหากับเอกสารของพวกเขาซึ่งทำให้ฉันมองเห็นได้ยากว่าอาจเป็นการแก้ไข
บางทีคำถามนี้อาจถูกลบไปแล้ว?
อัปเดต 1: แทนที่จะแก้ไขคำถามนี้อย่างกว้างขวาง ทำให้คำตอบปัจจุบันไม่สมเหตุสมผล ฉันได้โพสต์คำถามใหม่ตามข้อมูลใหม่ที่ฉันได้รับจากการโพสต์คำถามนี้
syslog-ng / telegraf : EOF เกิดขึ้นเมื่อไม่ได้ใช้งาน - เข้ากันไม่ได้?
ฉันใช้ syslog-ng Open-Source Edition (OSE) v3.31.2 ใน docker-compose stack
ฉันมีข้อความ syslog ที่มาถึงเครือข่ายจากโฮสต์ต่างๆ ผ่าน UDP (ซึ่งฉันถูกจำกัดเนื่องจากลูกค้าของฉันใช้ Boost::Log และสิ่งนี้ไม่รองรับ syslog ผ่าน TCP เฉพาะ UDP) และฉันได้ตั้งค่า syslog-ng ให้ส่งต่อ เหล่านี้ไปยังบริการดาวน์สตรีมอื่น สิ่งนี้เกิดขึ้นเป็นโทรเลขโดยใช้ a อินพุต .syslog
โมดูลแต่ฉันไม่แน่ใจว่ายังสำคัญอยู่ไหม
การกำหนดค่าของฉันมีลักษณะดังนี้:
@เวอร์ชัน: 3.29
@รวม "scl.conf"
ตัวเลือก {
ล้างเส้น (1);
};
แหล่งที่มา s_network {
พอร์ต udp(ip(0.0.0.0)(514));
};
ปลายทาง d_file {
ไฟล์ ("/var/log/messages");
};
ปลายทาง d_telegraf {
syslog (พอร์ต "telegraf" (6514) การขนส่ง (tcp));
};
บันทึก {
แหล่งที่มา (s_network);
ปลายทาง (d_telegraf);
ปลายทาง (d_file);
};
ฉันได้ตั้งค่าส่วนกลางอย่างชัดเจน ล้างเส้น
ค่าเป็น 1 ฉันคิดว่านี่เป็นค่าเริ่มต้น แต่ฉันต้องการแน่ใจ ฉันต้องการให้ส่งต่อข้อความบันทึกทันทีที่ได้รับ
เวลาส่วนใหญ่ใช้งานได้ - แต่ละ "บรรทัด" ของบันทึกมาถึง syslog-ng ผ่าน UDP 514 และเขียนลงในไฟล์ทันที /var/log/messages
และในเกือบทุกกรณี พวกมันจะถูกส่งต่อไปยัง telegraf บนพอร์ต TCP 6514 ทันที
ปัญหาที่ฉันพบคือบ่อยครั้งที่ syslog-ng ระงับบันทึกขาเข้าหลายบรรทัดเป็นเวลาสูงสุดประมาณ 30-60 วินาที จากนั้นจึงส่งไปยัง telegraf เป็นก้อนใหญ่ ดูเหมือนจะไม่มีรูปแบบมากนัก แต่มันเกิดขึ้นมากมาย ที่แปลกก็คือว่า /var/log/messages
ไฟล์มีรายการบันทึกที่ขาดหายไปซึ่งเขียนขึ้นทันที มีเพียงการส่งมอบเครือข่ายเท่านั้นที่ล่าช้า ฉันคิดอย่างนั้น ฟลัชไลน์(1)
จะหลีกเลี่ยงการบัฟเฟอร์นี้ แต่ดูเหมือนจะไม่เป็นเช่นนั้น
ฉันใช้ Wireshark เพื่อระบุว่าความล่าช้าอยู่ที่ใด และอยู่ในเอาต์พุตของแพ็กเก็ตจาก syslog-ng ระหว่าง syslog-ng และ telegraf TCP พอร์ต 6514
ฉันสงสัยว่านี่อาจเป็นอัลกอริทึมของ TCP Nagle หรือไม่ ถ้าใช่ มีวิธีเปิดใช้ตัวเลือกซ็อกเก็ต TCP_NO_DELAY สำหรับไดรเวอร์ปลายทาง syslog ของ syslog-ng หรือไม่
ท้ายที่สุดแล้ว สิ่งที่ฉันกำลังมองหาคือบริการ syslog ที่รวดเร็วและมีเวลาแฝงต่ำที่สามารถรวบรวมและส่งต่อบันทึกได้เร็วที่สุดสำหรับการตรวจสอบดาวน์สตรีมแบบเรียลไทม์
แก้ไข: ฉันลองเปลี่ยนไปใช้การขนส่ง UDP ระหว่าง syslog-ng และ telemetry และดูเหมือนว่าจะตอบสนองได้ดีกว่ามากและความล่าช้าในบางครั้งที่ยาวนานก็หายไป อย่างไรก็ตามสิ่งนี้จะทำให้ยากต่อการรักษาความปลอดภัยของการเชื่อมต่อในอนาคต