การรวบรวม Log จาก EC2 Instance โดยใช้ CloudWatch Agent บน Amazon Linux 2023

การรวบรวม Log จาก EC2 Instance โดยใช้ CloudWatch Agent บน Amazon Linux 2023

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

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

สร้าง IAM

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

ดูตัวอย่างได้ที่ลิงก์บทความด้านล่างนี้
การสร้าง SSM สำหรับใช้กับ EC2 Instance

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

ตัวอย่างตั้งค่าการสร้าง Role สำหรับ CloudWatch Log ของบทความครั้งนี้

เข้ามาที่ Service Identity and Access Management (IAM)
เลือก Roles จากเมนูด้านซ้าย
คลิก Create role

Step 1 - Select trusted entity:
Trusted entity type: AWS service
Use case: ◉ EC2
คลิก Next

Step 2 - Add permissions:
Permissions policies
Policy name: (ค้นหาและติ๊ก Policy ตามด้านล่างนี้)
CloudWatchAgentServerPolicy (*จำเป็นสำหรับ CloudWatch Agent)
AmazonSSMManagedInstanceCore (หากไม่ต้องการรันคำสั่งบน SSM ไม่ต้องเพิ่มก็ได้)
คลิก Next

Step 3 - Name, review, and create:
Role details
Role Name: tinnakorn-cwagent-ec2-role (ชื่ออะไรก็ได้)
เลื่อนลงมาด้านล่างสุด คลิก Create role

เมื่อสร้าง SSM Role เสร็จแล้ว โปรดอ่านที่นี่ก่อนที่จะไปสร้าง EC2 Instance ครับ

  • สำหรับใครที่มี EC2 Instance (Amazon Linux) ที่พร้อมใช้งานอยู่แล้ว ข้ามไปทำที่หัวข้อ เพิ่ม Role สำหรับ CloudWatch Log ใน EC2 Instance ได้เลยครับ
  • สำหรับใครที่ยังไม่ได้สร้าง EC2 Instance ให้ทำตามหัวข้อ สร้าง EC2 Instance ด้านล่างนี้ครับ

สร้าง EC2 Instance

ดูตัวอย่างได้ที่ลิงก์บทความด้านล่างนี้
วิธีติดตั้ง Amazon Linux 2023 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY

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

ตัวอย่างตั้งค่าการสร้าง EC2 Instance ของบทความครั้งนี้

Region: Singapore

※Launch instances
Name and tags
Name: tinnakorn-cwagent-ec2 (ตั้งชื่อที่ต้องการ)

Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI): Amazon Linux 2023 AMI

Instance type
Instance type: t3a.micro (เลือกสเปคตามต้องการ)

Key pair (login)
Key pair name - required: Proceed without a key pair (Not recommended)

Network settings
Firewall (security groups)
เลือก Select existing security group
Common security groups: ไม่ต้องเลือก Security group เพราะตัวระบบจะเลือก default ให้อัตโนมัติ

Configure storage
1x: 8 GiB gp3 Root volume (Default)

ー เพิ่ม Role ที่ Advanced details นี้ ー

คลิก Advanced details เพื่อขยายหน้าจอ แล้วเลือก Role ที่เราสร้างไว้ก่อนหน้านี้
IAM instance profile: tinnakorn-cwagent-ec2-role
cwagent-ec2-role

เมื่อสร้าง EC2 Instance สำหรับ CloudWatch Log เสร็จแล้ว ข้ามไปขั้นตอนติดตั้ง CloudWatch Agent และ Collectd ใน Instanceได้เลย เนื่องจากได้เพิ่ม Role ใน EC2 Instance ระหว่างที่สร้าง EC2 Instance ไปแล้ว

เพิ่ม Role ใน EC2 Instance

ขั้นตอนนี้จะเหมาะสำหรับผู้ใช้งานที่มี EC2 Instance (Amazon Linux) ที่พร้อมใช้งานอยู่แล้ว แต่ยังไม่ได้เพิ่ม Role

