免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9382 | 回复: 7
打印 上一主题 下一主题

[DNS] 給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版 [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-22 22:21 |只看该作者 |倒序浏览
net-snmp 官網為 http://www.net-snmp.org

1.下載與安裝 net-snmp (舊名為 ucd-snmp)

  1. $>;wgethttp://voxel.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.1.2.tar.gz
  2. $>;./configure --prefix=/usr/local                 \
  3. --with-sys-contact="abel@localhost"                 \
  4. --with-sys-location="Taiwan,Tel:123456767"        \
  5. --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"        \
  6. --with-sysconfdir="/usr/local/etc/snmp" --enable-shared  --with-default-snmp-version=2
  7. $>;make
  8. $>;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):

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


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

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

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

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

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

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

再來,啟動就好:

  1. $>;/usr/local/sbin/snmpd -c /usr/local/etc/snmpd.conf
  2. $>;cat /var/log/snmpd.log
  3. NET-SNMP version 5.1.2
复制代码


一切正常 . 是的,若您跟我一樣,應不會有問題才是
試運行一下看看:

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


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


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

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

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

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


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

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

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

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

  19. CPU_SUM=0
  20. MEM_SUM=0

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

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

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

  31. #加總計算
  32. CPU_SUM=`expr $CPU_SUM + $RUN_CPU`
  33. MEM_SUM=`expr $MEM_SUM + $RUN_MEM`
  34. done

  35. #輸出結果
  36. echo $CPU_SUM
  37. echo $MEM_SUM

复制代码


--------------------------------------------------------
今天先寫到這裏,改天再補後面部份,但餘下的也不多了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-23 00:04 |只看该作者

給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版

abel 兄法宝尽出,大家有福了! ^_^

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-10-26 20:15 |只看该作者

給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版

net-snmp 官網為 http://www.net-snmp.org.tw

1.下載與安裝 net-snmp (舊名為 ucd-snmp)

  1. $>;wgethttp://voxel.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.1.2.tar.gz
  2. $>;./configure --prefix=/usr/local                 \
  3. --with-sys-contact="abel@localhost"                 \
  4. --with-sys-location="Taiwan,Tel:123456767"        \
  5. --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"        \
  6. --with-sysconfdir="/usr/local/etc/snmp" --enable-shared  --with-default-snmp-version=2
  7. $>;make
  8. $>;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):

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


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

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

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

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

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

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

再來,啟動就好:

  1. $>;/usr/local/sbin/snmpd -c /usr/local/etc/snmpd.conf
  2. $>;cat /var/log/snmpd.log
  3. NET-SNMP version 5.1.2
复制代码


一切正常 . 是的,若您跟我一樣,應不會有問題才是
試運行一下看看:

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


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


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

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

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

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


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

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

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

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

  19. CPU_SUM=0
  20. MEM_SUM=0

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

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

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

  31. #加總計算
  32. CPU_SUM=`expr $CPU_SUM + $RUN_CPU`
  33. MEM_SUM=`expr $MEM_SUM + $RUN_MEM`
  34. done

  35. #輸出結果
  36. echo $CPU_SUM
  37. echo $MEM_SUM

复制代码


接下來設定 mrtg.cfg (這個 CU 很多文件可以查,就不解釋了),

  1. #mrtg.cfg
  2. WorkDir: /www/htdocs/snmp.enum.org.tw/mrtg
  3. Refresh: 300
  4. Interval: 5
  5. Language: Big5
  6. #noinfo 表示沒有值,取上一次的來用
  7. #perminute 表示要5分鐘的每分鐘平均
  8. Options[_]: growright, noinfo,perminute
  9. #-------------------------------------------------
  10. #我的程式,外接三個參數, enum.sh hostname Community_String Process_name
  11. Target[ns11-seednet-named]:`/root/study/enum.sh ns11.abc.com.tw Taiwan named`
  12. #時間最大為300秒x100
  13. MaxBytes1[ns11-seednet-named]:30000
  14. MaxBytes2[ns11-seednet-named]: 256000
  15. Title[ns11-seednet-named]: ENUM/EPP DNS Server named daemon status
  16. Legend1[ns11-seednet-named]: CPU 時間
  17. Legend2[ns11-seednet-named]: MEM 使用
  18. LegendI[ns11-seednet-named]: CPU 時間(秒/分)
  19. LegendO[ns11-seednet-named]: MEM 使用(KB)
  20. YLegend[ns11-seednet-named]: CPU/MEM usage
  21. 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>;
  22. #數值檢查,CPU 時間佔用每分鐘超過10秒要發信警告,MEMORY 佔用超過每分 1000KB 也要警告, MinO 為小於意思,也要警告
  23. ThreshDir: /www/htdocs/211.72.210.251/mrtg
  24. ThreshMaxI[_]: 1000
  25. ThreshMinI[_]: 1
  26. ThreshMaxO[_]: 1000
  27. ThreshMinO[_]: 1
  28. # IN 項的外部程式
  29. # OUT 項的外部程式
  30. ThreshProgI[ns11-seednet-named]:/www/htdocs/snmp.enum.org.tw/mrtg/alert/mail.sh
  31. ThreshProgO[ns11-seednet-named]:/www/htdocs/snmp.enum.org.tw/mrtg/alert/mail.sh
  32. --------------------------------------------------------
