การสร้าง CloudWatch Log เพื่อใช้งานใน EC2 บน AWS

หากคุณกำลังประสบปัญหาและไม่สามารถหาสาเหตุได้ หรือ คุณกำลังใช้งาน Auto Scaling บน EC2 อยู่และมีการเปิดปิดการใช้งานอัตโนมัติอยู่ตลอดเวลา ทำให้ไม่สามารถดูประวัติการใช้งาน(Log)ได้ ผมคิดว่าเครื่องมือ CloudWatch สามารถแก้ปัญหาเรื่องนี้ได้ให้กับคุณได้ ซึ่งในบล็อกนี้จะนำเสนอวิธีการใช้งาน CloudWatch Log ควบคู่กับ EC2 เพื่อที่เราจะสามารถดูบันทึกการทำงานของระบบได้ และสามารถตรวจสอบความผิดพลาดของระบบได้อีกด้วย มาเริ่มกันเลย
2022.06.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

How to start (เริ่มต้น)

ก่อนที่เราจะเริ่มต้นทำอะไรให้เราเลือก Region ที่อยู่ใกล้ประเทศเรามากที่สุดซึ่งในตัวอย่างของผมจะเป็น Singapore Region ซึ่งอยู่ใกล้กับประเทศไทยเรามากที่สุดครับ

IAM

เราจะเริ่มจากการสร้าง Role เพื่อมอบสิทธิ์การใช้งาน CloudWatch ให้อนุญาตเข้าถึงการทำงานของ EC2 และทำการเก็บข้อมูล Log ได้ครับ โดยการเข้าไปที่หน้าแรกของ IAM

และเลือกหัวข้อ Roles จากแถบเมนูด้านซ้าย ตามด้วยการกดปุ่ม Create role มุมขวาครับ เพื่อทำการสร้าง Role
ต่อมาเราจะพบกับหน้านี้ให้เราเลือกข้อมูลตามนี้

Trust Entity: AWS service
Usecase: EC2


และกด Next เพื่อไป Step ถัดไป

ให้เราค้นหา Policies ที่ชื่อว่า

CloudWatchLogsFullAccess


จากนั่นทำการติ้กเพื่อเลือกและกด Next ไปยังขั้นตอนถัดไป

ในขั้นตอนต่อไปจะเป็น Step สุดท้ายของการสร้าง Role นั้นคือการกำหนดชื่อ Role และแสดงข้อมูลที่เราเลือกไว้ทั้งหมดเพื่อตรวจสอบความถูกต้อง ในขั้นตอนนี้ให้เรากรอกชื่อ Role name ที่เราต้องการลงไป ซึ่งในตัวอย่างผมจะใช้ชื่อว่า chawish-test-ec2-role นะครับ

Role name: chawish-test-ec2-role (สามารถกำหนดเองได้)


ถ้าตรวจสอบข้อมูลถูกต้องทั้งหมดให้ทำกดปุ่ม Create role เพื่อทำการสร้าง role ได้เลยครับ
เมื่อสร้างเสร็จเราก็จะมาทำในส่วนของ Amazon EC2 กันต่อนะครับ

Amazon EC2

ในขั้นตอนแรกให้เราทำการสร้าง Key Pair ก่อนเลยเป็นอันดับแรกซึ่งขั้นตอนการทำนั้นสามารถดูได้จากลิ้งค์บล้อกด้านล่างนี้ได้เลย โดยเนื้อหาในลิ้งค์จะครอบคลุมการสร้าง Key pair,Instance และการเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม Putty ซึ่งทั้ง 3 อย่างนี้จำเป็นต่อการใช้งาน CloudWatch Log

วิธีติดตั้ง Amazon Linux บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTy
ซึ่งในตัวอย่างผมจะทำการตั้งค่าข้อมูลตามนี้ทั้งหมด
Name & Tags:
key->Name
Value->chawish-test
AMI: Amazon Linux 2 AMI(HVM) - Kernel 5.10, SSD Volumn Type
Instance type: t3a.nano
Key pair: chawish-test (เลือกประเภทไฟล์เป็น ppk)
Security group name: chawish-test
Inbound security groups rules:
Type->ssh
Source type->My IP

