Đơn giản hóa việc thu thập số liệu Prometheus trên toàn bộ hạ tầng AWS của bạn

Tác giả: Nilo Bustani, Rodrigue Koffi, and Alexis Perez-Mendoza
Ngày phát hành: 08 APR 2026
Chuyên mục: Amazon Managed Grafana, Amazon Managed Service for Prometheus, Management & Governance, Management Tools, Monitoring and observability

Nếu bạn đang chạy các dịch vụ như các phiên bản Amazon EC2, các container Amazon Elastic Container Service (Amazon ECS) và các cụm Amazon Managed Streaming for Apache Kafka (Amazon MSK) trong AWS, việc duy trì các Prometheus server riêng biệt cho mỗi môi trường sẽ tạo ra gánh nặng vận hành đáng kể. Việc quản lý cấu hình scraper, tính sẵn sàng cao, khả năng mở rộng và bảo mật sẽ làm bạn mất tập trung vào việc xây dựng các ứng dụng tuyệt vời.

AWS managed collector hoặc scraper của Amazon Managed Service for Prometheus giúp loại bỏ gánh nặng này. Thay vì triển khai và duy trì các Prometheus server trong mỗi môi trường, giờ đây bạn có thể sử dụng các scraper được quản lý hoàn toàn để thu thập số liệu Prometheus từ các tài nguyên được kết nối với Amazon VPC của bạn và lưu trữ chúng trong workspace của Amazon Managed Service for Prometheus. Điều này có nghĩa là bạn không còn cần phải quản lý tính sẵn sàng của collector, khả năng mở rộng hoặc sự sai lệch cấu hình.

Bài viết này sẽ hướng dẫn bạn cách triển khai AWS managed collector trên ba môi trường tính toán phổ biến: các phiên bản Amazon EC2, khối lượng công việc Amazon ECS và các cụm Amazon MSK. Bài viết này sẽ trình bày cách một dịch vụ được quản lý duy nhất có thể thay thế nhiều triển khai Prometheus tự quản lý.

Điều kiện tiên quyết và thiết lập

Trước khi bắt đầu, hãy xác minh rằng bạn đã có những điều sau:

Tài nguyên AWS:

Công cụ:

Lưu ý: Các ví dụ sử dụng Vùng US West (Oregon) us-west-2. Bạn có thể điều chỉnh các lệnh và ARN cho Vùng ưa thích của mình. Các lệnh AWS CLI sử dụng các biến shell (ví dụ: $SUBNET_ID_1, $SECURITY_GROUP_ID) làm chỗ giữ chỗ. Trước khi chạy bất kỳ lệnh nào, hãy xác minh rằng tất cả các biến đã được điền với các giá trị hợp lệ cho môi trường của bạn. Nên thử nghiệm các lệnh trong tài khoản không phải sản xuất trước.

Thu thập số liệu từ các phiên bản Amazon EC2

Các phiên bản EC2 vẫn là lựa chọn phổ biến cho các khối lượng công việc yêu cầu các loại hoặc cấu hình phiên bản cụ thể. Bạn có thể bắt đầu bằng cách cấu hình managed scraper để thu thập cả số liệu ứng dụng và số liệu cấp hệ thống từ các phiên bản EC2. Dưới đây là cách thiết lập có thể trông như thế này:


Hình 1: AWS managed-collector với khối lượng công việc chạy trên các phiên bản Amazon EC2

1. Thiết lập node exporter

Ví dụ này sử dụng Prometheus Node Exporter trên một phiên bản Amazon EC2 để hiển thị số liệu hệ thống ở định dạng Prometheus. Hãy làm theo hướng dẫn cài đặt trong tài liệu Prometheus Node Exporter.

2. Tạo cấu hình AWS managed collector

Managed scraper sẽ thu thập số liệu từ cả Node Exporter (hiển thị số liệu trên cổng mặc định 9100) và số liệu ứng dụng mẫu (hiển thị trên cổng 8080) bằng cách sử dụng cấu hình sau:

