อ่านประมาณ 7 นาที
ระดับกลาง
หมวด: คลาวด์
อ้างอิง: The Cloudflare Blog
log ของเว็บไซต์มักถูกส่งต่อไปยังระบบวิเคราะห์ ระบบความปลอดภัย หรือที่เก็บข้อมูลระยะยาวทั้งก้อน ทั้งที่ส่วนหนึ่งไม่มีใครใช้ และบางฟิลด์เป็นข้อมูลส่วนบุคคลอย่างหมายเลข IP Cloudflare เปิดให้ใช้ Logpush Transformers ซึ่งให้เขียน SQL สั้น ๆ กรอง จัดรูปแบบ และปิดข้อมูลก่อน log ออกจากระบบ ใช้ได้ทุกแพ็กเกจรวมแผนฟรี บทความนี้อธิบายวิธีคิดเบื้องหลัง ซึ่งนำไปใช้กับระบบ log ใดก็ได้
ทำไมต้องจัดการ log ก่อนส่งออก
ปัญหาแรกคือค่าใช้จ่าย ระบบวิเคราะห์และระบบความปลอดภัยส่วนใหญ่คิดเงินตามปริมาณข้อมูลที่รับเข้าและเก็บไว้ คำขอตรวจสุขภาพระบบ (health check) ที่ยิงเข้ามาทุกไม่กี่วินาที หรือคำขอจากระบบภายในจึงกลายเป็นค่าใช้จ่ายที่ไม่มีใครใช้ ปัญหาที่สองคือข้อมูลส่วนบุคคล หมายเลข IP และข้อมูลระบุตัวตนอื่นที่ติดไปกับ log ทำให้ปลายทางทุกแห่งต้องอยู่ภายใต้ข้อกำหนดของ PDPA ด้วย ปัญหาที่สามคือรูปแบบ เมื่อรวม log จากหลายผู้ให้บริการ ชื่อฟิลด์แต่ละที่ไม่ตรงกัน ทำให้แดชบอร์ดเดียวอ่านทั้งหมดไม่ได้
Logpush Transformers ทำอะไร
Transformer คือคำสั่ง SQL ที่ผูกกับชุดข้อมูล log ชุดหนึ่ง ส่วน WHERE ใช้กรองแถวที่ไม่ต้องการออก ส่วน SELECT ใช้เพิ่ม เปลี่ยนชื่อ ลบ หรือจัดกลุ่มฟิลด์ใหม่ และใช้ฟังก์ชันอย่าง regexp_replace ปิดข้อมูลบางส่วนได้ ผลลัพธ์ส่งออกเป็น NDJSON (JSON หนึ่งบรรทัดต่อหนึ่งรายการ) ตามเดิม เขียนและลองกับข้อมูลตัวอย่างได้ในหน้า Transformer Studio ของแดชบอร์ด หรือผ่าน API และทุกครั้งที่แก้จะเก็บเป็นเวอร์ชันใหม่ให้ย้อนดูได้
ตัวอย่างการแปลง log หนึ่งรายการด้วย Transformer (สรุปจากตัวอย่างในบทความต้นฉบับ) ก่อน หลัง เหตุผล ClientIP เต็มรูปแบบ redacted_ip เช่น 203.0.XXX.XXX ลดข้อมูลส่วนบุคคลที่ส่งออก เวลาแบบข้อความ unix_ts ตัวเลขวินาที ให้ระบบปลายทางเรียงเวลาได้ทันที host และ path แยกกัน รวมไว้ในกลุ่ม request ตรงกับโครงข้อมูลของแดชบอร์ด ไม่มีชื่อผู้ให้บริการ provider = cloudflare รวม log จากหลาย CDN ได้ รหัสสถานะ HTTP เพิ่ม is_server_error เมื่อรหัส 500 ขึ้นไป นับข้อผิดพลาดฝั่งเซิร์ฟเวอร์ได้ง่าย คำขอ /healthz และ /metrics ถูกกรองทิ้ง ไม่ต้องจ่ายค่าเก็บข้อมูลที่ไม่มีใครใช้
เบื้องหลัง: ประมวลผลระดับล้านแถวต่อวินาทีโดยไม่ทำ log หาย
ระบบส่ง log ของ Cloudflare รับข้อมูลมากกว่า 110 ล้านรายการต่อวินาที การแปลงจึงต้องเร็วมาก ทีมแปลง log แต่ละชุดเป็นรูปแบบคอลัมน์ของ Apache Arrow แล้วส่งให้ Apache DataFusion ซึ่งเป็นตัวประมวลผล SQL ที่เขียนด้วย Rust ทำงาน คำสั่ง SQL ถูกเตรียมเป็นแผนการประมวลผลครั้งเดียวแล้วใช้ซ้ำ ผลทดสอบแปลงข้อมูลชุดละ 5,000 แถวได้ในราว 3 มิลลิวินาที หรือประมาณ 1.6 ล้านแถวต่อวินาทีต่อหนึ่งเธรดการทำงาน
ขั้นตอนภายในของ Logpush Transformers: แปลง log เป็น Apache Arrow ส่งให้ Apache DataFusion ประมวลผล SQL แล้วแปลงกลับเป็น JSON ก่อนบีบอัดส่งปลายทาง (ภาพจาก The Cloudflare Blog)
หลักออกแบบที่ควรนำไปใช้คือการล้มเหลวแบบปลอดภัย (fail closed) ถ้าการแปลงข้อมูลชุดใดผิดพลาด ระบบจะไม่ส่งข้อมูลดิบที่ยังไม่ได้ปิดข้อมูลส่วนบุคคลออกไปแทน แต่จะหยุดตำแหน่งไว้ ลองใหม่โดยเว้นระยะนานขึ้นเรื่อย ๆ และรายงานข้อผิดพลาด ถ้าล้มต่อเนื่องนานจะปิดงานส่งออกนั้นเอง เพราะการส่งข้อมูลส่วนบุคคลหลุดออกไปแม้ครั้งเดียวแก้คืนไม่ได้
นำแนวคิดนี้ไปใช้กับระบบของเราเอง
จัดการตั้งแต่ต้นทาง กรองและปิดข้อมูลก่อน log ออกจากระบบ ไม่ใช่ไปลบที่ปลายทางทีหลังทำรายการฟิลด์ที่เป็นข้อมูลส่วนบุคคล เช่น IP อีเมล เบอร์โทร โทเคน แล้วกำหนดว่าฟิลด์ไหนลบ ฟิลด์ไหนปิดบางส่วนตัด log ที่ไม่มีใครใช้ โดยเฉพาะ health check และทราฟฟิกภายในกำหนดโครงข้อมูลกลาง ให้ log จากทุกระบบใช้ชื่อฟิลด์เดียวกันล้มเหลวแบบปลอดภัย ถ้าขั้นปิดข้อมูลพัง ให้หยุดส่ง ไม่ใช่ส่งข้อมูลดิบแทนเก็บกฎการแปลงเป็นเวอร์ชัน เพื่อย้อนดูได้ว่าช่วงเวลาใดส่งข้อมูลอะไรออกไป
ระบบที่ไม่ได้ใช้ Cloudflare ก็ทำแนวเดียวกันได้ด้วยเครื่องมือรวบรวม log ที่แปลงข้อมูลระหว่างทางได้ เช่น Vector หรือ Fluent Bit สิ่งสำคัญไม่ใช่เครื่องมือ แต่คือการตัดสินใจว่าข้อมูลไหนควรออกจากระบบ และให้ขั้นตอนนี้อยู่ก่อนปลายทางทุกแห่ง
ธุรกิจไทยที่ส่ง log ไปเก็บกับผู้ให้บริการต่างประเทศควรตรวจว่าใน log มีข้อมูลส่วนบุคคลอะไรติดไปบ้าง เพราะนับเป็นการส่งข้อมูลออกนอกประเทศตาม PDPA ด้วย การตัดข้อมูลที่ไม่จำเป็นตั้งแต่ต้นทางลดทั้งความเสี่ยงและค่าใช้จ่ายไปพร้อมกัน ทีมงาน Smart Cyber Tech ออกแบบระบบคลาวด์และระบบเก็บ log ขององค์กร ให้ส่งเฉพาะข้อมูลที่จำเป็นและตรวจสอบย้อนหลังได้ ปรึกษาได้ที่ แบบฟอร์มติดต่อ
สรุปสาระสำคัญ ทำไมต้องจัดการ log ก่อนส่งออก Logpush Transformers ทำอะไร เบื้องหลัง: ประมวลผลระดับล้านแถวต่อวินาทีโดยไม่ทำ log หาย
แหล่งอ้างอิง เรียบเรียงจาก The Cloudflare Blog —
อ่านบทความต้นฉบับ ภาพปกและแผนภาพ: The Cloudflare Blog · ลิขสิทธิ์ภาพเป็นของเจ้าของต้นฉบับ ใช้ประกอบการรายงานพร้อมอ้างอิงแหล่งที่มา
มีคำถามเพิ่มเติมเกี่ยวกับบทความนี้? เขียนหาเราได้ที่
info@smart-cyber-tech.com
บริการที่เกี่ยวข้องจากทีมงาน Smart Cyber Tech
แบ่งปันบทความนี้:
LINE
Facebook
X
คัดลอกลิงก์
ปรึกษาทีมของเรา