ก่อนอื่นให้เราเข้ามาที่หน้าจอ EC2 Intance ของเรา แล้วตรวจสอบ IAM Role ตามรูปภาพ
ถ้าแสดง - ตามรูปภาพนี้ คือเรายังไม่มี IAM Role
add_cwagent_ec2_role-1

ทีนี้เรามาเพิ่ม Role โดยมาที่ด้านขวาบน เลือก Actions > Security > Modify IAM Role
add_cwagent_ec2_role-2

เมื่อเข้ามาหน้าจอ Modify IAM role แล้ว ให้เลือก IAM role ที่สร้างเตรียมไว้ เช่น tinnakorn-cwl-ec2-role แล้วคลิก Update IAM role
add_cwagent_ec2_role-3

แล้วกลับมาหน้าจอหลักของ EC2 Instance และตรวจสอบที่ IAM Role อีกครั้ง จะเห็นว่ามี IAM Role ของเราเพิ่มเข้ามาแล้ว
add_cwagent_ec2_role-4

หลังจากเพิ่ม IAM Role ใน EC2 Instance เสร็จแล้ว เริ่มทำขั้นตอนถัดไปได้เลย

*หากเกิดปัญหาระหว่างดำเนินเกี่ยวกับ CloudWatch Log แนะนำให้ลอง Stop/Start EC2 Instance และดำเนินการต่ออีกครั้ง

เปิด Session Manager

ครั้งนี้จะรันคำสั่งใน Session Manager บน Instnace เนื่องจากได้เพิ่ม Policy AmazonSSMManagedInstanceCore ไว้ก่อนหน้านี้แล้ว โดยเข้าไปที่ "Instnace > Connect > แท็บ Session Manager > Connect"

แล้วรันคำสั่ง Login Root และ Update server

sudo su -
yum update -y

ติดตั้ง rsyslog

เปิดใช้งานไฟล์บันทึก (Log) ในไดเร็กทอรี /var/log/ บน Amazon Linux 2023
หากต้องการติดตั้งแพ็กเกจ rsyslog บน Amazon Linux 2023 และ start service ให้เรียกใช้คำสั่งนี้

yum install rsyslog -y
systemctl enable rsyslog --now

ตรวจสอบ Log ของ Instance ใน /var/log/messages

less /var/log/messages

Output (ออกจากหน้าจอนี้โดยกดปุ่ม Q)