*****หลังจากนี้จะเป็นเนื้อหาเพิ่มเติมที่ไม่อยู่ในลิ้งค์*****

ส่วนของ Advanced details ให้เราเลือก
IAM instance profile: chawish-test-ec2-role (ชื่อ role ที่เราสร้างในขั้นตอนแรก)
เมื่อตั้งค่าข้อมูลทั้งหมดเรียบร้อยแล้วให้กดปุ่ม Launch Instance ด้านล่างได้เลย

การติดตั้ง CloudWatch Log ลงในเซิร์ฟเวอร์

ซึ่งในตัวอย่างผมจะทำการติดตั้งผ่านโปรแกรม Putty นะครับ เริ่มต้นด้วยการรันคำสั่งมอบสิทธิ์การใช้งานสูงสุดให้กับเราครับ
sudo su-

ตามด้วยคำสั่ง update ให้กับเซิร์ฟเวอร์ครับ
yum update -y
เมื่อเราทำการอัพเดทข้อมูลเซิร์ฟเวอร์แล้วคราวนี้ก็ทำการติดตั้ง awslogs สำหรับใช้งาน CloudWatch logs ลงในเซิร์ฟเวอร์ได้เลยครับ
yum install awslogs -y
จากนั้นให้เราตรวจสอบการติดตั้งดูนะครับโดยใช้คำสั่ง
less /var/log/messages
ซึ่งคำสั่งนี้จะเป็นการดู Log ของตัวเซิร์ฟเวอร์นะครับซึ่งเราสามารถดูได้หากมีการใช้งานบนระบบ Linux ครับ และเมื่อเรารันแล้วก็จะเห็นข้อความของระบบว่าขณะนี้เราได้ทำการติดตั้ง CloudWatch Log ลงในระบบเป็นที่เรียบร้อยแล้ว
ต่อมาให้เรารันคำสั่ง
tail -f /var/log/messages
เพื่อทำการดู Log flow นะครับ ซึ่งถ้าเราเปิดดูจะเห็นว่าเซิร์ฟเวอร์มีการทำงานอะไรบ้างแบบ real time เลย
และในขั้นตอนต่อไปเราจะทำการสร้าง Log group ใน CloudWatch กันนะครับ

การสร้าง Log group ของ CloudWatch

อันดับแรกให้เราเช็คก่อนว่ามี Log group ชื่อเดียวกับที่เราต้องการจะสร้างหรือไม่โดยไปที่หน้า CloudWatch และ เลือกหัวข้อ Log groups ครับ

คราวนี้ให้เรากลับมาที่ Putty และทำการรันคำสั่ง โดยในส่วนของ region ที่อยู่ในคำสั่งให้เราเลือก region ที่อยู่ใกล้กับประเทศเรามากที่สุดซึ่งในตัวอย่างผมจะเลือกเป็น ap-southeast-1 นะครับหรือก็คือ Region ของประเทศ Singapore นั้นเอง
aws logs create-log-group --region ap-southeast-1 --log-group-name "/chawish-test/var_log_messages"

โดยในคำสั่งจะแบ่งเป็นข้อมูล Region และชื่อของ log group นะครับ
--region: ap-southeast-1
--log-group-name: /chawish-test/var_log_messages

พอรันเสร็จให้เรากลับมาดูหน้า CloudWatch นะครับจะเห็นว่ามีชื่อ Log group ของเราขึ้นมาแล้ว

