HostMonitor监控Windows和Linux的内存空闲率-阿里云开发者社区

开发者社区> 小步2013> 正文

HostMonitor监控Windows和Linux的内存空闲率

简介: HostMonitor 官方网站:http://www.ks-soft.net/    HostMonitor 是一款非常出色的服务端监控程序。可以监控任何 TCP service、 ping主机、检查内存使用情况、检查可用磁盘空间, 具有良好的可扩展性,Linux下可以自己编写Shell脚本检查监控数据,Windows下则可以通过VBScript脚本来检查监控数据。
+关注继续查看

HostMonitor 官方网站:http://www.ks-soft.net/  

 HostMonitor 是一款非常出色的服务端监控程序。可以监控任何 TCP service、 ping主机、检查内存使用情况、检查可用磁盘空间, 具有良好的可扩展性,Linux下可以自己编写Shell脚本检查监控数据,Windows下则可以通过VBScript脚本来检查监控数据。下面实例讲解HostMonitor的配置和以及分别监控Linux和Windows下内存的空闲比率。

  本例中使用到的机器IP以及软件情况如下:

1. 192.168.1.101   安装有Windows2003的监控服务器(装有HostMonitor程序)

2. 192.168.1.201   Linux服务器(安装有RMA-agent for Linux)

3. 192.168.1.202   Windows服务器(安装有RMA-agent for Windows)

    Hostmonitor的安装没什么好说的,到Hostmonitor的官方网站下载安装程序然后在Windows上根据提示一步一步操作就可以了

1 RMA程序的配置

    RMA程序安装在远程计算机上,Hostmonitor进行监控时需要和RMA程序交互。

1.1 RMA for Linux 的安装配置

    到Hostmonitor的官方网站下载RMA-agent程序for Linux,建议下载1.25版本,高版本可能会提示某个lib.so文件找不到。上传到Linux服务器的/opt目录下,接下来的操作用管理员身份执行。解压缩,确保RMA程序有执行权限,使用Vi编辑器打开rma.cfg文件,修改【Basic】项目处的RmaPath,RMAPath指向rma执行程序所在的路径,如果该路径不正确将导致RMA程序不能启动。

    e.g:   RmaPath=/opt/rma

    然后修改Password=abcd1234,为RMA-agent程序指定访问密码,后面马上就要用到这个密码。

    修改【EnabledTests】项目下的 项目,检查ShellScript=1是否存在,不存在则手动添加,接下来的监控需要通过RMA-agent执行脚本检查服务器的内存使用情况

    检查【IncomeFilter】项目下的FilterActive,看访问列表是否激活,即FilterActive的值如果为1,请将它设置为0

    最后执行rma程序,如果有报错则需要检查rma.cfg文件的参数是否正确

1.2 RMA For Windows的配置

    在192.168.1.101 上安装HostMonitor时,只要勾选了RMA模块,就会在192.168.1.101 机器上安装RMA For Windows程序。 由于需要监控的机器为192.168.1.202,所以我们将HostMonito程序拷贝到192.168.1.202上,然后运行安装程序,在安装界面中只要勾选RMA模块就行了。

    

图1-1  安装时选择自定义安装

图1-2  安装时选择RMA模块

    接下来需要对RMA-程序做一下配置才能保证我们的程序能够访问。打开C:\Program Files\HostMonitor8\RMA-Win目录,执行rma_cfg.exe,配置Passive RMA

图 1-3  RMA配置界面

    设置password为abcd1234,更改IP访问限制为Accept connections from any Ip address,然后注意勾选Enable Follwing Tests的列表框中[Actice]Script复选框,点击apply按钮然后点击Install将RMA-agent安装成windows服务,最后检查一下如果服务没有自动启动的话还需要点击start按钮手工启动RMA-agent服务

2 脚本编写

2.1  Linux空闲内存比率计算

    在Linux下查看内存我们一般用free命令:

[root@jacky]# free

           total       used        free          shared    buffers     cached

Mem:       3266180    3250004      16176          0         110652    2668236

-/+ buffers/cache:    471116       2795064

Swap:       2048276    80160       1968116

    下面是对这些数值的解释:

    total:总计物理内存的大小。

    used:已使用多大。

    free:可用有多少。

    Shared:多个进程共享的内存总额。

    Buffers/cached:磁盘缓存的大小。

    第三行(-/+ buffers/cached):

    used:已使用多大。

    free:可用有多少。

    第四行就不多解释了。

    区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

    第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

    所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

    如上例:

    2795064=16176+110652+2668236

    因此我们要计算的空闲内存显示比率就是2795064/3266180

    该数据可以用脚本来计算

PfreeMem=`free -m | awk 'NR==3{print $4}'`;Ptotal=`free -m | awk 'NR==2{print $2}'`;PCOUNT=`echo "($PfreeMem*100/$Ptotal)"|bc`;;

