gpt4 book ai didi

c# - 如何从 c# 应用程序获取远程 linux 机器的 cpu 和 ram 使用情况

转载 作者:可可西里 更新时间:2023-11-01 11:31:21 24 4
gpt4 key购买 nike

我有一个 c# 应用程序,它通过 WMI 从远程 Windows 机器收集数据(cpu、ram、硬盘使用情况等)。但现在我还需要监控几个 linux 机器。有没有办法从运行在 Windows 机器上的 c# 应用程序中至少获得 Linux 机器的 CPU 和 RAM 利用率?

最佳答案

我设法从 linux box 获取指标统计信息。正如 VirtualBlackFox 提到的那样 - 标准化的方法是为此目的使用 snmp。

第一步是在 linux 上安装 snmp。(我在 VM 上安装了 Ubuntu 12)

这是我用来安装 snmp 的链接 onetwo .基本上,您需要安装 snmp 守护进程并配置公开指标和网络可见性。

我认为在这一步你可以随意使用一些 snmp 库从 snmp 设备获取数据,但我也尝试使用 WMI-SNMP 桥。

第二步:设置 WMI SNMP 环境

这是 list您需要执行的步骤。

对我来说已经足够了

  1. 在 Windows 功能中启用 snmp 功能
  2. %windir%\system32\wbem\中创建snmp文件夹
  3. 使用此命令 Smi2smir/g ..\..\hostmib.mib > hostmib.mof 从 MIB 文件生成 MOF 文件
  4. 将 SNMP MOF 文件添加到 WMI 存储库 mofcomp hostmib.mof

在此之后我能够看到 wmi 类和属性

enter image description here

代码示例

使用 sharpsnmplib

using Lextm.SharpSnmpLib;
using Lextm.SharpSnmpLib.Messaging;

var result = Messenger.Get(
VersionCode.V1,
new IPEndPoint(IPAddress.Parse("172.10.206.108"), 161),
new OctetString("public"),
new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.4.1.2021.4.6.0")) },
60000);

这将返回盒子上使用的总内存。 (顺便说一句,snmp 的标准端口是 161)

使用 snmp-wmi 网桥

 string snmpClass = "SNMP_RFC1213_MIB_system";
string path = string.Format("\\\\.\\root\\snmp\\localhost:{0}=@", snmpClass);

var contextParams = new ManagementNamedValueCollection
{
{"AgentAddress", "172.10.206.108"}, // ip address of snmp device
{"AgentReadCommunity", "public"}
};

var options = new ObjectGetOptions(contextParams);
var objSys = new ManagementObject(new ManagementPath(path), options);

Console.WriteLine(objSys.Properties["sysDescr"].Value);
Console.ReadLine();

所以获取snmp数据至少有两种方式:

  1. 使用 OID(对象标识符唯一标识 MIB 层次结构中的托管对象),如我在第一个示例中所示。和 here是有用的链接。您还可以在 .mof 文件中找到 OID。
  2. 使用 wmi-snmp 桥。所以我使用了第二个示例中的路径,如果它不适合你,我想你可以在 WMI Explorer 中找到正确的路径。

所以这就够了。不知道哪种方法更好或更快。将尝试两者,看看哪个更适合我的目的。

关于c# - 如何从 c# 应用程序获取远程 linux 机器的 cpu 和 ram 使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com