cat > /tmp/ec2-scraper.yml << EOF
global:
scrape_interval: 30s
scrape_timeout: 10s
scrape_configs:
- job_name: 'ec2-metrics'
static_configs:
- targets:
- ip-$IP_ADDRESS.us-west-2.compute.internal:8080
metrics_path: '/metrics'
relabel_configs:
- source_labels: [__address__]
target_label: instance
replacement: 'ec2-metrics-instance-new'
- target_label: service
replacement: 'ec2-metrics'
- target_label: environment
replacement: 'dev'
metric_relabel_configs:
- source_labels: [__name__]
regex: '.*'
action: keep
- job_name: ec2-node-exporter
static_configs:
- targets:
- ip-$IP_ADDRESS.us-west-2.compute.internal:9100
EOF
CONFIG_BLOB=$(base64 -w 0 /tmp/ec2-scraper.yml)

Phần relabel_configs có thể được sửa đổi để thêm các nhãn nhất quán vào số liệu của bạn, giúp dễ dàng truy vấn và lọc trên các dịch vụ khác nhau.

3. Triển khai managed scraper

aws amp create-scraper \
--alias "ec2-payment-service-scraper" \
--source '{
"vpcConfiguration": {
"subnetIds": ["$SUBNET_ID_1", "$SUBNET_ID_2"],
"securityGroupIds": ["$SECURITY_GROUP_ID"]
}
}' \
--destination '{
"ampConfiguration": {
"workspaceArn": "arn:aws:aps:us-west-2:ACCOUNT_ID:workspace/ws-WORKSPACE_ID"
}
}' \
--scrape-configuration "{\"configurationBlob\":\"$CONFIG_BLOB\"}"

Khi bạn tạo một managed scraper, Amazon Managed Service for Prometheus tự động tạo một service-linked role (AWSServiceRoleForAmazonPrometheusScraperInternal) cấp cho scraper quyền truy cập vào tài nguyên VPC của bạn và ghi vào workspace của bạn.

4. Xác thực số liệu EC2

Trong vòng vài phút, bạn sẽ thấy số liệu chảy vào workspace Amazon Managed Service for Prometheus đích. Bạn có thể xác minh điều này trong bảng điều khiển số liệu CloudWatch hoặc bằng cách truy vấn workspace từ Amazon Managed Grafana.

Truy vấn số liệu cho job ec2-metrics:

{job="ec2-metrics"}


Hình 2: Truy vấn Amazon Managed Service for Prometheus để lấy số liệu EC2 từ AWS-managed collector

Giám sát khối lượng công việc ECS với khám phá dịch vụ động

Các tác vụ Amazon ECS là tạm thời, địa chỉ IP thay đổi khi các container được thay thế và các dịch vụ mở rộng động. Khám phá dịch vụ AWS Cloud Map giải quyết những thách thức này bằng cách duy trì các bản ghi DNS cho các tác vụ đang chạy, mà managed scraper tự động truy vấn.


Hình 3: AWS managed-collector với khối lượng công việc chạy trên Amazon ECS

Đối với ví dụ này, dịch vụ payforadoption từ AWS One Observability Workshop được sử dụng, minh họa một microservice thực tế hiển thị số liệu Prometheus.

1. Cấu hình nhóm bảo mật

Xác nhận rằng nhóm bảo mật tác vụ ECS cho phép lưu lượng truy cập đến từ scraper:

aws ec2 authorize-security-group-ingress \
--group-id $SECURITY_GROUP_ID \
--ip-permissions IpProtocol=tcp,FromPort=80,ToPort=80,UserIdGroupPairs='[{GroupId=$SECURITY_GROUP_ID}]'

Điều này tạo ra một quy tắc tự tham chiếu, cho phép các tài nguyên trong cùng một nhóm bảo mật giao tiếp.

2. Tạo cấu hình AWS managed collector

Tạo cấu hình scraper dựa trên DNS:

cat > /tmp/ecs-scraper.yml << EOF
global:
scrape_interval: 30s
scrape_timeout: 10s
scrape_configs:
- job_name: 'ecs-payforadoption'
dns_sd_configs:
- names: ['payforadoption-go.Workshop-space']
type: A
port: 80
metrics_path: '/metrics'
relabel_configs:
- target_label: service_name
replacement: 'payforadoption-go'
- target_label: cloudmap_namespace
replacement: 'Workshop-space'
- target_label: environment
replacement: 'production'
- target_label: compute_platform
replacement: 'ecs-fargate'
EOF
CONFIG_BLOB=$(base64 -w 0 /tmp/ecs-scraper.yml)

