บันทึก CloudWatch และ Log Insights
รวบรวมบันทึกจาก EC2, Lambda และคอนเทนเนอร์ไว้ในกลุ่มบันทึก และเรียกใช้คำค้นหา CloudWatch Logs Insights เพื่อค้นหาข้อผิดพลาดและรูปแบบต่าง ๆ
บันทึก CloudWatch และ Log Insights เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวม CloudWatch Logs
Amazon CloudWatch Logs คือบริการรวบรวมบันทึกที่มีการจัดการเต็มรูปแบบ ซึ่งรวบรวม จัดเก็บ และวิเคราะห์ข้อมูลบันทึกจากบริการ AWS และแอปพลิเคชันของคุณเอง ต่างจากการจัดการบันทึกแบบดั้งเดิมที่คุณต้องใช้ SSH เข้าสู่เซิร์ฟเวอร์เพื่ออ่านไฟล์ CloudWatch Logs จะรวมบันทึกทั้งหมดไว้ในพื้นที่จัดเก็บที่ทนทานและเข้ารหัส พร้อมความสามารถในตัวสำหรับการสืบค้น การกรอง การแยกตัวชี้วัด และการจัดการระยะเวลาการเก็บรักษา บริการนี้ผสานรวมกับ EC2, Lambda, ECS, EKS, API Gateway, CloudTrail และ VPC Flow Logs ได้โดยตรง
กลุ่มบันทึกและสตรีมบันทึก
บันทึกจะจัดระเบียบเป็นลำดับชั้น: กลุ่มบันทึก คือพื้นที่จัดเก็บที่มีชื่อสำหรับบันทึกซึ่งใช้การตั้งค่าระยะเวลาการเก็บรักษาและการควบคุมการเข้าถึงร่วมกัน (เช่น /aws/lambda/my-function) ภายในกลุ่มบันทึก แต่ละ สตรีมบันทึก แทนแหล่งที่มาของเหตุการณ์บันทึกตามลำดับเพียงแหล่งเดียว เช่น อินสแตนซ์ EC2 หนึ่งเครื่อง คอนเทนเนอร์ Lambda หนึ่งรายการ หรืองาน ECS หนึ่งงาน กลุ่มบันทึกหนึ่งกลุ่มมีสตรีมได้หลายพันรายการ แต่แต่ละสตรีมจะสังกัดกลุ่มบันทึกเพียงกลุ่มเดียวเท่านั้น
# Create a log group with 30-day retention
aws logs create-log-group \
--log-group-name /myapp/production/api
aws logs put-retention-policy \
--log-group-name /myapp/production/api \
--retention-in-days 30
# List log streams in a group
aws logs describe-log-streams \
--log-group-name /myapp/production/api \
--order-by LastEventTime \
--descendingการส่งบันทึกจาก Lambda และ EC2
AWS Lambda จะส่งเอาต์พุต stdout และ stderr ทั้งหมดไปยัง CloudWatch Logs โดยอัตโนมัติ คุณเพียงต้องให้บทบาทการทำงานของ Lambda มีสิทธิ์ logs:CreateLogGroup, logs:CreateLogStream และ logs:PutLogEvents สำหรับ อินสแตนซ์ EC2 คุณต้องติดตั้ง CloudWatch Agent และกำหนดว่าจะอ่านไฟล์บันทึกใด (เช่น /var/log/nginx/access.log) จะเขียนไปยังกลุ่มบันทึกใด และรูปแบบใดใช้ระบุรายการบันทึกแต่ละรายการ
# CloudWatch Agent config for tailing an application log file
# /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
# {
# "logs": {
# "logs_collected": {
# "files": {
# "collect_list": [{
# "file_path": "/var/log/myapp/app.log",
# "log_group_name": "/myapp/production/api",
# "log_stream_name": "{instance_id}",
# "timestamp_format": "%Y-%m-%dT%H:%M:%S"
# }]
# }
# }
# }
# }CloudWatch Logs Insights
CloudWatch Logs Insights คือเครื่องมือประมวลผลคำสั่งสืบค้นแบบโต้ตอบที่ช่วยให้คุณค้นหาและวิเคราะห์ข้อมูลบันทึกโดยใช้ภาษาสืบค้นที่ออกแบบมาโดยเฉพาะ คุณสามารถเรียกใช้คำสั่งสืบค้นข้ามกลุ่มบันทึกหนึ่งกลุ่มขึ้นไป กรองตามช่วงเวลา แยกฟิลด์จากบรรทัดบันทึกที่มีโครงสร้างหรือไม่มีโครงสร้าง รวมข้อมูล และแสดงผลเป็นแผนภูมิแท่งหรือลำดับเวลา คำสั่งสืบค้นจะทำงานเมื่อเรียกใช้และคิดค่าบริการตามข้อมูลต่อ GB ที่สแกน การจัดโครงสร้างบันทึกเป็น JSON ช่วยลดปริมาณการสแกนได้อย่างมาก
# Find the top 10 slowest Lambda invocations in the last hour
aws logs start-query \
--log-group-name /aws/lambda/my-function \
--start-time $(date -d '1 hour ago' +%s) \
--end-time $(date +%s) \
--query-string 'filter @type = "REPORT"
| fields @requestId, @duration
| sort @duration desc
| limit 10'ภาษาสืบค้นของ Logs Insights
ภาษาสืบค้นของ Logs Insights ใช้คำสั่งที่คั่นด้วยเครื่องหมายไปป์: fields ใช้เลือกฟิลด์ที่จะแสดง, filter ใช้จำกัดเหตุการณ์ให้แคบลง (รองรับนิพจน์ทั่วไปด้วย like และ =~), stats ใช้รวมข้อมูล, sort ใช้จัดเรียงผลลัพธ์ และ limit ใช้จำกัดจำนวนผลลัพธ์ บริการจะค้นหาฟิลด์ในบรรทัดบันทึกที่จัดรูปแบบเป็น JSON โดยอัตโนมัติ สำหรับบันทึกที่ไม่มีโครงสร้าง คุณสามารถแยกค่าโดยใช้ parse ร่วมกับรูปแบบโกลบหรือนิพจน์ทั่วไป
# Count errors by status code in the last 24 hours
fields @timestamp, @message
| filter @message like /ERROR/
| parse @message '* * * [*] "* *" * *' as host, user, datetime, request, method, status, bytes
| stats count(*) as errorCount by status
| sort errorCount desc
| limit 20ตัวกรองตัวชี้วัด: จากบันทึกสู่ตัวชี้วัด
ตัวกรองตัวชี้วัด จะสแกนเหตุการณ์บันทึกขาเข้าอย่างต่อเนื่องเพื่อค้นหารูปแบบ และเพิ่มค่าตัวชี้วัด CloudWatch แบบกำหนดเองทุกครั้งที่พบรายการตรงกัน ตัวอย่างเช่น คุณสามารถสร้างตัวกรองตัวชี้วัดในกลุ่มบันทึกของ Lambda เพื่อเพิ่มค่าตัวชี้วัด ErrorCount ทุกครั้งที่บรรทัดบันทึกมี ERROR จากนั้นสร้าง CloudWatch alarm บนตัวชี้วัดนี้เพื่อแจ้งเตือนทีม วิธีนี้จะแปลงบันทึกให้เป็นตัวชี้วัดที่นำไปดำเนินการได้ โดยไม่ต้องจัดเก็บผลลัพธ์ในฐานข้อมูลแยกต่างหาก
# Create a metric filter that counts ERROR lines
aws logs put-metric-filter \
--log-group-name /myapp/production/api \
--filter-name ErrorCount \
--filter-pattern 'ERROR' \
--metric-transformations \
metricName=ApplicationErrors,metricNamespace=MyApp,metricValue=1,defaultValue=0
# Now create an alarm on the resulting metric
aws cloudwatch put-metric-alarm \
--alarm-name HighErrorRate \
--metric-name ApplicationErrors \
--namespace MyApp \
--statistic Sum \
--period 60 \
--evaluation-periods 1 \
--threshold 10 \
--comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:sns:us-east-1:111122223333:Opsการสมัครรับบันทึกและการสตรีม
ตัวกรองการสมัครรับ จะสตรีมเหตุการณ์บันทึกแบบเกือบเรียลไทม์ไปยังบริการอื่นเพื่อประมวลผลหรือจัดเก็บ คุณสามารถสตรีมไปยัง AWS Lambda (เพื่อแปลงและกำหนดเส้นทางบันทึก), Amazon Kinesis Data Streams (สำหรับประมวลผลบันทึกปริมาณสูง) หรือ Amazon Kinesis Firehose (เพื่อส่งไปยัง S3, OpenSearch หรือ Splunk) แต่ละกลุ่มบันทึกรองรับตัวกรองการสมัครรับได้สูงสุดสองรายการ การสตรีมบันทึกข้ามบัญชีต้องใช้ปลายทางที่มีนโยบายทรัพยากรที่เหมาะสม
# Stream all logs containing ERROR to a Kinesis Firehose for S3 archiving
aws logs put-subscription-filter \
--log-group-name /myapp/production/api \
--filter-name ErrorsToFirehose \
--filter-pattern 'ERROR' \
--destination-arn arn:aws:firehose:us-east-1:111122223333:deliverystream/LogArchive \
--distribution 'ByLogStreamName'นโยบายการเก็บรักษาและการจัดการต้นทุน
โดยค่าเริ่มต้น CloudWatch Logs จะจัดเก็บข้อมูล อย่างไม่มีกำหนด ซึ่งอาจมีค่าใช้จ่ายสูง กำหนด นโยบายการเก็บรักษาให้กับทุกกลุ่มบันทึกเพื่อลบเหตุการณ์บันทึกเก่าโดยอัตโนมัติ ระยะเวลาการเก็บรักษาที่ใช้กันทั่วไปคือ 7 วันสำหรับบันทึกการแก้ไขข้อบกพร่อง 30 วันสำหรับบันทึกแอปพลิเคชัน และ 1-5 ปีสำหรับบันทึกการตรวจสอบ คุณสามารถส่งออกกลุ่มบันทึกไปยัง S3 เพื่อเก็บถาวรระยะยาวด้วยต้นทุนต่ำโดยใช้ API create-export-task แต่การส่งออกเป็นการดำเนินการแบบเป็นชุด ไม่ใช่แบบเรียลไทม์
# Set retention on all log groups that have no retention policy
aws logs describe-log-groups \
--query 'logGroups[?!retentionInDays].logGroupName' \
--output text | tr '\t' '\n' | while read lg; do
aws logs put-retention-policy \
--log-group-name "$lg" \
--retention-in-days 90
echo "Set 90-day retention on $lg"
doneVPC Flow Logs
VPC Flow Logs จะบันทึกข้อมูลเมตาเกี่ยวกับการรับส่งข้อมูล IP ที่ไหลเข้าและออกจากอินเทอร์เฟซเครือข่ายใน VPC ซับเน็ต หรือ ENI แต่ละรายการของคุณ โดยจัดเก็บไว้ใน CloudWatch Logs หรือ S3 Flow logs ประกอบด้วย IP ต้นทาง, IP ปลายทาง, พอร์ต, โพรโทคอล, จำนวนแพ็กเก็ต, จำนวนไบต์, การดำเนินการ (ACCEPT หรือ REJECT) และประทับเวลา ข้อมูลเหล่านี้มีประโยชน์อย่างยิ่งสำหรับ การแก้ไขปัญหากฎของกลุ่มความปลอดภัยและ NACL การตรวจจับการสแกนพอร์ต และการตรวจสอบรูปแบบการรับส่งข้อมูล แต่จะไม่บันทึกข้อมูลภายในแพ็กเก็ตจริง
# Enable VPC Flow Logs to CloudWatch Logs
aws ec2 create-flow-logs \
--resource-ids vpc-0abc1234def567890 \
--resource-type VPC \
--traffic-type ALL \
--log-destination-type cloud-watch-logs \
--log-group-name /aws/vpc/flow-logs \
--deliver-logs-permission-arn arn:aws:iam::111122223333:role/FlowLogsRoleการสืบค้น VPC Flow Logs ด้วย Insights
CloudWatch Logs Insights มีประสิทธิภาพเป็นพิเศษสำหรับ การวิเคราะห์ VPC Flow Log คุณสามารถระบุการรับส่งข้อมูลที่ถูกปฏิเสธ ค้นหาแหล่งที่มาที่ส่งข้อมูลมากที่สุดตามปริมาณไบต์ ตรวจจับการเชื่อมต่อที่ผิดปกติ หรือแยกการรับส่งข้อมูลของอินสแตนซ์ที่ระบุได้อย่างรวดเร็ว รูปแบบ flow log จะคั่นด้วยช่องว่างตามค่าเริ่มต้น แต่การเผยแพร่ในรูปแบบ JSON ไปยัง CloudWatch Logs จะทำให้ Insights แยกฟิลด์โดยอัตโนมัติในคำสั่งสืบค้น
# Find top 10 source IPs by rejected byte volume in the last day
fields srcAddr, dstAddr, dstPort, action, bytes
| filter action = 'REJECT'
| stats sum(bytes) as rejectedBytes by srcAddr
| sort rejectedBytes desc
| limit 10การเข้ารหัสบันทึกด้วย KMS
CloudWatch Logs จะเข้ารหัสข้อมูลที่จัดเก็บอยู่ทั้งหมดตามค่าเริ่มต้นโดยใช้ คีย์ที่ AWS จัดการ เพื่อเพิ่มความปลอดภัย โดยเฉพาะในสภาพแวดล้อมที่อยู่ภายใต้ข้อกำกับดูแล คุณสามารถเชื่อมโยง คีย์ KMS ที่ลูกค้าจัดการกับกลุ่มบันทึกได้ วิธีนี้ช่วยให้คุณควบคุมการหมุนเวียนคีย์และการเข้าถึง รวมถึงเพิกถอนสิทธิ์เข้าถึงข้อมูลบันทึกทั้งหมดได้ด้วยการปิดใช้งานคีย์ คีย์ KMS ต้องมีนโยบายคีย์ที่มอบสิทธิ์ให้ CloudWatch Logs ใช้คีย์ดังกล่าวเพื่อเข้ารหัสและถอดรหัสได้
# Associate a KMS key with a log group
aws logs associate-kms-key \
--log-group-name /myapp/production/api \
--kms-key-id arn:aws:kms:us-east-1:111122223333:key/KEY_ID
# Verify encryption is configured
aws logs describe-log-groups \
--log-group-name-prefix /myapp/production \
--query 'logGroups[].{Name:logGroupName,KmsKey:kmsKeyId}'ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิดของ AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
ทบทวนบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า กลุ่มบันทึกและสตรีมบันทึกช่วยจัดระเบียบบันทึกตามแหล่งที่มาและกำหนดระยะเวลาเก็บรักษาได้, Logs Insightsช่วยให้คุณสืบค้นและรวมข้อมูลบันทึกด้วยภาษาสืบค้นที่ทรงพลังซึ่งใช้ไปป์ และ ตัวกรองเมทริกแปลงรูปแบบในบันทึกเป็นเมทริกของ CloudWatch ที่สามารถเรียกใช้การแจ้งเตือนได้ ลำดับถัดไป เราจะสำรวจแดชบอร์ด CloudWatch และ Container Insights เพื่อให้มองเห็นการปฏิบัติงานของระบบ
คำถามที่พบบ่อย
บทเรียน “บันทึก CloudWatch และ Log Insights” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “บันทึก CloudWatch และ Log Insights” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “บันทึก CloudWatch และ Log Insights”
รวบรวมบันทึกจาก EC2, Lambda และคอนเทนเนอร์ไว้ในกลุ่มบันทึก และเรียกใช้คำค้นหา CloudWatch Logs Insights เพื่อค้นหาข้อผิดพลาดและรูปแบบต่าง ๆ คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “บันทึก CloudWatch และ Log Insights” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม
ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เมตริก CloudWatch เนมสเปซ และมิติข้อมูล
- การแจ้งเตือน CloudWatch และการแจ้งเตือนแบบผสม
- บันทึก CloudWatch และ Log Insights
- แดชบอร์ด CloudWatch และ Container Insights