为 Windows 编写插件
使用 VB、PowerShell、Batch 和 DLL 编写您自己的插件,并以您想要的方式监控您需要的数据。为各个属性设置阈值,并在超出设置值时收到告警。
- 插件输出格式
- 编写自定义插件的步骤
- 在单个插件上执行多个配置
- 编辑/修改添加的插件监视器
- 示例插件脚本: VB | PowerShell | 批
- 使用 DLL 编写自己的插件
- 许可
- 故障排除提示
插件输出格式
插件脚本应该返回一个 JSON 对象。仅提供一级 JSON 数据作为键值对。要发布到 Site24x7 服务器的 JSON 数据应采用以下格式:
{
"version" : "1",
"Name":"John","Age":40,"Role":"Admin","Salary":87000,"Experience":3.4,"Performance":98.99,
"units":{"Age":"year","Salary":"Dollars","Experience":"years","Performance":"%"},
"heartbeat":"True",
"displayname":"Employee",
"msg":"Poor Performance"
}
"Key 1" : {"obj 1" : "value 1", "obj 2" : "value 2" ...},
"Key 2" : ["obj 1", "obj 2", .. ],
...
}
- version:表示插件的版本号
- 这是必填字段
- 当版本有任何变化时,Site24x7 数据中心会更新模板并为该版本创建一个新模板。
- 默认值为 1。如果在插件中进行任何更改,用户必须将版本增加 1
- 版本应该只是整数。例如 1,2,3...
- units: 监控属性的单位
- 这是个可选的选项
- 它是一个键值对,键是插件中监控的属性的名称,值是它们各自的单位
- 例如,在监测插件
单元中的 cpu 利用率百分比时:{'cpu':'%'}
- displayname:在客户端中显示的监视器的名称。这是个可选的选项
- msg: 监视器的消息
- 这是个可选的选项
- 如果监视器停机,配置的错误消息将显示在 Site24x7 Web 客户端中
- 该属性应与数据属性平行放置
编写自定义插件的步骤
- 在您的服务器中下载并安装最新版本的 Windows 代理。
- 转到Server > Plugin Integrations (+) > Write your own Plugin。
- 从任何可用格式下载示例代码:PowerShell、DLL、Batch 或 VB 脚本。
- 在下载的示例脚本中,找到名为 getData( ) 的方法并使用您自己的逻辑对其进行编辑以返回所需的性能数据。
- 在示例代码中,请不要删除#Mandatory Fields。
- 您可以通过在终端中手动执行来验证插件脚本的输出。示例:“powershell ./mysql.ps1”
- 在代理安装路径的Plugins目录下创建一个文件夹,将插件脚本文件和其他依赖文件放在这里。确保插件文件夹名称和插件脚本文件名相同。例如,如果您正在为 DHCP 编写插件,则文件夹名称应为dhcp,插件脚本文件名称应为dhcp.ps1
例如:“C:\Program Files (x86)\Site24x7\WinAgent\monitoring\Plugins\ dhcp\dhcp.ps1"
添加插件监视器后,您可以在服务器> Plugin Integrations下看到监视器。插件监视器也将列在相应服务器监视器的插件选项卡下(服务器>服务器监视器>服务器> 单击所需的服务器监视器 >插件)。您可以设置阈值配置文件并在超过配置值时收到告警。
在单个插件上执行多个配置
当有多个配置用于执行一个插件时,为每个配置(具有不同的名称)创建一个新的监视器会变得既费时又费力。为了解决这个问题,Site24x7 插件监控支持使用单个插件脚本执行多个配置。
用例:
考虑拥有多个 DHCP 作用域,并且您希望监控它们。您可以定义所有配置并使用单个脚本执行它们,而不是使用多个 DHCP 插件。
解决方案:
- 创建一个文件夹“ dhcp” 并将插件脚本“ dhcp.ps1”放在此文件夹中。
- 创建一个配置文件“ dhcp.json ”并将其放在“ dhcp ”文件夹中。
- 在“ dhcp.json ”文件中定义不同 DHCP 插件的配置。例如:
{
"DHCP_Scope_172.2.0.0": {
"scopeid": "172.2.0.0"
},
"DHCP_Scope_172.3.0.0": {
"scopeid": "172.3.0.0"
},
"DHCP_Scope_172.5.0.0": {
"scopeid": "172.5.0.0"
}
} - 在“ dhcp.ps1 ”脚本文件的顶部添加以下代码:
param([string]$scopeid) - 将“dhcp”文件夹复制粘贴到代理的插件目录 C:\Program Files (x86)\Site24x7\WinAgent\monitoring\Plugins。(x86)\Site24x7\WinAgent\monitoring\Plugins.
在下一次数据收集中,Windows 代理将加密 JSON 文件中的值,执行“ dhcp.ps1 ”文件并为 Site24x7 Web 中的每个配置(在“ dhcp.json ”文件中给出)添加一个新的插件监视器客户。加密后的示例配置文件如下所示:
"DHCP_Scope_172.2.0.0": {
"encrypted_scopeid": "NkcyMZYvZormEEnJi8AA1IDceMvI5OC4ul52v3E+BH0="
},
"DHCP_Scope_172.3.0.0": {
"encrypted_scopeid": "ttkogqMVaRTiEtzTWX7Dkft0Q1sn5WsqBhJzJDbIZN0="
},
"DHCP_Scope_172.5.0.0": {
"encrypted_scopeid": "aakogqMVaRTiEtzTWX70Q1sn5WsqBhJzJDbIPQ70="
}
}
这将在 Site24x7 Web 客户端中添加三个插件监视器,显示名称为“DHCP_Scope_172.2.0.0-<主机名>”、“DHCP_Scope_172.3.0.0-<主机名>”和“DHCP_Scope_172.5.0.0-<主机”名称>'。
如果配置文件中提供的任何值发生更改,您可以通过从定义的密钥中删除“加密”参数来编辑它。例如,如果 DHCP_Scope_172.5.0.0 的 scopeid 发生变化,请通过从密钥“ encrypted_scopeid ”中删除参数“ encrypted_ ”并输入新主机名来编辑“ dhcp.json”文件。在下一次连续的数据收集期间,代理将检测配置更改,加密新值,并相应地更新文件。
编辑/修改添加的插件监视器
- 成功添加插件监视器后,您可以转到服务器>插件> 单击已添加的插件监视器。
- 将鼠标悬停在显示名称旁边的图标上,然后单击编辑。
- 您可以在“编辑插件监视器”页面 中编辑现有显示名称或将其替换为新名称。
- 设置数据收集的轮询间隔,范围从一分钟到一天。
- 自定义插件脚本的脚本执行超时。默认超时值为 30 秒。
- 在高级配置下,
- 阈值和可用性:保留默认阈值配置文件或从下拉列表中选择现有的配置文件或使用 (+) 图标添加新配置文件,并在资源超过配置的阈值时收到通知。
- 通知配置文件:保留默认配置文件或选择现有配置文件或使用 (+) 图标添加新配置文件,并配置在停机时需要通知的时间和对象。
- 用户告警组:选择现有用户组或添加需要在中断期间发出告警的用户告警组。默认情况下将选择用户的管理员组。
- 与监视器组关联:选择现有的监视器组或创建一个新的监视器组。
- 标签:通过应用唯一标签对您帐户中的相关资源进行分类和排序。使用添加标签添加一个新标签。
- IT 自动化:从下拉列表中选择现有的自动化配置文件或添加自动化。当您想要执行该特定自动化时映射条件。
- 第三方集成:将 Site24x7 告警集成到首选的第三方服务。
- 保存您的更改
用于 VB 的示例插件脚本
version = "1"
heartbeat = "True"
displayname = "Employee"
Name = "John"
Age = 40
Role = "Admin"
Salary = 87000
Experience = 3.4
Performance = 48.99
data = AddData(data,"name",name)
data = AddData(data,"Age",Age)
data = AddData(data,"Role",Role)
data = AddData(data,"Salary",Salary)
data = AddData(data,"Experience",Experience)
data = AddData(data,"Performance",Performance)
units = AddData(units,"Age","year")
units = AddData(units,"Salary","Dollars")
units = AddData(units,"Experience","years")
units = AddData(units,"Performance","%")
mainJson = AddData(mainJson,"version",version)
mainJson = AddObj(mainJson,"data",data)
mainJson = AddObj(mainJson,"units",units)
mainJson = AddData(mainJson,"heartbeat",heartbeat)
mainJson = AddData(mainJson,"displayname",displayname)
if Performance < 50 then
mainJson = AddData(mainJson,"msg","Poor Performance")
End If
Wscript.Echo mainJson
Function AddData(data,key,value)
emptystr = ""
If data = emptystr then
data = "{"
Else
data = StrReverse(Replace(StrReverse(data),"}",",",1,1))
End If
AddData = data & """" & key & """" &" : " & """" & value & """" & "}"
End Function
Function AddObj(data,key,value)
emptystr = ""
If data = emptystr then
data = "{" Else data = StrReverse(Replace(StrReverse(data),"}",",",1,1))
End If
AddObj = data & """" & key & """" &" : " & value & "}"
End Function
JSON输出:
{
"version" : "1",
"data":{"Name":"John","Age":40,"Role":"Admin","Salary":87000,"Experience":3.4,"Performance":98.99},
"units":{"Age":"year","Salary":"Dollars","Experience":"years","Performance":"%"},
"heartbeat":"True",
"displayname":"Employee",
"msg" : "Poor Performance"
}
请参阅我们的论坛帖子以查看使用平均磁盘队列长度的 VB 脚本的示例插件文件
PowerShell 的示例插件脚本
$version = 1
$displayname = "Process Monitor"
$heartbeat = "true"
$processname = "avp.exe"
$Status = 1
$msg = $null
Function Get-Data()
{
#It is enough to edit this function and return the metrics required in $data
$data = @{}
$ExecutablePath = ""
$HandleCount = 0
$instance = 0
$ThreadCount = 0;
$ProcessId = ""
$cpu = 0
$memory = 0
try
{
$filter = "Name='"+$processname+"'"
$wmiouptput = Get-WmiObject -Class Win32_Process -Namespace 'root\cimv2' -Property HandleCount,Name,ProcessId,Status,ThreadCount,ExecutablePath -Filter $filter -ErrorAction Stop
foreach($dataelm in $wmiouptput)
{
$instance = $instance +1
$Name= $dataelm.Name
$ExecutablePath= $dataelm.ExecutablePath
$HandleCount= $HandleCount + $dataelm.HandleCount
if($instance -gt 1)
{
$ProcessId = $ProcessId +","
}
$ProcessId= $ProcessId + $dataelm.ProcessId
$ThreadCount= $ThreadCount + $dataelm.ThreadCount
$cpu = 19
$memory = 80
}
}
catch
{
$Script:Status = 0
$Script:msg = $_.Exception.Message
}
$data.Add("Name",$Name)
$data.Add("instance",$instance)
$data.Add("HandleCount", $HandleCount)
$data.Add("ProcessId", $ProcessId)
$data.Add("ThreadCount", $ThreadCount)
$data.Add("ExecutablePath", $ExecutablePath)
$data.Add("CPU", $cpu)
$data.Add("Memory", $Memory)
return $data
}
Function Set-Units() #OPTIONAL - These units will be displayed in the Dashboard
{
$units = @{}
$units.Add("CPU","%")
$units.Add("Memory", "MB")
return $units
}
$mainJson = @{}
$mainJson.Add("plugin_version", $version)
$mainJson.Add("heartbeat_required", $heartbeat)
$mainJson.Add("displayname", $displayname) #Comment this if you don't display name
$mainJson.Add("data", (Get-Data))
$mainJson.Add("units", (Set-Units)) #Comment this if you don't have Units
if($Status -eq 0)
{
$mainJson.Add("status",0)
}
if($msg -ne $null)
{
$mainJson.Add("msg",$msg)
}
return $mainJson | ConvertTo-Json
JSON输出:
批处理的示例插件脚本
@ECHO OFF
SET version="1"
SET heartbeat="True"
SET displayname="Network Traffic"
SET units={"Packets recieved":"sec","Packets sent":"sec","Bandwidth utilization":"Kbps","Speed":"Mbps"}
SET Packetsrecieved=10
SET Packetssent=4
SET Bandwidthutilization=12
SET Speed=87
SET Msg=""
IF %Bandwidthutilization% gtr 10 (
SET Msg="High Bandwidth Utilization"
)
SET data={"Packets recieved":%Packetsrecieved%,"Packets sent":%Packetssent%,"Bandwidth utilization":%Bandwidthutilization%,"Speed":%Speed%}
IF %Msg%=="" (
SET mainJson={"version" : %version%,"data" : %data%,"units" : %units%,"heartbeat" : %heartbeat%,"displayname" : %displayname%}
) ELSE (
SET mainJson={"version" : %version%,"data" : %data%,"units" : %units%,"heartbeat" : %heartbeat%,"displayname" : %displayname%,"msg" : %Msg%}
)
ECHO %mainJson%
JSON输出:
使用 DLL 编写自己的插件
许可
为服务器监视器添加的第一个插件是免费的。之后,每个插件监视器都被视为一个基本监视器。每个插件最多可以有 25 个属性。
故障排除提示
- 我的 Windows 插件未添加到我的 Site24x7 帐户的可能原因
- 在 Windows 服务器中运行 python 插件脚本
- 向现有 Windows 插件添加新属性
- 在什么情况下我应该更改我的插件版本?
- 在 PowerShell 脚本中为我的班级创建对象
- 使用 DLL 编写 Windows 插件的强制性要求
相关文章
- 插件简介 | 如何调试插件监视器?
- 插件模板配置 | 插件的阈值配置文件
- 自定义 Linux 插件 | 开箱即用的插件支持
- 添加服务器监视器 | 服务器监控架构 | 服务器指标
- IT自动化