【问题标题】:Remote Machine process memory usage .net core远程机器进程内存使用.net核心
【发布时间】:2020-03-12 11:04:46
【问题描述】:

我想在 .net core 2.2 中监控远程机器进程的内存使用情况。 我的应用程序将在 Intranet 中运行并检查远程计算机 CPU 使用情况、进程的内存使用情况。开发自己的应用程序性能监控应用程序。

尝试使用 System.Diagnostics 的 'Process' 类,但得到 System.InvalidOperationException: 'Couldn't connect to remote machine.' 错误消息。使用机器名称,但得到相同的错误。

Process[] remoteByName = Process.GetProcessesByName("notepad", "\\192.168.3.114");

Process[] remoteByName = Process.GetProcessesByName("notepad", "192.168.3.114");
  1. 找不到任何接受用户名和密码来访问远程机器的方法。这种方法可用吗?
  2. 需要关闭远程机器防火墙吗?
  3. 还有其他方法可以在 .net core 中访问远程机器的进程吗?

【问题讨论】:

  • 请检查Remote Registry服务是否在远程机器上运行。另外,使用xxx.xxx.xxx.xxx,不以`\`开头。
  • 是的,我已经尝试过,但得到 UnauthorizedAccessException: Access to the registry key '230 232' is denied 错误。
  • @ParthAkbari,你能用远程电脑的用户名和密码吗,如果是的话,几个月前我有一种方法。

标签: c# .net-core asp.net-core-2.0 remote-access


【解决方案1】:

据我所知,Process 类使用 WMI 在远程机器上执行操作。如果Process 类接口不足以满足您的任务,您可以直接使用WMI queries

授权

默认情况下,Process 类使用当前的 Windows 凭据在远程计算机上授权您。如果您的远程计算机具有不同的登录凭据,您可以切换上下文 以正确授权。这是一个有点棘手的解决方案,但它有效。检查this article 看看如何做到这一点。

无论如何,您可以使用我之前提到的 WMI 查询来执行授权并获取所需的数据。这是更复杂但更灵活的解决方案。

防火墙

当然,防火墙可以阻止远程连接。 WMI 默认使用 135 端口来访问远程机器,所以你需要在目标机器上打开它。

我建议您检查official documentation 与远程计算机的 WMI 连接以正确设置所有配置。

其他方法

您可以使用客户端-服务器架构来执行此类监控任务。只需创建一个用于聚合来自客户端的信息的服务器应用程序。接下来创建一个客户端应用程序,用于收集监控数据并将其发送到服务器。然后只需将许多客户端应用程序部署到您的目标机器并配置它以将所有必需的信息发送到服务器。相应地部署一个服务器应用程序。

此架构允许您为客户端和服务器之间的消息传递创建自己的安全协议。您可以选择您的应用程序将要通信的端口。您还可以创建新/删除旧客户端,而不会影响其他已部署的应用程序(客户端和服务器)。许多现有的流行监控系统(例如Zabbix)使用这种架构来执行系统监控。

这消除了配置与目标机器的远程连接的需要。客户端应用程序可以使用普通的Process 类从操作系统收集所有需要的数据,然后使用HttpClient 将其发送到服务器。此外,这种架构更适合监控,因为有些任务无法通过远程连接执行。

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多