snmpwalk -c public -v 2c 172.31.38.23 ifDescr 端口

snmpwalk -c public -v 2c 172.31.38.23 IF-MIB::ifInOctets 入流量

snmpwalk -c public -v 2c 172.31.38.23 IF-MIB::ifOutOctets 出流量

snmpwalk -c public -v 2c 172.31.38.23 IF-MIB::ifInOctets.13 指定端口的流量

snmpwalk -c public -v 2c 172.31.38.23 IF-MIB::ifHCInOctets.13 64位计算,大流量更准确

snmpwalk -c public -v 2c 172.31.38.23 IF-MIB::ifHCOutOctets.13 64位计算,大流量更准确

这个流量是该端口累加的流量(count32到最大值的时候自动规零),只有用(前值-后值)/间隔,才能得到该端口的真时流量

获取所有端口流量

#!/usr/bin/env bash
api=http://127.0.0.1:1988/v1/push
ts=$(date +%s)

[ -d /tmp/snmp ]||mkdir /tmp/snmp
cd /usr/local/open-falcon/switch-custom
snmpuser=user
snmppwd=pass

#snmpwalk -v 3 -u user -a MD5 -A pass 172.19.2.30 ifDescr  IF-MIB::ifInOctets.13
#awk '{print $NF*8}'

stat=$(curl http://127.0.0.1:1988 -o /dev/null -s -w %{http_code})
if [ $stat -ne 404  ];then
    exit
fi


getflow(){
snmpwalk -l auth -v 3 -u $snmpuser -a MD5 -A $snmppwd $2 ifDescr | grep -vi VLAN > /tmp/snmp/$1_port
snmpwalk -l auth -v 3 -u $snmpuser -a MD5 -A $snmppwd $2 IF-MIB::ifHCInOctets > /tmp/snmp/$1_in
snmpwalk -l auth -v 3 -u $snmpuser -a MD5 -A $snmppwd $2 IF-MIB::ifHCOutOctets > /tmp/snmp/$1_out

result=""
while read snport
do
  port_name=$(echo $snport | awk '{print $NF}')
  port_id=$(echo $snport | awk '{print $1}' | grep -Po '\d+')
  net_in=$(awk "/IF-MIB::ifHCInOctets.$port_id ="/'{print $NF*8}' /tmp/snmp/$1_in)
  net_out=$(awk "/IF-MIB::ifHCOutOctets.$port_id ="/'{print $NF*8}' /tmp/snmp/$1_out)
  #echo $port_name,$port_id,$net_in,$net_out

  net_all="{\"metric\": \"switch.if.In\", \"endpoint\": \"$1\", \"timestamp\": $ts,\"step\": 60,\"value\": $net_in,
\"counterType\": \"COUNTER\",\"tags\": \"ifName=$port_name\"},{\"metric\": \"switch.if.Out\", \"endpoint\": \"$1\", 
\"timestamp\": $ts,\"step\": 60,\"value\": $net_out,\"counterType\": \"COUNTER\",\"tags\": \"ifName=$port_name\"}"
  curl -s -X POST -d "[$net_all]" $api >/dev/null
  #echo $net_all
  #result=$result$net_all
done < /tmp/snmp/$1_port
#echo $result | sed "s/,$//g"
#curl -s -X POST -d "[$(echo $result | sed "s/,$//g")]" $api >/dev/null
}


while read line
do
    getflow $line &
#    getflow $line
done < sw-host.txt

results matching ""

    No results matching ""