- Remap inspired `reduce` transform to solve multiline merging · Issue #4258 · vectordotdev/vector
- This issue proposes an idea for a new reduce transform that borrows from the new remap transform. The intent is to solve event merging, as well as other reduce-like problems, through robust reduce ...
โพสต์นี้แปลโดย AI
บทสรุปของโพสต์โดย durumis AI
- Vector เป็นเครื่องมือรวบรวมและประมวลผลล็อกที่เปิดตัวโดย DataDog พัฒนาขึ้นบนพื้นฐานของ Rust มีข้อดีคือการแปลงล็อกง่ายกว่า OTel และสามารถจัดการแบบประกาศได้
- แต่เนื่องจากเอกสารอย่างเป็นทางการไม่ได้รับการอัปเดตบ่อยนักและมีข้อมูลที่เกี่ยวข้องน้อย ทำให้การใช้งานอาจทำได้ยากขึ้น และเมื่อใช้งานกับ Helm จะต้องมีการตั้งค่าเพิ่มเติม เช่น การตั้งค่า customConfig การประมวลผลล็อกหลายบรรทัด การตั้งค่า data_dir และการจัดการอักขระพิเศษ
- โดยเฉพาะอย่างยิ่งเมื่อใช้ Helm ควรระมัดระวังในการจัดการอักขระพิเศษ และสำหรับการพิจารณาเกี่ยวกับสถาปัตยกรรม ควรอ้างอิงเนื้อหาที่เกี่ยวข้องกับ Topology ในเอกสารอย่างเป็นทางการ
วันนี้ผมจะมาแนะนำเครื่องมือชื่อ Vector
ซึ่งเป็นผลิตภัณฑ์ที่ออกมาจาก DataDog
มันทำหน้าที่เหมือนกับ promtail, otel ที่เราคุ้นเคย
โดยรองรับการรวบรวม บูรณาการ และแปลงข้อมูลล็อก
ลักษณะเด่นมีดังนี้
1. เขียนด้วยภาษา Rust แทนที่จะเป็น Golang
2. เขียนโค้ดแปลงล็อกได้ง่ายกว่า Otel
3. สามารถจัดการแบบประกาศนียบัตรได้
4. เอกสารอย่างเป็นทางการเขียนได้ดี
แต่ในเว็บไซต์อย่างเป็นทางการก็จะโฆษณาจุดเด่นต่างๆ ดังนี้
แต่จุดเด่นส่วนใหญ่ก็เป็นสิ่งที่เครื่องมืออื่นๆ โฆษณาเหมือนกัน ดังนั้นผมจึงตัดออกไปในส่วนข้างต้น
และจากการใช้งานพบข้อเสียดังนี้
1. เอกสารอย่างเป็นทางการไม่ได้รับการอัปเดตเป็นเวอร์ชันล่าสุด
2. หาข้อมูลที่เกี่ยวข้องได้ยาก
ประมาณนี้ครับ
แม้ว่าการใช้งานจะไม่พบปัญหาใหญ่ๆ แต่ก็รู้สึกเสียดายที่เอกสารที่เกี่ยวข้องไม่ครบถ้วนหรือไม่ได้รับการอัปเดตเป็นเวอร์ชันล่าสุด
เนื่องจากผมใช้ Helm เท่านั้น ผมจึงเขียนตามมาตรฐานของ Helm ขออภัยไว้ ณ ที่นี้ด้วยครับ...
เขียนไฟล์ values.yaml ง่ายๆ ดังนี้
จากคำสั่งข้างต้นทำให้สามารถรวมล็อกที่ได้จาก k8s เข้ากับ Loki ได้อย่างง่ายดาย
ระหว่างที่เขียนพบปัญหาอยู่หลายอย่าง
อย่างแรกคือ เมื่อเขียน customConfig ตัวเลือกที่กำหนดค่าเริ่มต้นไว้จะถูกปิดใช้งานทั้งหมด ดังนั้นคุณต้องเขียน source, transform และ sinks เองทั้งหมด
ประการที่สอง ล็อกจาก k8s มักจะถูกส่งมาเป็นบรรทัดๆ ดังนั้นล็อกหลายบรรทัด เช่น ข้อความผิดพลาด (error trace) จึงจำเป็นต้องรวมเข้าด้วยกัน
source.file มีตัวเลือกสำหรับ multiline แต่ k8s ไม่มี
และจากการอภิปรายภายในทีม Vector พบว่า transform.reduce รองรับและแนะนำให้ใช้
ประการที่สาม ต้องตั้งค่า data_dir ทั้งใน root.data_dir และ custom_config ด้วย
ค่าจะถูกใส่ในนั้น และหากไม่ได้กำหนดค่าไว้ จะพบข้อผิดพลาดเกี่ยวกับการอนุญาตบ่อยๆ 555
ประการที่สี่ ผมใช้ Helm ในการปรับใช้ ดังนั้นไวยากรณ์จึงทับซ้อนกัน ทำให้บางครั้งจำเป็นต้องใช้การหลบหนี (escape)
เอกสารระบุว่า "{{ metadata }}" ดังนั้นผมจึงนำไปใช้ตามนั้น แต่ปรากฏว่าเกิดข้อผิดพลาด...
ดังนั้นเมื่อใช้ Helm ต้องใช้ "{{ {{ metadata }} }}" เพื่อหลบหนี!
นอกจากนี้ หากมีข้อสงสัยเกี่ยวกับสถาปัตยกรรม แนะนำให้ดูบทความนี้
https://vector.dev/docs/setup/deployment/topologies/