Hands-on LabLogs and alarms can cost money

Lab 7: Monitoring and Audit Baseline

Lab นี้สร้าง alarm เมื่อ EC2 CPU สูง, ส่ง alarm ผ่าน SNS, ส่ง application logs เข้า CloudWatch Logs, ใช้ CloudTrail ตรวจว่าใครแก้ resource และสร้าง dashboard สำหรับระบบตัวอย่าง

Learning objectives

  • สร้าง CloudWatch Alarm สำหรับ EC2 CPU
  • ส่ง Alarm Notification ผ่าน SNS
  • ติดตั้ง/ตั้งค่า CloudWatch Agent หรือส่ง application log เข้า CloudWatch Logs
  • ใช้ CloudTrail Event history ตรวจ API activity
  • สร้าง CloudWatch Dashboard สำหรับระบบตัวอย่าง

Prerequisites

  • มี EC2 instance จาก Phase 4 หรือ instance สำหรับ Lab
  • มี IAM Role ที่อนุญาต CloudWatch Agent ส่ง logs/metrics
  • มี email สำหรับ SNS subscription
  • เข้าใจค่าใช้จ่าย logs, alarms, dashboard และ custom metrics

Step 1: Create SNS Topic

  1. Create SNS Topic เช่น learning-alerts
  2. Create email subscription
  3. Confirm subscription จาก email

Step 2: Create CPU Alarm

  1. ไป CloudWatch > Alarms > Create alarm
  2. เลือก EC2 metric CPUUtilization ของ instance
  3. ตั้ง threshold เช่น Average > 70% for 5 minutes
  4. ตั้ง action ไป SNS Topic
  5. ตั้งชื่อ alarm ที่บอก owner/action เช่น learning-ec2-cpu-high

Step 3: Send application logs

สร้าง Log Group เช่น /learning/app และตั้ง retention เช่น 7 วัน จากนั้นส่ง log ผ่าน CloudWatch Agent หรือทดสอบด้วย CLI:

aws logs create-log-group --log-group-name /learning/app
aws logs put-retention-policy --log-group-name /learning/app --retention-in-days 7

Step 4: Query with Logs Insights

fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20

Step 5: Audit with CloudTrail

  1. เปิด CloudTrail Event history
  2. ค้นหา event เช่น AuthorizeSecurityGroupIngress, RunInstances, CreateBucket
  3. ตรวจ user/role, source IP, request parameters และ event time
  4. บันทึกตัวอย่าง event ที่ตอบคำถามว่า “ใครแก้ resource นี้”

Step 6: Create dashboard

  • EC2 CPUUtilization
  • ALB Target 5xx / healthy host count ถ้ามี ALB
  • RDS CPU/Connections ถ้ามี RDS
  • Alarm status widget
  • Log query widget สำหรับ recent errors

Expected results

  • SNS subscription confirmed
  • CPU Alarm อยู่ใน CloudWatch และผูกกับ SNS
  • Log Group มี retention policy
  • Logs Insights query ใช้งานได้
  • CloudTrail Event history ใช้หา API activity ได้
  • Dashboard มี widget สำหรับระบบตัวอย่าง

Troubleshooting

อาการแนวทางแก้
ไม่ได้รับ alarm emailตรวจ SNS subscription confirmed, spam folder และ alarm action
ไม่มี logs เข้า Log Groupตรวจ IAM role, CloudWatch Agent config, log file path และ security egress
CloudTrail หา event ไม่เจอตรวจ Region, event time, event name และรอ event delivery delay
Dashboard ไม่มีข้อมูลตรวจ metric namespace/dimension และ time range

Cleanup procedures

  1. Delete CPU Alarm ที่สร้างเฉพาะ Lab
  2. Delete SNS Topic/subscription ถ้าไม่ใช้ต่อ
  3. Delete dashboard ถ้าไม่ใช้ต่อ
  4. Delete test Log Group หรือคงไว้พร้อม retention สั้น
  5. Remove CloudWatch Agent config จาก EC2 test instance ถ้าไม่ใช้ต่อ

Mini quiz

  1. ทำไม alarm ต้องมี owner และ runbook?
  2. CloudTrail ใช้ตอบคำถาม “ใครทำอะไร” อย่างไร?
  3. ทำไมต้องตั้ง log retention?