AWS Linux CloudWatch-前5个进程和消耗的内存的指标

时间:2018-06-19 18:59:47

标签: linux shell amazon-web-services sh amazon-cloudwatch

我正在尝试发布自定义指标(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实例信息。

1 个答案:

答案 0 :(得分:-1)

我真的认为,对于某些指标汇总器,最好使用此方法。例如TelegrafCollectd。两种解决方案都支持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