Phần dns_sd_configs cho scraper biết để truy vấn tên DNS payforadoption-go.Workshop-space và scrape tất cả các địa chỉ IP được trả về.

3. Tạo AWS managed collector

Mẫu triển khai vẫn giống như trước:

aws amp create-scraper \
--alias "ecs-payforadoption-scraper" \
--source '{
"vpcConfiguration": {
"subnetIds": ["$SUBNET_ID_1", "$SUBNET_ID_2"],
"securityGroupIds": ["$SECURITY_GROUP_ID"]
}
}' \
--destination '{
"ampConfiguration": {
"workspaceArn": "arn:aws:aps:us-west-2:ACCOUNT_ID:workspace/ws-WORKSPACE_ID"
}
}' \
--scrape-configuration "{\"configurationBlob\":\"$CONFIG_BLOB\"}"

Khi Amazon ECS thay thế một tác vụ, scraper sẽ nhận các thay đổi trong truy vấn DNS tiếp theo của nó (thường là mỗi 30 giây), hỗ trợ thu thập số liệu liên tục mà không cần can thiệp thủ công.

4. Xác thực số liệu Amazon ECS

Chạy một truy vấn. Ví dụ, hiển thị tốc độ yêu cầu trung bình mỗi giây đến tác vụ ECS trong 5 phút qua:

rate(payforadoption_requests_total[5m])


Hình 4: Truy vấn Amazon Managed Service for Prometheus để lấy số liệu ECS

Thu thập số liệu Prometheus từ các cụm Amazon MSK

Giám sát tình trạng cụm Amazon MSK là rất quan trọng đối với các kiến trúc hướng sự kiện. Các cụm Amazon MSK hiển thị hai loại số liệu thông qua Prometheus exporter khi bạn bật OpenMonitoring: JMX Exporter cho các số liệu cụ thể của Kafka (chủ đề, phân vùng, độ trễ của consumer) và Node Exporter cho các số liệu hệ thống của broker (CPU, bộ nhớ, đĩa).


Hình 5: AWS managed-collector với khối lượng công việc chạy trên Amazon MSK

1. Bật OpenMonitoring trên các cụm Amazon MSK

Lệnh sau bật cả hai exporter trên tất cả các node broker. JMX Exporter lắng nghe trên cổng 11001 và Node Exporter trên cổng 11002:

aws kafka update-monitoring \
--cluster-arn "arn:aws:kafka:REGION:ACCOUNT_ID:cluster/metrics-msk-cluster/CLUSTER_ID" \
--current-version "CURRENT_VERSION" \
--open-monitoring '{
"Prometheus": {
"JmxExporter": {"EnabledInBroker": true},
"NodeExporter": {"EnabledInBroker": true}
}
}' \
--enhanced-monitoring PER_TOPIC_PER_PARTITION

2. Triển khai scraper cho Amazon MSK

Amazon MSK cung cấp một tên DNS cấp cụm phân giải thành tất cả các IP của broker. Sử dụng điều này để khám phá dịch vụ giúp việc giám sát của bạn có khả năng phục hồi trước việc thay thế broker và mở rộng cụm.

Lấy tên DNS của cụm của bạn (xóa tiền tố cụ thể của broker như b-1. hoặc b-2.):

CLUSTER_DNS="metricsmskcluster.xxxx.xxx.kafka.REGION.amazonaws.com"
cat > /tmp/msk-scraper.yml << EOF
global:
scrape_interval: 30s
external_labels:
cluster_name: metrics-msk-cluster
scrape_configs:
- job_name: msk-jmx
scheme: http
metrics_path: /metrics
scrape_timeout: 10s
dns_sd_configs:
- names:
- $CLUSTER_DNS
type: A
port: 11001
relabel_configs:
- source_labels: [__meta_dns_name]
target_label: broker_dns
- source_labels: [__address__]
target_label: instance
- target_label: compute_platform
replacement: 'msk'
- job_name: msk-node
scheme: http
metrics_path: /metrics
scrape_timeout: 10s
dns_sd_configs:
- names:
- CLUSTER_DNS
type: A
port: 11002
relabel_configs:
- source_labels: [__meta_dns_name]
target_label: broker_dns
- source_labels: [__address__]
target_label: instance
- target_label: compute_platform
replacement: 'msk'
EOF
CONFIG_BLOB=$(base64 -w 0 /tmp/msk-scraper.yml)