free -m | awk 'NR==3{print $4}'命令得到数值2795064(1)

free -m | awk 'NR==2{print $2}’命令得到数值3266180(2)

两式相除然后乘以100得到空闲内存比率

    接下来则需要在HostMonitor中按照HostMonitor的规范来编写脚本,首先从菜单中打开脚本管理器Test->New->Shell Script Test->Script Manager,出现脚本管理器的界面,管理器中有一个SYSTEM:MemFree的脚本,拷贝该脚本然后重命名为SYSTEM:MemFree:CUSTOM

    将SYSTEM:MemFree:CUSTOM脚本中case语句中Linux)对应节的内容用上面的脚本替换。脚本编写工作就完成了,脚本的具体内容可以参考附件1。接下来需要配置HostMonitor让RMA-agent隔一段时间执行一遍SYSTEM:MemFree:CUSTOM脚本,获取192.168.1.201服务器的内存使用情况。

1)  执行菜单命令Test->New->Shell Script Test->SYSTEM:MemFree:CUSTOM,出现监控配置界面

图1-4  shell script 配置界面

    Agent选择192.168.1.201,如果没有agent则需要手工配置,配置界面中只要输入前面password参数处设置的密码以及安装有RMA-agent程序的IP就配置成功了。

2)在params处填写30,表示当内存的空闲比率小于百分之三十就报警,点击OK,就可以对192.168.1.201的机器进行监控了

 2.2  Windows空闲内存比率计算

    Windows的内存空闲比率需要使用VBScript来实现,Hostmonitor为执行Windows的VBScript提供了Active Script的接口,在HostMonitor安装目录下有个Example目录,下面存存放了VBScript的一些例子,我们可以对照例子进行脚本的编写,只可惜我没找到传递参数到脚本的方法,后面例子中的那个比例是写死在脚本里面的。

在Windows中没有free,awk等命令行工具来获取系统的内存使用情况,不过Windows提供了WMI接口供人们查询系统的相关的一些信息,Windows Management Instrumentation (WMI)是可伸缩的系统管理结构,该规范采用一个统一、基于标准且可扩展的面向对象接口。它提供与系统管理员信息和基础WMI API交互的标准方法,主要由系统管理应用程序开发人员和系统管理员用来访问和操作系统管理信息;它可用来生成组织和管理系统信息的工具,使系统管理人员能够更密切的监视系统活动。

    WMI提供了一套内置在Microsoft Windows操作系统中的丰富的系统管理服务,可以在有大量的应用程序、服务和设备的系统中提供全方位的管理功能。它允许应用程序的开发者,使用简单的、一致的机制,去查询企业中的任一台计算机上的信息,或是进行系统配置。

 

    通过WMI接口可以获得的信息量是惊人的,包括硬件设置,状态信息,驱动器配置,BIOS信息,应用程序的设置,事件记录信息,以及其他。WMI通过一组API来获得信息,但它表征的是一种通过一个简单,工业标准对象管理模式来获取信息的函数。这使得应用程序的开发者不必学习Windows的每一个API的具体细节。

空闲内存和总的物理内存就可以通过WMI接口来获取。

    空闲内存对应FreePhysicalMemory,总的物理内存对应TotalVisibleMemorySize,这两个量都在Win32_OperatingSystem中定义。我们利用WMI的vbscript接口可以获得内存利用率。

 FUNCTION GetMemUsage()

  DIM strComputer,memusage,objWMI,colOS,objOS

  strComputer = "."

  set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

  set colOS = objWMI.InstancesOf("Win32_OperatingSystem")

  for each objOS in colOS

    memusage = round((objOS.FreePhysicalMemory / objOS.TotalVisibleMemorySize)*100) & "%"

  next

  set objWMI=Nothing

  GetMemUsage=memusage

END FUNCTION

具体的脚本内容可以参考附件2

编写好脚本后需要对HostMonitor进行配置

1)  执行菜单命令Test->New->(Actice) Script test,出现监控配置界面

 图1-5 Active Script脚本配置界面

 

2)指定agent为192.168.1.202

3)指定执行的脚本,即在Run Script from external file处指定脚本为我们自己编写的监控内存使用率的脚本

4)勾选Translate macros

嗯,现在Linux和windows的内存空闲比率都可以在Hostmonitor的监控窗口显示出来了。

 

附件1 Linux监控内存空闲比率的脚本

#!/bin/sh

if [ $# -ge 1 ]

then

  OS=`uname`

  case $OS in

    AIX)    PCOUNT=`vmstat|tail -1|awk '{print $4*4}'`;;

    Linux)  PfreeMem=`free -m | awk 'NR==3{print $4}'`;Ptotal=`free -m | awk 'NR==2{print $2}'`;PCOUNT=`echo "($PfreeMem*100/$Ptotal)"|bc`;;

    FreeBSD)PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    NetBSD) PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    OpenBSD)PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    SunOS)  PCOUNT=`vmstat|tail -1|awk '{print $5}'`;;

    *) echo 'ScriptRes:Unknown:script is not designed for '$OS

       exit;;

  esac

  if [ $PCOUNT -le $1 ]

  then

    echo "ScriptRes:Bad:"$PCOUNT"%"

  else

    echo "ScriptRes:Ok:"$PCOUNT"%"

  fi

