歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

如何使用cacti獲取snmp發送的自定義信息後作圖

一、實際需求
  
  服務器運行了lighttpd,主要為了統計當前連接數,然後cacti來畫出當前連接數的統計圖:這裡說一下有幾個方法來實現這個功能:
  1、snmpget直接取值,經常發生取值不准確的問題:
  
  # snmpget -c public -v 2c 127.0.0.1 .1.3.6.1.2.1.6.9.0
  TCP-MIB::tcpCurrEstab.0 = Gauge32: 0
  2、用snmp抓取所有鏈接後統計行數,雖然信息比較准確,但效率低下,如果監控點超過千台,那幾乎數據都是timeout收場:
  
  # snmpget -c public -v 2c 127.0.0.1 .1.3.6.1.2.1.6.13.1.3 |wc -l
  725
  3、在本機上寫腳本統計後用snmp發送信息,cacti收集後畫圖,具體方法;
  
  二、解決方案
  
  snmp提供了發送自定義信息的功能。查看snmpd.conf會看到有一個小節是關於外部腳本的,Executables/scripts。這個小節裡面也舉了例子,告訴你怎麼通過snmp發送信息。
  
  在snmpd.conf任意位置添加一行:
  exec .1.3.6.1.4.1.2021.18 tcpCurrEstab /etc/tcpconn.sh
  其中tcpCurrEstab是命令的名稱,後面是命令以及參數。命令的名稱可以隨便起。腳本執行的結果類似下面:
  
  # /etc/tcpconn.sh
  80
  腳本內容如下:
  
  $ cat tcpconn.sh
  #!/bin/sh
  conn=`netstat -s -t | grep connections\ established |awk '{print $1}'`
  echo $conn
  重啟snmpd,然後遠程通過snmpwalk接收一下數據看看:

  # snmpwalk -c public -v 2c 127.0.0.1 .1.3.6.1.4.1.2021.18
  UCD-SNMP-MIB::ucdavis.18.1.1 = INTEGER: 1
  UCD-SNMP-MIB::ucdavis.18.2.1 = STRING: "tcpCurrEstab"
  UCD-SNMP-MIB::ucdavis.18.3.1 = STRING: "/etc/tcpconn_total.sh"
  UCD-SNMP-MIB::ucdavis.18.100.1 = INTEGER: 0
  UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "488"
  UCD-SNMP-MIB::ucdavis.18.102.1 = INTEGER: 0
  UCD-SNMP-MIB::ucdavis.18.103.1 = ""
  其中我們需要的是UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: “488″這一行:

  # snmpwalk -v 1 192.168.1.201 -c public .1.3.6.1.4.1.2021.18.101.1
  UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "488"
  能采集到數據之後,就可以配置cacti來接收了。在cacti界面中console->Templates->Data Templates,然後點擊右上角的Add,Data Templates中的name是給這個數據模板的命名,Data Source中的name將來顯示在Data Sources中,我這裡添加“|host_description| - Tcp Conn. - ESTBLISHED”,選get snmp data,Internal Data Source Name也可以隨便添,這個用來給rrd文件命名。設置完後就可以save了,save之後會發現下面多了一些選項,在最下面那個添上我們需要的數據的 OID“.1.3.6.1.4.1.2021.18.101.1”,可以保存了。
  
  此後需要創建一個Graph Templates,好讓cacti生成圖片。在cacti界面中console->Templates->Graph Templates,然後點擊右上角的Add,Templates中的name是給這個數據模板的命名,Graph Template中的name是將來顯示在圖片上面中間的內容,我這裡添加“|host_description| - Tcp Conn. - ESTBLISHED”,其他保持默認,保存之後上面會出來一些選項。
  
  在Graph Template Items中添加一個item,Data Source選之前添加的,color選擇一個圖片的顏色,Graph Item Type選AREA,也就是區域,也可以選其他的線條,Text Format設置說明。然後再添加一個,Graph Item Type選GPRINT,Consolidation Function選LAST,也就是當前的值,Text Format輸入current。你還可以添加一些Graph Item Type為COMMENT的注釋說明等。
  現在只要為host添加這個畫圖模板就可以看到畫出來的圖了。
  
  附:CUP使用率腳本
  #!/bin/sh
  idle=`sar -u 1 3 | grep Average | awk '{print $8}'`
  used=`echo "100 - $idle" | bc -l -s`
  echo $used
  echo $idle
  內存使用率腳本
  #!/bin/sh
  used=`/usr/bin/free -m | grep Mem |awk '{print $3}'`
  total=`/usr/bin/free -m | grep Mem |awk '{print $2}'`
  echo $used
  echo $total
  
  轉自:http://www.hiadmin.com/cacti%E8%BF%9B%E9%98%B6%E5%BC%95%E7%94%A8%E4%BA%8C%EF%BC%9A%E4%BD%BF%E7%94%A8cacti%E8%8E%B7%E5%8F%96snmp%E5%8F%91%E9%80%81%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BF%A1%E6%81%AF%E5%90%8E%E4%BD%9C/


獲取 squid 內存緩存命中率為例。

在 /etc/snmp/snmpd.conf 可以看到這樣的樣例:
# exec .1.3.6.1.4.1.2021.50 shelltest /bin/sh /tmp/shtest
可以使用自己編寫的腳本,比如:
exec .1.3.6.1.4.1.2021.50 squidmemhits /usr/local/bin/squidmemhits.sh

vi /usr/local/bin/squidmemhits.sh

#!/bin/sh
PATH=$PATH:/usr/local/squid/bin
export PATH
squidclient -t 1 -h localhost -p 3128 mgr:info | grep "Memory hits" | cut -d "%" -f 2 | awk '{print $5}'
squidclient -t 1 -h localhost -p 3128 mgr:info | grep "Memory hits" | cut -d "%" -f 3 | awk '{print $3}'
/etc/init.d/snmpd restart

檢查一下能否讀取到數據:
snmpwalk -v 2c 192.168.0.200 -c public .1.3.6.1.4.1.2021.50

UCD-SNMP-MIB::ucdavis.50.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.50.2.1 = STRING: "squidmemhits"
UCD-SNMP-MIB::ucdavis.50.3.1 = STRING: "/usr/local/bin/squidmemhits.sh"

Copyright © Linux教程網 All Rights Reserved