Aug 14 03:21:15 ip-172-31-8-142 kernel: Linux version 6.1.102-108.177.amzn2023.x86_64 (mockbuild@ip-10-0-62-55) (gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), GNU ld version 2.39-6.amzn2023.0.10) #1 SMP PREEMPT_DYNAMIC Wed Jul 31 10:18:50 UTC 2024
Aug 14 03:21:15 ip-172-31-8-142 kernel: Command line: BOOT_IMAGE=(hd0,gpt1)/boot/vmlinuz-6.1.102-108.177.amzn2023.x86_64 root=UUID=2277f5ea-ebeb-42da-a2e1-3b9cf1c1bca9 roconsole=tty0 console=ttyS0,115200n8 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0 selinux=1 security=selinux quiet
Aug 14 03:21:15 ip-172-31-8-142 kernel: KASLR enabled
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-provided physical RAM map:
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-e820: [mem 0x0000000000100000-0x00000000314cdfff] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-e820: [mem 0x00000000314ce000-0x000000003174dfff] reserved
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-e820: [mem 0x000000003174e000-0x000000003175dfff] ACPI data
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-e820: [mem 0x000000003175e000-0x00000000317ddfff] ACPI NVS
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-e820: [mem 0x00000000317de000-0x000000003d77bfff] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: BIOS-e820: [mem 0x000000003d77c000-0x000000003d7fffff] reserved
Aug 14 03:21:15 ip-172-31-8-142 kernel: NX (Execute Disable) protection: active
Aug 14 03:21:15 ip-172-31-8-142 kernel: extended physical RAM map:
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x0000000000000000-0x000000000009ffff] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x0000000000100000-0x000000002f6be017] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x000000002f6be018-0x000000002f6c6e57] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x000000002f6c6e58-0x00000000314cdfff] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x00000000314ce000-0x000000003174dfff] reserved
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x000000003174e000-0x000000003175dfff] ACPI data
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x000000003175e000-0x00000000317ddfff] ACPI NVS
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x00000000317de000-0x000000003d77bfff] usable
Aug 14 03:21:15 ip-172-31-8-142 kernel: reserve setup_data: [mem 0x000000003d77c000-0x000000003d7fffff] reserved
Aug 14 03:21:15 ip-172-31-8-142 kernel: efi: EFI v2.70 by EDK II
Aug 14 03:21:15 ip-172-31-8-142 kernel: efi: SMBIOS=0x3166a000 ACPI=0x3175d000 ACPI 2.0=0x3175d014 MEMATTR=0x2fe10a98
Aug 14 03:21:15 ip-172-31-8-142 kernel: SMBIOS 2.7 present.
Aug 14 03:21:15 ip-172-31-8-142 kernel: DMI: Amazon EC2 t3a.micro/, BIOS 1.0 10/16/2017
Aug 14 03:21:15 ip-172-31-8-142 kernel: Hypervisor detected: KVM
Aug 14 03:21:15 ip-172-31-8-142 kernel: kvm-clock: Using msrs 4b564d01 and 4b564d00
Aug 14 03:21:15 ip-172-31-8-142 kernel: kvm-clock: using sched offset of 4257464174 cycles
Aug 14 03:21:15 ip-172-31-8-142 kernel: clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
Aug 14 03:21:15 ip-172-31-8-142 kernel: tsc: Detected 2199.990 MHz processor
Aug 14 03:21:15 ip-172-31-8-142 kernel: last_pfn = 0x3d77c max_arch_pfn = 0x400000000
/var/log/messages

ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้
systemd journal replaces rsyslog - Amazon Linux 2023 (เกี่ยวกับการใช้ rsyslog ใน AL2023)
Find log files in Amazon Linux 2023 | AWS re:Post (เกี่ยวกับคำสั่ง rsyslog)

ติดตั้ง CloudWatch Agent และ Collectd ใน Instance

yum install amazon-cloudwatch-agent -y
yum install collectd -y

หากไม่ต้องการรับ Log โดยใช้ collectd ไว้สำหรับ Custom Metrics ก็ไม่จำเป็นต้องติดตั้งที่ collectd
หากสร้างการกำหนดค่าด้วย Wizard แล้วเกิด Error ในตอนที่เริ่มต้นระบบ ก็ต้องติดตั้ง collectd ในสภาพแวดล้อมเตรียมไว้ในตอนนี้

ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้
Retrieve custom metrics with collectd - Amazon CloudWatch

สร้างการกำหนดค่าด้วย Wizard

รันคำสั่งสร้างการกำหนดค่าด้วย Wizard (หากรันใน root ไม่จำเป็นต้องป้อน sudo)

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

ตัวอย่างการกำหนดค่า นอกจากคำถามด้านล่างนี้คือค่าเริ่มต้น

  • Which user are you planning to run the agent? = 2. root (เนื่องจาก "/var/log/messages" ต้องการเข้าถึงด้วยสิทธิ์ root)
  • Do you want to monitor any log files? = 1. yes
    • Log file pate: = /var/log/messages (ครั้งนี้จะป้อน Path ที่ติดตั้ง rsyslog ในตอนแรก)
    • Log group name:
      • default choice: [messages] = tinnakorn-cwagent-ec2/var_log_messages (ป้อนตามต้องการ)
    • Log group class: = 1. STANDARD
    • Log stream name:
      • default choice: [{instance_id}] = Enter
    • Log Group Retention in days = 7. 30 (ตั้งค่าให้ Log เก็บข้อมูล 30 วัน เมื่อเวลาผ่านไป 30 วันข้อมูล Log นี้จะหายไป)
  • Do you want to specify any additional log files to monitor? = 2. no
  • Do you want the CloudWatch agent to also retrieve X-ray traces? = 2. no
  • Do you want to store the config in the SSM parameter store? = 2. no
