此篇是在 zabbix监控windows dhcp server Scope 的基础上改进
情景: 企业一般用windows服务器来做dhcp服务器,一般也会出现某些dhcp池地址被拿完,短期来不及释放的情况。
目的: 监控服务器资源池的前提下,尽量不增加服务器的压力
思路: check_dhcpscop.ps1用来获取dhcp服务器作用域的信息,并且保存在dhcp服务器的本地txt文件中,做自动发现
get_dhcpinfor.ps1用来读取txt文件中每个资源池的信息,做监控项数据
步骤:
check_dhcpscop.ps1
#获取DHCP作用域,作用域的name,id,state,PercentageInUse,InUse,Free 值
$scops = Get-DhcpServerv4Scope |select @{name="{#SCOPNAME}";expression={$_.Name.replace(' ','')}},@{name="ScopeId";expression={$_.ScopeID.IPAddressToString}},@{name="State";expression={$_.State}}
$scopstate = Get-DhcpServerv4ScopeStatistics |Select @{name="ScopeId";expression={$_.ScopeID.IPAddressToString}},@{name="PercentageInUse";expression={$_.PercentageInUse}},@{name="FREE";expression={$_.Free}},@{name="Use";expression={$_.InUse}}
$ScopsInfor = @()
foreach($i in $scops) {
foreach($j in $scopstate) {
if ($i.ScopeId -eq $J.ScopeId) {
$i | Add-Member -MemberType NoteProperty -Name 'PercentageInUse' -Value $j.PercentageInUse -Force
$i | Add-Member -MemberType NoteProperty -Name 'Free' -Value $j.FREE -Force
$i | Add-Member -MemberType NoteProperty -Name 'Use' -Value $j.Use -Force
$ScopsInfor = $ScopsInfor + $i
}
}
}
$ScopsInfor = $ScopsInfor|ConvertTo-Json
@"
{"data":$ScopsInfor}
"@
$ScopsInfor | Out-File -FilePath C:\zabbix\script\dhcpinfor\dhcp.txt
get_dhcpinfor.ps1
#监控项调用此脚本,会传进两个参数
Param($scopname, $propname)
$infor = ''
#读取第一个脚本获取到的信息
$content = Get-Content "C:\zabbix\script\dhcpinfor\dhcp.txt"
foreach ($line in $content){
$str = $line
if ($str.contains('{#SCOPNAME}')){
$line =$line.replace('{#SCOPNAME}','ScopName')
}
$infor = $infor+ $line
}
$dhcpinfor = ConvertFrom-Json $infor
foreach ($i in $dhcpinfor){
if($i.ScopName -eq $scopname){
if ($propname -eq 'Free'){
return $i.Free
}
if ($propname -eq 'State'){
return $i.State
}
if ($propname -eq 'PercentageInUse'){
return $i.PercentageInUse
}
if ($propname -eq 'Use'){
return $i.Use
}
}
}
zabbix的模板
zabbix_export:
version: '6.0'
date: '2023-02-02T03:19:35Z'
groups:
-
uuid: 846977d1dfed4968bc5f8bdb363285bc
name: 'Templates/Operating systems'
templates:
-
uuid: 76e0de58829f458285537935d85819d3
template: 'TBI Windows DHCP Server by Zabbix agent'
name: 'TBI Windows DHCP Server by Zabbix agent'
description: |
Official Windows template. Requires agent of Zabbix 4.4 and newer.
You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/387224-discussion-thread-for-official-zabbix-template-for-windows
Template tooling version used: 0.41
groups:
-
name: 'Templates/Operating systems'
items:
-
uuid: 4732f2defd2e49d7ab9dd75b212d0de3
name: 'Zabbix agent ping'
type: ZABBIX_ACTIVE
key: agent.ping
history: 7d
description: 'The agent always returns 1 for this item. It could be used in combination with nodata() for availability check.'
valuemap:
name: 'Zabbix agent ping status'
tags:
-
tag: component
value: system
triggers:
-
uuid: f1fc1bad92034af8a14aeaf56a125c84
expression: 'nodata(/TBI Windows DHCP Server by Zabbix agent/agent.ping,{$AGENT.NODATA_TIMEOUT})=1'
name: 'Zabbix agent is not available'
event_name: 'Zabbix agent is not available (or nodata for {$AGENT.NODATA_TIMEOUT})'
priority: AVERAGE
description: 'For active agents, nodata() with agent.ping is used with {$AGENT.NODATA_TIMEOUT} as time threshold.'
manual_close: 'YES'
tags:
-
tag: scope
value: availability
-
uuid: 9de081e14a0745a58d69ebaa4860d1c3
name: Uptime
type: ZABBIX_ACTIVE
key: system.uptime
delay: 30s
history: 2w
trends: 0d
units: uptime
description: 'System uptime in ''N days, hh:mm:ss'' format.'
tags:
-
tag: component
value: system
triggers:
-
uuid: 05f93c476eef49658a165a06510150e2
expression: 'last(/TBI Windows DHCP Server by Zabbix agent/system.uptime)<10m'
name: 'Host has been restarted'
event_name: 'Host has been restarted (uptime < 10m)'
priority: WARNING
description: 'The device uptime is less than 10 minutes.'
manual_close: 'YES'
tags:
-
tag: scope
value: notice
discovery_rules:
-
uuid: 12bfdc6715774ead881f595600cfcfed
name: 'DHCP Scope Discovery'
key: check_dhcpscop
delay: 5m
filter:
conditions:
-
macro: '{#SCOPNAME}'
formulaid: A
item_prototypes:
-
uuid: e0d67fe51ce842c9a4a67cd625ce28f5
name: 'DHCP Scop Free_{#SCOPNAME}'
key: 'get_dhcpinfor[{#SCOPNAME},Free]'
trends: '0'
status: DISABLED
discover: NO_DISCOVER
value_type: TEXT
-
uuid: 04633f19dbe44a45b729785ce5d88955
name: 'DHCP Scop PerCentageInUse_{#SCOPNAME}'
key: 'get_dhcpinfor[{#SCOPNAME},PercentageInUse]'
delay: 5m
value_type: FLOAT
preprocessing:
-
type: MULTIPLIER
parameters:
- '1'
trigger_prototypes:
-
uuid: d3337b91cf8a45f7a47790e8da3a03d2
expression: 'avg(/TBI Windows DHCP Server by Zabbix agent/get_dhcpinfor[{#SCOPNAME},PercentageInUse],3m)>=95'
recovery_mode: RECOVERY_EXPRESSION
recovery_expression: 'avg(/TBI Windows DHCP Server by Zabbix agent/get_dhcpinfor[{#SCOPNAME},PercentageInUse],3m)<90'
name: '{#SCOPNAME} Scope usage above 95%'
priority: AVERAGE
-
uuid: f0dc48a0680a4ff9be34941ff94e8dcb
name: 'DHCP Scop State_{#SCOPNAME}'
key: 'get_dhcpinfor[{#SCOPNAME},State]'
delay: 5m
trends: '0'
value_type: TEXT
trigger_prototypes:
-
uuid: a9266d377a53464082adf219da51b121
expression: 'last(/TBI Windows DHCP Server by Zabbix agent/get_dhcpinfor[{#SCOPNAME},State])="Inactive"'
recovery_mode: RECOVERY_EXPRESSION
recovery_expression: 'last(/TBI Windows DHCP Server by Zabbix agent/get_dhcpinfor[{#SCOPNAME},State])="Active"'
name: '{#SCOPNAME} Scope Static Inactice'
priority: AVERAGE
-
uuid: b7b5de331d0748f58f0b24fe968dd165
name: 'DHCP Scop Use_{#SCOPNAME}'
key: 'get_dhcpinfor[{#SCOPNAME},Use]'
trends: '0'
status: DISABLED
discover: NO_DISCOVER
value_type: TEXT
graph_prototypes:
-
uuid: 1e336fc86f53426fa4e840335869d57a
name: 'Dhcp Scop PerCentageInUse {#SCOPNAME}'
percent_left: '100'
graph_items:
-
color: 1A7C11
calc_fnc: ALL
item:
host: 'TBI Windows DHCP Server by Zabbix agent'
key: 'get_dhcpinfor[{#SCOPNAME},PercentageInUse]'
tags:
-
tag: class
value: os
-
tag: target
value: windows
macros:
-
macro: '{$AGENT.NODATA_TIMEOUT}'
value: 30m
description: 'No data timeout for active agents. Consider to keep it relatively high.'
-
macro: '{$CPU.INTERRUPT.CRIT.MAX}'
value: '50'
description: 'The critical threshold of the % Interrupt Time counter.'
-
macro: '{$CPU.PRIV.CRIT.MAX}'
value: '30'
description: 'The threshold of the % Privileged Time counter.'
-
macro: '{$CPU.QUEUE.CRIT.MAX}'
value: '3'
description: 'The threshold of the Processor Queue Length counter.'
-
macro: '{$CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of the CPU utilization in %.'
-
macro: '{$IF.ERRORS.WARN}'
value: '2'
-
macro: '{$IF.UTIL.MAX}'
value: '90'
-
macro: '{$IFCONTROL}'
value: '1'
-
macro: '{$MEM.PAGE_SEC.CRIT.MAX}'
value: '1000'
description: 'The warning threshold of the Memory Pages/sec counter.'
-
macro: '{$MEM.PAGE_TABLE_CRIT.MIN}'
value: '5000'
description: 'The warning threshold of the Free System Page Table Entries counter.'
-
macro: '{$MEMORY.UTIL.MAX}'
value: '90'
description: 'The warning threshold of the Memory util item.'
-
macro: '{$NET.IF.IFALIAS.MATCHES}'
value: '.*'
description: 'This macro is used in Network interface discovery. Can be overridden on the host or linked template level.'
-
macro: '{$NET.IF.IFALIAS.NOT_MATCHES}'
value: CHANGE_THIS
description: 'This macro is used in Network interface discovery. Can be overridden on the host or linked template level.'
-
macro: '{$NET.IF.IFDESCR.MATCHES}'
value: '.*'
description: 'This macro is used in Network interface discovery. Can be overridden on the host or linked template level.'
-
macro: '{$NET.IF.IFDESCR.NOT_MATCHES}'
value: CHANGE_THIS
description: 'This macro is used in Network interface discovery. Can be overridden on the host or linked template level.'
-
macro: '{$NET.IF.IFNAME.MATCHES}'
value: '.*'
description: 'This macro is used in Network interface discovery. Can be overridden on the host or linked template level.'
-
macro: '{$NET.IF.IFNAME.NOT_MATCHES}'
value: Miniport|Virtual|Teredo|Kernel|Loopback|Bluetooth|HTTPS|6to4|QoS|Layer
description: 'This macro is used in Network interface discovery. Can be overridden on the host or linked template level.'
-
macro: '{$SERVICE.NAME.MATCHES}'
value: '^.*$'
description: 'This macro is used in Service discovery. Can be overridden on the host or linked template level.'
-
macro: '{$SERVICE.NAME.NOT_MATCHES}'
value: '^(?:RemoteRegistry|MMCSS|gupdate|SysmonLog|clr_optimization_v.+|sppsvc|gpsvc|Pml Driver HPZ12|Net Driver HPZ12|MapsBroker|IntelAudioService|Intel\(R\) TPM Provisioning Service|dbupdate|DoSvc|CDPUserSvc_.+|WpnUserService_.+|OneSyncSvc_.+|WbioSrvc|BITS|tiledatamodelsvc|GISvc|ShellHWDetection|TrustedInstaller|TabletInputService|CDPSvc|wuauserv)$'
description: 'This macro is used in Service discovery. Can be overridden on the host or linked template level.'
-
macro: '{$SERVICE.STARTUPNAME.MATCHES}'
value: '^(?:automatic|automatic delayed)$'
description: 'This macro is used in Service discovery. Can be overridden on the host or linked template level.'
-
macro: '{$SERVICE.STARTUPNAME.NOT_MATCHES}'
value: '^(?:manual|disabled)$'
description: 'This macro is used in Service discovery. Can be overridden on the host or linked template level.'
-
macro: '{$SWAP.PFREE.MIN.WARN}'
value: '20'
description: 'The warning threshold of the minimum free swap.'
-
macro: '{$SYSTEM.FUZZYTIME.MAX}'
value: '60'
description: 'The threshold for difference of system time in seconds.'
-
macro: '{$VFS.DEV.DEVNAME.MATCHES}'
value: '.*'
description: 'This macro is used in physical disks discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.DEV.DEVNAME.NOT_MATCHES}'
value: _Total
description: 'This macro is used in physical disks discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.DEV.READ.AWAIT.WARN}'
value: '0.02'
description: 'Disk read average response time (in s) before the trigger would fire.'
-
macro: '{$VFS.DEV.UTIL.MAX.WARN}'
value: '95'
description: 'The warning threshold of disk time utilization in percent.'
-
macro: '{$VFS.DEV.WRITE.AWAIT.WARN}'
value: '0.02'
description: 'Disk write average response time (in s) before the trigger would fire.'
-
macro: '{$VFS.FS.FREE.MIN.CRIT}'
value: 5G
description: 'The critical threshold of the filesystem utilization.'
-
macro: '{$VFS.FS.FREE.MIN.WARN}'
value: 10G
description: 'The warning threshold of the filesystem utilization.'
-
macro: '{$VFS.FS.FSDRIVETYPE.MATCHES}'
value: fixed
description: 'This macro is used in filesystems discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.FS.FSDRIVETYPE.NOT_MATCHES}'
value: ^\s$
description: 'This macro is used in filesystems discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.FS.FSNAME.MATCHES}'
value: '.*'
description: 'This macro is used in filesystems discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.FS.FSNAME.NOT_MATCHES}'
value: '^(?:/dev|/sys|/run|/proc|.+/shm$)'
description: 'This macro is used in filesystems discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.FS.FSTYPE.MATCHES}'
value: '.*'
description: 'This macro is used in filesystems discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.FS.FSTYPE.NOT_MATCHES}'
value: ^\s$
description: 'This macro is used in filesystems discovery. Can be overridden on the host or linked template level.'
-
macro: '{$VFS.FS.PUSED.MAX.CRIT}'
value: '90'
description: 'The critical threshold of the filesystem utilization in percent.'
-
macro: '{$VFS.FS.PUSED.MAX.WARN}'
value: '80'
description: 'The warning threshold of the filesystem utilization in percent.'
dashboards:
-
uuid: a6148375a09e403193d2457a09a6d880
name: 'Network interfaces'
pages:
-
widgets:
-
type: GRAPH_PROTOTYPE
width: '24'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '2'
-
type: INTEGER
name: columns
value: '1'
-
type: INTEGER
name: rows
value: '1'
-
uuid: 15f071590aff491db3e5af07ddcbf4ec
name: 'System performance'
pages:
-
widgets:
-
type: GRAPH_CLASSIC
width: '12'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '0'
-
type: GRAPH_CLASSIC
x: '12'
width: '12'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '1'
-
type: GRAPH_CLASSIC
'y': '5'
width: '12'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '0'
-
type: GRAPH_CLASSIC
x: '12'
'y': '5'
width: '12'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '0'
-
type: GRAPH_PROTOTYPE
'y': '10'
width: '24'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '2'
-
type: INTEGER
name: columns
value: '1'
-
type: INTEGER
name: rows
value: '1'
-
type: GRAPH_PROTOTYPE
'y': '15'
width: '24'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '2'
-
type: INTEGER
name: columns
value: '1'
-
type: INTEGER
name: rows
value: '1'
-
type: GRAPH_PROTOTYPE
'y': '20'
width: '24'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '2'
-
type: INTEGER
name: columns
value: '1'
-
type: INTEGER
name: rows
value: '1'
-
type: GRAPH_PROTOTYPE
'y': '25'
width: '24'
height: '5'
fields:
-
type: INTEGER
name: source_type
value: '2'
-
type: INTEGER
name: columns
value: '1'
-
type: INTEGER
name: rows
value: '1'
valuemaps:
-
uuid: 8e51851734de459b897654b55e097ed9
name: 'Win32_NetworkAdapter::AdapterTypeId'
mappings:
-
value: '0'
newvalue: 'Ethernet 802.3'
-
value: '1'
newvalue: 'Token Ring 802.5'
-
value: '2'
newvalue: 'Fiber Distributed Data Interface (FDDI)'
-
value: '3'
newvalue: 'Wide Area Network (WAN)'
-
value: '4'
newvalue: LocalTalk
-
value: '5'
newvalue: 'Ethernet using DIX header format'
-
value: '6'
newvalue: ARCNET
-
value: '7'
newvalue: 'ARCNET (878.2)'
-
value: '8'
newvalue: ATM
-
value: '9'
newvalue: Wireless
-
value: '10'
newvalue: 'Infrared Wireless'
-
value: '11'
newvalue: Bpc
-
value: '12'
newvalue: CoWan
-
value: '13'
newvalue: '1394'
-
uuid: d1945b12b60241b59e1576f119fd4085
name: 'Win32_NetworkAdapter::NetConnectionStatus'
mappings:
-
value: '0'
newvalue: Disconnected
-
value: '1'
newvalue: Connecting
-
value: '2'
newvalue: Connected
-
value: '3'
newvalue: Disconnecting
-
value: '4'
newvalue: 'Hardware Not Present'
-
value: '5'
newvalue: 'Hardware Disabled'
-
value: '6'
newvalue: 'Hardware Malfunction'
-
value: '7'
newvalue: 'Media Disconnected'
-
value: '8'
newvalue: Authenticating
-
value: '9'
newvalue: 'Authentication Succeeded'
-
value: '10'
newvalue: 'Authentication Failed'
-
value: '11'
newvalue: 'Invalid Address'
-
value: '12'
newvalue: 'Credentials Required'
-
uuid: 000cb16205a5446589dcbfaf400dc6ad
name: 'Windows service state'
mappings:
-
value: '0'
newvalue: Running
-
value: '1'
newvalue: Paused
-
value: '2'
newvalue: 'Start pending'
-
value: '3'
newvalue: 'Pause pending'
-
value: '4'
newvalue: 'Continue pending'
-
value: '5'
newvalue: 'Stop pending'
-
value: '6'
newvalue: Stopped
-
value: '7'
newvalue: Unknown
-
value: '255'
newvalue: 'No such service'
-
uuid: 247752b40d1642369bb9f70ace9be325
name: zabbix.host.available
mappings:
-
value: '0'
newvalue: 'not available'
-
value: '1'
newvalue: available
-
value: '2'
newvalue: unknown
-
uuid: beee6a48ce11416788566615ef129743
name: 'Zabbix agent ping status'
mappings:
-
value: '1'
newvalue: Up
zabbix的zabbix_agentd.conf 中自定义用户参数
UserParameter=check_dhcpscop,powershell c:\zabbix\script\check_dhcpscop.ps1
UserParameter=get_dhcpinfor[*],powershell c:\zabbix\script\get_dhcpinfor.ps1 $1 $2