AWS CloudWatch คืออะไร? การแนะนำฟังก์ชันของ AWS CloudWatch ในปี 2023

AWS CloudWatch 1 ใน Monitoring Service ของ AWS ถ้าถามถึงคนใช้ AWS คงไม่มีใครไม่รู้จัก !!!
2023.10.11

Amazon CloudWatch คืออะไร

Amazon CloudWatch คือ Managed service ที่มีหน้าที่ Monitoring AWS Resource, Application, On-premises server
และยังมีฟังก์ชัน แจ้งเตือน Alarm, ตรวจสอบ Event, Visualize ได้ด้วย
และสามารถใช้งานร่วมกับหลายๆ AWS Service อื่นๆ ได้ด้วย

ฟังก์ชันของ CloudWatch

ในหัวข้อนี้เราจะมาอธิบายเกี่ยวกับฟังก์ชันต่างๆของ CloudWatch กันครับ

CloudWatch Metrics

Metric หมายถึงข้อมูลที่เกี่ยวข้องกับระบบ Performance ในหัวข้อต่างๆ ครับ
ใน CloudWatch เราสามารถที่จะรวบรวม Metrics ของเป้าหมายไว้ที่เดียวกันเพื่อใช้ในการ Monitoring ได้

ใน CloudWatch Metrics จะถูกจัดเก็บเป็นกลุ่มในแต่ละหมวดๆ

แล้วในหมวดๆ ก็จะมีรายการ Metrics ต่างๆอีกที(เรียกว่า dimension)

(ภาพด้านล่างบน มองไม่เห็นค่าเปลี่ยนแปลงของ Metrics เลยเพิ่มภาพด้านล่างมาให้ดูว่าเป็นยังไงครับ)

CloudWatch Logs

CloudWatch Logs คือฟังก์ชันที่มีหน้าที่ทำการบันทึก และ Monitoring Log file
เราสามารถส่ง File ไปที่ CloudWatch Endpoint โดยการติดตั้ง CloudWatch agent ที่ AWS Service หรือ On-premises server และทำการบันทึกลงที่ CloudWatch ได้
ระยะการบันทึกของ Log Data เราสามารถเลือกได้ตั้งแต่ 1 วัน จนถึง ไม่มีวันหมดอายุได้ครับ

หน่วยในการบันทึก Log event

CloudWatch Logs จะหน่วยที่เรียกว่า Log group ที่เป็นกลุ่มของ Log ครับ
ใน Log group จะมีหน่วยที่เรียกว่า Log Stream และใน log Stream จะมี Log event ถูกบันทึกอยู่ครับ



การประมวลผล Log Data real-time

Log Data ที่อันทึกใน CloudWatch Logs จะใช้ฟังก์ชันที่เรียกว่า subscription ในการประมวลผลแบบ Real-time และส่งออกไปยัง Service อื่นได้
โดย Service ที่สามารถส่งออกไปโดยใช้ subscription ได้มีดังต่อไปนี้

  • Amazon Kinesis Data Streams
  • Amazon Kinesis Data Firehose
  • AWS Lambda

subscription สามารถสร้างได้มากสุด 1 อันต่อแต่ละ Log Group (เนื้อหาที่อยู่ใน Log Group จะถูกนนับร่วมด้วย) เราจะสร้าง subscription filter เพื่อสร้างกฎในการส่ง log โดยจะตั้งค่าตามต่อไปนี้

  • Log group name
    • Log group ที่จะใช้สำหรับ subscription
  • Filter Parttern
    • ในกรณีที่เราต้องการเพิ่มตัวอักษรพิเศษเข้าไปใน log data ในตอนที่ส่ง สามารถใช้สิ่งนี้ได้(ในกรณีที่ใช้ใส่อะไรจะเป็นการส่งข้อมูล Log event ทั้งหมด)
  • Destination ARN
    • ARN(Amazon Resource Name) ของ Service ที่เราจะใช้ส่งข้อมูลของ subscription
  • Role ARN
    • ตั้งค่า IAM Role เพื่อให้สิทธิที่จำเป็นสำหรับให้สามารถส่ง CloudWatch Logs ไปยัง Resource ที่เราตั้งค่าได้
  • Distribution
    • ในกรณีที่ส่งข้อมูลไปยัง Amazon Kinesis Data Streams ให้กำหนด method นี้

การส่ง Log data ไปยัง S3

ข้อมูลบันทึกที่จัดเก็บไว้ใน CloudWatch Logs สามารถส่งไปยัง S3 ได้แบบเรียลไทม์โดยใช้ subscription
คุณสามารถลดต้นทุนพื้นที่จัดเก็บบันทึกได้โดยการจัดเก็บข้อมูลบันทึกใน S3 หรือย้ายจาก S3 ไปยังคลาสพื้นที่จัดเก็บที่มีต้นทุนต่ำกว่า เช่น S3 Glacier ได้

บทความต่อไปนี้จะแนะนำวิธีการถ่ายโอนบันทึกไปยัง Amazon Kinesis Data Firehose ด้วย CloudWatch Logs subscription และจัดเก็บข้อมูลใน S3