ซึ่งถ้าเราสังเกตข้อมูลในหัวข้อ Retention นะครับ จะเห็นว่าขึ้นเป็น Never expire หรือก็คือไม่มีวันหมดอายุนั้นเองเป็นค่ามาตรฐานทุกครั้งที่มีการสร้าง log group ครับ แต่ในตัวอย่างผมจะทำการตั้งค่าให้ข้อมูล Log ของผมมีอายุการใช้งาน 30 วันครับ นั้นหมายความว่าเมื่อเวลาผ่านไป 30 วันข้อมูล Log นี้ก็จะหายไปครับ โดยใช้คำสั่ง
aws logs put-retention-policy --region ap-southeast-1 --log-group-name "/keisuke-test/var_log_messages" --retention-in-days 30

โดยในคำสั่งจะแบ่งเป็นข้อมูล Region ชื่อของ log group และระยะของ retention ครับ
--region: ap-southeast-1
--log-group-name: /chawish-test/var_log_messages
--retention-in-days: 30 (ในตัวอย่างผมจะตั้งค่าเป็น 30 วันนะครับ)


การสร้าง Log stream

และขั้นตอนถัดไปเราจะทำการสร้าง Log stream กันนะครับซึ่งจะเป็นตารางข้อมูลของระบบต่างๆแบบ real time ซึ่งเราจะสามารถเข้าไปดูได้ภายใน CloudWatch โดยไม่จำเป็นต้องรันคำสั่งแสดง Log ใน Putty อีกต่อไป
aws logs create-log-stream --region ap-southeast-1 --log-group-name "/chawish-test/var_log_messages" --log-stream-name i-02b566d14ae26f99c


โดยในคำสั่งจะแบ่งเป็นข้อมูล Region ชื่อของ log group และ id instance ใน EC2 ครับ
--region: ap-southeast-1
--log-group-name: /chawish-test/var_log_messages
--log-stream-name: i-02b566d14ae26f99c (ส่วนนี้คือ id instance ใน EC2 ของเราที่ต้องการจะดูข้อมูล Log ครับ)
สามารถดูได้จากหน้า Instance ที่อยู่ใน EC2 ครับ


ซึ่งถ้าคำสั่งเป็นไปได้ด้วยดี เราก็จะเห็นว่ามี Log stream ถูกสร้างขึ้นมาภายใน Log group ของเราเรียบร้อย

การตั้งค่า awslog และ awscli

ให้เรารันคำสั่งนี้ลงใน Putty
vi /etc/awslogs/awslogs.conf
และเลื่อนลงมาดูข้อมูลล่างสุดเพื่อทำการเปลี่ยนแปลง log_group_name ให้เป็นชื่อ log group ของเรา

การแก้ไขไฟล์ใน Linux ให้เรากด i เพื่อเข้าโหมด insert เราจะสามารถแก้ไขข้อมูลในไฟล์ได้
เมื่อแก้ไขเสร็จแล้วให้กด esc และ พิมคำสั่ง :x เพื่อบันทึกข้อมูลที่แก้ไขและออกจากไฟล์นั้น



และอันดับต่อไปให้เราไปแก้ไข region ในไฟล์ awscli โดยใช้คำสั่ง
vi /etc/awslogs/awscli.conf
เพื่อเปิดไฟล์และแก้ไขให้เป็น ap-southeast-1 ดังรูป

ต่อมาให้ทำการเปิดใช้งานและ restart awslog เพื่อเริ่มการทำงานใหม่ของระบบ log ครับ โดยใช้คำสั่งตามลำดับ
systemctl restart awslogsd
systemctl enable awslogsd
ซึ่งเราจะเห็นได้ว่าสถานะการทำงานตอนนี้คือ Active หมายความว่ามีการเปิดใช้งานเป็นที่เรียบร้อยแล้ว

ทดสอบการทำงาน CloudWatch Log

วิธีการทดสอบคือเราจะรันคำสั่ง log flow ในโปรแกรม Putty และดูว่าข้อมูลที่แสดงใน Putty นั้นเหมือนกันกับข้อมูลที่อยู่ใน Log stream หรือไม่ ถ้าข้อมูลแสดงเหมือนกันนั้นหมายความว่าเราได้ทำการสร้าง CloudWatch Log อย่างถูกต้องสมบูรณ์แล้วครับ

