net-snmp 官網為 http://www.net-snmp.org
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) 的主要
功能在提供主機運行的資訊,以下僅列出常用的項目(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
--------------------------------------------------------
今天先寫到這裏,改天再補後面部份,但餘下的也不多了
阿骁 回复于:2004-10-23 00:04:19
abel 兄法宝尽出,大家有福了! ^_^
abel 回复于:2004-10-26 20:15:12
net-snmp 官網為 http://www.net-snmp.org.tw
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) 的主要
功能在提供主機運行的資訊,以下僅列出常用的項目(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 v1 lan
#語法為 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
接下來設定 mrtg.cfg (這個 CU 很多文件可以查,就不解釋了),
#mrtg.cfg
WorkDir: /www/htdocs/snmp.enum.org.tw/mrtg
Refresh: 300
Interval: 5
Language: Big5
#noinfo 表示沒有值,取上一次的來用
#perminute 表示要5分鐘的每分鐘平均
Options[_]: growright, noinfo,perminute
#-------------------------------------------------
#我的程式,外接三個參數, enum.sh hostname Community_String Process_name
Target[ns11-seednet-named]:`/root/study/enum.sh ns11.abc.com.tw Taiwan named`
#時間最大為300秒x100
MaxBytes1[ns11-seednet-named]:30000
MaxBytes2[ns11-seednet-named]: 256000
Title[ns11-seednet-named]: ENUM/EPP DNS Server named daemon status
Legend1[ns11-seednet-named]: CPU 時間
Legend2[ns11-seednet-named]: MEM 使用
LegendI[ns11-seednet-named]: CPU 時間(秒/分)
LegendO[ns11-seednet-named]: MEM 使用(KB)
YLegend[ns11-seednet-named]: CPU/MEM usage
PageTop[ns11-seednet-named]: <h1>; NS11 DNS Server status </h1>; <object data="./ns11_named.html" width=500 height=150 style="border-style:outset; bgcolor:#336699;">; </object>;
#數值檢查,CPU 時間佔用每分鐘超過10秒要發信警告,MEMORY 佔用超過每分 1000KB 也要警告, MinO 為小於意思,也要警告
ThreshDir: /www/htdocs/211.72.210.251/mrtg
ThreshMaxI[_]: 1000
ThreshMinI[_]: 1
ThreshMaxO[_]: 1000
ThreshMinO[_]: 1
# IN 項的外部程式
# OUT 項的外部程式
ThreshProgI[ns11-seednet-named]:/www/htdocs/snmp.enum.org.tw/mrtg/alert/mail.sh
ThreshProgO[ns11-seednet-named]:/www/htdocs/snmp.enum.org.tw/mrtg/alert/mail.sh
--------------------------------------------------------
mail.sh 內容,mrtg 會呼叫這個程式來做 Alert, 參數為 target_name 警告值 現在值:
#!/bin/sh
target=$1
alert_val=$2
curr_val=$3
echo -e "Dear Sir:\n MRTG 發現監測的系統中 $target 的 $curr_val 超過或小於 $alert_val 您所設定的警告值,請您了解情況, \nRef:http://xxx.domain.net.tw/mrtg/index.html\n System Admin\n" | sendmail -oi -t abel@localhost
如此即可完成囉... mrtg 不明處請自看 www.mrtg.org , snmpd 要多做才會熟,其他的就靠平時累積實力囉
結果:
CPU/MEMORY:
Query:

abel 回复于:2004-10-26 20:25:12
補充一下,
Target[ns11-seednet-named]:`/root/study/enum.sh ns11.abc.com.tw Taiwan named`
這個地方的 ns11.abc.com.tw 為您的主機名,上面要跑 snmpd
Taiwan 為 Community_string
named 為程式名稱,您只要改這個為 httpd, 就可以做到 httpd monitor
改為 mysql 也可以做 mysql 這方面的監測,只要在 ps -aux 中看得到的
東西都可以
snmpd 中提供很多有用的東西,建議個人若有興趣自己研究看看,尤其
在 remote monitor 上很好用,另外,若有心可再研究 snmpset, 來設定
系統一些參數值,或是 snmpd-trap + OpenNMS 來做網管,都是很好用的
東西,且這些全是 Open Source 的,貴的話,可能你就得買一套 HPOpenView
也行,但是若沒有 sense , 買了恐怕用處也不大
以一般 snmpd 來做 remote monitor 項目可以有
tcpConnState/tcpConnLocalPort.. 每個 port 的 connection 數,例如80 port (http)
hrStorageDescr/hrStorageSize/hrStorageUsed , Disk Usage
mtaReceivedMessages... sendmail 的收發流量(Qmail 沒見過),Ex:smtp/esmtp/relay/procmail (外寄,轉信,本地等 ...)
本機 CPU/Memory 狀況,那要用 exec 來做較好
coolzsb 回复于:2004-10-28 13:13:55
abel兄台是否有遇到过这样的情况:
在多cpu的系统上,抓ucd-snmp的ssCpuUser、ssCpuSystem、ssCpuIdle这几个节点的数据不是很正常,误差相当巨大呢
至于windows系统snmp节点信息,推荐用http://www.snmp4tpc.com/上面的snmpd扩展,可以抓到windows自己的performance monitor 可以监测到的几乎所有数据,不过对于某些节点的信息,比方说IIS的一些数据,可能会存在某些不太准确的情况出现。总体来说,还是相当好用的
abel 回复于:2004-10-28 14:02:28
http://www.net-snmp.org/FAQ.html#After_a_while_the_agent_stops_responding__and_starts_eating_CPU_time___Why_
從這裏往下看連續幾個問題都是關於 CPU 的
總歸一句話,用 {ucd,net}-snmp 抓 CPU 的時間基本上可能不準確
更何況多 CPU 狀況
如果您看一下 UCD-SNMP-MIB.txt 中,相關項目:
ssCpuUser OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"percentages of user CPU time. Deprecated, replaced by the ssCpuRawUser
object"
::= { systemStats 9 }
就我過去的了解及對上面語意的理解,他建議用 ssCpuRawUser ...
等自己來計算,而這個值是 Counter32 , 單位是百分之一秒
top 看到的,和 snmp 看到的不一致,從我的經驗來看是很正常的
至於 window 版的環境,因為個人單位全無 Windows Server 性質東西
最多也不過 desktop 用 windows 而以,故較無需求,不過有需要的人可
以根據 coolzsb 兄的建議試試.
相信 coolzsb 對 snmp 亦有相當的研究哦 ....
coolzsb 回复于:2004-10-28 17:37:03
哦,我说得情况是比较特殊的,我没有说清楚
为了测试我这边新进的服务器的稳定度,我在机器上开了20个线程,每个线程编译kernel 100次,这时cpu的占用率用top看,基本上稳定在90%~99%占用。而奇怪的是,在相当长的一段时间内,snmp抓到的ssCpuIdle一直是90的,直到过了一天多,才下降到50左右,还是相差太远了。而在这之前,在单cpu的机器上的数据还是比较准确可靠的
至于abel兄台建议的ssCpuRawUser等节点,有机会我会测试一下,看看是不是准确一些,多谢abel的提醒。赫赫,当初就是看着abel兄台的rrdtool教程才入的门,真的是要非常非常严重的感谢abel的系列中文教程、以及abel的辛勤劳动
abel 回复于:2004-10-28 18:07:30
引用:初就是看着abel兄台的rrdtool教程才入的门,真的是要非常非常严重的感谢abel的系列中文教程、以及abel的辛勤劳动
這沒有什麼的,太多人被 rrdtool 的"複雜性" 夏倒了...所以才會寫出來
其實會用後,才會發現 rrdtool 比 mrtg 等好用多了,只是手工的地方也多
用 rrdtool 可以實時監測上千個Target 一分鐘以內的 interval , mrtg 在許多方面卻力有未逮了.
mrtg 簡單好學好用, rrdtool 不會很難,不好學(要自己寫取值程式),但更好用
|