[英]How can I get CPU usage and/or RAM usage of a *THREAD* in C# (managed code)?
[英]How can I get cpu and ram usage of remote linux machine from c# application
我有一个ac#app,它通过WMI从远程Windows机器收集数据(cpu,ram,hdd用法等)。 但是现在我还需要监控几个linux盒子。 有没有办法从Windows机器上运行的c#app获得Linux机器的CPU和RAM利用率?
我设法从linux框中获取指标统计数据。 正如VirtualBlackFox
提到的那样 - 标准化的方法是将snmp用于此目的。
第一步是在linux上安装snmp。 (我在VM上安装了Ubuntu 12)
以下是我用于安装snmp one和two的链接。 基本上,您需要安装snmp守护程序并进行配置以公开指标和网络可见性。
我想在这一步你可以自由地使用一些snmp库从snmp设备获取数据,但我也尝试使用WMI-SNMP
桥。
第二步:设置WMI SNMP环境
这是您需要执行的步骤列表 。
对我来说足够了
%windir%\\system32\\wbem\\
创建snmp
文件夹 Smi2smir /g ..\\..\\hostmib.mib > hostmib.mof
从MIB文件生成MOF文件 mofcomp hostmib.mof
在此之后,我能够看到wmi类和属性
代码示例
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);
这个将返回盒子上使用的总ram。 (顺便说一下,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数据的方法:
所以这非常适合它。 不知道哪种方法更好或更快。 将尝试两者并看到,这更适合我的目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.