snmp 获取cpu 内存 的使用率

时间:2020-12-03 05:53:28
最近刚接触snmp 想通过snmp 技术监控服务器。 想通过 FreeMemory  TotalMemory 算出内存的使用率。 现在的问题是我不知道怎么 通过 ip 获取他们的oid 最大的问题是不知道怎么获取我需要的oid 用mib库也没找到 害我纠结 半天。 知道的大虾们 说下

2 个解决方案

#1


根据MRTG绘图原理,一般只要提供给MRTG两组数字再透过mrtg.cfg的设定后,执行/usr/bin/mrtg  /etc/mrtg/mrtg.cfg.xxx 即可绘出一个图形出来,因此,我们可以利用这样的原理来绘出一皆我们所想要的监控图形出来,本章节所提的主机CPU负载量统计即是利用这样的原理所产生而来的。



1.      首先,我们必须利用script来产生两个数值出来,一般针对CPU而言必须对日常CPU 负载作监控的方式,在网路上有很多方法,一般较常见的方式便是采用 sar 这个指令来作,因为 sar 这个指令会产生Average(平均值)例如:


,因此,我们便直接抓欲监测的数值两个即可绘出我们所想要看到的图形出来了。



2.      Script,一般而言sar 所产生的数据,我们仅仅要的只是其中的两个而已,因此必须透过Script来完成抓值的工作,至於要抓哪些值呢?以sar所产生的数据来说我们得先抓到

Average:            all        0.00      0.00      0.00      100.00

这行,然后%user、%nice、%system、%idle这四个数值我们仅仅只需要两个就够了,以下所举的例子是以%user使用量平均值及%system系统使用量平均值:



/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'

/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'



以上两个数据,我们还必须加上”开机时间”及”主机名称”,所以我们必须写一个Script来完成这四个数据的产生。以下两个范例一个是采用一般的shell script所写出来的,另一个则是用perl与法所写的:



#!/bin/bash 

# 1. 开始使用 sar 来监测 CPU 的 user 及 System 负载率 

  cpuusr=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'` 

  cpusys=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'` 

  UPtime=`/usr/bin/uptime | awk '{print $3 " " $4 " " $5}'` 



# 2. 列出四个数据(前两个为数字) 

  echo $cpuusr 

  echo $cpusys 

  echo $UPtime 

  echo XXX伺服器

#本shell出处 http://linux.vbird.org/linux_security/old/04mrtg.php






#!/usr/bin/perl



@line = `/usr/bin/sar | /usr/bin/tail -n 2 | /usr/bin/head -n 1 | /bin/sed 's/\ \ */ /g'`;



@data = split(/ /, @line[0]);

if (@data[2] eq "") {

  printf "0\n";

} else {

  printf ("%3.0f\n", @data[2] + 0.5);

}

printf ("%3.0f\n", (@data[3])+(@data[2])+(@data[4]+0.5));



$uptime = `/usr/bin/uptime | sed 's/\ \ */ /g'`;

@uptime = split(/,/, $uptime);

@uptime = split(/up/, @uptime[0]);

$server = `/bin/uname -n`;

printf "@uptime[1]\n";

printf $server;



#嘻嘻~我忘记这个script的出处了!!




3.      有了这Scrip后,我们将它命名为mrtg.cpu,然后我们必须再写一个mrtg.cfg.cpu其内容如下:



WorkDir: /var/www/html/mrtg 

Options[cpu]: gauge, nopercent, growright

Language: big5

Refresh: 300



Target[cpu]: `/etc/mrtg/mrtg.cpu`   

MaxBytes[cpu]: 100

YLegend[cpu]: CPU loading (%)

ShortLegend[cpu]: %

LegendO[cpu]:   CPU 使用者负载;

LegendI[cpu]:   CPU 纯系统负载;

Title[cpu]: Mosquito伺服器 CPU 负载率

PageTop[cpu]: <H1>Mosquito伺服器 CPU 负载率</H1>

Legend1[cpu]: CPU 纯系统负载

Legend2[cpu]: CPU 使用者负载






4.      最后别忘了要将/usr/bin/mrtg  /etc/mrtg/mrtg.cfg.cpu 执行三次后放置到crontab 内每隔五分钟定时执行(注),以产生监测数据出来。