else

  echo 'ScriptRes:Unknown:not enough parameters specified'

fi

 

附件2 Windows监控内存使用比率的脚本

'-----------------------------------------------------------------------------

'File    : MemUsage.VBS

'Purpose : Check memory usage of Dest Host

'Req     : Test's option "Translate macros" must be enabled

'Language: VBScript

'Version : 1.0

'-----------------------------------------------------------------------------

Option Explicit

const statusAlive       = "Host is alive:"

const statusDead        = "No answer:"

const statusUnknown     = "Unknown:"

const statusNotResolved = "Unknown host:"

const statusOk          = "Ok:"

const statusBad         = "Bad:"

const statusBadContents = "Bad contents:"

const memoryFreeRatio = 30

'The memoryFreeRatio param means that if the memory of your windows system  is low than 30 percent of total physical memory,

'Host Monitor Will Alert you

'---- entry point ----

 

FUNCTION performtest()

  DIM CheckResult,RealRatio

  IF "%Reply%"="%"+"Reply"+"%" THEN

     performtest = statusUnknown+"Please enable 'Translate macros' option"

  ELSE

    CheckResult = GetMemUsage

    IF CheckResult<>"%Reply%" THEN

       performtest = statusBad+CheckResult

    ELSE

       RealRatio=CInt(Left(CheckResult,Len(CheckResult)-1))

       IF  RealRatio >   memoryFreeRatio  THEN

       performtest = statusOk+CheckResult

       ELSE

       performtest = statusBad+CheckResult

       END IF

    END IF

  END IF

END FUNCTION

 

'----- functions -----

 

FUNCTION GetMemUsage()

  DIM DestComputer,MemUsage,ObjWMI,DestOS,objOS

  DestComputer = "."

  set ObjWMI = GetObject("winmgmts:\\" & DestComputer & "\root\cimv2")

  set DestOS = ObjWMI.InstancesOf("Win32_OperatingSystem")

  for each objOS in DestOS

   MemUsage = round((objOS.FreePhysicalMemory / objOS.TotalVisibleMemorySize)*100) & "%"

  next

  set ObjWMI=Nothing

  GetMemUsage=MemUsage

END FUNCTION

<!--
-->

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架【值得收藏】
Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架【值得收藏】
0 0
Golang中的Defer必掌握的7知识点
defer作为Golang比较特殊的语法,在实际开发使用过程中会有一些盲区知识点容易让开发者陷入困境之中,本章将详细的罗列冲defer的一些使用场景中细节的问题和案例代码分析。
12 0
上云第一课第一期部署MySQL数据库
主要讲述数据的部署以及使用
20 0
教育培训机构使用阿里云无影桌面优缺点
配置灵活,GPU满足设计产品线,价格低廉,随开随用。
28 0
android11开启无线调试
目录 配对步骤 步骤一:在手机上启用**开发者模式 & USB 调试** 步骤二: 手机开启开发者选项,打开无线调试 步骤三:点击无线调试,使用配对码配对设备 电脑上的操作:电脑打开cmd命令行 步骤一:检查adb版本 步骤二:按图输入下一个命令 步骤三
6 0
浅谈我对DDD领域驱动设计的理解
DDD的全称为Domain-driven Design,即领域驱动设计。下面我从领域、问题域、领域模型、设计、驱动这几个词语的含义和联系的角度去阐述DDD是如何融入到我们平时的软件开发初期阶段的。要理解什么是领域驱动设计,首先要理解什么是领域,什么是设计,还有驱动是什么意思,什么驱动什么。
13 0
Flutter基础笔记
目录 List里面常用的属性和方法: Set Map forEach,map, where,any,every extends抽象类 和 implements Flutter环境搭建 入口文件、入口方法 第一个 Demo Center 组件的 使用 把内容单独抽离成一个组件 给 Text 组件增加一些装饰 用MaterialApp 和 Scaffold两个组件装饰 App Text 组件 Container 组件 图片组件 引入本地图片 裁剪布局之 ClipRect、ClipRRect、ClipOval、ClipPath、CustomClipper 实现圆角以及实现圆形图片 圆形头像
4 0
高智商学生如何玩转无影云电脑
作为一名刚学习编程技术的学生来说,非常有幸体验阿里的无影云电脑,非常的荣幸,也感谢阿里云的支持与帮助,本人将写一遍无影云电脑评测的文章来记录一下这一令人感动的瞬间。
35 0
+关注
小步2013
java,架构,安全相关方向
183
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载