การบันทึกล็อกและเมตริกด้วย Amazon CloudWatch

การ Deploy แอปพลิเคชันบน AWS

Dunieski Otano

Amazon Web Services Solutions Architect

ระบบล่มหรือเปล่า?

  • ลูกค้าแจ้งว่าแอปมีปัญหา
  • ไม่มีข้อมูลยืนยันหรือปฏิเสธ
  • CloudWatch เปลี่ยนการเดาให้เป็นคำตอบที่ชัดเจน

แดชบอร์ดการมอนิเตอร์ที่มีเครื่องหมายคำถาม ไม่แน่ใจว่าบริการทำงานปกติหรือล่ม

การ Deploy แอปพลิเคชันบน AWS

Logging vs Monitoring vs Observability

ไดอะแกรมสามคอลัมน์แสดงความแตกต่างระหว่าง Logging ในฐานะบันทึกเหตุการณ์ที่เปลี่ยนแปลงไม่ได้ Monitoring ในฐานะเกณฑ์เมตริกพร้อมการแจ้งเตือน และ Observability ในฐานะการเชื่อมโยงข้อมูลเพื่อตอบคำถามใหม่

  • Logging: บันทึกเหตุการณ์แต่ละรายการขณะเกิดขึ้น
  • Monitoring: ติดตามเมตริกที่รู้จักเทียบกับเกณฑ์ที่กำหนด
  • Observability: ตั้งคำถามใหม่กับข้อมูล
  • ต้องใช้ทั้งสามอย่างเพื่อดำเนินงานได้อย่างมั่นใจ
การ Deploy แอปพลิเคชันบน AWS

Log group, Log stream และ Retention

  • Log group: คอนเทนเนอร์ที่มีชื่อสำหรับล็อกที่เกี่ยวข้องกัน
  • Log stream: ลำดับเหตุการณ์จากแหล่งเดียว
  • Retention: ระยะเวลาที่เก็บล็อกไว้
  • ล็อกมีค่าใช้จ่าย ควรตั้งค่า retention อย่างรอบคอบ

ลำดับชั้นของ CloudWatch Logs: log group ที่มี log stream หลายรายการ แต่ละ stream แสดงลำดับเหตุการณ์ตามเวลา พร้อมการตั้งค่า retention period และหมายเหตุด้านค่าใช้จ่าย

การ Deploy แอปพลิเคชันบน AWS

Metrics และ Custom metrics

  • Metrics: ข้อมูลตัวเลขแบบ time-series
  • AWS เผยแพร่เมตริกของบริการต่าง ๆ โดยอัตโนมัติ
  • Custom metrics: ตัวเลขที่แอปส่งออกมาเอง
  • Dimensions ใช้แบ่งเมตริกตามแอตทริบิวต์

CloudWatch metrics: เมตริกบริการ AWS ที่เผยแพร่อัตโนมัติทางซ้าย custom metric พร้อม dimensions ทางขวา และกราฟ time-series พร้อมเส้น threshold alarm

การ Deploy แอปพลิเคชันบน AWS

Embedded metric format

บรรทัดล็อกแบบมีโครงสร้างบรรทัดเดียวจะบรรจุค่าเมตริกพร้อมบล็อก _aws ที่บอก CloudWatch ว่าฟิลด์ใดคือเมตริก:

{
  "_aws": {
    "CloudWatchMetrics": [
      {
        "Namespace": "OrdersApp",
        "Dimensions": [["customerTier"]],
        "Metrics": [{ "Name": "OrderLatencyMs", "Unit": "Milliseconds" }]
      }
    ]
  },
  "customerTier": "premium",
  "OrderLatencyMs": 142
}
การ Deploy แอปพลิเคชันบน AWS

Dashboard และ Alarm

แผง widget ของ CloudWatch dashboard ทางซ้าย และ state machine ของ alarm พร้อมสถานะ OK, ALARM และ INSUFFICIENT_DATA ทางขวา พร้อมการส่งการแจ้งเตือน SNS ไปยังอีเมลและระบบอัตโนมัติ

  • Dashboard: หน้าจอเดียวที่รวมกราฟและ widget
  • Alarm: ทำงานเมื่อเมตริกเกินเกณฑ์ที่กำหนด
  • Alarm ส่งต่อผ่าน SNS ไปยังอีเมล, SMS หรือระบบอัตโนมัติ
  • ตั้ง alarm บนอาการที่ผู้ใช้สังเกตได้ ไม่ใช่ทุกเมตริก
การ Deploy แอปพลิเคชันบน AWS

กลยุทธ์การบันทึกล็อกแบบมีโครงสร้าง

  • บันทึกล็อกในรูปแบบ JSON ไม่ใช่ข้อความอิสระ
  • ระบุ timestamp, level, request ID, user ID
  • ฟิลด์ที่มีโครงสร้างสามารถกรองและค้นหาได้
  • ความสม่ำเสมอระหว่างบริการทำให้เชื่อมโยงข้อมูลได้

บรรทัดล็อก JSON แบบมีโครงสร้างที่มีฟิลด์ timestamp, level, requestId และ userId พร้อมคิวรี Logs Insights ที่แสดงให้เห็นว่าฟิลด์ที่มีชื่อช่วยให้กรองและรวมข้อมูลได้อย่างแม่นยำ

การ Deploy แอปพลิเคชันบน AWS

มาฝึกกันเถอะ!

การ Deploy แอปพลิเคชันบน AWS

Preparing Video For Download...