注:将下面这行字加入到 /etc/crontab 内然后执行 service crond restart重新启动服务即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.cpu

Part 3、远端主机CPU负载量统计



前面一章节是说明利用Script来完成CPU负载量统计,但碍於Script仅能使用在MRTG主机端上执行,所执行出来的数据也是该主机所产生的,所以对於其他非MRTG的主机,除非我们每台都安装有MRTG否则就无法监测到CPU负载量统计,碍於此,我们得透过SNMP这个协定来抓取远端主机的CPU负载量统计。



“什麼?SNMP可以抓到远端主机的CPU负载量?!” ㄏㄏ~~我第一次就是有这样的想法耶!所以,我想对於第一次接触到 SNMP的人应该也是会有相同的相法吧!

废话不多说以下便是我找了很多资料所整理出来的!一般来讲,SNMP定义了一个叫做MIB(Management Information Base,MIB)的管理物件库,MIB是一个按照层次结构组织的树状结构,其定义方式类似於功能变数名称系统,而OSI组织为树中每一层的每个节点定义唯一的一个数位标识,这样树中的每个节点都可以用从根开始到目的节点的相应的标识对应的一连串的数位来表示,如1.3.6.1.2.1.1表示了MIBII中系统组子树,而1.3.6.1.2.1.1.1.0表示系统组中的系统描述(sytem Descrption)物件。每个物件的一连串数位表示被称为物件识别字(Object Indentifier,OID),我们便可利用OID来取出我们所需要的数值了。

看不懂吗??没关系,以MRTG来远端监测CPU负载量统计来说,不懂SNMP、MIB、OID 的关系没啥影响,还是可以透过我后面的资料来作便可完成,只是SNMP是个很有趣的协定,由於本篇文章的重点不是SNMP协定的介绍,所以请有兴趣的人除了可以参考O'Reilly所出的”SNMP 网管实务”外,本篇文章后面我会将一些参考资料的网址写出,有兴趣的人可以看看了解一番。

        接下来我将我整理出来的OID及其相关作用整理出来於后,希望对於需要的人有所帮助。(注:下面是我针对Redhat 8.0内定的SNMP所整理出来的资料)



1.          PROCESSOR相关的 MIB值 : .1.3.6.1.4.1.2021.10.1.3.x 

OID
MIB
Description

laLoad.1
.1.3.6.1.4.1.2021.10.1.3.1
每隔1分钟CPU负载平均值

laLoad.2
.1.3.6.1.4.1.2021.10.1.3.2
每隔5分钟CPU负载平均值

laLoad.3
.1.3.6.1.4.1.2021.10.1.3.3
每隔15分钟CPU负载平均值


        注:产生出来的数值以%为单位。



2.          MEMORY相关 MIB值 : .1.3.6.1.4.1.2021.4.x.x

OID
MIB
Description

memTotalSwap
.1.3.6.1.4.1.2021.4.3.0
Swap空间总容量

memAvailSwap
.1.3.6.1.4.1.2021.4.4.0
Swap剩余空间容量

memTotalReal
.1.3.6.1.4.1.2021.4.5.0
实体记忆体空间总容量

memAvailReal
.1.3.6.1.4.1.2021.4.6.0
实体记忆体剩余空间容量

memTotalFree
.1.3.6.1.4.1.2021.4.11.0
实体记忆体+Swap剩余空间容量


注:产生出来的数值以Bytes为单位。



3.          DISK相关 MIB值 : .1.3.6.1.2.1.25.2.3.1.x.x

由於DISK这部分的值,每部机器因硬体设备、分割方式、…等不同而有不同的结果,所以这份资料的整理我将会在”远端主机DISK负载量统计”该篇文章中再作完整的整理与解释。



在此,主机CPU负载量统计方面,我们已经学会了如何去取出我们所需要的数值了,接下来的介绍便是利用这些数值加上MRTG来绘出我们所需要的图形了。一般来说,利用读取SNMP来绘制主机CPU负载量统计除了前一章节所说的Script加上mrtg.cfg的方式外,还可以直接只写一个mrtg.cfg即可,本章节则利用后者来完成MRTG绘图。

以下是mrtg.cfg.cpu.2内容:



