帮助手册 管理 添加监视器 为 Windows 编写插件

为 Windows 编写插件

使用 VB、PowerShell、Batch 和 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"

}

不支持单个 JSON 对象中的 JSON 数组和多级对象。例如,不支持以下格式:
{
"Key 1" : {"obj 1" : "value 1", "obj 2" : "value 2" ...},
"Key 2" : ["obj 1", "obj 2", .. ],
...
}
  1. version:表示插件的版本号
    • 这是必填字段
    • 当版本有任何变化时,Site24x7 数据中心会更新模板并为该版本创建一个新模板。
    • 默认值为 1。如果在插件中进行任何更改,用户必须将版本增加 1
    • 版本应该只是整数。例如 1,2,3...
  2. units: 监控属性的单位
    • 这是个可选的选项
    • 它是一个键值对,键是插件中监控的属性的名称,值是它们各自的单位
    • 例如,在监测插件
      单元中的 cpu 利用率百分比时:{'cpu':'%'}
  3. displayname:在客户端中显示的监视器的名称。这是个可选的选项
  4. msg: 监视器的消息
    • 这是个可选的选项
    • 如果监视器停机,配置的错误消息将显示在 Site24x7 Web 客户端中
    • 该属性应与数据属性平行放置

编写自定义插件的步骤

  1. 在您的服务器中下载并安装最新版本的 Windows 代理。
  2. 转到Server  >  Plugin Integrations (+)  >  Write your own Plugin
  3. 从任何可用格式下载示例代码:PowerShell、DLL、Batch 或 VB 脚本
  4. 在下载的示例脚本中,找到名为 getData( ) 的方法并使用您自己的逻辑对其进行编辑以返回所需的性能数据。
    • 在示例代码中,请不要删除#Mandatory Fields。
    • 您可以通过在终端中手动执行来验证插件脚本的输出。示例:“powershell ./mysql.ps1”
  5. 在代理安装路径的Plugins目录下创建一个文件夹,将插件脚本文件和其他依赖文件放在这里。确保插件文件夹名称和插件脚本文件名相同。例如,如果您正在为 DHCP 编写插件,则文件夹名称应为dhcp,插件脚本文件名称应为dhcp.ps1 
    例如:“C:\Program Files (x86)\Site24x7\WinAgent\monitoring\Plugins\ dhcp\dhcp.ps1"

添加插件监视器后,您可以在服务器Plugin Integrations下看到监视器。插件监视器也将列在相应服务器监视器的插件选项卡下(服务器>服务器监视器>服务器> 单击所需的服务器监视器 >插件)。您可以设置阈值配置文件并在超过配置值时收到告警。

所有插件日志都将被捕获在 [安装目录]\monitoring\logs\Details 下的 PluginLog.log 和 PluginRegisterLog.log 文件中

在单个插件上执行多个配置

当有多个配置用于执行一个插件时,为每个配置(具有不同的名称)创建一个新的监视器会变得既费时又费力。为了解决这个问题,Site24x7 插件监控支持使用单个插件脚本执行多个配置。

用例:

考虑拥有多个 DHCP 作用域,并且您希望监控它们。您可以定义所有配置并使用单个脚本执行它们,而不是使用多个 DHCP 插件。  

解决方案:

  1. 创建一个文件夹“ dhcp” 并将插件脚本“ dhcp.ps1”放在此文件夹中。
  2. 创建一个配置文件“ dhcp.json ”并将其放在“ dhcp ”文件夹中。
  3. 在“ 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"
        }
    }
  4. 在“ dhcp.ps1 ”脚本文件的顶部添加以下代码:
    param([string]$scopeid)
  5. 将“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”文件。在下一次连续的数据收集期间,代理将检测配置更改,加密新值,并相应地更新文件。

编辑/修改添加的插件监视器

  1. 成功添加插件监视器后,您可以转到服务器>插件> 单击已添加的插件监视器。
  2. 将鼠标悬停在显示名称旁边的图标上,然后单击编辑
  3. 您可以在“编辑插件监视器”页面 中编辑现有显示名称或将其替换为新名称。
  4. 设置数据收集的轮询间隔,范围从一分钟到一天。
  5. 自定义插件脚本的脚本执行超时。默认超时值为 30 秒。
  6. 高级配置下,
    • 阈值和可用性:保留默认阈值配置文件或从下拉列表中选择现有的配置文件或使用 (+) 图标添加新配置文件,并在资源超过配置的阈值时收到通知。
    • 通知配置文件:保留默认配置文件或选择现有配置文件或使用 (+) 图标添加新配置文件,并配置在停机时需要通知的时间和对象。
    • 用户告警组:选择现有用户组或添加需要在中断期间发出告警的用户告警组。默认情况下将选择用户的管理员组。
    • 与监视器组关联:选择现有的监视器组或创建一个新的监视器组。 
    • 标签:通过应用唯一标签对您帐户中的相关资源进行分类和排序。使用添加标签添加一个新标签。
    • IT 自动化:从下拉列表中选择现有的自动化配置文件或添加自动化。当您想要执行该特定自动化时映射条件。 
    • 第三方集成:将 Site24x7 告警集成到首选的第三方服务。
  7. 保存您的更改

用于 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 编写自己的插件

知道如何使用 DLL 编写插件。 

许可

为服务器监视器添加的第一个插件是免费的。之后,每个插件监视器都被视为一个基本监视器。每个插件最多可以有 25 个属性。 

故障排除提示

编写插件有困难,或者您有什么特殊要求?不用担心!将其发布在我们的社区论坛中,我们将为您完成。

相关文章