[AWS Technical Support Note] วิธีปรับราคา CloudWatch Logs ให้เหมาะสม

บทความนี้จะสรุปจุดที่ควรตรวจสอบเมื่อมีค่าใช้จ่ายเพิ่มขึ้นจากการใช้งาน CloudWatch Logs

ปัญหาที่เกิดขึ้น

เรากำลังย้าย Log ภายในของ EC2 ไปยัง CloudWatch Logs เพื่อนำไปใช้ในการตรวจสอบ Log แบบเรียลไทม์ทำให้มีค่าใช้จ่ายเพิ่มขึ้น จึงต้องการขอคำแนะนำเกี่ยวกับจุดที่ควรตรวจสอบในการทำงานเพื่อให้ได้ราคาที่เหมาะสม

วิธีแก้ปัญหา

ค่าบริการ CloudWatch Logs มีรายละเอียดดังนี้ หากสามารถลดปริมาณข้อมูลส่วนนี้ได้ก็จะสามารถลดค่าบริการได้

อ้างอิงราคาจากเอกสาร ค่าบริการของ CloudWatch
(※ราคา Singapore Region ณ วันที่เขียนบทความ 24/11/2023)

Collect (Data Ingestion) $0.70 per GB
Store (Archival) $0.03 per GB
Analyze (Logs Insights queries) $0.007 per GB of data scanned
Detect and Mask (Data Protection) $0.12 per GB of data scanned
Analyze (Live Tail) $0.01 per minute

โดยจะแนะนำจุดที่ควรตรวจสอบหลักๆ 3 ข้อดังนี้ (การรวบรวมข้อมูล Log, การจัดเก็บ, การวิเคราะห์)

การตรวจสอบเกี่ยวกับการรวบรวม Log (ปริมาณการรับข้อมูล)

เราสามารถลดปริมาณการรับข้อมูลได้โดยจำกัด log ที่จะถ่ายโอนจาก EC2 instance ไปยัง CloudWatch Logs ให้เหลือเฉพาะรายการที่จำเป็น นอกจากนี้ยังมีการลดปริมาณข้อมูลในอีก 2 ด้าน (การจัดเก็บ,การวิเคราะห์) ที่จะอธิบายต่อจากหัวข้อนี้ด้วย แต่ก่อนอื่นมาตรวจสอบเกี่ยวกับเรื่องนี้กันก่อน

การส่ง Log ปกติที่ไม่จำเป็นต้องส่งทุก log ไปยัง CloudWatch Logs เราสามารถส่งแค่ error Log ที่ต้องการตรวจสอบแบบเรียลไทม์เท่านั้นก็ได้

เราสามารถตั้งค่า filter ใน CloudWatch agent ให้ส่ง Log ที่มีแค่ตัวอักษร error ที่เรากำหนดไว้ได้
สามารถดูบทความที่เกี่ยวข้องเพิ่มได้ทางด้านล่าง

CloudWatchAgentのログ送信にフィルタ機能が追加されたのでやってみた | DevelopersIO (Japanese)

ตรวจสอบปริมาณ Data Log และตำแหน่งที่จัดเก็บไว้

ตามที่กล่าวไว้ข้างต้น การลดจำนวน Log ที่นำเข้าจาก EC2 จะช่วยลดจำนวนข้อมูลที่จัดเก็บไว้ใน CloudWatch Logs ได้ แต่ในขณะเดียวกันก็ควรคำนึงถึงระยะเวลาการจัดเก็บและตำแหน่งการจัดเก็บข้อมูล Log ด้วย

ตามค่าเริ่มต้นของ CloudWatch Logs จะจัดเก็บข้อมูลโดยไม่จำกัดเวลา แต่คุณสามารถเปลี่ยนระยะเวลาการจัดเก็บสำหรับแต่ละ Log group ได้ โดยในแง่ของการจัดเก็บข้อมูล S3 จะมีราคาถูกกว่า CloudWatch Logs อีกด้วย

ดังนั้น Log ในอดีตที่ไม่ต้องการการตรวจสอบแบบเรียลไทม์ควรส่งออกเป็นระยะๆจาก CloudWatch Logs ไปยัง S3และทำการเก็บถาวร จากนั้นให้ตั้งค่าระยะเวลาจัดเก็บและลบ Log ใน CloudWatch ที่เกินช่วงระยะที่กำหนด

ตรวจสอบการวิเคราะห์ Log (ปริมาณการสแกนข้อมูล)

ตามที่กล่าวไว้ข้างต้นหากจำนวน Log ที่นำเข้าจาก EC2 ลดลง ปริมาณในการสแกนข้อมูล Log ด้วย CloudWatch Logs Insights ก็น่าจะลดลงตามไปด้วย นอกจากนี้ ด้วยการเพิ่มประสิทธิภาพในการ query ในระหว่างทำการวิเคราะห์ด้วย Logs Insights ก็มีความเป็นไปได้ที่จะช่วยในการลดจำนวนข้อมูลที่สแกนได้

ตัวอย่างเช่น การจำกัด Timestamp ของ Log หรือจำกัดเงื่อนไขการค้นหาให้แคบลงเพื่อให้เฉพาะเจาะจงมากที่สุด พิจารณาเพิ่มประสิทธิภาพการ Query โดยอ้างอิงจากเอกสารและบทความต่างๆทางด้านล่าง

CloudWatch Logs Insightsでログを調査する前に読む記事 | DevelopersIO (japanese)
CloudWatch Logs Insights のクエリ構文 - Amazon CloudWatch Logs (japanese)
ブール、比較、数値、日時、その他の関数 - Amazon CloudWatch Logs (japanese)

และนี่คือการสรุปของวิธีปรับราคา CloudWatch Logs ให้เหมาะสม หวังว่าข้อมูลนี้จะเป็นประโยชน์กับทุกท่านนะครับ

บทความอ้างอิง

บทความต้นฉบับ