zabbix 监控客户端进程Cpu && Mem
zabbix 监控客户端进程Cpu && Mem
有几台win10的机器,经常cpu过高导致服务不可用,但是不知道是哪个进程导致的。特地加个cpu监控进程的脚本,此外也会加linux系统的,详情请参考下面
进程Cpu
linux环境下
对于linux环境,对进程的cpu是非常简单的,zabbix3.0以上就对进程的cpu加入了监控,我们直接添加指标即可
我这里安装的5.0,可以参考官方文档,其他版本也请参考官方文档,官方yyds
linux环境指标
# 搜素这个指标,先看看用法,因为接下来我们要用
proc.cpu.util[<name>,<user>,<type>,<cmdline>,<mode>,<zone>]
打开zabbix,登陆后,点击:
配置》主机》监控项》创建监控项
- 名称: 监控项的名称,图形、触发器什么的都可以基于这个创建和定制
- 键值: 输入上面的proc.cpu.util[xxxxxxxx],xxx处自己根据官方文档调整<>的内容哈
- 信息类型: 浮点型
- 更新间隔: 你说了算,1m可以,30s也可以
- 应用集: procpu 相当于新建一个procpu的应用集,后面找比较好找,一个类型的集合
添加完成后,我们去验证下,点击:
监测》最新记录》点击你刚加的机器》监控项 找到你新加的监控项,看看有没有数据就可以了
win10 windows环境下
zabbix6.0版本的时候我看的,它还不支持proc.cpu.util 这个指标,所以没办法像linux环境那么简单方便了
对windows监控的思路是添加一个脚本,让zabbix-agent执行脚本获取数据,再将数据发给 zabbix-server
ok,接下来搞个监控windows下各个进程占CPU的脚本
思路是这样的:
powershell下,执行Get-Process 可以获取到各个进程的状态,其中包含cpu的状态,cpu(s),但是这个cpu(s)的意思是自该程序启动后,共占用cpu的时间,是累积增加的一个数值,单位为秒,
我Get-Process读取获取当前状态,然后把获取的状态存储到aaa.txt这个文件里,下一次执行的时候,获取完状态,我看看本地有没有aaa.txt这个文件,如果有就读取aaa.txt,和我这次执行获取的内容比对,根据cpu的差值排序,以此计算出两次脚本执行期间,cpu累计之间的差值,由此来判断这段时间哪个应用的cpu占用较大。
下面是脚本 编辑一个 top_cpu.ps1 这样一个文件
function Get-ProcessCpuUsage {
param (
[int]$topN = 15
)
# 定义文件路径
$filePath = "aaa.txt"
# 如果 aaa.txt 文件存在,则读取内容
if (Test-Path -Path $filePath) {
$previousProcessData = Import-Csv -Path $filePath
}
else {
# 获取当前的进程信息并保存到 aaa.txt 文件
$currentProcessData = Get-Process | Select-Object Id, ProcessName, CPU, @{Name='TimeStamp';Expression={Get-Date}}
$currentProcessData | Export-Csv -Path $filePath -NoTypeInformation
$previousProcessData = $currentProcessData
}
# 获取当前的进程信息
$currentProcessData = Get-Process | Select-Object Id, ProcessName, CPU, @{Name='TimeStamp';Expression={Get-Date}}
# 计算CPU使用时间差
$cpuUsages = foreach ($previousProcess in $previousProcessData) {
$currentProcess = $currentProcessData | Where-Object { $_.Id -eq $previousProcess.Id }
if ($currentProcess) {
$cpuTimeDifference = $currentProcess.CPU - $previousProcess.CPU
[pscustomobject]@{
ProcessName = $previousProcess.ProcessName
CPUTimeDifference = $cpuTimeDifference
}
}
}
# 按CPU使用时间差排序并取前N个
$topCpuUsages = $cpuUsages | Sort-Object CPUTimeDifference -Descending | Select-Object -First $topN
# 输出结果
foreach ($cpuUsage in $topCpuUsages) {
Write-Host "$($cpuUsage.ProcessName) used: $($cpuUsage.CPUTimeDifference) seconds of CPU time"
}
# 更新 aaa.txt 文件为当前的进程数据
$currentProcessData | Export-Csv -Path $filePath -NoTypeInformation
}
# 调用函数获取前15个CPU使用时间最高的进程
Get-ProcessCpuUsage -topN 15
脚本编辑好了,我们在win10上运行它试试
点击电脑左下角搜索 powershell, 注意: 点击以管理员身份运行
# cd 到你这个脚本的路径下执行这个脚本
cd C:\Users\丽丽小可爱\Desktop>
.\top_cpu.ps1
如果运行报错禁止执行脚本,可以调整权限放开
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
# 后输入Y,允许后,再次执行脚本
.\top_cpu.ps1
脚本能正常运行验证完成后,把这个top_cpu.ps1 脚本放到zabbix-agent端配置文件的相同目录
我的zabbix-agent部署的时候是默认的,路径一般是在
C:\Program Files\Zabbix Agent 下面,我们进入这个目录去编辑zabbix-agent的配置文件,追加以下内容
# 编辑 zabbix_agentd.conf 配置文件
UserParameter=custom.cpu.top.processes,powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent\top_cpu.ps1"
点击任务管理器(ctrl+alt+delete),点击服务,下来找到zabbix_agent 右键重启服务
接下来配置服务端:
打开zabbix,登陆后,点击:
配置》主机》监控项》创建监控项
- 名称: 监控项的名称,图形、触发器什么的都可以基于这个创建和定制
- 键值: 输入上面的custom.cpu.top.processes ,这是我们在zabbix-agent配置文件里配置的哈,就刚刚改的
- 信息类型: 文本型
- 更新间隔: 你说了算,1m可以,30s也可以
- 应用集: procpu 相当于新建一个procpu的应用集,后面找比较好找,一个类型的集合
添加完成后,我们去验证下,点击:
监测》最新记录》点击你刚加的机器》监控项 找到你新加的监控项,看看有没有数据就可以了
Mem
待更新