Tham khảo bài viết gốc ở đây.
Bài đăng này được viết bởi Vaibhav Shah, Sr. Solutions Architect.
Khi khách hàng sử dụng kiến trúc hướng sự kiện (event-driven architectures) để tổ chức và tự động hóa luồng sự kiện của họ từ producers đến consumers. Công cụ Amazon EventBridge hoạt động như một bộ định tuyến sự kiện serverless cho nhiều target khác nhau dựa trên event rules. Nó tách rời producers và consumers, cho phép khách hàng xây dựng kiến trúc không đồng bộ.
EventBridge cung cấp metrics để giúp bạn giám sát các sự kiện của mình. Một vài số liệu bao gồm: giám sát số lượng sự kiện được tiếp nhận, số lượng lệnh gọi không thành công và số lần mà một target được gọi bởi một quy tắc nhất định, hoặc số lượng sự kiện phù hợp với bất kỳ quy tắc nào.
Để đáp ứng yêu cầu của khách hàng, EventBridge đã thêm các số liệu bổ sung cho phép khách hàng theo dõi sự kiện của họ và cung cấp thêm khả năng hiển thị.
Có gì mới? Những cái mới?
EventBridge có các số liệu mới chủ yếu xoay quanh các số liệu API, sự kiện và lệnh gọi. Các số liệu này cung cấp cho bạn thông tin chi tiết về tổng số sự kiện được xuất bản, sự kiện được xuất bản thành công, sự kiện không thành công, số sự kiện phù hợp với bất kỳ hoặc quy tắc cụ thể nào, các sự kiện bị từ chối do điều tiết, độ trễ và số liệu dựa trên lệnh gọi.
Điều này cho phép bạn theo dõi toàn bộ luồng sự kiện trong EventBridge và nhanh chóng xác định cũng như giải quyết các vấn đề khi chúng phát sinh.
EventBridge hiện có các số liệu sau:
| Metric | Description | Dimensions and Units |
|---|---|---|
| PutEventsLatency | Thời gian thực hiện cho mỗi hoạt động API PutEvents | NoneUnit: Milliseconds |
| PutEventsRequestSize | Kích thước của yêu cầu API PutEvents tính bằng byte | NoneUnit: Bytes |
| MatchedEvents | Số lượng sự kiện khớp với bất kỳ quy tắc nào hoặc với quy tắc cụ thể | None, RuleName, EventBusName, EventSourceNameUnit: Count |
| ThrottledRules | Số lần thực thi quy tắc được điều chỉnh. | None, RuleNameUnit: Count |
| PutEventsApproximateCallCount | Tổng số lệnh gọi (gần đúng) trong lệnh gọi API PutEvents. | NoneUnits: Count |
| PutEventsApproximateThrottledCount | Số lượng ước tính các yêu cầu bị hạn chế trong các cuộc gọi API PutEvents. | NoneUnits: Count |
| PutEventsApproximateFailedCount | Số lượng ước tính lệnh gọi API PutEvents không thành công. | NoneUnits: Count |
| PutEventsApproximateSuccessCount | Số lượng ước tính lệnh gọi API PutEvents thành công. | NoneUnits: Count |
| PutEventsEntriesCount | Số lượng mục sự kiện có trong yêu cầu PutEvents. | NoneUnits: Count |
| PutEventsFailedEntriesCount | Số lượng mục sự kiện có trong một yêu cầu PutEvents mà không được tiếp nhận thành công. | NoneUnits: Count |
| PutPartnerEventsApproximateCallCount | Tổng số lệnh gọi gần đúng trong lệnh gọi API PutPartnerEvents. (hiển thị trong Partner’s account) | NoneUnits: Count |
| PutPartnerEventsApproximateThrottledCount | Số lượng ước tính các yêu cầu bị hạn chế trong các cuộc gọi API PutPartnerEvents. (hiển thị trong Partner’s account) | NoneUnits: Count |
| PutPartnerEventsApproximateFailedCount | Số lượng xấp xỉ các cuộc gọi API PutPartnerEvents thất bại. (hiển thị trong Partner’s account) | NoneUnits: Count |
| PutPartnerEventsApproximateSuccessCount | Số lượng xấp xỉ các cuộc gọi API PutPartnerEvents thành công. (hiển thị trong Partner’s account) | NoneUnits: Count |
| PutPartnerEventsEntriesCount | Số lượng mục sự kiện có trong một yêu cầu PutPartnerEvents. | NoneUnits: Count |
| PutPartnerEventsFailedEntriesCount | Số lượng mục sự kiện có trong một yêu cầu PutPartnerEvents mà không thể tiếp nhận được. | NoneUnits: Count |
| PutPartnerEventsLatency | Thời gian thực hiện cho mỗi hoạt động API PutPartnerEvents (hiển thị trong Partner’s account) | NoneUnits: Milliseconds |
| InvocationsCreated | Số lần một target được gọi bởi một quy tắc nhất định như một phản hồi cho một sự kiện. | NoneUnits: Count |
| InvocationAttempts | Số lần EventBridge cố gắng gọi target. | NoneUnits: Count |
| SuccessfulInvocationAttempts | Số lần target được gọi thành công. | NoneUnits: Coun |
| RetryInvocationAttempts | Số lần lệnh gọi target đã được thử lại. | NoneUnits: Count |
| IngestiontoInvocationStartLatency | Thời gian xử lý các sự kiện, được tính từ khi một sự kiện được tiếp nhận bởi EventBridge cho đến khi một target được gọi lần đầu tiên. | None, RuleName, EventBusNameUnits: Milliseconds |
| IngestiontoInvocationCompleteLatency | Thời gian từ khi sự kiện được tiếp nhận cho đến khi hoàn thành lần gọi thành công đầu tiên. | None, RuleName, EventBusNameUnits: Milliseconds |
Các trường hợp sử dụng cho các số liệu này
Những số liệu mới này giúp bạn cải thiện khả năng quan sát và giám sát các ứng dụng hướng sự kiện của mình. Bạn có thể chủ động theo dõi các số liệu giúp bạn hiểu được luồng sự kiện, lời gọi, độ trễ và mức sử dụng dịch vụ. Bạn cũng có thể thiết lập cảnh báo về các số liệu cụ thể và thực hiện các hành động cần thiết để giúp cải thiện hiệu suất ứng dụng của mình, chủ động quản lý hạn ngạch và cải thiện khả năng phục hồi.
Giám sát việc sử dụng dịch vụ dựa trên Service Quotas
Chỉ số PutEventsApproximateCallCount trong nhóm sự kiện giúp bạn xác định số lượng sự kiện xấp xỉ được xuất bản trên Event Bus bằng cách sử dụng hành động API PutEvents. Số liệu PutEventsApproximateSuccessfulCount hiển thị số lượng ước tính các sự kiện thành công được xuất bản trên Event Bus.
Tương tự, bạn có thể giám sát số lượng sự kiện bị hạn chế và thất bại sử dụng PutEventsApproximateThrottledCount và PutEventsApproximateFailedCount. Các số liệu này cho phép theo dõi xem bạn có đạt đến hạn ngạch cho PutEvents hay không. Bạn có thể sử dụng CloudWatch alarm và đặt ngưỡng gần với hạn mức tài khoản của mình. Và nếu ngưỡng được kích hoạt, hãy gửi thông báo bằng Amazon SNS cho operations team của bạn. Họ có thể làm việc để tăng Service Quotas.
Bạn cũng có thể đặt cảnh báo hạn mức dựa trên ngưỡng hạn chế của PutEvents trong số giao dịch mỗi giây (PutEvents throttle limit in transactions per second)
- Điều hướng đến Service Quotas console. Ở khung bên trái, chọn dịch vụ AWS, tìm kiếm EventBridge và chọn Amazon EventBridge (CloudWatch Events).
- Trong phần Monitoring, bạn có thể theo dõi tỷ lệ phần trăm sử dụng giới hạn điều tiết PutEvents trong số giao dịch mỗi giây.
- Chuyển đến tab Alarms và chọn Create Alarms. Trong Alarm threshold, chọn 80% quota value. Trong Alarm name đặt thành PutEventsThrottleAlarm và chọn Create.
- Để được thông báo nếu ngưỡng này bị vi phạm, hãy điều hướng tới Amazon CloudWatch Alarms console và chọn PutEventsThrottleAlarm.
- Chọn Actions từ góc trên cùng bên phải và chọn Edit.
- Trên trang Specify metric and conditions, trong Conditions, hãy đảm bảo rằng loại Threshold được chọn là Static và % Utilization selected as Greater/Equal 80. Chọn Next.
- Định cấu hình gửi thông báo đến Amazon SNS và chọn Next.
- Tên Alarm phải được đặt thành PutEventsThrottleAlarm. Chọn Next, sau đó chọn Update alarm.
Điều này giúp bạn nhận được thông báo khi phần trăm sử dụng ngưỡng hạn chế của PutEvents trong các giao dịch mỗi giây đạt gần đến ngưỡng đã đặt. Sau đó, bạn có thể yêu cầu tăng Quota nếu được yêu cầu.
Tương tự, bạn cũng có thể tạo cảnh báo CloudWatch về tỷ lệ ngưỡng hạn chế của PutEvents trong các giao dịch mỗi giây (invocations throttle limit in transactions per second) so với hạn mức dịch vụ. (service quota).
Nâng cao khả năng quan sát
Số liệu PutEventsLatency hiển thị thời gian thực hiện cho mỗi hoạt động API PutEvents. Có hai chỉ số bổ sung, chỉ số IngestiontoInvocationStartLatency và chỉ số IngestiontoInvocationCompleteLatency. Metric đầu tiên thể hiện thời gian xử lý các sự kiện được đo từ lúc các sự kiện được tiếp nhận lần đầu bởi EventBridge đến lúc lần đầu tiên một target được gọi. Metric thứ hai hiển thị thời gian từ khi tiếp nhận sự kiện đến khi hoàn thành lần gọi thành công đầu tiên.
Điều này giúp xác định các vấn đề liên quan đến độ trễ từ thời điểm tiếp nhận cho đến khi đạt được target dựa trên RuleName. Nếu độ trễ cao, hai số liệu này sẽ cung cấp cho bạn thông tin chi tiết về vấn đề này, cho phép bạn thực hiện hành động thích hợp.
Bạn có thể đặt ngưỡng xung quanh các số liệu này và nếu ngưỡng được kích hoạt thì các hành động được xác định có thể giúp khôi phục khi dính các lỗi tiềm ẩn. Một trong những hành động được xác định ở đây có thể là gửi các sự kiện được tạo sau này tới EventBridge ở Region phụ bằng cách sử dụng EventBridge global endpoints.
Thỉnh thoàng, các sự kiện không được gửi tới target được chỉ định trong rule. Điều này có thể do tài nguyên đích không khả dụng, bạn không có quyền gọi target hoặc có sự cố mạng. Trong những trường hợp như vậy, EventBridge sẽ thử gửi lại những sự kiện này đến target trong 24 giờ hoặc tối đa 185 lần, cả hai đều có thể cấu hình được.
Chỉ số RetryInvocationAttempts mới sẽ hiển thị số lần EventBridge đã thử lại để gọi target. Việc thử lại được thực hiện khi các yêu cầu bị hạn chế, dịch vụ của target gặp vấn đề về tính khả dụng, sự cố mạng và lỗi dịch vụ. Điều này cung cấp thêm khả năng quan sát cho khách hàng và có thể dùng để kích hoạt cảnh báo CloudWatch nhằm thông báo cho các teams nếu vượt quá ngưỡng mong muốn. Nếu số lần thử lại đã hết, hãy lưu trữ các sự kiện không thành công trong Amazon SQS dead-letter queues to process failed events để xử lý các sự kiện không thành công vào lần sau.
Ngoài những thứ này, EventBridge còn hỗ trợ các thông số bổ sung như các chỉ số DetailType, Source và RuleName cho các chỉ số MatchedEvents. Điều này giúp bạn theo dõi số lượng sự kiện trùng khớp đến từ các nguồn khác nhau.
- Điều hướng đến Amazon CloudWatch. Ở ngăn bên trái, chọn Metrics và All metrics.
- Trong phần Browse, chọn Events và Source.
- Từ tab Graphed metrics, bạn có thể theo dõi các sự kiện trùng khớp đến từ nhiều nguồn khác nhau.
Sự kiện chuyển đổi dự phòng sang Region phụ
Chỉ số PutEventsFailedEntriesCount hiển thị số lượng sự kiện không tiếp nhận được. Theo dõi số liệu này và đặt cảnh báo CloudWatch. Nếu nó vượt qua một ngưỡng xác định thì bạn có thể thực hiện hành động thích hợp.
Ngoài ra, hãy đặt cảnh báo về số liệu PutEventsApproximateThrottledCount, số liệu này hiển thị số lượng sự kiện bị từ chối do ngưỡng hạn chế. Đối với những lỗi tiếp nhận sự kiện này, client phải gửi lại các sự kiện không thành công đến Envent Bus, cho phép bạn xử lý từng sự kiện quan trọng cho ứng dụng của mình.
Ngoài ra, hãy gửi sự kiện đến dịch vụ EventBridge ở Khu vực phụ bằng cách sử dụng Amazon EventBridge global endpoints để cải thiện khả năng phục hồi của các ứng dụng hướng sự kiện của bạn.
Phần kết luận
Blog này cho biết cách sử dụng các số liệu mới này để cải thiện khả năng hiển thị của các luồng sự kiện trong các ứng dụng hướng sự kiện của bạn. Nó giúp bạn giám sát các sự kiện hiệu quả hơn, từ khi gọi cho đến khi phân phối đến target. Điều này cải thiện khả năng quan sát bằng cách chủ động cảnh báo về các số liệu chính.
Để biết thêm tài nguyên về serverless, hãy truy cập Serverless Land.
TAGS: contributed, serverless