การใช้ Metrics จาก log event

เราสามารถสร้าง Metrics จาก Log event ได้โดยใช้ฟังก์ชันที่เรียกว่า Metric filter ใน Log group ได้
เราสามารถสร้าง Metric filter ได้หลายรายการสำหรับ Log group กลุ่มเดียวได้ ด้วยการตั้งค่า filter pattern เมื่อสร้าง Metric filter
เราสามารถแยกเฉพาะ string ที่ระบุและตรวจพบว่าเป็น metrics ได้ เรายังสามารถสร้าง Alarm ตาม Metric filter ได้ด้วย

ในกรณีที่เราต้องการให้มีการแจ้งเตือนไปยังอีเมลเมื่อพบตัวอักษร String บางอย่างที่เราเจอใน log
เราสามารถสร้าง Metric filter สำหรับ Log group
แล้วทำการตั้งค่า filter pattern
แล้วทำการตั้งค่า Alarm สำหรับ Metric filter ให้ส่งการแจ้งเตือนไปที่อีเมลที่เราต้องการได้

รายละเอียดอื่นๆเกี่ยวกับ Metric filter คุณผู้อ่านสามารถตรวจสอบได้จากเอกสารต่อไปนี้ได้

EventBridge or CloudWatch Events

ปัจจุบัน AWS ได้นำ EventBridge มาแทน CloudWatch Events เพราะมีฟังก์ชันที่หลากหลายกว่า(เมื่อเข้าไปที่หน้า CloudWatch Events จะไปโผล่ที่หน้า EventBridge แทน)
แต่ในบทความปัจจุบันเรายังพบเห็นคำว่า CloudWatch Events อยู่ตามเว็บไซต์ต่างๆอยู่
จึงอยากแจ้งให้ทราบ EventBridge เป็นเวอร์ชั่นอัพเกรดของ CloudWatch Events ครับ
และสำหรับใครสนใจเกี่ยวกับการตั้งค่าจริงๆของ EventBridge สามารถอ่านได้ที่บทความต่อไปนี้
【Update】วิธีตั้งค่ากำหนดการ Start EC2 Instance อัตโนมัติด้วย Amazon EventBridge | DevelopersIO

เมื่อเราใช้งาน EventBridge จะทำให้ เมื่อ AWS Resource ที่เราทำการ monitoring อยู่เกิดการเปลี่ยนแปลง เราจะสามารถสร้าง Action ต่อ AWS Resource ที่เราทำการ monitoring อยู่ได้
เช่น หาก EC2 เกิดการเปลี่ยนแปลงสถานะ (Stopped, Running, etc) ให้เราทำการ Terminated instance ตัวนั้น เป็นต้น
นอกจากการเปลี่ยนแปลงของ AWS Resource แล้ว เรายังสามารถตั้งค่า Action ตามเวลาที่เรากำหนดได้ด้วย
เป้าหมาย Service ที่ EventBridge สามารถตั้งค่าได้มีดังต่อไปนี้

  • API destination
  • API Gateway
  • Batch job queue
  • CloudWatch log group
  • CodeBuild project
  • CodePipeline
  • Amazon EBS CreateSnapshot API call
  • EC2 Image Builder
  • EC2 RebootInstances API call
  • EC2 StopInstances API call
  • EC2 TerminateInstances API call
  • ECS task
  • Event bus in a different account or Region
  • Event bus in the same account and Region
  • Firehose delivery stream
  • Glue workflow
  • Incident Manager response plan
  • Inspector assessment template
  • Kinesis stream
  • Lambda function (ASYNC)
  • Amazon Redshift cluster data API queries
  • Amazon Redshift Serverless workgroup data API queries
  • SageMaker Pipeline
  • Amazon SNS topic
  • EventBridge does not support Amazon SNS FIFO (first in, first out) topics.
  • Amazon SQS queue
  • Step Functions state machine (ASYNC)
  • Systems Manager Automation
  • Systems Manager OpsItem
  • Systems Manager Run Command

What Is Amazon EventBridge? - Amazon EventBridge

CloudWatch Alarms

CloudWatch Alarms คือฟังก์ชันที่สร้างการแจ้งเตือน ผ่าน CloudWatch metric ครับ
หาก Metric มีการเปลี่ยนแปลงค่าเกินที่กำหนดไว้ เราจะทำการรัน Action ที่เราตั้งค่าไว้ เช่น EC2 Auto Scaling หรือแจ้งเตือนไปยัง SNS Topic ได้

ค่าสถานะของ Alarms

ค่าสถานะของ Alarms จะมีดังต่อไปนี้

  • OK:ค่า Metric มีค่าต่ำกว่าที่ ค่า Alarm ที่เราตั้งค่าไว้
  • ALARM:ค่า Metric มีค่ามากกว่าที่ ค่า Alarm ที่เราตั้งค่าไว้
  • INSUFFICIENT_DATA:ไม่พบข้อมูลเพียงพอที่จะตรวจสอบ Alarm ได้ โดยอาจจะเกิดจาก พึ่งสร้าง alarm ขึ้นทำให้ยังไม่สามารถตรวจสอบ Metric ได้

