使用 DLL 编写 Windows 插件
使用动态链接库 (DLL) 编写插件并根据您的需要监控数据。您还可以使用Batch、PowerShell 和 VB 脚本编写插件。
先决条件
- 我们的 Windows 服务器监控代理的最新版本
- 插件必须用 C# 编写(.NET framework 3.0 及以上)
编写插件
- 在您的服务器中下载并安装 最新版本的 Windows 代理
- 打开Visual Studio编辑器 >创建项目> 选择语言Visual C#>用于创建 C#类库的类库 > 确定
- 添加对创建项目的引用。转到项目菜单 >添加参考。 从代理安装文件夹C:\Program files (x86)\Site24x7\WinAgent\monitoring\Plugins\PluginsReference中选择Site24x7Plugin.Monitor.dll。
Site24x7Plugin.Monitor.dll' 包含接口 IPlugin,其中包含必须在创建项目的 c# 类文件中实现的变量和方法。
- 在项目的 C# 类文件中,使用 Site24x7Plugin.Monitor 添加命名空间并使用 IPlugin 接口实现该类。
- 必须存在于类中的 变量 :
- 版本:插件脚本文件中的任何更改都需要更新插件版本。默认值为 1。对现有插件进行任何更改后,用户必须将版本号增加 1。版本只能是整数。例如 1,2,3
- 实现方法 DataCollect() 并编写逻辑以获取实际数据。此方法应返回Dictionary<string, object>应包含键值对。键应该是指标的名称。
- 类中存在的 可选变量:
- Heartbeat:当 Site24x7 数据中心没有从插件接收到数据时,提醒插件关闭。heartbeat 的值应该是 true 或 false。默认情况下,heartbeat 的值为 true
- DisplayName:Web 客户端中显示的监视器的名称。例如:如果您创建一个名为“Site24x7Plugin”的插件,您的插件类应该有一个显示名称,其返回值必须是“Site24x7Plugin”
- msg:将 DataCollect() 方法期间抛出任何错误时捕获的错误消息分配给此变量
- 属性 Version、Displayname 和 Heartbeat 将返回一个字符串对象
- 类中存在的可选方法:
- Units() 方法应该返回一个 Directory<string, object> ,它应该包含一个键值对。键应该具有要监视的属性的名称,值应该是它们各自的单位。
- 通过转到Visual Studio> Buildmenu > Build Solution来构建项目。将创建一个 .dll 文件。
- 在Agent 安装目录/Monitoring/Plugins下创建一个文件夹,并将 .dll 文件复制到该文件夹中。
确保文件名和文件夹名相同。例如,如果您正在为 Apache 编写插件,则文件夹名称应为 Apache ,插件脚本文件应命名为 apache.dll。
- 我们的代理将开始收集数据,并在五分钟内,用户将能够在我们的网络客户端中看到统计数据。成功添加插件后,下一个可能的步骤是什么?
示例插件文件
using System;
using System.Collections.Generic;
using System.Text;
using Site24x7Plugin.Monitor;
namespace Plugin
{
public class test : IPlugins
{
public string DisplayName
{
get{ return "File system performance"; }
}
public string Version
{
get { return "1"; }
}
public string Heartbeat
{
get { return "True"; }
}
public object Units()
{
IDictionary<String, object> sample = new Dictionary<String, object>();
sample.Add("File Control Bytes Per Second", "Bytes/sec");
sample.Add("File Control Operations Per Second", "operations/sec");
sample.Add("File Data Operations Per Second", "Bytes/sec");
sample.Add("File Read Bytes Per Second", "Bytes/sec");
return sample;
}
public object DataCollect()
{
Random r = new Random();
IDictionary<String, object> sample = new Dictionary<String, object>();
sample.Add("File Control Bytes Per Second", 10);
sample.Add("File Control Operations Per Second", 4);
sample.Add("File Data Operations Per Second", 1.2);
sample.Add("File Read Bytes Per Second", 87);
return sample;
}
}
}
JSON输出:
{
"data":{"File Control Operations Per Second":4,"File Data Operations Per Second":1.2,"File Read Bytes Per Second":87,"File Control Bytes Per Second":10},
"units":{"File Control Operations Per Second":"operations/sec","File Data Operations Per Second":"Bytes/sec","File Read Bytes Per Second":"Bytes/sec","File Control Bytes Per Second":"Bytes/sec"},
"type":"Plugin.dll",
"version":"1",
"availability":"1"
}
Site24x7 Web 客户端中表示的数据: