介绍

如果有人不想在 Windows 机器上安装 Icinga 代理并想采用无代理方式,则使用 WMI 层可以提供解决方案。Windows Management Instrumentation (aka WMI) 是基于 Web 的企业管理 (WBEM) 的 Microsoft 实现。无需代理即可监控 Windows 机器的其他解决方案包括 Powershell、SSH(适用于 2019 及更高版本)和 SNMP。在这里,我们将重点介绍 WMI,并让其他人描述他们针对各自工具的解决方案。

要求

为了能够从 Windows 获取所需的信息到 Icinga,需要一个名为check_wmi_plus的插件。插件是用 Perl 编写的,并且依赖于其他几个 Perl 模块。还需要一个名为wmic的底层工具,它是 Linux 的 WMI 客户端,通常需要从源代码编译。最后但并非最不重要的一点是,需要在 Windows 机器上启用 WMI(通常默认情况下启用)并创建一个可以访问 WMI 的单独用户,但请记住限制该用户的其他权限。

安装

Linux

WMIC

这可以通过从源代码编译或使用预打包的二进制文件来安装。编译可能会出现问题,因为代码已经有一段时间没有得到维护了,而且可能再也不会了。

资源

转到http://edcint.co.nz/checkwmiplus/download/zenoss-wmi-source-v1-3-14/ 385并下载源代码并将其存储在/usr/local/src/. 解压它,然后进入 Samba/source :cd Samba/source并运行以下命令:

./autogen.sh
./configure
make
make install #might not be needed

如果您看到如下错误:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at ./pidl/pidl line 583.

只需在提到的行中注释掉该定义并make再次运行。

您也可以放心地忽略以下内容:

make: *** No rule to make target `wmi/wmiq.o', needed by `bin/wmiq'.  Stop.

如果您遇到另一个错误,请尝试更改编译器指令,例如:

make "CPP=gcc -E -ffreestanding"

如果编译完成且没有错误,则该进行测试了。
从一个简单的命令开始:wmic -U [domain/]adminuser%password //host_or_IP "select TotalPhysicalMemory from Win32_ComputerSystem"
响应应该如下所示:

CLASS: Win32_ComputerSystem
Name|TotalPhysicalMemory
hostname|412180664

要获得更多可能的值,请运行:
wmic -U [domain/]adminuser%password //host_or_IP "select * from Win32_ComputerSystem"

您可能可以在一台机器上编译它并将二进制文件传输到另一台机器,但我还没有测试过。

套餐

作为记录,二进制文件不是你最好的选择,但如果你找到与你的发行版本足够接近的东西,也许值得一试。下面推荐了几个来源,但欢迎您在网上搜索更多信息并在评论部分提出建议。

  • RPM

    • https://centos.pkgs.org/7/atomic-x86_64/wmi-1.3.14-4.el7.art.x86_64.rpm.html 107

或搜索rpm.pbone.net

  • 开发银行

    • Debian: http: //www.inverse.ca/downloads/PacketFence/debian/pool/stretch/w/wmi/ 114
    • Ubuntu: http: //www.inverse.ca/downloads/PacketFence/ubuntu/pool/jessie/w/wmi/ 107

Icinga/Nagios 插件

由于 check_wmi_plus 是用 Perl 编写的插件,因此需要同时安装某些模块。这可以通过系统的包管理器(apt 用于 Debian/Ubuntu,yum/dnf 用于 Fedora/RedHat/Centos,pacman 用于 Arch 等)或通过 CPAN 来完成。请注意,该插件在模块的版本中是(某种)敏感的,因此如果您的 Linux 发行版的存储库包含比所需版本新得多的版本,则建议从 CPAN 安装。

这是它目前在我们运行的 CentOS 7 服务器上的外观,所有 Perl 模块都来自官方 CentOS 存储库。

模块名称 安装版本 所需版本
配置::IniFiles 2.79 2.58
Getopt::长 2.4 2.38
约会时间 1.04 0.66
编号::格式 1.73 1.73
数据::自卸车 2.145 2.125
标量::实用程序 1.27 1.22
可储存 2.45 2.22
Perl 版本 5.016003 5.01

