刚开始查看c#编程我正在尝试编写一个程序,最终将从远程主机获取一些服务器指标%CPU利用率,%内存利用率等,然后使用HTTP上的API调用将它们发布到InfluxDB。所以目标是:
收集CPU%Util zh
1.整理服务器的信息,即Unixtimestamp | hostip | hostname | value
2.每隔一秒收集一次该指标
3.通过URL
我已经开始了它,并且只能获得localhost的主机名。
这是我在c#中的第一个项目,任何帮助都会很棒。到目前为止见下面的代码。我正在使用Visual Studio 2017社区fyi。
using System;
using System.Net;
using System.Diagnostics;
namespace PostMetricsApp
{
class IpProto
{
public static void GetMyIpAddress();
{
string hostName = Dns.GetHostName(); // Retrive the Name of HOST
Console.WriteLine(hostName);
// Get IPAddress
string hostipadd = Dns.GetHostEntry(hostName).AddressList[0].ToString();
Console.WriteLine("My IP Address is :" + hostipadd);
Console.ReadKey();
}
}
class MemMetric
{
static void Main(string[] args)
{
PerformanceCounter ramCounter = new PerformanceCounter();
ramCounter.CategoryName = "Memory";
ramCounter.CounterName = "Available MBytes";
while (true)
{
var hostip = IpProto.host;
string hostname = Environment.MachineName;
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
int totalhits = 0;
float ramPercent = ramCounter.NextValue();
if (ramPercent >= 5)
{
var unused = ramCounter.NextValue(); // first call will always return 0
System.Threading.Thread.Sleep(1000); // wait a second, then try again
//Console.WriteLine("Cpu usage: " + cpuCounter.NextValue() + "%");
Console.WriteLine(unixTimestamp + " "+ hostip + " " + hostname + " " + ramCounter.NextValue() + "MB");
totalhits += 1;
}
else
{
totalhits = 0;
}
}
}
}
}
答案 0 :(得分:0)
目前还不是很清楚你想要在这里实现什么,我想你想确定运行你的应用程序的本地主机的Internet IP。
由于几个原因,我将不在这里讨论,确定主机与互联网通信的IP可能很棘手。这样做的一些方法是:
连接到外部服务器,该服务器会告诉您启动的IP地址(您的互联网/外部IP地址)。有效示例似乎是this和this。
这可能是最简单/最可靠的方法之一,只要远程主机启动并为您提供IP即可。它几乎保证是正确的。显然,这意味着您的应用程序依赖于此外部服务。 注意:这些主机可能不喜欢经常查询,因此最好缓存IP并且只在30分钟左右刷新一次。
有alternatives作为使用Windows tracert.exe
控制台应用程序的跟踪数据包。这仍然需要外部主机作为跟踪的目标,但许多主机可以充当这样的目标。缺点是,与上述方法相比,这种方法相当复杂,容易出问题。