ฉันมีตัวบันทึกกิจกรรมของผู้ใช้และระบบการสอบถามสำหรับ ISP ที่มีอัตราเหตุการณ์บันทึกที่สูงมาก (5k-10K /วินาที) จำเป็นต้องเชื่อมโยงทั้ง Radius/Session และ NAT Syslogs ตามค่าทั่วไป IP ภายใน
สนาม. แต่ละเซสชันมีสองเหตุการณ์เริ่มต้นและหยุด ข้อมูลประมาณ 24 ชั่วโมงที่ผลิตโดยผู้ใช้ 3,000 ราย อาจเท่ากับ 20 ล้านบันทึก ซึ่งคาดว่าจะเพิ่มขึ้น
โซลูชันของฉันประกอบด้วยเอเจนต์การแยกวิเคราะห์และคงอยู่ 2 รายการสำหรับบันทึกแต่ละประเภท ซึ่งเขียนใน Golang พร้อมแบ็กเอนด์ Postgresql db ฉันประสบปัญหาหลายอย่างทั้งสองด้าน การแยกวิเคราะห์และการจัดเก็บไม่สามารถรักษาอัตราข้อมูลที่สูงได้แม้หลังจากเหตุการณ์ syslog ที่บัฟเฟอร์ (ในหน่วยความจำ) เพื่อรักษาพื้นที่ว่าง ฉันต้องจัดกลุ่มแต่ละเซสชันเป็นเรกคอร์ดเดียว และระบุผู้ใช้เซสชัน NAT จากบันทึกอื่น ซึ่งใช้งานผ่านทริกเกอร์ บัฟเฟอร์ใช้ RAM ของระบบและในที่สุดกระบวนการจะถูกฆ่า การเขียนไปยัง PGSQL ทำได้ช้าเนื่องจากการระบุผู้ใช้และดัชนีในตาราง
เพื่อทบทวนแนวทางของฉันอีกครั้ง และฉันต้องการค้นหาคำแนะนำเกี่ยวกับวิธีปรับปรุงประสิทธิภาพ ไม่ว่าฉันจะใช้วิธีการใด ฉันต้องระบุผู้ใช้ NAT จากบันทึกของ Radius Session ก่อนที่จะคงข้อมูลนี้ไว้ในฐานข้อมูล