คราวนี้มาลอง Terminate instance ที่เราใช้งานกันบ้างและดูว่าข้อมูล Log ลองเราจะหายไปหรือไม่ ถ้าข้อมูลยังอยู่แสดงว่าเราทำการตั้งค่า CloudWatch ถูกต้องแล้ว

การ Filter ข้อมูลใน Log stream

โดยจะมีทั้งหมด 4 วิธีให้เราสามารถเลือกใช้งานกัน

Hot key filter

จะเป็นตัวเลือกที่ระบบสร้างมาให้เรากดใช้งาน Filter ได้เลยเพียงแค่คลิ้กโดยจะมีเงื่อนไขการ Filter พื้นฐาน

  • 1m คือกรองข้อมูลล่าสุดเมื่อ 1 นาทีที่ผ่านมา
  • 30m คือกรองข้อมูลล่าสุดเมื่อ 30 นาทีที่ผ่านมา
  • 1h คือกรองข้อมูลล่าสุดเมื่อ 1 ชั่วโมงที่ผ่านมา
  • 12h คือกรองข้อมูลล่าสุดเมื่อ 12 ชั่วโมงที่ผ่านมา

  • Absolute filter

    เป็นการ filter ข้อมูลแบบกำหนดวันที่ ซึ่งเราสามารถเลือกได้เลยว่าต้องการจะดูข้อมูลจากวันที่เท่าไหร่ ถึง วันที่เท่าไหร่ ตามรูปครับ

    Relative filter

    จะเป็นการกำหนดเวลาและวันที่ข้อมูลย้อนหลังที่เราต้องการจะดู โดยสามารถกำหนดได้ตั้งแต่ระดับ นาที,ชั่วโมง,วัน และ สัปดาห์ ตามรูปครับ

    Search bar filter

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

    จะสังเกตเห็นว่าเมื่อเราค้นหาแล้ว ข้อมูล log ที่แสดงทั้งหมดจะแสดงข้อมูลเฉพาะที่เราค้นหาเท่านั้น

    ราคาและค่าใช้จ่าย

    ในส่วนของราคาการใช้งาน CloudWatch Log นะครับ ถ้าเป็นการใช้งานใน Region ของ Singapore จะมีอัตราค่าใช้จ่ายอยู่ที่

    รวบรวม (การนำเข้าข้อมูล) 0.70 USD ต่อ GB
    จัดเก็บ (แบบถาวร) 0.03 USD ต่อ GB
    วิเคราะห์ (คิวรี Logs Insights) 0.007 USD ต่อ GB ของข้อมูลที่สแกน



    ทั้งนี้ข้อมูลราคาอาจจะมีการเปลี่ยนแปลงไปตามกาลเวลา ขอแนะนำให้ตรวจสอบในหน้าเว็บของ AWS เพื่อยืนยันความถูกต้องตามลิ้งค์ด้านล่างนี้ครับ

    Pricing ของ CloudWatch

    สรุป

    สุดท้ายผมหวังว่าข้อมูลบล็อกในครั้งนี้จะมีส่วนช่วยให้ผู้ที่ต้องการศึกษาหรือใช้งาน CloudWatch Log ได้ดียิ่งขึ้นนะครับและขอขอบคุณเนื้อหาเพิ่มเติมที่มีส่วนช่วยในการเขียนบล็อกในครั้งนี้ได้แก่

  • AWS CLI คืออะไร? ขั้นตอนและวิธีใช้สำหรับมือใหม่
  • วิธีการใช้ S3 จาก EC2 และการใช้ AWS CLI S3
  • [ข้อควรระวัง] เกี่ยวกับการที่ Access Key หลุด(รั่วไหล) และถูกนำไปใช้โดยไม่ได้รับอนุญาต
  • What is Amazon CloudWatch Logs?