Giới thiệu
Amazon Elastic Container Service (Amazon ECS) là một dịch vụ quản lý triển khai, quản lý và mở rộng các tải trọng được đóng gói theo container một cách toàn diện. Nó được tích hợp sâu vào hệ sinh thái AWS để cung cấp một giải pháp dễ sử dụng và an toàn cho việc quản lý ứng dụng không chỉ trên cloud mà bây giờ còn trên cơ sở hạ tầng của bạn với Amazon ECS Anywhere.
Trong các thành phần của Amazon ECS, ECS Agent là một mảnh quan trọng đảm nhiệm việc giao tiếp giữa các Amazon ECS Container Instance và lớp kiểm soát ECS. Trong số các nhiệm vụ khác, ECS Agent đăng ký ECS Container Instance của bạn trong một ECS Cluster, nhận hướng dẫn từ lập lịch ECS để đặt, bắt đầu và dừng các tác vụ; và cũng báo cáo thay đổi trạng thái của các tác vụ và container.
Các nhà vận hành nền tảng thường tìm kiếm hướng dẫn để giám sát sự khả dụng của ECS Agent, và do đó là ECS Container Instance, bằng cách đảm bảo các cảnh báo về sự cố được đặt đúng vị trí. Trong bài đăng này, chúng tôi cung cấp một giải pháp mẫu để giám sát và phát hiện sự kiện ECS Agent bị ngừng, cung cấp cảnh báo thông qua Amazon Simple Notification Service (Amazon SNS) và cung cấp các số liệu dùng Amazon CloudWatch. Kiến trúc này linh hoạt, với tùy chọn để thêm các hành động tùy chỉnh để chạy trên sự cố ECS Agent.
Là một phần của hoạt động bình thường, ECS Agent của Amazon được ngắt kết nối và kết nối lại một vài lần mỗi giờ. Xét đến điều này, nhiều sự kiện kết nối của agent sẽ được mong đợi mà không nhất thiết có nghĩa là có sự cố đang xảy ra. Những sự kiện này không phải là dấu hiệu của một vấn đề với container agent hoặc Container Instance; tuy nhiên, nếu agent không thể kết nối lại được, điều này thực sự có thể là một dấu hiệu rõ ràng của một vấn đề đang diễn ra.
Tổng quan về giải pháp
Trong giải pháp này, chúng tôi kết hợp Amazon EventBridge, Amazon Simple Queue Service (Amazon SQS), AWS Lambda, Amazon SNS và Amazon CloudWatch để cung cấp một giải pháp đơn giản có khả năng phát hiện và cảnh báo về các trường hợp các trường hợp bị ngắt kết nối với nhóm của các container.
Cài đặt giám sát được cung cấp thông qua AWS CloudFormation. Để hiểu rõ các thành phần khác nhau và bên trong thiết kế, vui lòng tham khảo sơ đồ kiến trúc dưới đây.
Trong phương pháp này, chúng tôi sử dụng Amazon EventBridge để bắt các sự kiện thay đổi trạng thái Container Instance. Chúng tôi chỉ quan tâm đến các sự kiện mất kết nối cho các Amazon ECS Instance đang ở trạng thái ACTIVE, trong đó chúng sẵn sàng chấp nhận các tác vụ mới. Bất kỳ trạng thái khác (ví dụ: DRAINING hoặc INACTIVE) là tạm thời hoặc không yêu cầu cảnh báo. Để đạt được điều này, các sự kiện được lọc theo trạng thái agentConnected là false và trạng thái Instance là ACTIVE. Điều này sẽ giảm số lượng sự kiện mà Amazon EventBridge bắt được.
Tiếp theo, các quy tắc Amazon EventBridge được tích hợp với một Amazon SQS delay queue. Loại queue SQS này trì hoãn việc giao hàng của các tin nhắn trong một khoảng thời gian cố định nhất định. Đây là một phương pháp tiện lợi và tiết kiệm chi phí để thực hiện một khoảng thời gian ân cần một cách nhất quán và ngầm định. Nó cho phép đủ thời gian cho ECS Agent để kết nối lại trong trường hợp đó là một sự mất kết nối tạm thời hoặc một sự kiện kết nối thường xuyên (loại bỏ các kết quả dương tính sai). Sau khi thời gian trễ kết thúc, một hàm AWS Lambda được gọi để tiêu thụ và xử lý các sự kiện từ queue SQS. Hàm AWS Lambda có logic sau:
- Mặc định, tất cả các Cluster Amazon ECS trong tài khoản được giám sát. Nếu tham số tùy chỉnh MonitorAllECSClusters đã bị vô hiệu hóa khi triển khai AWS CloudFormation stack, logic của hàm sẽ xác nhận rằng Cluster mà Instance thuộc về có các thẻ thích hợp để được giám sát.
- Xác nhận rằng Amazon ECS Instance vẫn đang chạy và ACTIVE. Điều này tránh thông báo cảnh báo trong các kịch bản nơi instance đã bị chấm dứt (trong khi thực hiện thu hẹp, ví dụ) hoặc đang trong quá trình DRAINING.
- Mô tả Container Instance và xác nhận xem ECS Agent vẫn bị ngắt kết nối.
Nếu ECS Instance khớp với tất cả các kiểm tra và bộ lọc, thì điều này có nghĩa là có sự cố với Agent trong instance cụ thể và một email thông báo sẽ được gửi đi.
Giải pháp là linh hoạt và cung cấp các thiết lập đơn giản để điều chỉnh hành vi:
- Có một tham số trong AWS CloudFormation Stack để cho phép bật / tắt giám sát, trong trường hợp bạn muốn tạm ngừng giám sát. Điều này vô hiệu hóa luật Amazon EventBridge, vì vậy không có tin nhắn được gửi đến queue SQS và hàm AWS Lambda không được kích hoạt trong khi giải pháp bị vô hiệu hóa.
- Như đã đề cập ở trên, bạn có thể quyết định liệu bạn có muốn giám sát tất cả các Clusters Amazon ECS trong khu vực hay chỉ các Clusters cụ thể. Cách tiếp cận này cho phép bạn giám sát mỗi Clusters hiện có theo mặc định bao gồm các Clusters mới được tạo sau đó, điều này hữu ích cho các tài khoản sản xuất hoặc giám sát toàn diện. Hoặc bạn có thể chỉ định giám sát để chỉ xem xét Clusters với Thẻ cụ thể. Trong kịch bản này, hàm AWS Lambda cụ thể xác nhận xem các thẻ thích hợp có tồn tại hay không. Nếu bạn chọn bật giám sát Thẻ, Clusters Amazon ECS bạn muốn giám sát phải có Tag sau:
- Tag Key: ecs-agent-monitoring
- Tag Value: < bất kỳ giá trị tùy chỉnh hợp lệ nào >
Bạn có thể chỉ định thẻ tùy chỉnh của mình thông qua tham số MonitoringTagKeyValue trong mẫu AWS CloudFormation. Điều này cũng cho phép bạn triển khai nhiều ngăn xếp để thông báo cho các nhóm khác nhau sử dụng các thẻ được tham chiếu.
- Bạn cũng có thể quyết định liệu bạn có muốn mã hóa nội dung Amazon SQS và Amazon SNS tại nơi lưu trữ không. Điều này hữu ích trong trường hợp bạn có yêu cầu tuân thủ cụ thể cần được đáp ứng. Trong kịch bản này, khi triển khai mẫu AWS CloudFormation, bạn cần cung cấp một Vai trò Quản trị viên KMS hợp lệ, Nhóm hoặc Người dùng. Điều này được yêu cầu để quản lý Khóa KMS được tự động cấp phát. Không có khả năng bạn cần quản lý khóa này bao giờ, nhưng Khóa KMS không nên được tạo ra mà không có một thực thể có thể quản lý nó. Lưu ý rằng mã hóa tại nơi lưu trữ cho nhật ký AWS CloudWatch luôn được bật thông qua mã hóa phía máy chủ cho dữ liệu nhật ký tại nơi lưu trữ. Kích hoạt tùy chọn mã hóa này cũng sử dụng Khóa KMS tùy chỉnh của bạn cho các nhật ký CloudWatch.
Đây là một giải pháp mở và có thể mở rộng, có thể được sửa đổi và mở rộng. Công cụ cho phép bạn thực hiện các hành động tùy chỉnh trên các Thực thể Amazon ECS bị ảnh hưởng ngoài việc cảnh báo. Để giữ cho giải pháp dễ bảo trì và có thể mở rộng, bạn nên triển khai và tạo các hành động tùy chỉnh này qua AWS CloudFormation. Mã AWS Lambda chính nó có một giá trị đánh dấu chỗ trống mà bạn có thể phát triển bất kỳ tính năng nào bạn yêu cầu:
def custom_actions(expired_instance):
“””Allow the end user to implement any custom/personalized action and/or
operation on the affected EC2 Instances.
Args:
expired_instance (list): A list of the affected EC2 Instances (ECS Agent disconnected)
“””
pass
Dưới dạng tham số, bạn sẽ nhận được danh sách ID của các nút có sự cố (tức là ID của các Amazon EC2 Instance hoặc ID của các nút trong trường hợp cài đặt ECS Anywhere). Ví dụ, bạn có thể viết một tác vụ tùy chỉnh để tự động chấm dứt Amazon EC2 Instance gặp lỗi. Lưu ý rằng tùy thuộc vào các tác vụ tùy chỉnh bạn định nghĩa, bạn có thể cần phải thêm các quyền AWS Identity and Access Management (AWS IAM) cho những tác vụ này vào vai trò ECSEventBridgeMonitorECSAgentExecutionRole trong mẫu AWS CloudFormation.
Như là một lời nhắc cuối cùng, để có thêm thông tin và số liệu, bạn có thể sử dụng truy vấn Amazon CloudWatch Logs Insights trên nhật ký AWS Lambda và cũng có thể kiểm tra biểu đồ Amazon CloudWatch được tạo bởi giải pháp. Hơn nữa, bạn có thể cấu hình các trường hợp của bộ đệm để gửi thông tin nhật ký đến Amazon CloudWatch Logs để có thể xem chi tiết về sự cố và xem điều gì đã xảy ra trên trường hợp bộ đệm cụ thể đó.
Hướng dẫn
Bạn có thể tìm các bước chính cần hoàn thành trong các chi tiết sau:
- Sao chép kho lưu trữ và tải lên các tài liệu AWS CloudFormation lên Amazon Simple Storage Service (Amazon S3).
- Triển khai mẫu AWS CloudFormation.
- Kiểm tra và xác nhận các thành phần của giải pháp.
- Dọn dẹp.
Điều kiện tiên quyết
Để thực hiện hướng dẫn này, bạn cần có các điều kiện tiên quyết sau:
- Một tài khoản AWS với các quyền cần thiết để tạo các tài nguyên.
- AWS Command Line Interface (AWS CLI) với các thông tin đăng nhập phù hợp.
- Amazon ECS Cluster với một đối tượng ECS Container được đăng ký, đã khởi động và đang chạy.
- Một địa chỉ email hợp lệ để nhận thông báo.
- Một bucket Amazon S3 trong cùng khu vực để tải lên mã AWS Lambda.
- Sao chép kho dữ liệu và tải các đối tượng AWS CloudFormation lên Amazon S3
Sao chép kho dữ liệu dự án trên GitHub vào máy cục bộ của bạn. Trước khi triển khai mẫu, bạn cần đóng gói nó. Đây là quá trình tải các đối tượng cục bộ lên một bucket Amazon S3. Điều này giúp tập hợp các mẫu dự án và mã hàm AWS Lambda.
Tìm một bucket Amazon S3 nơi các mẫu AWS CloudFormation được lưu trữ. bucket này phải ở cùng khu vực với nơi triển khai giải pháp. Nếu sử dụng Linux hoặc MacOS, bạn có thể xuất các biến để sử dụng một cách trơn tru:
$ export BUCKET=<your-selected-s3-bucket>
$ git clone https://github.com/aws-samples/amazon-ecs-agent-connection-monitoring.git
$ cd amazon-ecs-agent-connection-monitoring
$ aws –region=<your-aws-region> cloudformation package \
–template-file ./ecs-agent-monitoring.yaml \
–s3-bucket $BUCKET \
–output-template-file ./packaged-template.yaml
- Triển khai mẫu AWS CloudFormation
Bạn có thể triển khai mẫu AWS CloudFormation đã đóng gói (‘ecs-agent-monitoring.yaml’, từ bước 1) và tạo stack.
Chúng tôi sẽ tóm tắt mỗi tùy chọn và tham số trong chi tiết sau đây:
- Bạn có muốn kích hoạt giải pháp giám sát? – Một công tắc đơn giản để bạn có thể nhanh chóng tắt động cơ giám sát mà không cần xóa tất cả các tài nguyên. Hữu ích trong các cửa sổ bảo trì.
- Bạn có muốn chỉ giám sát các Amazon ECS Clusters được gắn thẻ? – Điều này cho phép bạn quyết định liệu bạn có muốn tự động giám sát tất cả các Clusters trong khu vực hay điều khiển chính xác các Clusters mà bạn muốn giám sát, bằng cách đánh dấu chúng. Đối với các tài khoản sản xuất, bạn có thể muốn tự động giám sát tất cả các Amazon ECS Clusters (bao gồm các Clusters được tạo mới trong tương lai).
- Giá trị thẻ – Điều này cho phép bạn chỉ định Giá trị thẻ tùy chỉnh mà các Amazon ECS Clusters của bạn phải có để được giám sát. Khóa thẻ được cố định và dự kiến là ecs-agent-monitoring, trong khi bạn có tự do chọn Giá trị thẻ riêng của mình. Điều này cho phép bạn triển khai nhiều phiên bản của giải pháp với các Giá trị thẻ mục tiêu khác nhau để giám sát các Amazon ECS Clusters khác nhau.
- Email đích để nhận thông báo. – Email nhận cập nhật ngắt kết nối.
- Bạn có muốn kích hoạt mã hóa cho Amazon SQS Queue không? – Mã hóa Amazon SQS tại nơi lưu trữ.
- Amazon Resource Name (ARN) cho Key quản lý dịch vụ Key Management Service (Amazon KMS). – KMS Keys cần có một người quản trị. Trong trường hợp bạn cần mã hóa Amazon SQS, tham số này là bắt buộc.
- Kiểm tra và xác nhận các thành phần của giải pháp
Bạn có thể khám phá các tài nguyên được tạo.
Để kiểm tra và xác nhận giải pháp, bạn có thể mô phỏng một sự cố với Amazon ECS Agent bằng cách dừng dịch vụ tương ứng trong Amazon ECS Container Instance. Rất khuyến khích thực hiện điều này trong một môi trường thử nghiệm hoặc phát triển, với các trường hợp không chạy bất kỳ công việc đáng kể nào. Ngừng Amazon ECS Agent trên cluster sản xuất có thể ảnh hưởng đến các công việc hiện tại của bạn.
Để đạt được điều này, bạn có thể làm theo các hướng dẫn sau:
- Kết nối qua phiên phiên bản dòng lệnh tới Amazon ECS Container Instance mà bạn muốn kiểm tra.
- Dừng dịch vụ Amazon ECS trong Container Instance:
- systemctl stop ecs
- Xác minh rằng dịch vụ đã được dừng hiệu quả:
- systemctl status ecs
- Chờ đợi cho đến khi bạn nhận được cảnh báo/thông báo qua email.
- Bạn có thể khôi phục chức năng Amazon ECS Agent bằng cách khởi động lại dịch vụ:
- systemctl start ecs
Dọn dẹp
Để tránh chi phí không cần thiết, hãy đảm bảo bạn dọn dẹp các tài nguyên mà chúng ta vừa tạo cho bài hướng dẫn này. Bạn có thể xóa AWS CloudFormation Stack nếu bạn không muốn sử dụng giải pháp giám sát trong thời điểm hiện tại.
Kết luận
Trong bài viết này, chúng tôi đã cho bạn một ví dụ giải pháp để giám sát và phát hiện sự cố Agent ECS bị ngừng hoạt động, thông qua cảnh báo qua Amazon SNS và các số liệu Amazon CloudWatch. Agent ECS của Amazon là một thành phần cốt lõi trên cơ sở hạ tầng Amazon ECS, và sự cố của nó ảnh hưởng đến khả năng sẵn có và tính mở rộng của khối lượng công việc. Giải pháp của chúng tôi là linh hoạt, mã nguồn mở và có sẵn trên kho lưu trữ GitHub của chúng tôi. Hãy thoải mái mở các vấn đề và gửi yêu cầu pull trên GitHub. Chúng tôi hy vọng rằng bài viết này sẽ giúp tăng cường nhận thức của bạn về thông báo và các hành động mà bạn có thể thực hiện để tránh các vấn đề về khối lượng công việc.
Xem bài viết gốc: https://aws.amazon.com/vi/blogs/containers/monitoring-the-amazon-ecs-agent/