.net编写一个服务监控及管理的软件

本文介绍如何利用.NET框架,结合WMIC、System.Management等工具,开发一款用于监控和管理远程服务的软件。该软件能实现进程状态检查、资源使用情况获取、端口监听确认、计数器监控、日志读取、功能测试、dump抓取、网络抓包以及服务和应用程序池的管理等功能,从而简化对多台服务器的日常维护工作。
摘要由CSDN通过智能技术生成

如果一个服务被部署到了几十台机器上,我们往往需要每天花费很多的时间去查看每台机器上的服务的运行状 况,虽然微软有MOM(Microsoft Operations Manager)和SMS(Systems Management Server),但处于成本上及其它方面的考虑,好多时候我们还用不上这些东西,其实微软公开了好多管理和监控方面的API和工具,比如WMIC, System.Managerment等,把这些零散的API和工具集中起来,便可以开发一些满足自定义需求的小软件。

我们要实现以下任务
1、确认指定的进程已启动
2、获取指定机器,指定进程的CPU、内存、线程使用情况
3、确认指定机器的指定端口在监听
4、获取指定机器指定计数器的情况
5、获取指定机器上的系统日志/应用日志
6、获取指定服务相关trace
7、确认指定服务的功能拨测能通过
8、抓取指定机器指定进程的dump
9、在指定机器上进行网络抓包
10、重启指定机器上的某服务,某应用程序进程池等

下面来一一考虑一下
1、确认指定的进程已启动
可以用WMI接口来获取远程机器的进程列表,然后遍历这个列表,确认指定服务的进程名字是否在这个列表里,核心代码(来自网络)如下:

public static DataTable RunningProcesses()
{

    // The second way of constructing a query
    string queryString =
        "Select Name, ProcessId, Caption, ExecutablePath" +
        "  FROM Win32_Process";

    SelectQuery query = new SelectQuery(queryString);
    ConnectionOptions options = new ConnectionOptions();
    options.Username = @"administrator";
    options.Password = "";
 

    ManagementScope scope = new System.Management.ManagementScope(@"//./root/CIMV2");
    scope.Connect();

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    ManagementObjectCollection processes = searcher.Get();

    DataTable result = new DataTable();
    result.Columns.Add("Name", Type.GetType("System.String"));
    result.Columns.Add("ProcessId", Type.GetType("System.Int32"));
    result.Columns.Add("Caption", Type.GetType("System.String"));
    result.Columns.Add("Path", Type.GetType("System.String"));

    foreach (ManagementObject mo in processes)
     {
        DataRow row = result.NewRow();
        row["Name"] = mo["Name"].ToString();
        row["ProcessId"] = Convert.ToInt32(mo["ProcessId"]);
        if (mo["Caption"] != null)
            row["Caption"] = mo["Caption"].ToString();
        if (mo["ExecutablePath"] != null)
            row["Path"] = mo["ExecutablePath"].ToString();
        result.Rows.Add(row);
    }
    return result;
}

2、获取指定机器,指定进程的CPU、内存、线程使用情况
这几样数据,我们用计数器来获取,具体表格如下
某进程的CPU使用量:process类别下的% Processor Time,实例名是你服务的进程名字(不加后缀名)
某进程的内存使用量:process类别下的Private Bytes,实例名是你服务的进程名字(不加后缀名)
某进程的内存使用量:process类别下的Thread Count,实例名是你服务的进程名字(不加后缀名)
其它的计数器的说明请打开perfmon工具一个一个看每个计数器的说明文字
关于获取某机器某计数器数值的代码大约如下

public class PerfCounter
{
    public PerfCounter(string categoryName,
                       string counterName,
                       string instanceName,
                       string machineName
        )
     {
        this.categoryName = categoryName;
        this.counterName = counterName;
        this.instanceName = instanceName;
        this.machineName = machineName;
    }

    public string categoryName;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值