复制代码


mail.sh 內容,mrtg 會呼叫這個程式來做 Alert, 參數為 target_name 警告值 現在值:

  1. #!/bin/sh
  2. target=$1
  3. alert_val=$2
  4. curr_val=$3

  5. 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:

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-10-26 20:25 |只看该作者

給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版

補充一下,
  1. 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 來做較好

论坛徽章:
0
5 [报告]
发表于 2004-10-28 13:13 |只看该作者

給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版

abel兄台是否有遇到过这样的情况:

在多cpu的系统上,抓ucd-snmp的ssCpuUser、ssCpuSystem、ssCpuIdle这几个节点的数据不是很正常,误差相当巨大呢


至于windows系统snmp节点信息,推荐用http://www.snmp4tpc.com/上面的snmpd扩展,可以抓到windows自己的performance monitor 可以监测到的几乎所有数据,不过对于某些节点的信息,比方说IIS的一些数据,可能会存在某些不太准确的情况出现。总体来说,还是相当好用的

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-10-28 14:02 |只看该作者

給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版

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 中,相關項目:

  1. ssCpuUser OBJECT-TYPE
  2.     SYNTAX      Integer32
  3.     MAX-ACCESS  read-only
  4.     STATUS      deprecated
  5.     DESCRIPTION
  6.         "percentages of user CPU time. Deprecated, replaced by the ssCpuRawUser
  7.         object"
  8.     ::= { systemStats 9 }
复制代码


就我過去的了解及對上面語意的理解,他建議用 ssCpuRawUser ...
等自己來計算,而這個值是 Counter32 , 單位是百分之一秒

top 看到的,和 snmp 看到的不一致,從我的經驗來看是很正常的

至於 window 版的環境,因為個人單位全無 Windows Server 性質東西
最多也不過 desktop 用 windows 而以,故較無需求,不過有需要的人可
以根據 coolzsb  兄的建議試試.

相信 coolzsb 對 snmp 亦有相當的研究哦 ....

论坛徽章:
0
7 [报告]
发表于 2004-10-28 17:37 |只看该作者

給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版

哦,我说得情况是比较特殊的,我没有说清楚

为了测试我这边新进的服务器的稳定度,我在机器上开了20个线程,每个线程编译kernel 100次,这时cpu的占用率用top看,基本上稳定在90%~99%占用。而奇怪的是,在相当长的一段时间内,snmp抓到的ssCpuIdle一直是90的,直到过了一天多,才下降到50左右,还是相差太远了。而在这之前,在单cpu的机器上的数据还是比较准确可靠的

至于abel兄台建议的ssCpuRawUser等节点,有机会我会测试一下,看看是不是准确一些,多谢abel的提醒。赫赫,当初就是看着abel兄台的rrdtool教程才入的门,真的是要非常非常严重的感谢abel的系列中文教程、以及abel的辛勤劳动

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-10-28 18:07 |只看该作者

給阿骁兄的賀禮三:DNS CPU/Memory Usage 統計~ SNMP 版

初就是看着abel兄台的rrdtool教程才入的门,真的是要非常非常严重的感谢abel的系列中文教程、以及abel的辛勤劳动

這沒有什麼的,太多人被 rrdtool 的"複雜性" 夏倒了...所以才會寫出來
其實會用後,才會發現 rrdtool 比 mrtg 等好用多了,只是手工的地方也多
用 rrdtool 可以實時監測上千個Target 一分鐘以內的 interval , mrtg 在許多方面卻力有未逮了.

mrtg 簡單好學好用, rrdtool 不會很難,不好學(要自己寫取值程式),但更好用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP