千家信息网

Zabbix 上Windows性能监控

发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,背景信息最近在重新看一些关于windows 性能的书籍,对于我这样一个原来使用SCOM监控的懒人来说,Zabbix 上自带的windows OS template 的模板实在是不够用,因为之前SCOM
千家信息网最后更新 2024年10月27日Zabbix 上Windows性能监控

背景信息

最近在重新看一些关于windows 性能的书籍,对于我这样一个原来使用SCOM监控的懒人来说,Zabbix 上自带的windows OS template 的模板实在是不够用,因为之前SCOM监控包(微软出的,把所有工作都做了,我只需要按需启用规则和告警即可)。

默认的Zabbix 性能数据只有Avg Latency,平均的数据也不准,想看下磁盘的Latency以及IOPS要自己动手,看了下zabbix 中windows performance Counter 的语法,我略有退缩了。全是用数字表示的性能计数器的CounterCategory 以及 CounterName。

自带磁盘相关的统计只有传输速度,以及平均延迟。

如果要监控其他的性能计数器,它们的名称是什么,作用是什么?能否有个清单可以快速搜索?

操刀解决

好在powershell 书写比较顺手,写了下面一个函数,整合了zabbix 的性能计数器的语法。

function Get-PerfCounterDesc{    [cmdletbinding()]    param(        [switch]$show    )    $Categories = [System.Diagnostics.PerformanceCounterCategory]::GetCategories()    $SingleInstanceCategories = $Categories | Where-Object {$_.CategoryType -eq "SingleInstance"}     $MultiInstanceCategories =  $Categories| Where-Object {$_.CategoryType -eq "MultiInstance"}     $SingleInstanceCounters = $SingleInstanceCategories | ForEach-Object {        (new-object System.Diagnostics.PerformanceCounterCategory($_.CategoryName)).GetCounters()     }    $MultiInstanceCounters = $MultiInstanceCategories | ForEach-Object {        $category=new-object System.Diagnostics.PerformanceCounterCategory($_.CategoryName)        if($category.InstanceExists('_Total')){            $category.GetCounters('_Total')         }elseif($category.InstanceExists('Total')){            $category.GetCounters('Total')        }else{            $instanceNames=$category.GetInstanceNames()            if($instanceNames.count -gt 0){                $category.GetCounters($instanceNames[0])            }        }    }    $AllCounters = $MultiInstanceCounters + $SingleInstanceCounters     $key="HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009"    $counters=Get-ItemPropertyValue -Path $key -Name "counter"    $Dict=@{}    for ($i=0;$i -lt $counters.count;$i=$i+2){        if($counters[$i+1] -and -not $Dict.ContainsKey($counters[$i+1])){            $Dict.add($counters[$i+1],$counters[$i])        }    }    Write-Debug $dict.keys.count    $result=$AllCounters | Sort-Object Categoryname,Countername|            Select-Object CategoryName,            Countername,            @{n="zabbixPerfCounter";e={'perf_counter["\{0}({{#ReplaceThis}})\{1}"]' -f $dict[$_.CategoryName],$dict[$_.Countername]}},            @{n="categoryNum";e={$Dict[$_.CategoryName]}},            @{n="CounterNum";e={$Dict[$_.Countername]}},            CategoryHelp,            CounterHelp    if($show){        $result|Out-GridView    }else{        $result    }}

怎么用呢?把上面函数直接加到个人的powershell 配置文件,也就是在powershell 控制台notepad $profile ,把内容粘贴进去,然后保存,然后设置set-executionpolicy remotesigned以让自定义非签名的脚本可以运行。

新起一个powershell ,直接敲Get-PerfCounterDesc -show, 可以对结果进行各种过滤。其中zabbixPerfCounter 列,就是生成的zabbix 上使用的key,其中的{#replaceThis} 请替换成计数器的实例名称。比如_total.

然后我在zabbix 模板中加入了下面的计数器来显示磁盘IOPS 以及Latency

item prototype

items

还需要对应更改Grafana

附带资源及参考

写到一半结果国庆了,让大家休息,所以资源一直补不上来。

放在github 上了,方便后续更新和补充 https://github.com/yoke88/WindowsPerfMonitorWithZabbix

性能 计数器 监控 磁盘 函数 只有 名称 数据 模板 结果 语法 资源 不够 个人 也就是 书籍 作用 信息 内容 国庆 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 三层架构是怎么连接数据库的 北京高校校园网络安全建设 网络技术岗位考试 闵行区项目软件开发口碑推荐 电子制造业网络安全 机场网络安全措施 数据库中差的运算条件 世界网络安全大赛中国队 网络安全空间发展现状 移动gsm网络技术支持项目 闵行区服务软件开发口碑推荐 互联网科技方面的公司起名 博世嵌入式软件开发总部在哪 廊坊市赛驰网络技术有限公司 影流的服务器 杭州极致互联网科技有限公司 水处理一站式服务器 数据库查询命名代码 全国软件开发公司排行榜 富国互联网科技股票明天会涨吗 传统数据库模型 构筑网络安全构建美丽校园诗歌 软件开发指导记录 网络安全是什么产业 江苏戴尔服务器参数 网络安全防护认证沈阳 宁波优享汇互联网科技有限公司 软件开发中心在中国的外企 ios地图软件开发 想学习服务器虚拟化方面的知识
0