职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1541|回复: 4

DNS CPU/Memory Usage 統計~ SNMP 版

[复制链接]
不仅有点帅 发表于 2008-7-14 12:53 | 显示全部楼层 |阅读模式
DNS CPU/Memory Usage 統計~ SNMP 版
1.下載與安裝 net-snmp (舊名為 ucd-snmp)

$>;wgethttp://voxel.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.1.2.tar.gz
$>;./configure --prefix=/usr/local                 \\
--with-sys-contact=\"abel@localhost\"                 \\
--with-sys-location=\"Taiwan,Tel:123456767\"        \\
--with-mib-modules=\"misc/ipfwacc mibII host disman/event-mib ucd_snmp agent_mibs agentx notification target utilities host disman/event-mib smux ucd-snmp/diskio tunnel mibII/mta_sendmail ap2_snmp\"        \\
--with-sysconfdir=\"/usr/local/etc/snmp\" --enable-shared  --with-default-snmp-version=2
$>;make
$>;make install


理論上這些過程應不會碰到任何問題的 (我在 RH 7.3/8.0.9.0 都很順利)若您使用不同的平台,
從官網的 download 去找,幾乎都可以找到,若習慣用 RPM 就下 rpm file 即可(我沒用過),SunOs  
就下 SunOS 版的.


