Score:0

syslog-ng / telegraf : EOF เกิดขึ้นเมื่อไม่ได้ใช้งาน - เข้ากันไม่ได้?

ธง al

นี่เป็นคำถามที่ตามมาต่อจากนี้ คำถามก่อนหน้าสร้างขึ้นเพราะฉันพบข้อมูลเพิ่มเติมและง่ายกว่าที่จะตั้งเป็นคำถามใหม่

ฉันใช้ syslog-ng OSE v3.31.2 เพื่อรับข้อความ syslog RFC3164 ผ่านพอร์ต UDP 514 จากลูกค้าจำนวนมาก และเขียนไปยังทั้งสองไฟล์ และส่งต่อไปยัง telegraf ผ่านพอร์ต TCP 601 ที่ไม่ใช่ TLS RFC5424 เพื่อแทรกลงใน ฐานข้อมูล InfluxDB

การกำหนดค่า syslog-ng ของฉันคือ:

@เวอร์ชั่น: 3.29
@รวม "scl.conf"

ตัวเลือก {
    ล้างเส้น (1);
};
    
แหล่งที่มา s_network {
    พอร์ต udp(ip(0.0.0.0)(514));
};

ปลายทาง d_file {
    ไฟล์ ("/var/log/messages");
};
    
ปลายทาง d_telegraf {
    syslog (พอร์ต "telegraf" (601) การขนส่ง (tcp));
};
    
บันทึก {
    แหล่งที่มา (s_network);
    ปลายทาง (d_telegraf);
    ปลายทาง (d_file);
};

ส่วนที่เกี่ยวข้องของการกำหนดค่า telegraf ของฉันมีลักษณะดังนี้:

[global_tags]

[ตัวแทน]
  ช่วงเวลา = "100ms"
  round_interval = จริง
  metric_buffer_limit = 10,000
  flush_buffer_when_full = จริง
  collection_jitter = "0 วินาที"
  flush_interval = "100ms"
  flush_jitter = "0 วินาที"
  แก้จุดบกพร่อง = จริง
  เงียบ = เท็จ

[[เอาท์พุท.influxdb]]
  url = ["http://influxdb:8086"]
  ฐานข้อมูล = "logs_db"

[[อินพุต.syslog]]
  เซิร์ฟเวอร์ = "tcp://telegraf:601"

โดยพื้นฐานแล้ว syslog-ng ถูกตั้งค่าเพื่อส่งต่อรายการ syslog ผ่านการเชื่อมต่อ TCP ไปยัง telegraf

ปัญหาคือฉันเห็นว่า syslog-ng ประสบปัญหาการตัดการเชื่อมต่อ TCP จาก telegraf บ่อยครั้ง สิ่งเหล่านี้แสดงในบันทึก syslog-ng เป็น:

[2021-11-17T02:55:32.662972] EOF เกิดขึ้นในขณะที่ไม่ได้ใช้งาน fd='12'
[2021-11-17T02:55:32.663102] ปิดการเชื่อมต่อ Syslog; fd='12', เซิร์ฟเวอร์='AF_INET(192.168.0.6:601)', time_reopen='60'
[2021-11-17T02:56:32.719139] สร้างการเชื่อมต่อ Syslog แล้ว fd='12', เซิร์ฟเวอร์='AF_INET(192.168.0.6:601)', local='AF_INET(0.0.0.0:0)'

การตัดการเชื่อมต่อนี้มักจะเกิดขึ้นเมื่อฉันส่งบันทึกไปยัง syslog-ng ด้วย:

คนตัดไม้ -i -d -- เซิร์ฟเวอร์ localhost ทดสอบ

แต่ถ้าฉันปล่อยไว้เฉยๆ ฉันก็จะได้:

[2021-11-17T02:57:05.392356] EOF บนช่องควบคุม ปิดการเชื่อมต่อ

ในกรณีเหล่านี้ 192.168.0.6 คือเซิร์ฟเวอร์โทรเลข

แม้ว่าฉันสามารถตั้งค่าตัวเลือกได้ เวลาเปิดใหม่ (1) เพื่อให้การเชื่อมต่อใหม่เร็วขึ้น ฉันต้องการค้นหาสาเหตุที่แท้จริงและป้องกันการตัดการเชื่อมต่อตั้งแต่แรก

เป็นไปได้ไหมว่ามีความเข้ากันไม่ได้ระหว่าง syslog-ng และ telegraf ซึ่งเป็นสาเหตุของ EOF นี้และการตัดการเชื่อมต่อที่ไม่สะอาด

ทั้งหมดนี้ทำงานภายในสแต็คที่เขียนโดยนักเทียบท่าบนโฮสต์เดียว


แก้ไข: ฉันเริ่มมองหา RFC5424 และ RFC6587. การใช้ Wireshark เพื่อดมกลิ่นแพ็กเก็ตจาก syslog-ng ซึ่งกำหนดไว้สำหรับ telegraf ฉันได้พิจารณาแล้วว่าสิ่งเหล่านี้กำลังใช้ octet-stuffing (หรือที่เรียกว่า non-transparent framing) แทนที่จะใช้ octet-counting ซึ่ง telegraf คาดหวังไว้โดยค่าเริ่มต้น เพย์โหลดของแต่ละข้อความ syslog ไปยัง telegraf เริ่มต้นด้วยอักขระ "<" แทนที่จะเป็นจำนวนเต็ม

ฉันตั้งสมมติฐานว่า telegraf ยอมรับข้อความเหล่านี้ แต่ติดขัดในการแยกวิเคราะห์ ดังนั้นจึงปิดการเชื่อมต่อ FIN แรกที่ปิดการเชื่อมต่อมาจากโทรเลข

น่าเสียดายที่เมื่อฉันตั้งค่า telegraf ให้ยอมรับการใส่กรอบที่ไม่โปร่งใส มันปฏิเสธรายการทั้งหมดและฉันยังไม่ได้หาสาเหตุ

ฉันยังไม่ทราบวิธีกำหนดค่า syslog-ng เป็นข้อความเอาต์พุตด้วยการกำหนดเฟรมแบบ octet-counting

แต่อย่างน้อยข้อความ EOF และการตัดการเชื่อมต่อได้หยุดเกิดขึ้นแล้ว แต่ฉันไม่แน่ใจว่าจะมีความหมายมากหาก telegraf ปฏิเสธข้อความทั้งหมดทันที

Score:0
ธง al

ฉันได้พิจารณาแล้วว่า syslog-ng เป็น การส่งข้อความเฟรมแบบนับอ็อกเต็ตไปยังเทเลกราฟ

สาเหตุของปัญหานี้คือ telegraf ตัดการเชื่อมต่อ TCP จาก syslog-ng หลังจากผ่านไป 5 วินาทีโดยไม่ได้รับข้อความ สิ่งนี้ตรงกันข้ามกับเอกสารที่ให้มาพร้อมกับปลั๊กอิน telegraf syslog ซึ่งระบุว่าการหมดเวลานี้ใช้กับเวลารับข้อความเดียวเท่านั้น ไม่ใช่เวลาระหว่างข้อความ อาจเป็นปัญหาภาษาอังกฤษ / การตีความ การตั้งค่า read_timeout ถึง 0 ในการกำหนดค่า telegraf ก็เพียงพอที่จะป้องกันไม่ให้ telegraf ตัดการเชื่อมต่อ

โพสต์คำตอบ

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