从 CPAN 安装很简单,例如:cpan install Number::Format. 但如果您需要特定版本,则需要提供完整的模块分发文件名,包括作者,例如:cpan SHLOMIF/Config-IniFiles-2.58.tar.gz

下一步是下载插件本身。转到发布 12并下载最新版本。将它解压到某个地方,理想情况下,您的 Icinga 变量CustomPuginDir指向的位置但在它自己的目录下。然后您需要在主 Perl 脚本 check_wmi_plus.pl 中进行一些更改。

  • 设置 utils.pm 的正确位置。默认情况下,它指向/usr/lib/nagios/plugins但更有可能在/usr/lib64/nagios/plugins.
  • $base_dir变量设置为 check_wmi_plus.pl 的安装目录。
  • $wmic_command在变量中设置 wmic 二进制文件的位置。
  • (可选)将变量设置$wmi_ini_dir为所有ini文件的位置
  • (可选)设置变量$tmp_dir以更改临时文件的默认位置。默认为/tmp/

在插件主页中内容 19

视窗

为了让我们的监控解决方案能够登录到 Windows 机器并获取我们需要的所有指标,需要一个帐户。在您的域控制器中添加用户的过程如下。

  1. 打开 WMI 控制台:单击开始,单击运行,键入 wmimgmt.msc,然后单击确定。
  2. 在控制台树中,右键单击 WMI Control ,然后单击 Properties 。
  3. 单击安全选项卡。
  4. 选择您要授予用户或组访问权限的命名空间,然后单击安全性。
  5. 在“安全”对话框中,单击“添加”。
  6. 在“选择用户、计算机或组”对话框中,输入要添加的对象(用户或组)的名称。单击检查名称以验证您的输入,然后单击确定。您可能需要更改位置或单击“高级”按钮来查询对象。有关详细信息,请参阅对话框帮助。
  7. 在 Security 对话框中的 Permissions 下,选择允许或拒绝新用户或组的权限:Execute Methods (enable)、Full Write (disable)、Partial Write (disable)、Provider Write (disable)、Enable Account (enable) )、远程启用(启用)、读取安全性(启用)、编辑安全性(禁用)

注意:要执行这些任务,您需要作为本地管理员组的成员登录(如果它是本地计算机)。要访问远程计算机,请右键单击 WMI 控制 ,单击连接到另一台计算机 ,单击另一台计算机 ,然后键入要连接的计算机的名称。如果您从计算机管理控制台使用 WMI 控制,请右键单击计算机管理以连接到另一台计算机。

还建议在防火墙中启用 WinRM 并启用远程桌面:

netsh advfirewall firewall set rule group="remote desktop" new enable=Yes
winrm quickconfig

第二个命令在 Windows 节点上设置一个侦听器。回答“是”以应用这些更改。

预期结果:

WinRM has been updated for remote management.
WinRM service type changed to delayed auto start.
WinRM service started.
Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine.

[WMI for Windows Server]( https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc771551(v =ws.11) 21)

配置

指南的以下部分适用于使用 DSL(即纯文本配置文件)配置 Icinga 的人员。在 Icinga Director模块中执行此操作的方法留给社区的另一位成员贡献

认证文件

Icinga 需要知道它可以通过哪个用户连接到 Windows 机器。出于这个原因,我们为 WMI 创建了一个特殊的文件,命名为wmi.auth或您想要的,理想情况下/etc/icinga2/,例如:/etc/icinga2/wmi.auth,具有以下内容:

username=myusername
password=mypassword
domain=mydomain

采取预防措施,将此文件归 root 所有,并使其只能由 root 读取chown root wmi.auth && chmod 0400 wmi.auth

命令.conf

接下来我们需要将 WMI 命令添加到 Icinga。如果您使用的是纯文本配置文件,则可以在您拥有自定义命令的文件中填充该文件,或将其添加到commands.conf或完全添加到单独的文件中。