WorkDir:/var/www/html/mrtg

Interval: 5

WriteExpires: Yes

Options[_]: gauge,absolute,growright,nopercent

Language: big5

Refresh: 300

Target[snmp_cpu]:.1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@主机IP或主机名称

MaxBytes[snmp_cpu]: 100

Directory[snmp_cpu]: cpu

YLegend[snmp_cpu]: Load Average (%)

ShortLegend[snmp_cpu]: %

Unscaled[snmp_cpu]: dwmy

LegendO[snmp_cpu]:   CPU 每1分钟负载平均值;

LegendI[snmp_cpu]:   CPU 每5分钟负载平均值;

Title[snmp_cpu]: Mosquito伺服器 CPU 负载率

PageTop[snmp_cpu]: <H1>Mosquito伺服器 CPU 负载率</H1>

  <TABLE>

   <TR><TD>System:</TD><TD>Redhat 8.0</TD></TR>

   <TR><TD>Maintainer:</TD><TD>Mosquito</TD></TR>

   <TR><TD>IP:</TD><TD>10.70.220.234</TD></TR>

  </TABLE>

Legend1[snmp_cpu]: CPU 每1分钟负载平均值

Legend2[snmp_cpu]: CPU 每5分钟负载平均值

#

#注:主机IP或主机名称直接填写要监测的主机或网路设备即可,但前题是该主机需开启SNMP协定。




编辑好了mrtg.cfg.cpu.2后一样要将/usr/bin/mrtg  /etc/mrtg/mrtg.cfg.cpu.2 执行三次后放置到crontab 内每隔五分钟定时执行(注),以产生监测数据出来。

注:将下面这行字加入到 /etc/crontab 内然后执行 service crond restart重新启动服务即可。

0-59/5 * * * * root /usr/bin/mrtg  /etc/mrtg/mrtg.cfg.cpu.2



最后,本篇文章所用的mrtg.cfg.cpu.2其中有一行为:

Directory[snmp_cpu]: cpu

所使用的用浏览器检视时必须要多加入一个目录名称才可以看得到图形出来,

例如:http://主机IP位址或是主机名称/mrtg/cpu /snmp_cpu.html 

#2


windows怎么获取cpu还有硬盘的信息啊,我能够获取一些主机的信息,但是硬盘和cpu就不行。求指教,谢谢

#1


根据MRTG绘图原理,一般只要提供给MRTG两组数字再透过mrtg.cfg的设定后,执行/usr/bin/mrtg  /etc/mrtg/mrtg.cfg.xxx 即可绘出一个图形出来,因此,我们可以利用这样的原理来绘出一皆我们所想要的监控图形出来,本章节所提的主机CPU负载量统计即是利用这样的原理所产生而来的。



1.      首先,我们必须利用script来产生两个数值出来,一般针对CPU而言必须对日常CPU 负载作监控的方式,在网路上有很多方法,一般较常见的方式便是采用 sar 这个指令来作,因为 sar 这个指令会产生Average(平均值)例如:


,因此,我们便直接抓欲监测的数值两个即可绘出我们所想要看到的图形出来了。



2.      Script,一般而言sar 所产生的数据,我们仅仅要的只是其中的两个而已,因此必须透过Script来完成抓值的工作,至於要抓哪些值呢?以sar所产生的数据来说我们得先抓到

Average:            all        0.00      0.00      0.00      100.00

这行,然后%user、%nice、%system、%idle这四个数值我们仅仅只需要两个就够了,以下所举的例子是以%user使用量平均值及%system系统使用量平均值:



/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'

/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'



以上两个数据,我们还必须加上”开机时间”及”主机名称”,所以我们必须写一个Script来完成这四个数据的产生。以下两个范例一个是采用一般的shell script所写出来的,另一个则是用perl与法所写的:



#!/bin/bash 

# 1. 开始使用 sar 来监测 CPU 的 user 及 System 负载率 

  cpuusr=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'` 

  cpusys=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'` 

  UPtime=`/usr/bin/uptime | awk '{print $3 " " $4 " " $5}'` 



# 2. 列出四个数据(前两个为数字) 

  echo $cpuusr 

  echo $cpusys 

  echo $UPtime 

  echo XXX伺服器