3. Tạo AWS managed collector

Các broker Amazon MSK cần cho phép lưu lượng truy cập đến từ scraper trên cả hai cổng exporter. Sau đó, bạn sẽ triển khai cấu hình scraper:

SCRAPER_SG=$(aws cloudformation describe-stacks \
--stack-name msk-metrics-stack \
--query 'Stacks[0].Outputs[?OutputKey==`PrometheusScraperSecurityGroupId`].OutputValue' \
--output text)
aws amp create-scraper \
--alias "msk-metrics-scraper" \
--source "{\"vpcConfiguration\":{\"subnetIds\":[\"subnet-xxx\",\"subnet-yyy\"],\"securityGroupIds\":[\"$SCRAPER_SG\"]}}" \
--destination "{\"ampConfiguration\":{\"workspaceArn\":\"arn:aws:aps:us-west-2:ACCOUNT_ID:workspace/ws-WORKSPACE_ID\"}}" \
--scrape-configuration "{\"configurationBlob\":\"$CONFIG_BLOB\"}"

4. Xác minh số liệu Amazon MSK

Trong vòng vài phút, bạn bắt đầu thấy độ trễ của consumer, số lượng phân vùng, mức sử dụng tài nguyên broker và các số liệu MSK khác mà không cần quản lý bất kỳ hạ tầng Prometheus nào.

Chạy một truy vấn. Ví dụ, hiển thị thông lượng broker tổng thể trên tất cả các chủ đề bằng cách sử dụng:

kafka_server_BrokerTopicMetrics_MeanRate


Hình 6: Truy vấn Amazon Managed Service for Prometheus để lấy số liệu Amazon MSK

Tổng hợp tất cả

Giờ đây bạn đã có số liệu từ EC2, ECS và MSK, bạn có thể hợp nhất việc truy vấn và cảnh báo trên toàn bộ hạ tầng của mình. Bạn có thể kết nối một workspace Amazon Managed Grafana với workspace Amazon Managed Service for Prometheus làm nguồn dữ liệu và viết các truy vấn PromQL bao gồm cả ba nền tảng tính toán:

Truy vấn tổng tốc độ yêu cầu trên tất cả các dịch vụ:

sum(rate({__name__=~"http_requests_total|payforadoption_requests_total"}[5m])) by (environment, service)

Điều này tổng hợp tốc độ yêu cầu HTTP từ phiên bản EC2 và dịch vụ ECS, được nhóm theo dịch vụ và nền tảng.


Hình 7: Truy vấn Amazon Managed Service for Prometheus để lấy tổng tốc độ yêu cầu trên tất cả các dịch vụ

Giám sát mức sử dụng CPU trên các loại tính toán:

Truy vấn này hoạt động giống hệt nhau cho các phiên bản EC2 và broker MSK vì cả hai đều hiển thị số liệu Node Exporter với cùng quy ước đặt tên.

100 - (avg by (instance, job) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)


Hình 8: Truy vấn Amazon Managed Service for Prometheus để lấy mức sử dụng CPU trên tất cả các loại tính toán

Theo dõi độ trễ của Kafka consumer cho các consumer ECS:

Điều này giúp bạn xác định xem các Amazon MSK consumer của bạn có theo kịp việc sản xuất tin nhắn hay không.

sum(kafka_consumer_group_ConsumerLagMetrics_Value) by (groupId, topic)

Cảnh báo đa dịch vụ

Bạn có thể định nghĩa các cảnh báo bao gồm toàn bộ hạ tầng. Ví dụ, cảnh báo khi độ trễ của consumer vượt quá ngưỡng VÀ tốc độ lỗi của dịch vụ tiêu thụ tăng lên:

(
sum(kafka_consumer_group_ConsumerLagMetrics_Value{topic="payment-processor"}) > 10000
and
rate(http_requests_total{service_name="payment-api",status=~"5.."}[5m]) > 0.01
)

