1. 上回看了platinum的"mrtg能做些什么"贴子,很受启发,于是也试着做了一个。但当时对snmpd不是很熟,所以没有做成功,后来仔细看了一下 snmd的有关文章和RH中的/etc/snmp/snmpd.conf文件,发现用snmp+mrtg可以很好的实现对局域网内服务器状态的监控。  
  2. 现在就以用snmp+mrtg监控一台局域网内的redhat机器(IP:192.168.13.103)的网卡、内存、CPU、DISKIO为例子,谈一下如何实现。基本的法办就是用一台redhat监控机器(IP:192.168.13.105),通过snmpwalk命令去抓目标服务器的状态数据,然后用mrtg画出图来。  
  3. 1、首先我们要把目标snmpd.conf文件的配好。这是用snmpwalk命令一抓取数据的关健。下面是目标机器(IP: 192.168.13.103)上的/etc/snmp/snmpd.conf文件部份内容,红色的部份是我对snmpd.conf所做的改动。  
  4. [root@wy1 root]# cat /etc/snmp/snmpd.conf  
  5.  
  6. ####  
  7. First, map the community name "public" into a "security name" 
  8.  
  9. #    sec.name   source       community  
  10. com2sec notConfigUser   default    public   #定义community名称为 public,映射到安全名 notConfigUser。  
  11.  
  12. ####  
  13. Second, map the security name into a group name:  
  14.  
  15. #    groupName    securityModel securityName  
  16. group notConfigGroup v1           notConfigUser #定义安全用户名notConfigUser映射到notConfigGroup组。  
  17. group notConfigGroup v2c           notConfigUser  
  18.  
  19. ####  
  20. # Third, create a view for us to let the group have rights to: #定义一个view,来决定notConfigUser可以操作的范围。  
  21.  
  22.  
  23. # Make at least   snmpwalk -v 1 localhost -c public system fast again. #定义可查看的snmp的范围。  
  24. #    name           incl/excl     subtree       mask(optional)  
  25. view systemview included .1.3.6.1.2.1.1  
  26. view systemview included .1.3.6.1.2.1.25.1.1  
  27. view all included   .1  
  28. ####  
  29. # Finally, grant the group read-only access to the systemview view. #给notConfigGroup组所定义view名 all 以只读权限。  
  30.  
  31. #    group       context sec.model sec.level prefix read write   notif  
  32. access   notConfigGroup ""    any    noauth exact   all   none none#access   notConfigGroup ""    any    noauth exact   mib2 none none  
  33.  
  34. -----------------------------------------------------------------------------  
  35.  
  36. # Here is a commented out example configuration that allows less  
  37. # restrictive access.  
  38.  
  39. # YOU SHOULD CHANGE THE "COMMUNITY" TOKEN BELOW TO A NEW KEYWORD ONLY 
  40. # KNOWN AT YOUR SITE.   YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO 
  41. # SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE.  
  42.  
  43. ##    sec.name   source       community  
  44. #com2sec local     localhost    COMMUNITY  
  45. #com2sec mynetwork NETWORK/24    COMMUNITY  
  46.  
  47. ##     group.name sec.model   sec.name 
  48. #group MyRWGroup   any        local 
  49. #group MyROGroup   any        mynetwork  
  50. #  
  51. #group MyRWGroup   any        otherv3user  
  52. #...  
  53.  
  54. ##           incl/excl subtree                          mask  
  55. #view all included   .1                            80  
  56.  
  57. ## -or just the mib2 tree-  
  58.  
  59. #view mib2 included   .iso.org.dod.internet.mgmt.mib-2 fc  
  60. #view mib2 included   .iso.org.dod.internet.mgmt.mib-2 fc  
  61.  
  62.  
  63. ##             context sec.model sec.level prefix read write   notif  
  64. #access MyROGroup ""    any    noauth 0    all none none  
  65. #access MyRWGroup ""    any    noauth 0    all all all 
  66.  
  67.  
  68. 其实配制一个snmpd.conf文件不算太难,  
  69. (1)首选是定义一个共同体名(community),这里是public,及可以访问这个public的用户名(sec name),这里是notConfigUser。Public相当于用户notConfigUser的密码:)  
  70. #    sec.name   source       community  
  71. com2sec notConfigUser   default    public 
  72. (2)定义一个组名(groupName)这里是notConfigGroup,及组的安全级别,把notConfigGroup这个用户加到这个组中。  
  73.          groupName    securityModel securityName  
  74. group notConfigGroup v1           notConfigUser    
  75. group notConfigGroup v2c           notConfigUser  
  76. (3)定义一个可操作的范围(view)名, 这里是all,范围是 .1  
  77. #    name           incl/excl     subtree       mask(optional)  
  78.    view   all          included     .1  
  79.    (4)定义notConfigUser这个组在all这个view范围内可做的操作,这时定义了notConfigUser组的成员可对.1这个范围做只读操作。  
  80.     #    group       context sec.model sec.level prefix read write   notif  
  81. access   notConfigGroup ""    any    noauth exact   all   none none  
  82.  
  83. ok,这样我们的snmpd.conf文件就基本配成了,用service   snmpd   restart重启snmpd服务。现在我们做一个测试,在监控机上打下面的命令:  
  84.    [root@wy2 root]# snmpwalk -v 1 192.168.13.103 -c public system  
  85. SNMPv2-MIB::sysDescr.0 = STRING: Linux wy1 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686  
  86. SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10  
  87. SNMPv2-MIB::sysUpTime.0 = Timeticks: (7565377) 21:00:53.77  
  88. SNMPv2-MIB::sysContact.0 = STRING: Root <root@wuying.com>; (configure /etc/snmp/snmp.local.conf)  
  89. SNMPv2-MIB::sysName.0 = STRING: wy1  
  90. SNMPv2-MIB::sysLocation.0 = STRING: wy1.wuying.com (edit /etc/snmp/snmpd.conf)  
  91. SNMPv2-MIB::sysORLastChange.0 = Timeticks: (10) 0:00:00.10  
  92. ``````````````````````  
  93. “Linux wy1 2.4.20-8smp”操作系统的信息已经出来了:)  
  94. 现在我们在目标机上来写一些脚本来显标MEM、CPU、DiskIO  
  95. MEM数据的抓取脚本:  
  96. [root@wy1 root]# cat   mfree.sh  
  97. #!/bin/sh  
  98. /usr/bin/free -m | grep Mem |awk '{print $4}' 
  99. /usr/bin/free -m | grep Mem |awk '{print $2}' 
  100. [root@wy1 root]# sh   mfree.sh (上面一个数据是内存使用量,下面的是内存总量,M)  
  101. 442  
  102. 1006  
  103. CPU数据的抓取脚本  
  104. [root@wy1 root]# cat   cpustat.sh  
  105. #!/bin/sh  
  106. idle=`sar   -u 1 3 | grep Average | awk '{print $6}'`  
  107. used=`echo "101 - $idle" | bc -l -s`  
  108. echo $used  
  109. echo $idle  
  110. DiskIO数据的抓取脚本  
  111. [root@wy1 root]# cat   iostat.sh (显示硬盘IO,k/s)  
  112. #!/bin/sh  
  113. used1=`sar -d 1 3 | tail -1 | awk '{print $4}'`  
  114. used2=`echo "$used1 / 2" | bc -l`  
  115. echo $used2  
  116. echo $used2  
  117.  
  118. 好现在我们已经能得到这数据了,怎么才能让监控主机通过snmpd得到这些数据呢?可以在目标主机的/etc/snmp/snmpd.conf文件下面加个这些行:  
  119. exec .1.3.6.1.4.1.2021.53 mfree /bin/sh /root/mfree.sh  
  120. exec .1.3.6.1.4.1.2021.54 cpustat /bin/sh /root/cpustat.sh  
  121. exec .1.3.6.1.4.1.2021.55 iostat /bin/sh /root/iostat.sh  
  122. service   snmpd   restart   重启目标主机上的snmpd服务。  
  123. 这样在监控主机上运行:  
  124. [root@wy2 root]# snmpwalk -v 1   192.168.13.103 -c public .1.3.6.1.4.1.2021.53  
  125. UCD-SNMP-MIB::ucdavis.53.1.1 = INTEGER: 1  
  126. UCD-SNMP-MIB::ucdavis.53.2.1 = STRING: "mfree" 
  127. UCD-SNMP-MIB::ucdavis.53.3.1 = STRING: "/bin/sh /root/mfree.sh" 
  128. UCD-SNMP-MIB::ucdavis.53.100.1 = INTEGER: 0  
  129. UCD-SNMP-MIB::ucdavis.53.101.1 = STRING: "442" 
  130. UCD-SNMP-MIB::ucdavis.53.101.2 = STRING: "1006" 
  131. UCD-SNMP-MIB::ucdavis.53.102.1 = INTEGER: 0  
  132. 其中UCD-SNMP-MIB::ucdavis.53.101.1 = STRING: "442" 中的442就是mfree.sh输出的第一个数据,1006是mfree.sh输出的第二个数据。OK,再做一下加工:  
  133. [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}' 
  134. 443  
  135. 1006  
  136. 好,我们已经通过snmpd从监控主机上得到了目标主机上内存使用的这两个数据了:),其它的两个脚本也一样:  
  137.    CPU使用、空闲。  
  138. [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}' 
  139. 1.17  
  140. 99.83  
  141. DISK IO 状态:  
  142. [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}' 
  143. 43.00000000000000000000  
  144. 43.00000000000000000000  
  145.  
  146. 最后是编辑监控主机上的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文件改的。(在精华里,大家可以看一下)。  
  147. [root@wy1 root]# cat /home/httpd/mrtg/103/mrtg.cfg  
  148. # Created by 
  149. # /usr/bin/cfgmaker --global 'WorkDir: /home/httpd/mrtg/net' --global 'Options[_]:growright,bits' --ifref=ip public@192.168.13.103  
  150.  
  151.  
  152. ### Global Config Options  
  153.  
  154. #   for UNIX  
  155. # WorkDir: /home/http/mrtg  
  156.  
  157. #   or for NT  
  158. # WorkDir: c:\mrtgdata  
  159.  
  160. ### Global Defaults  
  161.  
  162. #   to get bits instead of bytes and graphs growing to the right 
  163. # Options[_]: growright, bits  
  164.  
  165. WorkDir: /home/httpd/mrtg/103  
  166. Options[_]:growright,bits  
  167. Language: chinese  
  168. ##############################################  
  169. # System: wy1  
  170. # Description: Linux wy1 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686  
  171. # Contact: Root <root@wuying.com>; (configure /etc/snmp/snmp.local.conf)  
  172. # Location: wy1.wuying.com (edit /etc/snmp/snmpd.conf)  
  173. ##############################################  
  174.  
  175.  
  176. ### Interface 2 >;>; Descr: 'eth0' | Name'' | Ip: '192.168.13.103' | Eth: '00-06-5b-19-9d-ea' ###  
  177.  
  178. Target[192.168.13.103_192.168.13.103]: /192.168.13.103:public@192.168.13.103:  
  179. SetEnv[192.168.13.103_192.168.13.103]: MRTG_INT_IP="192.168.13.103" MRTG_INT_DESCR="eth0" 
  180. MaxBytes[192.168.13.103_192.168.13.103]: 1250000  
  181. Xsize[192.168.13.103_192.168.13.103]: 300  
  182. Ysize[192.168.13.103_192.168.13.103]: 100  
  183. #kmg[192.168.13.103_192.168.13.103]: K/s,M/s  
  184. #kilo[192.168.13.103_192.168.13.103]: 1024  
  185. Title[192.168.13.103_192.168.13.103]: Traffic for eth0 192.168.13.103 -- wy1  
  186. PageTop[192.168.13.103_192.168.13.103]: <H1>;Traffic for eth0 192.168.13.103 -- wy1</H1>;  
  187. #Options[192.168.13.103_192.168.13.103]: growright,gauge,nopercent  
  188.  
  189. ### Interface 3 >;>; Descr: 'eth1' | Name'' | Ip: '172.16.0.188' | Eth: '00-06-5b-19-9d-e9' ###  
  190.  
  191. Target[192.168.13.103_172.16.0.188]: /172.16.0.188:public@192.168.13.103:  
  192. SetEnv[192.168.13.103_172.16.0.188]: MRTG_INT_IP="172.16.0.188" MRTG_INT_DESCR="eth1" 
  193. Xsize[192.168.13.103_172.16.0.188]: 300  
  194. Ysize[192.168.13.103_172.16.0.188]: 100  
  195. MaxBytes[192.168.13.103_172.16.0.188]: 1250000  
  196. #ShortLegend[192.168.13.103_172.16.0.188]:  
  197. #kmg[192.168.13.103_172.16.0.188]: b/s,Kb/s  
  198. #kilo[192.168.13.103_172.16.0.188]: 1024  
  199. Title[192.168.13.103_172.16.0.188]: Traffic for eth1 172.16.0.188 -- wy1  
  200. PageTop[192.168.13.103_172.16.0.188]: <H1>;Traffic for eth1 172.16.0.188 -- wy1</H1>;  
  201. #Options[192.168.13.103_172.16.0.188]: growright,gauge,nopercent  
  202.  
  203. ###MEM status  
  204.  
  205. 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}'`  
  206. #Targey[wy1_mem]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org  
  207. Xsize[wy1_mem]: 300  
  208. Ysize[wy1_mem]: 100  
  209. Ytics[wy1_mem]: 7  
  210. MaxBytes[wy1_mem]: 1006  
  211. Title[wy1_mem]:Memory State of WY1 IP 192.168.13.103 Server  
  212. PageTop[wy1_mem]:<H1>;Memory State of WY1 IP 192.168.13.103 Server</H1>;  
  213. ShortLegend[wy1_mem]: MB  
  214. kmg[wy1_mem]: MB  
  215. kilo[wy1_mem]:1024  
  216. YLegend[wy1_mem]: Memory Usage  
  217. Legend1[wy1_mem]: 可用内存  
  218. Legend2[wy1_mem]: 总内存量  
  219. Legend3[wy1_mem]: 可用内存  
  220. Legend4[wy1_mem]: 总内存量  
  221. LegendI[wy1_mem]: 可用内存  
  222. LegendO[wy1_mem]: 总内存量  
  223. Options[wy1_mem]: growright,gauge,nopercent  
  224.  
  225. ###cpu status  
  226. 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}'`  
  227. #Targey[wy1_CPU]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org  
  228. Xsize[wy1_CPU]: 300  
  229. Ysize[wy1_CPU]: 100  
  230. Ytics[wy1_CPU]: 7  
  231. MaxBytes[wy1_CPU]: 100  
  232. Title[wy1_CPU]:CPU State of WY1 IP 192.168.13.103 Server  
  233. PageTop[wy1_CPU]:<H1>;CPU State of WY1 IP 192.168.13.103 Server</H1>;  
  234. ShortLegend[wy1_CPU]:  
  235. kmg[wy1_CPU]: %  
  236. #kilo[wy1_CPU]:1024  
  237. YLegend[wy1_CPU]: CPU Usage  
  238. Legend1[wy1_CPU]: 已用CPU:  
  239. Legend2[wy1_CPU]: 可用CPU:    
  240. LegendI[wy1_CPU]: 已用CPU:  
  241. LegendO[wy1_CPU]: 可用CPU:  
  242. Options[wy1_CPU]: growright,gauge,nopercent  
  243.  
  244. ###iostat  
  245. ###cpu status  
  246. 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}'`  
  247. #Targey[wy1_IO]: memTotalReal.0&memAvailReal.0:holdata@holdata.3322.org  
  248. Xsize[wy1_IO]: 300  
  249. Ysize[wy1_IO]: 100  
  250. Ytics[wy1_IO]: 7  
  251. MaxBytes[wy1_IO]: 10000  
  252. Title[wy1_IO]: DISK IO State of WY1 IP 192.168.13.103 Server  
  253. PageTop[wy1_IO]:<H1>;DISK IO State of WY1 IP 192.168.13.103 Server</H1>;  
  254. ShortLegend[wy1_IO]:  
  255. kmg[wy1_IO]: K/s,M/s  
  256. kilo[wy1_IO]:1024  
  257. YLegend[wy1_IO]: DISK IO SPEED  
  258. Legend1[wy1_IO]: IO速度:  
  259. Legend2[wy1_IO]: IO速度:  
  260. LegendI[wy1_IO]: IO速度:  
  261. LegendO[wy1_IO]: IO速度:  
  262. Options[wy1_IO]: growright,gauge,nopercent  
  263.  
  264.  
  265. 用indexmaker -o   /home/httpd/mrtg/103/index.html   /home/httpd/mrtg/103/mrtg.cfg   生成网页,在crontab 中加入*/5 * * * * mrtg /home/httpd/mrtg/103/mrtg.cfg    
  266. OK,这样我们就能通过mrtg生成的图来监控我们linux的机器的状态了。在IE中打入[url]http://192.168.13.105/mrtg/103[/url],mrtg的监控网页就出来啦(/home/httpd/是我appache的主目录)。当然我们也能用snmpwalk命令来得到安装有snmp服务的win2000机器的状态的数据:  
  267. 如:  
  268.  
  269. [root@wy1 103]# snmpwalk -v 1 192.168.1.5 -c public HOST-RESOURCES-MIB::hrStorage  
  270. HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 3800424 KBytes  
  271. HOST-RESOURCES-MIB::hrStorageIndex.1 = INTEGER: 1  
  272. HOST-RESOURCES-MIB::hrStorageIndex.2 = INTEGER: 2  
  273. HOST-RESOURCES-MIB::hrStorageIndex.3 = INTEGER: 3  
  274. HOST-RESOURCES-MIB::hrStorageIndex.4 = INTEGER: 4  
  275. HOST-RESOURCES-MIB::hrStorageIndex.5 = INTEGER: 5  
  276. HOST-RESOURCES-MIB::hrStorageIndex.6 = INTEGER: 6  
  277. HOST-RESOURCES-MIB::hrStorageType.1 = OID: HOST-RESOURCES-TYPES::hrStorageRemovableDisk  
  278. HOST-RESOURCES-MIB::hrStorageType.2 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk  
  279. HOST-RESOURCES-MIB::hrStorageType.3 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk  
  280. HOST-RESOURCES-MIB::hrStorageType.4 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk  
  281. HOST-RESOURCES-MIB::hrStorageType.5 = OID: HOST-RESOURCES-TYPES::hrStorageCompactDisc  
  282. HOST-RESOURCES-MIB::hrStorageType.6 = OID: HOST-RESOURCES-TYPES::hrStorageVirtualMemory  
  283. HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: A:\  
  284. HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: C:\ Label:   Serial Number 581e89fe  
  285. HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: D:\ Label:New Volume   Serial Number 1cde6e55  
  286. HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: E:\ Label:DATA_BAK   Serial Number 30d29147  
  287. HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: F:\  
  288. HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: Virtual Memory  
  289. HOST-RESOURCES-MIB::hrStorageAllocationUnits.1 = INTEGER: 0 Bytes  
  290. HOST-RESOURCES-MIB::hrStorageAllocationUnits.2 = INTEGER: 4096 Bytes  
  291. HOST-RESOURCES-MIB::hrStorageAllocationUnits.3 = INTEGER: 4096 Bytes  
  292. HOST-RESOURCES-MIB::hrStorageAllocationUnits.4 = INTEGER: 4096 Bytes  
  293. HOST-RESOURCES-MIB::hrStorageAllocationUnits.5 = INTEGER: 0 Bytes  
  294. HOST-RESOURCES-MIB::hrStorageAllocationUnits.6 = INTEGER: 65536 Bytes  
  295. HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 0  
  296. HOST-RESOURCES-MIB::hrStorageSize.2 = INTEGER: 2050287  
  297. HOST-RESOURCES-MIB::hrStorageSize.3 = INTEGER: 15703529  
  298. HOST-RESOURCES-MIB::hrStorageSize.4 = INTEGER: 53263499  
  299. HOST-RESOURCES-MIB::hrStorageSize.5 = INTEGER: 0  
  300. HOST-RESOURCES-MIB::hrStorageSize.6 = INTEGER: 89444  
  301. HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 0  
  302. HOST-RESOURCES-MIB::hrStorageUsed.2 = INTEGER: 1233681  
  303. HOST-RESOURCES-MIB::hrStorageUsed.3 = INTEGER: 591593  
  304. HOST-RESOURCES-MIB::hrStorageUsed.4 = INTEGER: 23583930  
  305. HOST-RESOURCES-MIB::hrStorageUsed.5 = INTEGER: 0  
  306. HOST-RESOURCES-MIB::hrStorageUsed.6 = INTEGER: 50611  
  307. HOST-RESOURCES-MIB::hrStorageAllocationFailures.1 = Counter32: 0  
  308. HOST-RESOURCES-MIB::hrStorageAllocationFailures.2 = Counter32: 0  
  309. HOST-RESOURCES-MIB::hrStorageAllocationFailures.3 = Counter32: 0  
  310. HOST-RESOURCES-MIB::hrStorageAllocationFailures.4 = Counter32: 0  
  311. HOST-RESOURCES-MIB::hrStorageAllocationFailures.5 = Counter32: 0  
  312. HOST-RESOURCES-MIB::hrStorageAllocationFailures.6 = Counter32: 0  
  313. 上面显示的是192.168.1.5这台win2000SERVER的磁盘信息,可以看到盘符、每个分区的空间总量、使用量等。其它的相应建值还有:  
  314. Diskused:                               HOST-RESOURCES-MIB::hrStorageUsed  
  315. CPU:                                  HOST-RESOURCES-MIB::hrProcessorLoad  
  316. RUN Proc:                            HOST-RESOURCES-MIB::hrSWRunName  
  317. SYS Uptime:                             HOST-RESOURCES-MIB::hrSystemUptime SNMPv2-MIB::sysUpTime  
  318. SYS Date:                            HOST-RESOURCES-MIB::hrSystemDate  
  319. SYS Device:                             HOST-RESOURCES-MIB::hrDeviceDescr  
  320. SYS Descr:                            SNMPv2-MIB::sysDescr  
  321. SYS Name:                            SNMPv2-MIB::sysName  
  322. netcard speed:                          IF-MIB::ifSpeed  
  323. netcard physcal address:             IF-MIB::ifPhysAddress  
  324. 这样我们就可以用一台linux主机通过snmp+mrtg来监控多台局域网内的linux/win2000SERVER了:)。  
  325. 现在我最关心的是如何让snmp包穿过防火墙,(我用snmpwalk试了一下,抓不到公司在IDC防火墙后的SERVER的snmp数据)。不然,我就可以用snmp去监控公司在IDC防火墙后的SERVER的状态了。听说perl能实现,但不知用什么样的方法来实现?