ความท้าทายของฉัน
ฉันต้องทำการ tcpdumping ข้อมูลจำนวนมาก - จริง ๆ แล้วจากอินเทอร์เฟซ 2 เหลือในโหมด promiscuous ที่สามารถเห็นปริมาณการใช้งานจำนวนมาก
เพื่อสรุปมันขึ้นมา
- บันทึกปริมาณการใช้งานทั้งหมดในโหมดที่หลากหลายจาก 2 อินเตอร์เฟส
- อินเทอร์เฟซเหล่านั้นไม่ได้กำหนดที่อยู่ IP
- ไฟล์ pcap จะต้องหมุนต่อ ~ 1G
- เมื่อไฟล์ 10 TB ถูกเก็บไว้ให้เริ่มต้นการตัดที่เก่าที่สุด
ฉันกำลังทำอะไรอยู่
ตอนนี้ฉันใช้ tcpdump เช่นนี้:
ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
$FILTER
มีฟิลเตอร์ src / DST -i any
เพื่อที่ฉันสามารถใช้ เหตุผลนี้คือว่าฉันมีสองอินเตอร์เฟสและฉันต้องการเรียกใช้การถ่ายโอนข้อมูลในเธรดเดียวมากกว่าสอง
compress.sh
ดูแลการมอบหมาย tar ให้กับ CPU core อื่นบีบอัดข้อมูลให้ชื่อไฟล์ที่เหมาะสมและย้ายไปยังตำแหน่งเก็บถาวร
ฉันไม่สามารถระบุสองอินเทอร์เฟซได้ดังนั้นฉันเลือกใช้ตัวกรองและการถ่ายโอนข้อมูลจากany
อินเทอร์เฟซ
ตอนนี้ฉันไม่ได้ดูแลทำความสะอาดใด ๆ แต่ฉันวางแผนที่จะตรวจสอบดิสก์และเมื่อฉันเหลือ 100G ฉันจะเริ่มเช็ดไฟล์ที่เก่าที่สุด - นี่น่าจะดี
และตอนนี้; ปัญหาของฉัน
ฉันเห็นแพ็คเก็ตที่ตกลงมา สิ่งนี้มาจากดัมพ์ที่รันมาสองสามชั่วโมงและรวบรวมไฟล์ pcap ประมาณ 250 กิ๊ก:
430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel <-- This is my concern
ฉันจะหลีกเลี่ยงแพ็กเก็ตจำนวนมากที่ถูกทิ้งได้อย่างไร?
สิ่งเหล่านี้ฉันได้ลองหรือดูไปแล้ว
เปลี่ยนมูลค่าของ/proc/sys/net/core/rmem_max
และ/proc/sys/net/core/rmem_default
สิ่งที่ช่วยได้จริงๆ - จริง ๆ แล้วมันดูแลเพียงครึ่งหนึ่งของแพ็กเก็ตที่ถูกทิ้ง
ฉันได้ดูที่gulp ด้วย - ปัญหาของ gulp คือว่ามันไม่รองรับหลายอินเตอร์เฟสในกระบวนการเดียวและมันก็โกรธถ้าอินเทอร์เฟซไม่มีที่อยู่ IP น่าเสียดายที่ตัวจัดการแจกไพ่ในกรณีของฉัน
ปัญหาต่อไปคือเมื่อทราฟฟิกไหลผ่านท่อผมไม่สามารถหมุนแบบอัตโนมัติได้ การรับไฟล์ 10 TB ขนาดใหญ่หนึ่งไฟล์นั้นไม่ได้มีประสิทธิภาพมากและฉันไม่มีเครื่องจักรที่มี 10TB + RAM ที่ฉันสามารถเรียกใช้งาน wireshark ได้
คุณมีข้อเสนอแนะใด? อาจเป็นวิธีที่ดีกว่าในการทำทราฟฟิกของฉันโดยสิ้นเชิง