Việc tương quan số liệu Kafka với số liệu ứng dụng có thể giúp bạn xác định nguyên nhân gốc rễ nhanh hơn và giảm thời gian trung bình để khắc phục sự cố.

Các cân nhắc về bảo mật

  • Theo Mô hình Trách nhiệm Chung của AWS, AWS quản lý bảo mật của hạ tầng managed scraper trong khi bạn chịu trách nhiệm cấu hình quyền truy cập an toàn vào tài nguyên của mình.
  • Triển khai các chính sách IAM với quyền hạn tối thiểu. Mỗi scraper đảm nhận một IAM role. Hãy tuân thủ nguyên tắc quyền hạn tối thiểu bằng cách chỉ cấp các quyền cần thiết:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"aps:RemoteWrite"
],
"Resource": "arn:aws:aps:us-west-2:ACCOUNT_ID:workspace/ws-WORKSPACE_ID"
}
]
}
  • Hạn chế ingress của nhóm bảo mật chỉ cho nhóm bảo mật của scraper trên các cổng exporter cụ thể
  • Triển khai scraper trong các subnet riêng tư và sử dụng VPC endpoint cho Amazon Managed Service for Prometheus để giữ lưu lượng truy cập trong VPC của bạn
  • Dữ liệu được gửi từ scraper đến workspace Amazon Managed Service for Prometheus được mã hóa trong quá trình truyền bằng TLS
  • Scraper giao tiếp với các mục tiêu qua mạng riêng của VPC của bạn. Bạn có thể cấu hình TLS trên các exporter của mình bằng cách sử dụng scheme: https để bảo vệ bổ sung
  • Số liệu được lưu trữ trong Amazon Managed Service for Prometheus được mã hóa khi lưu trữ theo mặc định. Bạn có thể tùy chọn sử dụng khóa do khách hàng quản lý để kiểm soát bổ sung
  • Bật ghi nhật ký scraper vào Amazon CloudWatch Logs để kiểm tra và khắc phục sự cố

Các phương pháp hay nhất cho triển khai sản xuất

Dựa trên các triển khai thực tế, dưới đây là các phương pháp hay nhất quan trọng để đảm bảo việc thu thập số liệu đáng tin cậy, an toàn và có khả năng mở rộng:

  • Đối với khối lượng công việc EC2, hãy cân nhắc di chuyển từ các mục tiêu tĩnh sang khám phá dịch vụ dựa trên DNS bằng cách sử dụng chỉ thị dns_sd_configs trong cấu hình scraper của bạn và đăng ký các phiên bản EC2 của bạn trong AWS Cloud Map.
  • Triển khai nhiều scraper khi bạn có các mục tiêu với vòng đời, mẫu truy cập hoặc rủi ro bảo mật khác nhau để cách ly, bảo mật và linh hoạt vận hành tốt hơn
  • Đặt khoảng thời gian scrape thích hợp để cân bằng độ chi tiết của số liệu với chi phí và hiệu suất:
    • 30 giây: Mặc định tốt cho hầu hết các số liệu ứng dụng
    • 60 giây: Đủ cho các số liệu hạ tầng (CPU, bộ nhớ)
    • 90 giây+: Môi trường phi sản xuất hoặc các ứng dụng có thông lượng thấp
    • Hãy nhớ rằng việc giảm một nửa khoảng thời gian scrape sẽ tăng gấp đôi chi phí nhập dữ liệu của bạn
  • Loại bỏ các số liệu nhiễu bằng cấu hình relabel
metric_relabel_configs:
- source_labels: [__name__]
regex: '.*_debug_.*'
action: drop

Dọn dẹp

Để tránh phát sinh chi phí liên tục, hãy xóa các tài nguyên được tạo trong quá trình hướng dẫn này khi chúng không còn cần thiết.

Xóa các managed scraper bằng AWS CLI:

aws amp list-scrapers
aws amp delete-scraper --scraper-id $SCRAPER_ID

Ngoài ra, hãy xóa workspace Amazon Managed Service for Prometheus nếu nó được tạo cho mục đích thử nghiệm:

aws amp delete-workspace --workspace-id $WORKSPACE_ID