object CheckCommand "check_wmi" {import "plugin-check-command"command = [ PluginDir + "/check_wmi_plus.pl" ]arguments = {"-H" = {value = "$host.address$"description = "name or IP address of host to monitor"}"-A" = {value = "$wmi_authfile_path$"description = "Authentication file path"}"-m" = {value = "$check_mode$"description = "WMI mode to use for specific check"}"-s" = {value = "$wmi_submode$"description = "WMI submode to be used, optional"}"-a" = {value = "$wmi_arg1$"description = "First argument to WMI"}"-o" = {value = "$wmi_arg2$"description = "Second argument to WMI"}"-3" = {value = "$wmi_arg3$"description = "Third argument to WMI"}"-4" = {value = "$wmi_arg4$"description = "Fourth argument to WMI"}"-y" = {value = "$wmi_delay$"description = "The delay between 2 consecutive WMI queries in a single call"}"-w" = {value = "$wmi_warn$"description = "Warning Thresholds"}"-c" = {value = "$wmi_crit$"description = "Critical Thresholds"}"--nodatamode" = {set_if = "$wmi_nodatamode$"}"--inidir" = {value = "$wmi_inidir$"description = "The full path of an ini directory to use"}}vars.wmi_authfile_path = "/etc/icinga2/wmi.auth"vars.wmi_inidir = "/opt/icinga/plugins/check_wmi_plus.d"vars.wmi_nodatamode = false
}

模板.conf

我们还需要为这些类型的服务提供一个新模板,以便我们可以微调某些方面而不会与其他类型混淆。例子:

template Service "wmi-service" {import "generic-service"check_command = "check_wmi"check_interval = 1mretry_interval = 1m
}

WMI-services.conf

在单独的文件中,甚至在预先存在的文件中,我们现在可以为我们的新服务集添加应用规则。例子:

