5.1 服务资源监控

5.1.1 服务资源总览#

    在 ViperService 微服务中安装获取服务 CPU内存硬盘占用的插件

Anno.Plugs.MonitorService
监控插件式可选的,也可以不用内置的资源获取方法自己重新实现

   监控插件Anno.Plugs.MonitorService的实现也是非常简单的,开发者也可以自定义自己的资源获取插件。 但是插件的名称必须为 Anno.Plugs.MonitorService ,模块名称为 ResourceModule,方法名称为GetServerStatus。 下面讲解下如何自定义插件

5.1.2 Anno.Plugs.MonitorService 插件解析#

   新建一个类库名称为 Anno.Plugs.XXXService,此处的XXX代表Monitor。 我们推荐插件插件的命名规范为Anno.Plugs.XXXService,这样Viper在启动的时候可以自动发现插件 ,不需要额外的做手工配置。否则需要手动修改配置文件,例如插件名称为Viper.LogService,则修改修改配置文件的 FuncName节点。

配置文件:Viper\ViperService\Anno.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--0,0 第一位是 工作站,第二位数据中心
(所有的 AnnoService 的 两位数不能重复例如不能存在【1,2】【1,2】)
可以存在【1,2】【2,1】
-->
<IdWorker>0,0</IdWorker>
<!--App名称-->
<AppName>ViperService-01</AppName>
<!--监听端口-->
<Port>7011</Port>
<!--权重-->
<Weight>1</Weight>
<!--功能 非Anno.Plugs 加入方式,多个用逗号`,`隔开-->
<FuncName>Viper.LogService,xxx.LogService</FuncName>
<!--忽略的功能 Trace,Logic-->
<IgnoreFuncName></IgnoreFuncName>
<!--超时时间毫秒-->
<TimeOut>20000</TimeOut>
<!--注册到的目标-->
<Ts Ip="127.0.0.1" Port="7010"/>
<IocDll>
........省略...........
</IocDll>
<appSettings>
........省略...........
</appSettings>
</configuration>
插件命名规范 特别注意

1、插件名称程序集名称和里面的模块命名空间名称必须一致,统一为Anno.Plugs.XXXService,不同插件可以不一样。

2、不管插件名称是否是以Anno.Plugs.开始结尾都必须是Service。例如:XXX.XXXService

3、模块名称必须是以Module结尾,且集成BaseModule

4、方法名称不做特殊限制,但是范围类型推荐为 ActionResult

5.1.3 Anno.Plugs.MonitorService 插件代码#

Bootstrap.cs 这个是插件的初始化加载器
using Anno.EngineData;
using System;
namespace Anno.Plugs.MonitorService
{
public class Bootstrap : IPlugsConfigurationBootstrap
{
//插件加载前
public void ConfigurationBootstrap()
{
}
//插件加载后
public void PreConfigurationBootstrap()
{
}
}
}
ResourceModule.cs 监控模块
/******************************************************
Writer:Du YanMing
Mail:dym880@163.com
Create Date:2020/10/12 9:19:12
Functional description: Resource
******************************************************/
using Anno.Const.Attribute;
using Anno.EngineData;
using System;
using System.Collections.Generic;
using System.Text;
namespace Anno.Plugs.MonitorService
{
public class ResourceModule : BaseModule
{
//获取服务资源方法
private static readonly EngineData.SysInfo.UseSysInfoWatch Usi = new EngineData.SysInfo.UseSysInfoWatch();
/// <summary>
/// 服务资源信息
/// </summary>
/// <returns></returns>
[AnnoInfo(Desc = "服务资源信息CPU、Memory")]
public ActionResult GetServerStatus()
{
return new ActionResult(true, Usi.GetServerStatus());
}
}
}