我正在尝试发布自定义指标(cloudwatch),以获取Linux机器中排名前5位的进程及其内存消耗。
当前用于Windows,我正在使用以下Powershell脚本:
$Processes = get-process | Sort-Object CPU -desc | Group-Object -Property
ProcessName | Select-Object -first 5
#$Processes = get-process | Group-Object -Property ProcessName
foreach($Process in $Processes)
{
$mem = ($Process.Group|Measure-Object WorkingSet -Sum).Sum
$memMB = $mem/1MB
$Obj = New-Object psobject
$Obj | Add-Member -MemberType NoteProperty -Name Name -Value $Process.Name
$Obj | Add-Member -MemberType NoteProperty -Name Mem -Value $memMB
$Obj
#Write-Host $Process.Name
aws cloudwatch put-metric-data --metric-name $Process.Name --namespace TopProcesses --value $memMB
}
目前这在Windows上可以正常工作,但是在Linux机器上移植类似概念时遇到很多麻烦,如果有人可以在这个问题上给我一些帮助,将不胜感激。
编辑:如果可以通过lambda检索此信息,则可以找到解决方案,但是,我不确定应该如何通过python来获取Linux实例信息。
答案 0 :(得分:-1)
我真的认为,对于某些指标汇总器,最好使用此方法。例如Telegraf或Collectd。两种解决方案都支持Windows和Linux发行版。
Telegraf具有不错的Yaml配置。您只需要在输出中放置cloudwatch即可。就绪的解决方案可帮助您避免开发/支持自定义代码。
对于shell脚本,您可以像这样通过内存获得前5个进程:
PIDS=$(ps aux --sort -rss | tail -n +2 | head -n 5 | awk '{print $2}')
上面的脚本捕获进程的pid。有很多方法可以通过PID来获取内存利用率。例如,您可以这样做:
cat /proc/$pid/status