#本shell出处 http://linux.vbird.org/linux_security/old/04mrtg.php






#!/usr/bin/perl



@line = `/usr/bin/sar | /usr/bin/tail -n 2 | /usr/bin/head -n 1 | /bin/sed 's/\ \ */ /g'`;



@data = split(/ /, @line[0]);

if (@data[2] eq "") {

  printf "0\n";

} else {

  printf ("%3.0f\n", @data[2] + 0.5);

}

printf ("%3.0f\n", (@data[3])+(@data[2])+(@data[4]+0.5));



$uptime = `/usr/bin/uptime | sed 's/\ \ */ /g'`;

@uptime = split(/,/, $uptime);

@uptime = split(/up/, @uptime[0]);

$server = `/bin/uname -n`;

printf "@uptime[1]\n";

printf $server;



#嘻嘻~我忘记这个script的出处了!!




3.      有了这Scrip后,我们将它命名为mrtg.cpu,然后我们必须再写一个mrtg.cfg.cpu其内容如下:



WorkDir: /var/www/html/mrtg 

Options[cpu]: gauge, nopercent, growright

Language: big5

Refresh: 300



Target[cpu]: `/etc/mrtg/mrtg.cpu`   

MaxBytes[cpu]: 100

YLegend[cpu]: CPU loading (%)

ShortLegend[cpu]: %

LegendO[cpu]:   CPU 使用者负载;

LegendI[cpu]:   CPU 纯系统负载;

Title[cpu]: Mosquito伺服器 CPU 负载率

PageTop[cpu]: <H1>Mosquito伺服器 CPU 负载率</H1>

Legend1[cpu]: CPU 纯系统负载

Legend2[cpu]: CPU 使用者负载






4.      最后别忘了要将/usr/bin/mrtg  /etc/mrtg/mrtg.cfg.cpu 执行三次后放置到crontab 内每隔五分钟定时执行(注),以产生监测数据出来。

注:将下面这行字加入到 /etc/crontab 内然后执行 service crond restart重新启动服务即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.cpu

Part 3、远端主机CPU负载量统计



前面一章节是说明利用Script来完成CPU负载量统计,但碍於Script仅能使用在MRTG主机端上执行,所执行出来的数据也是该主机所产生的,所以对於其他非MRTG的主机,除非我们每台都安装有MRTG否则就无法监测到CPU负载量统计,碍於此,我们得透过SNMP这个协定来抓取远端主机的CPU负载量统计。



“什麼?SNMP可以抓到远端主机的CPU负载量?!” ㄏㄏ~~我第一次就是有这样的想法耶!所以,我想对於第一次接触到 SNMP的人应该也是会有相同的相法吧!

废话不多说以下便是我找了很多资料所整理出来的!一般来讲,SNMP定义了一个叫做MIB(Management Information Base,MIB)的管理物件库,MIB是一个按照层次结构组织的树状结构,其定义方式类似於功能变数名称系统,而OSI组织为树中每一层的每个节点定义唯一的一个数位标识,这样树中的每个节点都可以用从根开始到目的节点的相应的标识对应的一连串的数位来表示,如1.3.6.1.2.1.1表示了MIBII中系统组子树,而1.3.6.1.2.1.1.1.0表示系统组中的系统描述(sytem Descrption)物件。每个物件的一连串数位表示被称为物件识别字(Object Indentifier,OID),我们便可利用OID来取出我们所需要的数值了。

看不懂吗??没关系,以MRTG来远端监测CPU负载量统计来说,不懂SNMP、MIB、OID 的关系没啥影响,还是可以透过我后面的资料来作便可完成,只是SNMP是个很有趣的协定,由於本篇文章的重点不是SNMP协定的介绍,所以请有兴趣的人除了可以参考O'Reilly所出的”SNMP 网管实务”外,本篇文章后面我会将一些参考资料的网址写出,有兴趣的人可以看看了解一番。

        接下来我将我整理出来的OID及其相关作用整理出来於后,希望对於需要的人有所帮助。(注:下面是我针对Redhat 8.0内定的SNMP所整理出来的资料)



1.          PROCESSOR相关的 MIB值 : .1.3.6.1.4.1.2021.10.1.3.x 