การตั้งค่า Alarms

สำหรับการสร้าง CloudWatch Alarm คุณผู้อ่านสามารถตรวจสอบวิธีการสร้าง และข้อมูลที่จำเป็นต้องระบุได้จากเอกสารด้านล่างครับ

CloudWatch Logs Insights

CloudWatch Logs Insights เป็นฟังก์ชันนึงของ CloudWatch โดยที่ใน CloudWatch Logs Insights เราจะสามารถใช้ภาษา query เฉพาะในการค้นหา หรือ วิเคราะห์ log data ใน CloudWatch Logs ได้
ด้วยการใช้ query จะทำให้เราสามารถค้นหา log data ที่เราต้องการได้เร็วขึ้น

ใน CloudWatch Logs Insights นั้นจะมี field ดังนี้ถูกสร้างขึ้นในแต่ละ log ใน CloudWatch Logs

  • @message: มีข้อมูล raw unparsed log event ซึ่งเทียบเท่ากับ field message ที่อยู่ใน InputLogevent
  • @timestamp: มีข้อมูลการประทับเวลาของ event ในช่องการประทับเวลาของเหตุการณ์บันทึก ซึ่งเทียบเท่ากับ field การประทับเวลาใน InputLogevent
  • @ingestionTime: มีข้อมูลเวลาเมื่อ CloudWatch Logs ได้รับ log event
  • @logStream: มีข้อมูลชื่อของ log stream ที่ log event ถูกเพิ่มเข้ามา Log streams group logs ผ่านกระบวนการเดียวกับที่สร้างขึ้น
  • @log: คือ log group ที่ถูกระบุในรูปแบบ account-id:log-group-name เมื่อเราทำการ querying หลายๆ log groups นี่จะเป็นประโยชน์เพื่อเอาไว้ดูว่าอยู่ log group ไหน

Supported logs and discovered fields - Amazon CloudWatch Logs

อันนี้เป็นตัวอย่างการใช้งาน CloudWatch Logs Insights แบบง่ายๆนะครับ
ในหน้าต่าง Console CloudWatch ให้เลือกเมนูด้านซ้าย "Log insights" ครับ
ทำการเลือกเมนูตามที่เห็นในลูกศร แล้วเลือก "Run query" ครับ

ผลลัพท์ Log ที่แสดงขึ้นก็จะได้ตาม query ของเรา

CloudWatch Dashboards

ด้วยการใช้ CloudWatch Dashboards จะทำให้เราสามารถตรวจสอบ Logs หรือ Metrics จำนวนหลายๆอย่างในหน้าต่างเดี่ยวได้
แม้ว่าจะเป็น Resource ที่อยู่ต่าง Region ออกไปจก็สามารถแสดงได้ใน 1 Dashboard

การใช้งานรวมกับ CloudWatch Alarm

เราสามารถเพิ่ม CloudWatch Alarm ที่เราสร้างขึ้นไปยัง CloudWatch Dashboard ได้ครับ
โดยสามารถดูรายละเอียดเพิ่มเติมได้ที่เอกสารต่อไปนี้ครับ

วิธีการสร้าง Dashboard

Dashboard นั้นสามารถสร้างได้ง่ายๆผ่าน AWS Console ครับ
หรือนอกจาก Console แล้ว สามารถสร้างด้วย AWS CLI หรือ PutDashboard API ก็ได้เหมือนกันครับ

โดยวิธีการสร้างนั้นคุณผู้อ่านสามารถตรวจสอบได้จากเอกสารต่อไปนี้ได้เลยครับ

ค่าใช้จ่าย

ค่าบริการของ Amazon CloudWatch จะเหมือนกับ AWS Service อื่นๆ ส่วนใหญ่ ที่จะคิดค่าบริการตามจำนวนที่เราใช้
โดย ณ วันที่ 9 เดือน 10 ปี 2023 นี้ มี Free tier อยู่ตามภาพด้านล่างนี้ หากใช้เกินในส่วนนี้จะมีการเก็บค่าใช้จ่ายครับ

รายละเอียดค่าใช้จ่ายในกรณีที่มีการใช้งานเกิน Free tier สามารถตรวจสอบได้ที่ลิ้งค์ด้านล่างนี้ครับ

ราคาของ Amazon CloudWatch – Amazon Web Services (AWS)

ทิ้งท้าย

ก็จบไปแล้วครับ สำหรับ CloudWatch นี่ถือเป็น Service ที่ค่อนข้างสำคัญทีเดียวเลยครับ เพราะสามารถใช้งาน monitioring ได้เกือบทุก service ของ AWS
ซึ่งฟังก์ชันที่ให้ใช้งานก็มีหลากหลาย อาจจะดูเข้าใจยากไปสักหน่อย แต่หากชินแล้ว จะรู้สึกว่านี่เป็นบิรการที่มีประโยชน์มากครับ
หากบทความนี้เป็นประโยชน์ก็ดีใจมากๆครับ แล้วเจอกันในบทความต่อไป

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

Th

Eng

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

AWS再入門ブログリレー Amazon CloudWatch 編 | DevelopersIO