apply Service "Free Disk Space" {import "generic-service"vars.check_mode = "checkvolsize"vars.wmi_arg1 = "."vars.wmi_arg2 = "1"vars.wmi_arg3 = "1"vars.wmi_warn = "88"vars.wmi_crit = "92"}check_command = "check_wmi"assign where host.vars.os == "Windows"ignore where host.vars.disable_wmi
}apply Service "CPU Utilization" {import "generic-service"vars.check_mode = "checkeachcpu"vars.wmi_warn = "95"vars.wmi_crit = "99"vars.wmi_timeout = "160"check_command = "check_wmi"assign where host.vars.os == "Windows"  && host.vars.cpu_utilzignore where host.vars.disable_wmi
}apply Service "IIS: Connections" {import "generic-service"vars.check_mode = "checkiis"vars.wmi_submode = "connections"vars.wmi_arg1 = "_Total"vars.wmi_timeout = "190"check_command = "check_wmi"assign where host.vars.iis_serverignore where host.vars.disable_wmi
}apply Service "MSSQL: General Statistics" {import "generic-service"vars.check_mode = "checksql"vars.wmi_submode = "general"if (host.vars.mssql_edition == "Express") {vars.wmi_arg1 = "MSSQLSQLEXPRESS_MSSQLSQLEXPRESS"}check_command = "check_wmi"assign where host.vars.mssql_serverignore where host.vars.disable_wmi
}apply Service "Event Log: Application" {import "generic-service"vars.check_mode = "checkeventlog"vars.wmi_arg1 = "application"vars.wmi_arg2 = "2"vars.wmi_arg3 = "1"vars.wmi_warn = "50"vars.wmi_crit = "100"check_command = "check_wmi"assign where host.vars.os == "Windows"  && host.vars.event_log_applicationignore where host.vars.disable_wmi
}# Check for a specific process
/*
apply Service "Jenkins Process" {import "generic-service"vars.check_mode = "checkproc"vars.wmi_submode = "count"vars.wmi_arg1 = "jenkins"vars.wmi_crit = "1:1"check_command = "check_wmi"assign where host.name == "jenkins"
}

有关更多示例,您可以搜索,但我建议使用以下链接指南 31

结论

面对 PowerShell 和 SSH 支持,可能不是未来的最佳解决方案,但实际上对于监控遗留系统(即 WinSrv2019 之前的安装)很有用

常问问题

  • 问:我可以通过 WMI 监控哪些类型的服务?

    A:有一些类型,但您需要查看插件本身的文档。一个小列表包括:正常运行时间、磁盘、CPU、AD、RDP 会话、IIS、MSSQL、EventLog 和进程

  • 问:我可以编写自己的脚本吗?

    答:我认为是的,欢迎您尝试。但可能不值得你花时间。通过远程或 SSH 的 PowerShell 脚本更加通用且面向未来。看这里 58

  • 问:你能帮我处理我的配置文件吗?

    答:尝试在社区论坛中提问,我或其他人会在我们有时间时回复。

Icinga 通过 WMI 远程监控Windows相关推荐

  1. 【逗老师带你学IT】PRTG通过WMI远程监控windows10运行状态

    网上很多关于Windows开启WMI的文章,但是到了Windows10之后,网上说的办法行不通了,本文介绍在最新的Windows 10 21H1版本开启WMI进行远程监控的办法 目录 一.Window ...

  2. python 模块 wmi 远程连接 windows 获取配置信息

    测试工具应用: https://ask.csdn.net/questions/247013 wmi连接不上报错问题集 https://blog.csdn.net/xcntime/article/det ...

  3. loadrunner 配置远程监控windows服务器系统资源

    今天决定监控远程windows xp上的系统资源,本来以为应该很好连接,在同一个局域网内,结果出了一堆问题,可能是第一次就让我遇到了一个棘手的操作系统,郁闷! (1)保证装有loadrunner的测试 ...

  4. Jconsole远程监控tomcat 的JVM内存(linux、windows)

    Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界 ...

  5. Windows负载机JVM 远程监控Linux服务器下tomcat

    基本是跟着网上的操作进行的,除了遇到一个Local host name unknown的问题: 一.Linux服务器操作部分 服务器地址:10.64.111.68 首先配置JMX: 1.找到jdk目录 ...

  6. Windows 远程控制(经典IPC$入侵、psexec类工具、利用WMI远程入侵、PsRemoting远程命令执行、使用wmic命令远程执行)

    一.经典IPC$入侵 利用ipc$和默认共享入侵远程电脑的过程 1. C:\>net use \\127.0.0.1\IPC$ "密码" /user:"用户名&qu ...

  7. python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...

    由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...

  8. python控制系统进程_python 监控windows进程

    python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动 用python监控您的window服务 原创作品,允许转载,转载时请务 ...

  9. 远程监控 – 数据采集管道

    数据采集​​管道是远程监控解决方案的核心所在,后者是 Windows Azure 中云服务基础项目的一部分.该管道是 Wiki系列中第三篇文章的主题.它在解决方案中的角色是从各个存储库中提取不同的信息 ...

最新文章

  1. json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 问题解决
  2. onbeforeunload与onunload事件
  3. 推荐系统实践-第一章
  4. 哪个更值得入手?荣耀8与小米6对比评测
  5. java 日期 解析_Java日期解析(Java DATE Parsing)
  6. 关于范围for语句的使用
  7. 长安渝北工厂机器人_长安工厂探秘!解密CS75 PLUS究竟是怎样造出来的
  8. 电商管理系统源码_Dubbo/SSM/Elasticsearch/Redis/MySQL搭建分布式电商购物商城
  9. 指针用完了怎么办_墙体里水管漏水怎么办?瞧瞧这个,轻松搞定,滴水不漏
  10. linux 配置 tmux
  11. EF 保证线程内唯一 上下文的创建
  12. 如何用最简单的方法将PCweb改成适合各种设备的web
  13. 【应急响应】Linux应急响应入侵排查思路
  14. ALDS1_7_C:Tree Walk
  15. [连载2]互联网究竟是什么怪物…他们不愿公开真正秘密...
  16. FAT32学习笔记(五)——fat相关工具
  17. docker镜像的获取删除和查看镜像信息历史记录清理残余镜像
  18. Skynet服务器框架系列教程,skynet 服务端框架安装/运行
  19. Airtest双11领喵币代码
  20. 看不到同一个网络下的其他计算机,看不到局域网其他计算机怎么办

热门文章

  1. 关于码云的一些基本知识_关于手机的一些基本知识
  2. html让文本框左剧中对齐_HTML的部分知识
  3. 如何将旧iPhone数据一键迁移到iPhone 14【图文教程】
  4. ppt模板如何制作微立体效果?
  5. luogu P3750 [六省联考 2017]分手是祝愿
  6. 大学毕业标语计算机学院,大学毕业标语
  7. CDH集群使用spark作为hive查询引擎(实时查询)
  8. 4月18日 疯狂猜成语-----第四次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜...
  9. 移动运营商离网挽留的策略制定(四)
  10. 封装函数insertBefore