Score:0

syslog-ng: วิธีลดเวลาแฝงสูงเมื่อส่งต่อบันทึกไปยังผู้บริโภค syslog tcp

ธง al

อัปเดต 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 และดูเหมือนว่าจะตอบสนองได้ดีกว่ามากและความล่าช้าในบางครั้งที่ยาวนานก็หายไป อย่างไรก็ตามสิ่งนี้จะทำให้ยากต่อการรักษาความปลอดภัยของการเชื่อมต่อในอนาคต

Score:2
ธง vn

สิ่งที่คุณสัมผัสไม่ปกติ การกำหนดค่าข้างต้นควรส่งต่อบันทึกไปยัง d_telegraf และ d_file ในเวลาเดียวกันโดยเร็วที่สุด

ฉันเชื่อว่าคุณกำลังมีปัญหาในการเชื่อมต่อ ซึ่งต้องเป็นสาเหตุของการหน่วงเวลา 60 วินาที ซึ่งเป็นค่าเริ่มต้นของตัวจับเวลาการเชื่อมต่อใหม่

คุณสามารถลดค่านี้โดยใช้ปุ่ม เวลาเปิดใหม่ () ตัวเลือกสากล ตัวอย่างเช่น:

ตัวเลือก {
  เวลาเปิดใหม่ (1);
};

คุณยังสามารถเริ่ม syslog-ng ในส่วนหน้า (ในโหมดดีบัก) เพื่อตรวจสอบปัญหาการเชื่อมต่อ:

$syslog-ng -Fdev
al flag
ขอบคุณสำหรับคำแนะนำเกี่ยวกับ `-Fdev` - จากนี้ ฉันได้พิจารณาแล้วว่า syslog-ng กำลังรายงาน `EOF บนช่องสัญญาณควบคุม ปิดการเชื่อมต่อ ' เกือบ 30 วินาทีหลังจากข้อความบันทึกล่าสุด (หลังจากไคลเอนต์ยุติ) และ จากนั้น 30 วินาทีต่อมา: `สร้างการเชื่อมต่อ Syslog` เอาต์พุต syslog-ng การตรวจสอบ Wireshark แสดง FIN, ACK ตามด้วยไม่มีอะไรเป็นเวลา 60 วินาทีตามด้วย SYN ที่ฉันสงสัยว่าเป็นการเชื่อมต่อใหม่ ฉันจะลอง `time-reopen(1)` ต่อไป
al flag
ฉันตั้งค่า `time-reopen(1)` และดูเหมือนว่าการเชื่อมต่อจะเชื่อมต่อใหม่อย่างรวดเร็วอย่างที่คาดไว้ โดยพื้นฐานแล้วปัญหา "หายไป" ด้วยการลองใหม่สั้นๆ นี้ อย่างไรก็ตาม ฉันต้องการทราบว่าอะไรเป็นสาเหตุของ EOF บนช่องสัญญาณควบคุม - เกิดจากไคลเอ็นต์ที่ทำงานผิดปกติซึ่งปิดโดยไม่ปิดการเชื่อมต่อ syslog หรือไม่ ไคลเอนต์กำลังส่ง syslog ผ่าน UDP - syslog ใช้สถานะการเชื่อมต่อโปรโตคอลผ่าน UDP หรือไม่
al flag
ลูกค้าเป็นแอปพลิเคชันภายในองค์กรที่เขียนด้วย Boost::Log - เนื่องจากสิ่งนี้อาจกลายเป็นคำถามเกี่ยวกับการเขียนโปรแกรม บางทีฉันอาจต้องถามใน StackOverflow ว่ามีวิธีให้พวกเขา "ตัดการเชื่อมต่อ" เมื่อสิ้นสุดโปรแกรมอย่างเป็นระเบียบหรือไม่
al flag
ฉันคิดว่าลูกค้า UDP เป็นปลาเฮอริ่งแดง ฉันสามารถทำซ้ำพฤติกรรมเดียวกันด้วยข้อความ syslog UDP เดียวที่ส่งโดย `logger -d ' จากบันทึก ฉันเห็นว่า syslog-ng รับรายการ ส่งไปยังปลายทางทั้งเครือข่ายและไฟล์ จากนั้นรายงาน "EOF เกิดขึ้นขณะไม่ได้ใช้งาน" 5 วินาทีต่อมา จากนั้นปิดการเชื่อมต่อ "EOF บนช่องสัญญาณควบคุม" จากนั้น 30 - 6o วินาทีต่อมาจะเชื่อมต่อใหม่ แต่ฉันยังเห็นสิ่งนี้เกิดขึ้น ซึ่งเกิดขึ้นน้อยมาก เมื่อไม่มีการใช้งานเลย ดังนั้นอาจมีปัญหาด้านเครือข่ายแฝงอยู่ ฉันใช้เครือข่ายนักเทียบท่า แต่ทั้งหมดอยู่ในโฮสต์เดียวกัน
al flag
นี่ค่อนข้างจะเทอะทะไปหน่อย ดังนั้นฉันอาจเขียนเป็นคำถามแยกต่างหาก ขอขอบคุณอีกครั้งสำหรับคำแนะนำว่าจะเริ่มมองหาที่ใด
MrAnno avatar
vn flag
ข้อความเกี่ยวกับ "ช่องควบคุม" อาจทำให้เข้าใจผิด ซึ่งไม่เกี่ยวกับการเชื่อมต่อเครือข่ายของคุณ แต่เกี่ยวกับช่องควบคุมของ syslog-ng เอง ข้อความ EOF หมายความว่าคุณอาจดำเนินการ `syslog-ng-ctl` เพื่อสืบค้นสถิติ โหลดซ้ำ หรือเพื่อรีสตาร์ท syslog-ng
al flag
อา ฉันคิดว่าต้องมีกระบวนการ `syslog-ng-ctl` อัตโนมัติภายในคอนเทนเนอร์ Docker อย่างเป็นทางการซึ่งทำงานเป็นระยะๆ เนื่องจากฉันไม่เคยเรียกใช้โปรแกรมนั้นด้วยตนเอง นั่นจะอธิบายข้อความนั้น
Score:1
ธง cn

ลอง flush-lines(0) โดยลบบรรทัดนั้นทั้งหมดเข้าด้วยกัน

syslog-ng จัดการกับ flush_lines(0) อย่างไร

https://github.com/syslog-ng/syslog-ng/issues/1411

al flag
อันที่จริง ฉันได้ลอง `flush-lines(0)` แล้วก็ละเว้นเช่นกัน ดูเหมือนจะไม่มีผลใดๆ กับปัญหานี้ และพบหลักฐาน (ที่ฉันใส่ผิดตั้งแต่นั้นเป็นต้นมา เอกสาร syslog-ng นั้นเบามากในรายละเอียดที่น่าเศร้า) ว่าค่า 0 ไม่ถูกต้องจริง

โพสต์คำตอบ

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