如何用Prometheus无Agent采集AWS全资源指标对接Grafana?
AWS资源的Prometheus监控方案解答
1. 无需逐资源安装Agent采集AWS指标的可行性
完全可以不用在每个AWS资源内安装Agent就能采集大部分核心指标,核心方案是使用Prometheus CloudWatch Exporter:
- 这个exporter只需部署在一个能访问AWS API的节点(比如你的现有EC2实例、本地环境或者EKS Pod),通过IAM权限对接AWS的CloudWatch和各服务的API,批量拉取EC2、S3、Lambda等服务的状态、原生指标以及元数据。
- 配置要点:给exporter分配最小权限的IAM角色(比如包含
CloudWatchReadOnlyAccess、AmazonEC2ReadOnlyAccess等只读权限),然后在Prometheus的prometheus.yml里添加该exporter的scrape配置,就能自动采集所有支持的AWS服务数据。 - 例外说明:像EC2内存利用率这类CloudWatch默认不提供的指标,还是需要在EC2上部署Node Exporter或者CloudWatch Agent来采集,但EC2实例数量、运行状态、S3桶存储量、Lambda调用次数这类指标,都不需要在资源内装Agent就能获取。
2. 在Prometheus上实现自定义指标的方式
Prometheus本身不能直接“创建”自定义指标,但可以通过两种方式实现你要的需求:
- 用PromQL生成计算型指标:比如运行中EC2数量,直接用PromQL聚合查询即可:
count(aws_ec2_instance_status{state="running"}),这个结果可以直接在Grafana面板中展示,相当于动态生成的自定义指标;内存利用率如果是通过Node Exporter采集到内存数据,也可以用PromQL计算:100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100)。 - 扩展Exporter逻辑:如果需要更复杂的自定义指标(比如基于多个AWS数据维度计算的指标),可以在CloudWatch Exporter的配置文件中添加自定义的CloudWatch指标查询规则,或者编写简单的脚本exporter来生成自定义指标,再让Prometheus定时抓取这个脚本的输出。
内容的提问来源于stack exchange,提问作者cdr
相关产品推荐
相关产品推荐

