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
- Create SNS Topic เช่น
learning-alerts - Create email subscription
- Confirm subscription จาก email
Step 2: Create CPU Alarm
- ไป CloudWatch > Alarms > Create alarm
- เลือก EC2 metric
CPUUtilizationของ instance - ตั้ง threshold เช่น Average > 70% for 5 minutes
- ตั้ง action ไป SNS Topic
- ตั้งชื่อ 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
- เปิด CloudTrail Event history
- ค้นหา event เช่น
AuthorizeSecurityGroupIngress,RunInstances,CreateBucket - ตรวจ user/role, source IP, request parameters และ event time
- บันทึกตัวอย่าง 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
- Delete CPU Alarm ที่สร้างเฉพาะ Lab
- Delete SNS Topic/subscription ถ้าไม่ใช้ต่อ
- Delete dashboard ถ้าไม่ใช้ต่อ
- Delete test Log Group หรือคงไว้พร้อม retention สั้น
- Remove CloudWatch Agent config จาก EC2 test instance ถ้าไม่ใช้ต่อ
Mini quiz
- ทำไม alarm ต้องมี owner และ runbook?
- CloudTrail ใช้ตอบคำถาม “ใครทำอะไร” อย่างไร?
- ทำไมต้องตั้ง log retention?