[root@ip-xx-xx-xx-xx ~]# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:

Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesAre you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:

Which user are you planning to run the agent?
1. cwagent
2. root
3. others
default choice: [1]:
2
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:

Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:

What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:

Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:

Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:

Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:

Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:

Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:

Current config as follows:
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "metrics": {
                "aggregation_dimensions": [
                        [
                                "InstanceId"
                        ]
                ],
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "collectd": {
                                "metrics_aggregation_interval": 60
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:

Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:

Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:

Log file path:
/var/log/messages
Log group name:
default choice: [messages]
tinnakorn-cwagent-ec2/var_log_messages
Log group class:
1. STANDARD
2. INFREQUENT_ACCESS
default choice: [1]:

Log stream name:
default choice: [{instance_id}]

Log Group Retention in days
1. -1
2. 1
3. 3
4. 5
5. 7
6. 14
7. 30
8. 60
9. 90
10. 120
11. 150
12. 180
13. 365
14. 400
15. 545
16. 731
17. 1096
18. 1827
19. 2192
20. 2557
21. 2922
22. 3288
23. 3653
default choice: [1]:
7
Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
2
Do you want the CloudWatch agent to also retrieve X-ray traces?
1. yes
2. no
default choice: [1]:
2
Existing config JSON identified and copied to:  /opt/aws/amazon-cloudwatch-agent/etc/backup-configs
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/messages",
                                                "log_group_class": "STANDARD",
                                                "log_group_name": "tinnakorn-cwagent-ec2/var_log_messages",
                                                "log_stream_name": "{instance_id}",
                                                "retention_in_days": 30
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "aggregation_dimensions": [
                        [
                                "InstanceId"
                        ]
                ],
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "collectd": {
                                "metrics_aggregation_interval": 60
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Program exits now.
[root@ip-xx-xx-xx-xx ~]#

การตั้งค่าจะส่งออกไปที่ /opt/aws/amazon-cloudwatch-agent/bin/config.json

ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้
Create the CloudWatch agent configuration file with the wizard - Amazon CloudWatch

โหลดการกำหนดค่า

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

หากเกิด Error ขณะโหลดการกำหนดค่า ให้ตรวจสอบว่ามีการติดตั้ง Collected หรือไม่

Configuration validation second phase failed
======== Error Log ========
2024-08-14T03:58:50Z E! [telegraf] Error running agent: Error loading config file /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml: error parsing socket_listener, open /usr/share/collectd/types.db: no such file or directory

คำสั่งเพิ่มเติมเกี่ยวกับ Cloudwatch Agent

เริ่มต้นระบบ

sudo systemctl start amazon-cloudwatch-agent.service

ตรวจสอบสถานะ

sudo systemctl status amazon-cloudwatch-agent.service
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

หยุดการทำงานของระบบ

sudo systemctl stop amazon-cloudwatch-agent.service

ตรวจสอบ Log ของ Cloudwatch Agent

sudo journalctl -u amazon-cloudwatch-agent.service

ตรวจสอบ Log groups ใน CloudWatch

เข้ามาที่บริการ "CloudWatch > Log groups" แล้วค้นหาชื่อ Log group ที่ป้อนในขั้นตอนสร้างการกำหนดค่าด้วย Wizard ครั้งนี้คือ tinnakorn-cwagent-ec2/var_log_messages
จะเห็นว่ามีชื่อ Log group ของเราแสดงอยู่ที่นี่โดยมี Retention เป็น 1 month ตามที่กำหนดค่าไว้ ให้คลิกเข้าไปที่ Log group ได้เลย
check_cwagent_log_group-1

เมื่อเข้ามาแล้วจะเห็น Log stream โดยมี Instance ID ที่เราดำเนินการติดตั้ง Cloudwatch Agent ให้คลิกเข้าไปที่ Instance ID ได้เลย
check_cwagent_log_group-2

แล้วจะแสดง Log events แบบนี้
check_cwagent_log_group-3

ทดสอบการทำงาน Cloudwatch Agent

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

tail -f /var/log/messages

Output หน้าจอ SSM (ออกจากหน้าจอนี้โดยกดปุ่ม Ctrl + C)
check_cwagent_log_group-4-1
หน้าจอ Log events ใน CloudWatch ซึ่งจะเห็นว่าจะแสดงข้อมูลเหมือนกับหน้าจอ SSM ด้านบน
check_cwagent_log_group-4-2

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

กลับมาที่ Log group ของเราอีกครั้ง จะเห็นว่า Log stream ยังไม่หายไป
check_cwagent_log_group-6

Filter ข้อมูลใน Log stream

การ Filter ข้อมูลใน Log stream จะมีทั้งหมด 4 วิธีให้เราสามารถเลือกใช้งานได้

  1. Hot key filter
  2. Absolute filter
  3. Relative filter
  4. Search bar filter

1. Hot key filter

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

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

check_cwagent_log_group-7

2. Absolute filter

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

3. Relative filter

Relative filter เป็นการกำหนดเวลาและวันที่ข้อมูล Log ที่เราต้องการจะดูย้อนหลัง โดยสามารถกำหนดได้ตั้งแต่ระดับ Minutes, Hours, Days, Weeks และ Months
check_cwagent_log_group-9

4. Search bar filter

Search bar filter เป็นการค้นหาเนื้อหาที่เราต้องการจะดูข้อมูล Log

ครั้งนี้จะลองค้นหาคำว่า systemd จะเห็นว่าข้อมูล Log ที่แสดงทั้งหมดจะแสดงเฉพาะ Log ที่เกี่ยวกับ systemd ตามที่เราค้นหาเท่านั้น
check_cwagent_log_group-10

ราคา Amazon CloudWatch

ราคา Amazon CloudWatch ในปัจจุบัน ณ วันที่เขียนบทความ (2024/08/14) สามารถตรวจสอบได้ตามด้านล่าง

ครั้งนี้จะตรวจสอบการใช้งานใน Region Singapore โดยจะมีอัตราค่าใช้จ่ายดังนี้

จัดการข้อมูลบันทึก / Manage Logs ค่าใช้จ่าย / Cost
รวบรวม (การนำข้อมูลเข้า) / Collect (Data Ingestion)
มาตรฐาน / Standard USD 0.70 ต่อ GB
การเข้าถึงไม่บ่อย / Infrequent Access USD 0.35 ต่อ GB
จัดเก็บ (แบบถาวร) / Store (Archival) USD 0.03 ต่อ GB
วิเคราะห์ (คิวรี Logs Insights) / Analyze (Logs Insights queries) USD 0.007 ต่อ GB ของข้อมูลที่สแกน
ตรวจจับและปกปิด (การปกป้องข้อมูล) / Detect and Mask (Data Protection) USD 0.12 ต่อ GB ของข้อมูลที่สแกน
วิเคราะห์ (Live Tail) / Analyze (Live Tail) 0.01 USD ต่อนาที

check_cwagent_log_group-11

※หมายเหตุ: ข้อมูลราคาอาจจะมีการเปลี่ยนแปลงไปตามกาลเวลา ขอแนะนำให้ตรวจสอบในหน้าเว็บไซต์ทางการของ AWS เพื่อยืนยันความถูกต้องตามลิงก์ด้านล่างนี้
ราคาของ Amazon CloudWatch – Amazon Web Services (AWS)

สรุป

ต่อให้เรา Terminate Instance ไปแล้ว แต่ Log ของ Instance จะยังบันทึกอยู่ใน Log groups ของเราตามระยะเวลาที่เรากำหนดไว้ เช่น ครั้งนี้กำหนดการจัดเก็บ Log ไว้ 30 วัน หลังจากครบ 30 วัน Log ก็จะหายไปอัตโนมัติ

บทความที่เกี่ยวข้อง

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.