OID
MIB
Description

laLoad.1
.1.3.6.1.4.1.2021.10.1.3.1
每隔1分钟CPU负载平均值

laLoad.2
.1.3.6.1.4.1.2021.10.1.3.2
每隔5分钟CPU负载平均值

laLoad.3
.1.3.6.1.4.1.2021.10.1.3.3
每隔15分钟CPU负载平均值


        注:产生出来的数值以%为单位。



2.          MEMORY相关 MIB值 : .1.3.6.1.4.1.2021.4.x.x

OID
MIB
Description

memTotalSwap
.1.3.6.1.4.1.2021.4.3.0
Swap空间总容量

memAvailSwap
.1.3.6.1.4.1.2021.4.4.0
Swap剩余空间容量

memTotalReal
.1.3.6.1.4.1.2021.4.5.0
实体记忆体空间总容量

memAvailReal
.1.3.6.1.4.1.2021.4.6.0
实体记忆体剩余空间容量

memTotalFree
.1.3.6.1.4.1.2021.4.11.0
实体记忆体+Swap剩余空间容量


注:产生出来的数值以Bytes为单位。



3.          DISK相关 MIB值 : .1.3.6.1.2.1.25.2.3.1.x.x

由於DISK这部分的值,每部机器因硬体设备、分割方式、…等不同而有不同的结果,所以这份资料的整理我将会在”远端主机DISK负载量统计”该篇文章中再作完整的整理与解释。



在此,主机CPU负载量统计方面,我们已经学会了如何去取出我们所需要的数值了,接下来的介绍便是利用这些数值加上MRTG来绘出我们所需要的图形了。一般来说,利用读取SNMP来绘制主机CPU负载量统计除了前一章节所说的Script加上mrtg.cfg的方式外,还可以直接只写一个mrtg.cfg即可,本章节则利用后者来完成MRTG绘图。

以下是mrtg.cfg.cpu.2内容:



WorkDir:/var/www/html/mrtg

Interval: 5

WriteExpires: Yes

Options[_]: gauge,absolute,growright,nopercent

Language: big5

Refresh: 300

Target[snmp_cpu]:.1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@主机IP或主机名称

MaxBytes[snmp_cpu]: 100

Directory[snmp_cpu]: cpu

YLegend[snmp_cpu]: Load Average (%)

ShortLegend[snmp_cpu]: %

Unscaled[snmp_cpu]: dwmy

LegendO[snmp_cpu]:   CPU 每1分钟负载平均值;

LegendI[snmp_cpu]:   CPU 每5分钟负载平均值;

Title[snmp_cpu]: Mosquito伺服器 CPU 负载率

PageTop[snmp_cpu]: <H1>Mosquito伺服器 CPU 负载率</H1>

  <TABLE>

   <TR><TD>System:</TD><TD>Redhat 8.0</TD></TR>

   <TR><TD>Maintainer:</TD><TD>Mosquito</TD></TR>

   <TR><TD>IP:</TD><TD>10.70.220.234</TD></TR>

  </TABLE>

Legend1[snmp_cpu]: CPU 每1分钟负载平均值

Legend2[snmp_cpu]: CPU 每5分钟负载平均值

#

#注:主机IP或主机名称直接填写要监测的主机或网路设备即可,但前题是该主机需开启SNMP协定。




编辑好了mrtg.cfg.cpu.2后一样要将/usr/bin/mrtg  /etc/mrtg/mrtg.cfg.cpu.2 执行三次后放置到crontab 内每隔五分钟定时执行(注),以产生监测数据出来。

注:将下面这行字加入到 /etc/crontab 内然后执行 service crond restart重新启动服务即可。

0-59/5 * * * * root /usr/bin/mrtg  /etc/mrtg/mrtg.cfg.cpu.2



最后,本篇文章所用的mrtg.cfg.cpu.2其中有一行为:

Directory[snmp_cpu]: cpu

所使用的用浏览器检视时必须要多加入一个目录名称才可以看得到图形出来,

例如:http://主机IP位址或是主机名称/mrtg/cpu /snmp_cpu.html 

#2


windows怎么获取cpu还有硬盘的信息啊,我能够获取一些主机的信息,但是硬盘和cpu就不行。求指教,谢谢