Cloud Watch Logs for EC2
Mặc định, không có bất kỳ nhật ký nào từ máy EC2 của bạn sẽ được gửi đến CloudWatch. Bạn cần chạy một CloudWatch agent trên EC2 để đẩy các file nhật ký bạn muốn. Hãy đảm bảo rằng các quyền IAM được thiết lập đúng. CloudWatch log agent có thể được cài đặt trên nơi đặt chỗ cũng như.
Cloud Watch Logs Agent & Unified Agent
CloudWatch Logs Agent và Unified Agent là 2 phiên bản agent để thu thập và gửi log từ máy chủ ảo (EC2 instances, máy chủ on-premise…) đến CloudWatch Logs của AWS.
CloudWatch Logs Agent là phiên bản cũ hơn và chỉ có thể gửi log đến CloudWatch Logs.
Trong khi đó, CloudWatch Unified Agent cung cấp tính năng thu thập thêm các thông số hệ thống như RAM, tiến trình, v.v… Ngoài ra, nó cũng có thể thu thập log để gửi đến CloudWatch Logs. Một tính năng nổi bật của CloudWatch Unified Agent là cho phép cấu hình tập trung bằng cách sử dụng SSM Parameter Store.
CloudWatch Unified Agent – Metrics
Phần này đề cập đến các metric mà bạn có thể thu thập trực tiếp trên máy chủ Linux hoặc EC2. Các metric này bao gồm:
- CPU: CPU active, guest, idle, system, user, steal.
- Disk metrics: dung lượng ổ đĩa (free, used, total) và Disk IO (writes, reads, bytes, iops).
- RAM: dung lượng RAM (free, inactive, used, total, cached).
- Netstat: số lượng kết nối TCP và UDP, gói tin mạng, bytes.
- Processes: số lượng tiến trình (total, dead, bloqued, idle, running, sleep).
- Swap Space: dung lượng Swap Space (free, used, used %).
Lưu ý rằng EC2 cung cấp các metric chuẩn theo mặc định cho CPU, Disk và Network (mức độ cao).
CloudWatch Alarms
Alarm là công cụ được sử dụng để thông báo khi một metric đạt đến ngưỡng được thiết lập. Có nhiều tùy chọn để cấu hình alarm như lấy mẫu, phần trăm, giá trị tối đa, tối thiểu, và nhiều hơn nữa. Các trạng thái của alarm bao gồm OK (bình thường), INSUFFICIENT_DATA (không đủ dữ liệu để đánh giá), và ALARM (cảnh báo). Thời gian quyết định trạng thái của alarm được định nghĩa bằng cách cấu hình khoảng thời gian đánh giá metric (gọi là period) trong đơn vị giây. Đối với các metric tùy chỉnh có độ phân giải cao, khoảng thời gian đánh giá có thể được đặt ở mức cao hơn 10 giây, 30 giây hoặc bội số của 60 giây.
CloudWatch Alarm Targets
CloudWatch Alarm Targets (Đích của cảnh báo CloudWatch) được sử dụng để kích hoạt các hoạt động như dừng, chấm dứt, khởi động lại hoặc khôi phục lại một EC2 Instance. Nó cũng có thể kích hoạt các hành động tự động điều chỉnh tỷ lệ tự động (Auto Scaling), để tăng hoặc giảm số lượng EC2 instances, tùy thuộc vào cấu hình được thiết lập. Cuối cùng, nó cũng có thể gửi thông báo đến SNS (Simple Notification Service) từ đó bạn có thể thực hiện hầu hết các hoạt động liên quan đến thông báo, ví dụ như gửi email hoặc tin nhắn văn bản đến người dùng.
EC2 Instance Recovery
Trong EC2, Status Check được thực hiện để kiểm tra trạng thái của máy ảo (VM) và phần cứng đằng sau. Đối với VM, EC2 sẽ kiểm tra trạng thái của hệ điều hành và các ứng dụng chạy trên đó. Đối với phần cứng, EC2 sẽ kiểm tra các phần cứng như ổ đĩa, mạng và bộ nhớ.
Khi một EC2 instance bị lỗi, Amazon EC2 cố gắng khôi phục nó bằng cách thử khởi động lại nó. Nếu quá trình khởi động lại không thành công, EC2 sẽ di chuyển instance sang một máy chủ khác trên cùng một availability zone (AZ) trong vài phút.
Trong quá trình khôi phục, các thông số như địa chỉ IP của instance, địa chỉ Elastic IP (nếu có), metadata, placement group, v.v. sẽ được giữ nguyên để giúp cho việc khôi phục nhanh chóng và dễ dàng hơn.
Cloud Watch Alarm: good to know
Trong CloudWatch Alarm, bạn có thể tạo cảnh báo dựa trên CloudWatch Logs Metrics Filters. Bạn cũng có thể sử dụng Command Line Interface (CLI) để thử nghiệm cảnh báo và thông báo bằng cách đặt trạng thái cảnh báo thành “Alarm” bằng lệnh “cloudwatch set-alarm-state -alarm-name” để kiểm tra tính năng cảnh báo và thông báo.
Chúng ta hãy thực hành tạo 1 alarm như sau, vào CloudWatch › Alarms › Create alarm
Bấm Select metric.
Mình sẽ tạo cảnh báo CPU quá tải cho 1 EC2 tên i-044236237663302ad
Dán EC2 ID vào Metric để filler nó như hình, sau đó bấm vào metric đã filter được.
Bạn sẽ thấy chi tiết các Metric name như dưới, hãy chọn metric name là CPUUtilization.
Bạn có thể thiết lập theo mẫu ở dưới để test cảnh báo.
Tiếp theo là thiết lập phần Conditions. Threshold type trong CloudWatch Alarm xác định cách thức sử dụng threshold để xác định trạng thái của metric.
- Static threshold: Sử dụng giá trị ngưỡng cố định để so sánh với giá trị của metric. Nếu giá trị của metric vượt quá ngưỡng, alarm sẽ chuyển sang trạng thái “ALARM”.
- Anomaly detection: Dùng cho các metric có thể có sự biến động đột ngột hoặc không đều trong một khoảng thời gian. CloudWatch sử dụng machine learning để xác định ngưỡng dựa trên các giá trị trước đó của metric. Nếu giá trị của metric vượt quá ngưỡng, alarm sẽ chuyển sang trạng thái “ALARM”.
Phần cài đặt điều kiện cảnh báo cho CPUUtilization, với 4 lựa chọn thresold khác nhau: Greater than (lớn hơn), Greater than or equal to (lớn hơn hoặc bằng), Lower than or equal to (nhỏ hơn hoặc bằng) và Lower than (nhỏ hơn). Bạn cần lựa chọn một trong những lựa chọn này và đưa ra ngưỡng cảnh báo cho CPUUtilization. Ví dụ: nếu bạn muốn cảnh báo khi CPUUtilization lớn hơn hoặc bằng 80%, bạn sẽ chọn lựa chọn “Greater than or equal to” và đặt ngưỡng cảnh báo là 80.
Tiếp theo là Additional configuration. “Datapoints to alarm” có nghĩa là các giá trị của các metric mà CloudWatch sẽ sử dụng để đưa ra quyết định về việc kích hoạt cảnh báo hay không. Khi tạo một cảnh báo trong CloudWatch, bạn cần xác định các datapoints, tức là các giá trị của metric mà bạn muốn theo dõi và kích hoạt cảnh báo khi giá trị đó vượt qua một ngưỡng nhất định. Ví dụ, nếu bạn muốn cảnh báo khi CPU của EC2 instance đạt đến 90%, thì giá trị 90% sẽ được đưa vào danh sách datapoints để CloudWatch theo dõi và kích hoạt cảnh báo khi giá trị CPU vượt qua ngưỡng này.
Missing data treatment là một thuộc tính trong CloudWatch Alarm cho phép người dùng cấu hình cách xử lý các điểm dữ liệu bị thiếu trong các metric. Khi một metric thiếu dữ liệu trong khoảng thời gian đánh giá của Alarm, người dùng có thể chọn một trong hai cách xử lý:
- Breaching: Khi metric thiếu dữ liệu, Alarm sẽ trả về trạng thái Breaching (ALARM), giống như khi metric vượt quá ngưỡng cảnh báo.
- Not Breaching: Khi metric thiếu dữ liệu, Alarm sẽ không tính toán các giá trị thiếu, và sẽ trả về trạng thái Not Breaching (OK), giống như khi metric không vượt quá ngưỡng cảnh báo.
Cài đặt Missing data treatment cho phép người dùng tùy chỉnh cách xử lý metric khi có dữ liệu bị thiếu, giúp tránh tình trạng đưa ra quyết định sai lệch do các giá trị metric không chính xác.
Các hành động (actions) trong CloudWatch Alarm được sử dụng để thực hiện một số tác vụ cụ thể khi một alarm bị kích hoạt. Có ba loại hành động cụ thể:
- Notification Actions: Được sử dụng để gửi thông báo đến các người dùng hoặc hệ thống khi một alarm được kích hoạt. Các thông báo có thể được gửi đến Amazon SNS, email hoặc SMS để thông báo cho người dùng về tình trạng của hệ thống.
- Auto Scaling Actions: Được sử dụng để thực hiện các tác vụ liên quan đến Auto Scaling, chẳng hạn như tăng hoặc giảm số lượng instances.
- EC2 Actions: Được sử dụng để thực hiện các hành động trên instance EC2, chẳng hạn như khởi động lại instance hoặc thay đổi kích thước của instance.
Việc cấu hình các hành động này có thể giúp tự động hóa các tác vụ và tối ưu hóa quản lý hệ thống.
Mình sẽ lựa chọn hành động EC2 action. Trong AWS CloudWatch Alarm, có 3 trạng thái alarm state chính:
- OK: đây là trạng thái khi metric đang theo dõi không vượt quá giới hạn cảnh báo được đặt ra. Alarm sẽ không thực hiện bất kỳ hành động nào khi trạng thái là OK.
- INSUFFICIENT_DATA: đây là trạng thái khi metric đang theo dõi bị mất kết nối hoặc không có đủ dữ liệu để đưa ra quyết định. Alarm sẽ không thực hiện bất kỳ hành động nào khi trạng thái là INSUFFICIENT_DATA.
- ALARM: đây là trạng thái khi metric đang theo dõi vượt quá giới hạn cảnh báo được đặt ra. Alarm sẽ thực hiện các hành động đã được cấu hình, ví dụ như gửi thông báo đến SNS hoặc tạo một hoạt động EC2.
“Take the following action” là phần của CloudWatch Alarm cho phép người dùng thiết lập các hành động cần thực hiện khi alarm được kích hoạt. Cụ thể, trong phần này, người dùng có thể thiết lập một trong các hành động như:
- Stop this instance: dừng hoạt động của instance đang chạy.
- Recover this instance: khởi động lại instance.
- Terminate this instance: xóa instance khỏi hệ thống.
- Reboot this instance: khởi động lại instance một cách mềm để giải quyết các vấn đề phát sinh.
Khi CloudWatch Alarm chuyển sang trạng thái “ALARM”, các hành động được thiết lập sẽ được thực hiện để giải quyết vấn đề và đưa hệ thống trở lại trạng thái bình thường.
Hành động Systems Manager được thực hiện khi cảnh báo đang ở trạng thái Alarm. Nó tạo ra một sự cố hoặc một mục OpsItem trong Systems Manager để đưa ra thông báo cho những người cần biết về sự cố. Mục đích của hành động này là giúp cho các quản trị viên và kỹ thuật viên có thể kiểm soát được tình trạng hoạt động của các thành phần trong hệ thống và có thể xử lý các sự cố kịp thời để đảm bảo tính khả dụng và hiệu suất của hệ thống.
Thêm tên và description sau đó bấm Next.
Phần này cho phép bạn review lại thiết lập, nếu không còn gì thay đổi hãy bấm Create alarm.
Thông báo “Successfully created alarm TerminateEC2OnHighCPU.” cho biết bạn đã tạo alarm thành công. Bạn có thể vào xem chi tiết TerminateEC2OnHighCPU bằng cách bấm vào nó.
Bạn có thể thấy giao diện của nó như sau:
Bây giờ mình sẽ làm cho giá CPU đạt ngưỡng 95% để nó thực hiện action như sau. Hãy google với từ khoá “aws cloudwatch set alarm state”.
Chúng ta hãy link vào nó để vào trang này, mình sẽ giải thích các thành phần như dưới:
set-alarm-state
là một lệnh CLI (command line interface) trong AWS CloudWatch, được sử dụng để thay đổi trạng thái của một alarm. Các tham số của lệnh này bao gồm:
--alarm-name
: Tên của alarm cần thay đổi trạng thái.--state-value
: Giá trị trạng thái mới của alarm. Có thể làOK
,ALARM
hoặcINSUFFICIENT_DATA
.--state-reason
: Lý do thay đổi trạng thái của alarm.--state-reason-data
: Dữ liệu liên quan đến lý do thay đổi trạng thái của alarm.--cli-input-json
: Tham số đầu vào dạng JSON cho lệnh.--generate-cli-skeleton
: Tạo một cấu trúc JSON để sử dụng cho lệnh--cli-input-json
.
Lệnh set-alarm-state
thường được sử dụng để kiểm tra alarm và thông báo. Bằng cách sử dụng lệnh này, người dùng có thể thay đổi trạng thái của alarm thành ALARM
và kiểm tra xem cách mà thông báo được kích hoạt khi alarm chuyển sang trạng thái ALARM
.
Mình chạy lệnh dưới trong AWS CloudShell để đưa mức CPU lên ngưỡng 95%
[cloudshell-user@ip-10-0-72-42 ~]$ aws cloudwatch set-alarm-state --alarm-name TerminateEC20nHighCPU --state-value ALARM --state -reason "Testing"
Và đây là kết quả.
Hành động xoá EC2 đang được thực thi.