Nếu bạn đã triển khai các tài nguyên hỗ trợ như các phiên bản EC2, dịch vụ ECS, cụm MSK, nhóm bảo mật hoặc workspace Amazon Managed Grafana đặc biệt cho hướng dẫn này, hãy xóa chúng để ngừng tất cả các chi phí liên quan.

Kết luận

Bài viết này đã hướng dẫn cách triển khai AWS managed collector của Amazon Managed Service for Prometheus trên ba môi trường tính toán riêng biệt — Amazon EC2, Amazon ECS và các cụm Amazon MSK — chứng minh cách một dịch vụ được quản lý duy nhất có thể thay thế nhiều triển khai Prometheus tự quản lý. Bằng cách sử dụng khám phá dịch vụ dựa trên DNS, các chiến lược gắn nhãn nhất quán và truy vấn hợp nhất trong Grafana, bạn có thể xây dựng một giải pháp quan sát toàn diện mà không phải chịu gánh nặng vận hành của việc quản lý hạ tầng scraper.

Các lợi ích chính của phương pháp này:

  • Giảm gánh nặng vận hành: Không cần vá lỗi, mở rộng hoặc giám sát các Prometheus server
  • Khả năng phục hồi tự động: Khám phá dựa trên DNS tự động thích ứng với các thay đổi hạ tầng
  • Quan sát hợp nhất: Truy vấn số liệu trên tất cả các nền tảng tính toán từ một giao diện duy nhất
  • Tối ưu hóa chi phí: Thanh toán hợp nhất và lọc số liệu dễ dàng giúp giảm chi phí
  • Bảo mật: Dịch vụ được quản lý xử lý bảo mật hạ tầng trong khi bạn kiểm soát các chính sách truy cập

Cho dù bạn đang chạy kiến trúc lai trên nhiều loại tính toán hay đang có kế hoạch di chuyển giữa các nền tảng, AWS managed collector của Amazon Managed Service for Prometheus cung cấp sự linh hoạt và độ tin cậy mà bạn cần cho khả năng quan sát sản xuất.

Các bước tiếp theo

Sẵn sàng triển khai điều này trong môi trường của bạn? Dưới đây là một số tài nguyên để bắt đầu:

Có câu hỏi hoặc muốn chia sẻ triển khai của bạn? Hãy để lại bình luận bên dưới hoặc liên hệ với nhóm quan sát của AWS thông qua nhóm tài khoản của bạn.

Về tác giả

Nilo Bustani

Nilo Bustani

Nilo Bustani là Kiến trúc sư Giải pháp Cấp cao tại AWS với hơn 20 năm kinh nghiệm trong phát triển ứng dụng, kiến trúc đám mây và lãnh đạo kỹ thuật. Cô chuyên giúp khách hàng xây dựng các chiến lược quan sát mạnh mẽ và thực hành quản trị trên các môi trường lai và đa đám mây. Cô tận tâm trao quyền cho các tổ chức bằng các công cụ và thực tiễn cần thiết để thành công trong hành trình chuyển đổi đám mây và AI của họ.

Rodrigue Koffi

Rodrigue Koffi

Rodrigue là Kiến trúc sư Giải pháp Chuyên gia về Khả năng Quan sát tại Amazon Web Services. Anh đam mê khả năng quan sát, hệ thống phân tán và học máy. Anh có nền tảng vững chắc về DevOps và phát triển phần mềm, đồng thời yêu thích lập trình bằng Go. Ngoài công việc, Rodrigue thích bơi lội và dành thời gian chất lượng bên gia đình. Tìm anh ấy trên LinkedIn tại /grkoffi

Alexis Perez-Mendoza

Alexis Perez-Mendoza

Alexis là Kỹ sư Phát triển Phần mềm tại AWS, chuyên về các giải pháp Khả năng Quan sát Mã nguồn Mở. Anh đóng góp vào các sáng kiến quan sát hàng đầu của AWS, bao gồm AWS Managed Service for Prometheus (AMP) và tích hợp liền mạch với Amazon CloudWatch. Alexis thiết kế và mở rộng các hệ thống phân tán, kiến trúc các giải pháp giúp khách hàng giám sát, khắc phục sự cố và tối ưu hóa ứng dụng của họ một cách chính xác.