![New Relic:通过 AMI 设备获取 EC2 内存统计信息](https://linux22.com/image/690579/New%20Relic%EF%BC%9A%E9%80%9A%E8%BF%87%20AMI%20%E8%AE%BE%E5%A4%87%E8%8E%B7%E5%8F%96%20EC2%20%E5%86%85%E5%AD%98%E7%BB%9F%E8%AE%A1%E4%BF%A1%E6%81%AF.png)
我已通过 New Relic AMI 设备将我们的 AWS EC2 环境与 New Relic 集成。我试图避免在每个 EC2 实例上安装客户端代理。
我已在 AMI 设备上启用了以下代理:
ec2
ebs
elb
rds
sqs
sns
ec
ecr
我可以查看 CPU 利用率、磁盘 I/O 和网络 I/O 的统计数据,这真的很棒。但是,我无法获取 EC2 实例内存统计数据。
我需要做什么来收集内存统计数据?
答案1
内存使用情况对虚拟机管理程序不可见,因此您需要安装一个脚本,将信息发送到 CloudWatch。亚马逊文档详细说明了如何执行此操作这一页。
基本上,cron 会运行一个脚本,向 CloudWatch 发送自定义指标。作为最佳实践,您应该使用 IAM 角色来允许实例与 CloudWatch 通信,但您无法更改正在运行的实例的 IAM 角色,如文档所述这里,您需要启动一个新实例,即使从快照启动也可以。您可以将凭据存储在 EC2 实例上,这不是一个好主意,但它很实用,可能是必要的。
更新 背景信息:CPU 利用率、网络 I/O 和 EBS I/O 对虚拟机管理程序来说是外部可见的,并且易于测量,因此很容易将其放入 CloudWatch。内存使用情况不同。操作系统分配了一块 RAM,并且 100% 专用于该实例,但虚拟机管理程序不知道操作系统如何使用 RAM。虽然操作系统可能会告诉您它只使用了 25% 的内存,但它可能将 50% 用作文件缓存,并且只有 25% 可用。此外,即使内存实际上没有被使用,它仍然分配给该实例/操作系统。基本上,虚拟机管理程序无法知道实际使用了多少 RAM,而且它无论如何都是专用于实例的。这就是为什么如果您想知道实际的 RAM 使用情况,必须在客户操作系统中运行某些东西的原因。