SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通讯线路进行管理。在RHEL中,SNMP的配置文件地址是/etc/snmp/snmpd.conf。snmpd.conf的配置项不少,可是真正经常使用的就那么几个,下面来逐个介绍。html
com2sec命令,它的基本语法是“com2sec NAME SOURCE COMMUNITY”。这里要提一下SNMP的安全策略,其实SNMP的安全性并很差,在这个协议中使用COMMUNITY这个东西来作访问控制的。简单来理解就是如今有一个帮会的一我的找去了总舵,那么这我的怎么跟总舵相认呢?他们直接约定一个“暗号”,例如见面就说“床前明月光”,那么总舵的前台就会带你去“床前明月光”想对应的地方。如今回过头来看这行配置,假若有如下一句话linux
com2sec magusu default magusios
意思就是作一个映射,把magus这个COMMUNITY串和magusu这个名字作好一对映射,那么之后在调用SNMP的时候,只要你声明你就是magus,那么就能够得到相应的权限了。有了映射之后下面须要作的是创建一个从magusu到组的一个映射,用到的命令是group,它的基本语法是“group NAME MODEL SECURITY”安全
group magusg v2c magusu服务器
上面这句话的意思就是把magusu放到组magusg里面,用的协议是v2c,插一句,SNMP如今一般用的有3个版本。那好了,组建好了下来要作什么呢?就是要创建一个VIEW,VIEW的基本语法是“view NAME TYPE SUBTREE [MASK]”网络
view magusv included .1.3.6.1.4.1.9129app
像上面这句话的意思就是赋予magusv这个view可以查看1.3.6.1.4.1.9129下面全部节点的权限。最后要作的是设定哪些组的人,哪些view的用户能够作什么具体的事情,用access来设置,基本语法是“access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY”。post
access magusg “” any noauth exact magusv magusv none测试
因为例子中用的是v2c版本的协议,因此CONTEXT必须为空,MODEL也就是协议的版本号,在这里例子里面能够是any也能够是v2c,仍是因为v2c的缘故,因此LEVEL是noauth;READ、WRITE和NOTIFY分别须要指定一个view或者什么都不指定;在这里的设置就是magusv这个view能够对前面设置好的节点进行读和写操做。spa
到此,服务端的配置已经完成,重启一下snmpd就能够了,下面看看如何经过SNMP获得咱们想要的数据
snmpwalk -v 2c -c magus localhost 1.3.6.1.4.1.9129.1.2.2
snmpwalk能够便利指定节点下的全部子节点,-v 参数指定SNMP的协议版本,这个跟咱们以前配置服务器的版本是要一致的,也就是2c,而后-c参数就指定了community的字符串,也就是刚才定义的magus,而后就是主机地址,因为我在本机测试,因此用的localhost,实际中能够填上IP,最后就是OID的值。搞定!
对于刚刚接触SNMP的朋友来讲,理解community的做用是关键,其实说的通俗点就是接头暗号,并且仍是个明文的“暗号”。
No related posts.
如今咱们在目标机上来写一些脚原本显标 MEM 、 CPU 、 DiskIO
MEM 数据的抓取脚本:
[root@wy1 root]# cat mfree.sh
#!/bin/sh
/usr/bin/free -m | grep Mem |awk '{print $4}'
/usr/bin/free -m | grep Mem |awk '{print $2}'
[root@wy1 root]# sh mfree.sh ( 上面一个数据是内存使用量,下面的是内存总量 ,M)
442
1006
CPU 数据的抓取脚本
[root@wy1 root]# cat cpustat.sh
#!/bin/sh
idle=`sar -u 1 3 | grep Average | awk '{print $6}'`
used=`echo "101 - $idle" | bc -l -s`
echo $used
echo $idle
DiskIO 数据的抓取脚本
[root@wy1 root]# cat iostat.sh (显示硬盘 IO , k/s )
#!/bin/sh
used1=`sar -d 1 3 | tail -1 | awk '{print $4}'`
used2=`echo "$used1 / 2" | bc -l`
echo $used2
echo $used2
好如今咱们已经能获得这数据了,怎么才能让监控主机经过 snmpd 获得这些数据呢?能够在目标主机的/etc/snmp/snmpd.conf 文件下面加个这些行:
exec .1.3.6.1.4.1.2021.53 mfree /bin/sh /root/mfree.sh
exec .1.3.6.1.4.1.2021.54 cpustat /bin/sh /root/cpustat.sh
exec .1.3.6.1.4.1.2021.55 iostat /bin/sh /root/iostat.sh
service snmpd restart 重启目标主机上的 snmpd 服务。
这样在监控主机上运行 :
[root@wy2 root]# snmpwalk -v 1 192.168.13.103 -c public .1.3.6.1.4.1.2021.53
UCD-SNMP-MIB::ucdavis.53.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.53.2.1 = STRING: "mfree"
UCD-SNMP-MIB::ucdavis.53.3.1 = STRING: "/bin/sh /root/mfree.sh"
UCD-SNMP-MIB::ucdavis.53.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.53.101.1 = STRING: "442"
UCD-SNMP-MIB::ucdavis.53.101.2 = STRING: "1006"
UCD-SNMP-MIB::ucdavis.53.102.1 = INTEGER: 0
其中 UCD-SNMP-MIB::ucdavis.53.101.1 = STRING: "442" 中的 442 就是 mfree.sh 输出的第一个数据, 1006 是mfree.sh 输出的第二个数据。 OK ,再作一下加工:
[root@wy2 root]# snmpwalk -v 1 192.168.13.103 -c public .1.3.6.1.4.1.2021.53 | grep 53.101 | awk -F/" '{print $2}'
443
1006
好,咱们已经经过 snmpd 从监控主机上获得了目标主机上内存使用的这两个数据了:) , 其它的两个脚本也同样:
CPU 使用、空闲。
[root@wy2 root]# snmpwalk -v 1 192.168.13.103 -c public .1.3.6.1.4.1.2021.54 | grep 54.101 | awk -F/" '{print $2}'
1.17
99.83
DISK IO 状态:
[root@wy2 root]# snmpwalk -v 1 192.168.13.103 -c public .1.3.6.1.4.1.2021.55 | grep 55.101 | awk -F/" '{print $2}'
43.00000000000000000000
43.00000000000000000000
最 后是编辑监控主机上的 mrtg.cfg 文件,在 Target[xxxx] 中加入上面的命令,下面是个人 mrtg.cfg 文件,前面的两个 Target 是我用 /usr/bin/cfgmaker --global 'WorkDir: /home/httpd/mrtg/net' -- global 'Options[_]:growright,bits' --ifref=ip public@192.168.13.103 命令生 成的,
后面的是我跟据 platinum 的 "mrtg 能作些什么 " 的贴子内的 mrtg.cfg 文件改的。(在精华里,你们能够看一下)。
[root@wy1 root]# cat /home/httpd/mrtg/103/mrtg.cfg
# Created by
# /usr/bin/cfgmaker --global 'WorkDir: /home/httpd/mrtg/net' --global 'Options[_]:growright,bits' --ifref=ip public@192.168.13.103
### Global Config Options
# for UNIX
# WorkDir: /home/http/mrtg
# or for NT
# WorkDir: c:/mrtgdata
### Global Defaults
# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits
WorkDir: /home/httpd/mrtg/103
Options[_]:growright,bits
Language: chinese
######################################################################
# System: wy1
# Description: Linux wy1 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686
# Contact: Root <root@wuying.com > (configure /etc/snmp/snmp.local.conf)
# Location: wy1.wuying.com (edit /etc/snmp/snmpd.conf ) ###################################################################### ### Interface 2 >> Descr: 'eth0' | Name: '' | Ip: '192.168.13.103' | Eth: '00-06-5b-19-9d-ea' ### Target[192.168.13.103_192.168.13.103]: /192.168.13.103:public@192.168.13.103: SetEnv[192.168.13.103_192.168.13.103]: MRTG_INT_IP="192.168.13.103" MRTG_INT_DESCR="eth0" MaxBytes[192.168.13.103_192.168.13.103]: 1250000 Xsize[192.168.13.103_192.168.13.103]: 300 Ysize[192.168.13.103_192.168.13.103]: 100 #kmg[192.168.13.103_192.168.13.103]: K/s,M/s #kilo[192.168.13.103_192.168.13.103]: 1024 Title[192.168.13.103_192.168.13.103]: Traffic for eth0 192.168.13.103 -- wy1 PageTop[192.168.13.103_192.168.13.103]: <H1>Traffic for eth0 192.168.13.103 -- wy1</H1> #Options[192.168.13.103_192.168.13.103]: growright,gauge,nopercent ### Interface 3 >> Descr: 'eth1' | Name: '' | Ip: '172.16.0.188' | Eth: '00-06-5b-19-9d-e9' ### Target[192.168.13.103_172.16.0.188]: /172.16.0.188:public@192.168.13.103: SetEnv[192.168.13.103_172.16.0.188]: MRTG_INT_IP="172.16.0.188" MRTG_INT_DESCR="eth1" Xsize[192.168.13.103_172.16.0.188]: 300 Ysize[192.168.13.103_172.16.0.188]: 100 MaxBytes[192.168.13.103_172.16.0.188]: 1250000 #ShortLegend[192.168.13.103_172.16.0.188]: #kmg[192.168.13.103_172.16.0.188]: b/s,Kb/s #kilo[192.168.13.103_172.16.0.188]: 1024 Title[192.168.13.103_172.16.0.188]: Traffic for eth1 172.16.0.188 -- wy1 PageTop[192.168.13.103_172.16.0.188]: <H1>Traffic for eth1 172.16.0.188 -- wy1</H1> #Options[192.168.13.103_172.16.0.188]: growright,gauge,nopercent ###MEM status Target[wy1_mem]:`snmpwalk -v 1 192.168.13.103 -c public .1.3.6.1.4.1.2021.53 | grep 53.101 | awk -F/" '{print $2}'` #Targey[wy1_mem]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org Xsize[wy1_mem]: 300 Ysize[wy1_mem]: 100 Ytics[wy1_mem]: 7 MaxBytes[wy1_mem]: 1006 Title[wy1_mem]:Memory State of WY1 IP 192.168.13.103 Server PageTop[wy1_mem]:<H1>Memory State of WY1 IP 192.168.13.103 Server</H1> ShortLegend[wy1_mem]: MB kmg[wy1_mem]: MB kilo[wy1_mem]:1024 YLegend[wy1_mem]: Memory Usage Legend1[wy1_mem]: 可用内存 Legend2[wy1_mem]: 总内存量 Legend3[wy1_mem]: 可用内存 Legend4[wy1_mem]: 总内存量 LegendI[wy1_mem]: 可用内存 LegendO[wy1_mem]: 总内存量 Options[wy1_mem]: growright,gauge,nopercent ###cpu status Target[wy1_CPU]:`snmpwalk -v 1 192.168.13.103 -c public .1.3.6.1.4.1.2021.54 | grep 54.101 | awk -F/" '{print $2}'` #Targey[wy1_CPU]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org Xsize[wy1_CPU]: 300 Ysize[wy1_CPU]: 100 Ytics[wy1_CPU]: 7 MaxBytes[wy1_CPU]: 100 Title[wy1_CPU]:CPU State of WY1 IP 192.168.13.103 Server PageTop[wy1_CPU]:<H1>CPU State of WY1 IP 192.168.13.103 Server</H1> ShortLegend[wy1_CPU]: kmg[wy1_CPU]: % #kilo[wy1_CPU]:1024 YLegend[wy1_CPU]: CPU Usage Legend1[wy1_CPU]: 已用 CPU: Legend2[wy1_CPU]: 可用 CPU: LegendI[wy1_CPU]: 已用 CPU: LegendO[wy1_CPU]: 可用 CPU: Options[wy1_CPU]: growright,gauge,nopercent ###iostat ###cpu status Target[wy1_IO]:`snmpwalk -v 1 192.168.13.103 -c public .1.3.6.1.4.1.2021.55 | grep 55.101 | awk -F/" '{print $2}'` #Targey[wy1_IO]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org Xsize[wy1_IO]: 300 Ysize[wy1_IO]: 100 Ytics[wy1_IO]: 7 MaxBytes[wy1_IO]: 10000 Title[wy1_IO]: DISK IO State of WY1 IP 192.168.13.103 Server PageTop[wy1_IO]:<H1>DISK IO State of WY1 IP 192.168.13.103 Server</H1> ShortLegend[wy1_IO]: kmg[wy1_IO]: K/s,M/s kilo[wy1_IO]:1024 YLegend[wy1_IO]: DISK IO SPEED Legend1[wy1_IO]: IO 速度 : Legend2[wy1_IO]: IO 速度 : LegendI[wy1_IO]: IO 速度 : LegendO[wy1_IO]: IO 速度 : Options[wy1_IO]: growright,gauge,nopercent 用 indexmaker -o /home/httpd/mrtg/103/index.html /home/httpd/mrtg/103/mrtg.cfg 生成网页,在 crontab 中加入 */5 * * * * mrtg /home/httpd/mrtg/103/mrtg.cfg OK , 这样咱们就能经过 mrtg 生成的图来监控咱们 linux 的机器的状态了。在 IE 中打入 http: //192.168.13.105/mrtg/103,mrtg 的监控网页就出来啦 ( /home/httpd/ 是我 appache 的主目录)。固然咱们也 能用 snmpwalk 命令来获得安装有 snmp 服务的 win2000机器的状态的数据: 如: [root@wy1 103]# snmpwalk -v 1 192.168.1.5 -c public HOST-RESOURCES-MIB::hrStorage HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 3800424 KBytes HOST-RESOURCES-MIB::hrStorageIndex.1 = INTEGER: 1 HOST-RESOURCES-MIB::hrStorageIndex.2 = INTEGER: 2 HOST-RESOURCES-MIB::hrStorageIndex.3 = INTEGER: 3 HOST-RESOURCES-MIB::hrStorageIndex.4 = INTEGER: 4 HOST-RESOURCES-MIB::hrStorageIndex.5 = INTEGER: 5 HOST-RESOURCES-MIB::hrStorageIndex.6 = INTEGER: 6 HOST-RESOURCES-MIB::hrStorageType.1 = OID: HOST-RESOURCES-TYPES::hrStorageRemovableDisk HOST-RESOURCES-MIB::hrStorageType.2 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk HOST-RESOURCES-MIB::hrStorageType.3 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk HOST-RESOURCES-MIB::hrStorageType.4 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk HOST-RESOURCES-MIB::hrStorageType.5 = OID: HOST-RESOURCES-TYPES::hrStorageCompactDisc HOST-RESOURCES-MIB::hrStorageType.6 = OID: HOST-RESOURCES-TYPES::hrStorageVirtualMemory HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: A:/ HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: C:/ Label: Serial Number 581e89fe HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: D:/ Label:New Volume Serial Number 1cde6e55 HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: E:/ Label:DATA_BAK Serial Number 30d29147 HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: F:/ HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: Virtual Memory HOST-RESOURCES-MIB::hrStorageAllocationUnits.1 = INTEGER: 0 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.2 = INTEGER: 4096 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.3 = INTEGER: 4096 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.4 = INTEGER: 4096 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.5 = INTEGER: 0 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.6 = INTEGER: 65536 Bytes HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 0 HOST-RESOURCES-MIB::hrStorageSize.2 = INTEGER: 2050287 HOST-RESOURCES-MIB::hrStorageSize.3 = INTEGER: 15703529 HOST-RESOURCES-MIB::hrStorageSize.4 = INTEGER: 53263499 HOST-RESOURCES-MIB::hrStorageSize.5 = INTEGER: 0 HOST-RESOURCES-MIB::hrStorageSize.6 = INTEGER: 89444 HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 0 HOST-RESOURCES-MIB::hrStorageUsed.2 = INTEGER: 1233681 HOST-RESOURCES-MIB::hrStorageUsed.3 = INTEGER: 591593 HOST-RESOURCES-MIB::hrStorageUsed.4 = INTEGER: 23583930 HOST-RESOURCES-MIB::hrStorageUsed.5 = INTEGER: 0 HOST-RESOURCES-MIB::hrStorageUsed.6 = INTEGER: 50611 HOST-RESOURCES-MIB::hrStorageAllocationFailures.1 = Counter32: 0 HOST-RESOURCES-MIB::hrStorageAllocationFailures.2 = Counter32: 0 HOST-RESOURCES-MIB::hrStorageAllocationFailures.3 = Counter32: 0 HOST-RESOURCES-MIB::hrStorageAllocationFailures.4 = Counter32: 0 HOST-RESOURCES-MIB::hrStorageAllocationFailures.5 = Counter32: 0 HOST-RESOURCES-MIB::hrStorageAllocationFailures.6 = Counter32: 0 上面显示的是 192.168.1.5 这台 win2000SERVER 的磁盘信息,能够看到盘符、每一个分区的空间总量、使用量等。其它的相应建值还有: Diskused: HOST-RESOURCES-MIB::hrStorageUsed CPU: HOST-RESOURCES-MIB::hrProcessorLoad RUN Proc: HOST-RESOURCES-MIB::hrSWRunName SYS Uptime: HOST-RESOURCES-MIB::hrSystemUptime SNMPv2-MIB::sysUpTime SYS Date: HOST-RESOURCES-MIB::hrSystemDate SYS Device: HOST-RESOURCES-MIB::hrDeviceDescr SYS Descr: SNMPv2-MIB::sysDescr SYS Name: SNMPv2-MIB::sysName netcard speed: IF-MIB::ifSpeed netcard physcal address: IF-MIB::ifPhysAddress 这样咱们就能够用一台 linux 主机经过 snmp+mrtg 来监控多台局域网内的 linux/win2000SERVER 了:)。 如今我最关心的是如何让 snmp 包穿过防火墙,(我用 snmpwalk 试了一下,抓不到公司在 IDC 防火墙后的SERVER 的 snmp 数据)。