configure 我用的參數,您可在 ./configure --help 時得到說明,僅就最重 --with-mib-modules  
做些說明,這個意思即是要把某些 mib 功能直接加入 snmp 中,我個人習慣都是在 complier 時就
加進來,不然若要用 snmpd.conf 中的 dlmod (動態配置) 你多少還是得回來重做 module.
對於本主題而言,最重要的是 host 這個 MIBs 一定要載入,這個 MIB(HOST-RESOURCES-MIB) 的主要
功能在提供主機咝械馁Y訊,以下僅列出常用的項目(http://www.net-snmp.org/mibs/host.html):

hrStorageTable          儲存設備的資訊,例如 Disk,Memory 等,空間多少,使用了多少 ...
hrDeviceTable                 週邊資訊,如 CPU/Disk/Ethernet/CDROM ...
hrFSTable                 硬碟資訊,掛載等
hrSWRunTable                 就是你在command mode 下 ps 看到的東西,本主?#125;項目之一
hrSWRunPerfTable         每個 Process CPU/Memory  清單,本主?#125;項目之二
hrSWInstalledTable         本機 RPM 安裝清單



snmpd.conf 設定,精簡版  
依本例, snmpd.conf 在 /usr/local/etc/snmp/snmpd.conf , 本檔可以啟動參數 snmpd -c 指定,
內容如下(是的,只要四行就可以了,多寫作用也不大,):

#定義一像ACL (SECURITY) 的東西,名為 lan, IP 段為 211.72.210/23, Community_string 為 Taiwan
com2sec lan 211.72.210.0/23 Taiwan

#語法為 group NAME MODEL SECURITY,MODEL 為採用什麼 SNMP 協定版本
group ROGroup  lan v1

#語法為 view NAME TYPE SUBTREE [MASK], 這個東西你自己查查,主要通常用 com2sec 等合用
#達到不同的來源,可以存取不同的 OID (MIB) 值,尤其像 ISP ,若客戶租戶線路,他可以單獨提
#供某個 Interface 給他來做 snmp 查詢,本主?#125;無意離?#125;,請自休為重
#此功能在許多 Device Vendor  的 SNMP 功能皆相同
view all included .1

#語法為 access NAME CONTEXT MODEL LEVEL PREFX READ WRITE NOTIFY
#NAME 要對應,因為本例使用 v1,CONTEXT 必為空 (\"\",LEVEL 必為 noauth (無認證要求,
#只要 Community_String 對,來源 IP 符合即可),MODEL 在本例需為 v1 或 any(都可以之意)
#R/W/N 字意很明顯,我們只要讀而以,不要求寫及 Trap
access ROGroup \"\" any noauth prefix all none none


其實 SNMP 是很簡單的,一般人通常卡在 snmpd.conf 上,或對 OID/MIB 架構不熟,反把他想的太過複雜

再來,啟動就好:

$>;/usr/local/sbin/snmpd -c /usr/local/etc/snmpd.conf
$>;cat /var/log/snmpd.log
NET-SNMP version 5.1.2



一切正常 . 是的,若您跟我一樣,應不會有問題才是
試咝幸幌驴纯?

$>;/usr/local/bin/snmpwalk 211.72.210.251 -c Taiwan  -v 1 |more
SNMPv2-MIB::sysDescr.0 = STRING: Linux log.mydomain.net 2.4.18-18mppe #1 Sat Dec 7 11:23:44 CET 2002 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (267287) 0:44:32.87
SNMPv2-MIB::sysContact.0 = STRING: Root <abel@localhost>;
SNMPv2-MIB::sysName.0 = STRING: log.mydomain.net
SNMPv2-MIB::sysLocation.0 = STRING: Taiwan
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (3) 0:00:00.03
SNMPv2-MIB::sysORID.1 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.2 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.3 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.4 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.5 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.6 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.7 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.8 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.9 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.10 = OID: TUNNEL-MIB::tunnelMIB
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB module to describe generic objects for network interface sub-layers
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.3 = STRING: The MIB module for managing TCP implementations
....以下略



跑起來也正常,請記得,Community_string 本例不為 public, 請知變通
由於我們咝?v1, 所以需以 -v 1 來 walk through .


抓 Process 資料方法  
我們先看例子,再來看推演:

#取得整個 OID Tree (-c Community_String -v snmp_version)
$>;/usr/local/bin/snmpwalk 211.72.210.251 -c TwNic  -v 1 >;log.snmp

#找出 named 進程,得知 named PID 為 10422 (即 Index 值)
$>;cat log.snmp | grep named
HOST-RESOURCES-MIB::hrSWRunName.10422 = STRING: \"named\"

#找出 10422 相關項目
$>;cat log.snmp | grep 10422
hrSWRunIndex.10422 = INTEGER: 10422        #Index 可取得所有 PID 值
hrSWRunName.10422 = STRING: \"named\"        #RunName 為此PID 跑 named
hrSWRunID.10422 = OID: PNNI-MIB::zeroDotZero        #?#93;有作用,因為 PNNI-MIB 項目
hrSWRunPath.10422 = STRING: \"named\"        #帶路徑的全名,本例無,您看看自身例子
hrSWRunParameters.10422 = \"\"                #啟動參數,本例無,例如 -c -g 等參數
hrSWRunType.10422 = INTEGER: application(4)        # 4 表應用程式(application)
hrSWRunStatus.10422 = INTEGER: runnable(2)        # 2 表休息狀態(Sleep)
hrSWRunPerfCPU.10422 = INTEGER: 12063                # CPU 使用時間,單位為百分之一秒
hrSWRunPerfMem.10422 = INTEGER: 2276 KBytes        # 佔用記憶體,單位為 KB



個人認為,程度好一點的人看到這裏大概知道怎做下去了,這個功能無法以 mrtg 方式直接
指定 OID 值來做,因為 Index (PID) 為變,所以我們得透過程式來產生 mrtg 資料:

#!/bin/sh
host=$1
community_string=$2
process_name=$3

# 本段在取該主機的描述事項,並轉存成 html 檔,形成之格式如
# sysDescr: Linux ttn239.tnwic.net.tw 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686
# sysObjectID: OID: enterprises.8072.3.2.10
# sysUpTime: Timeticks: (183103803) 21 days, 4:37:18.03
# sysName: ttn239.tnwic.net.tw
# sysLocation: TTN

info=\"system.sysDescr.0 system.sysObjectID.0 system.sysUpTime.0 system.sysName.0 system.sysLocation.0\"
rm -f /www/htdocs/snmp.enum.org.tw/mrtg/${host}_${process_name}.html
for mib in $info
do
name=`echo $mib | cut -f 2 -d\'.\'`
str=`snmpget -v 1 $host -c $community_string $mib | sed -e \'s/.*=//g\' `
echo \"$name: $str<br>;\" >;>;/www/htdocs/snmp.enum.org.tw/mrtg/${host}_${process_name}.html
done

CPU_SUM=0
MEM_SUM=0

#抓取該 Process Name 的所有 PID (即 Index,此時才知 Index 為何)
ALL_PID=`snmpwalk -v 1  $host -c $community_string hrSWRunName | grep $process_name | sed -e \'s/.*hrSWRunName\\.\\(.*\\) = \"\\(.*\\)\"/\\1/g\'`

if [ ${#ALL_PID} -lt 1 ];
then echo \"$host 的 $process_name 巳經陣亡了,請儘速處理\" | mail abel@mydomain.net
for PID in $ALL_PID
do

#取得 CPU 使用時間,單位為 1/100 秒,及記憶體用量
#這裏要注意 CPU Time 值為累加 (COUNTER), Memory 不見得累加哦(GAUGE)
RUN_CPU=`snmpwalk  $host -c $community_string hrSWRunPerfCPU.$PID|sed -e \'s/.*= \\(.*\\)/\\1/g\'`
RUN_MEM=`snmpwalk  $host -c $community_string hrSWRunPerfMem.$PID|sed -e \'s/.*= \\(.*\\) K[Bb].*/\\1/g\'`

#加總計算
CPU_SUM=`expr $CPU_SUM + $RUN_CPU`
MEM_SUM=`expr $MEM_SUM + $RUN_MEM`
done

#輸出結果
echo $CPU_SUM

echo $MEM_SUM以寂寞的姿势仰望苍穹
恍然大悟
涟漪着叛逆血液的我
固执于轮回
终将遍体鳞伤
俺是一只狼 发表于 2008-7-14 12:54 | 显示全部楼层
厉害
娜娜乖乖女 发表于 2008-7-14 12:54 | 显示全部楼层
sar -u 1 5
yida 发表于 2008-7-14 12:55 | 显示全部楼层
没有看懂楼主要统计的意思
妈妈咪呀 发表于 2012-3-27 22:50 | 显示全部楼层
对于那些外国产品我有时侯也用不习惯,就是英文不太会啊,还有有些配置不简单的,所以我
建议你还是用国内的软件吧,比如说那个美信CreCloud的(www.mxsoft.com),中文的,安装
简单,方便,还是免费的
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-17 02:40 , Processed in 0.139511 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表