交换机监控
在数据采集一节中我们介绍了常见的监控数据源。open-falcon作为一个监控框架,可以去采集任何系统的监控指标数据,只要将监控数据组织为open-falcon规范的格式就OK了。
交换机设备的运行指标的采集,可以写脚本,通过SNMP协议来采集交换机的各项运行指标,包括内存占用、CPU使用、流量、ping延时等。
可以直接使用 swcollector 来实现对交换机设备的监控指标采集。
工作原理
swcollector是一个Golang开发的后台程序,由gaochao设计开发,目前由freedomkk-qfeng进行后续开发和维护。
swcollector根据配置文件中,配置好的交换机IP列表或者IP网段,每隔一个固定的周期,通过SNMP协议,来采集交换机的运行指标,并上报给Open-Falcon。
采集的metric列表:
- CPU利用率
- 内存利用率
- Ping延时(正常返回延时,超时返回 -1,可以用于存活告警)
- 网络连接数(监控防火墙时,目前仅支持Cisco ASA)
- IfHCInOctets
- IfHCOutOctets
- IfHCInUcastPkts
- IfHCOutUcastPkts
- IfHCInBroadcastPkts
- IfHCOutBroadcastPkts
- IfHCInMulticastPkts
- IfHCOutMulticastPkts
- IfInDiscards
- IfOutDiscards
- IfInErrors
- IfOutErros
- IfInUnknownProtos
- IfOutQLen
- IfOperStatus(接口状态,1 up, 2 down, 3 testing, 4 unknown, 5 dormant, 6 notPresent, 7 lowerLayerDown)
CPU和内存的OID私有,根据设备厂家和OS版本可能不同。目前测试过的设备:
- Cisco IOS(Version 12)
- Cisco NX-OS(Version 6)
- Cisco IOS XR(Version 5)
- Cisco IOS XE(Version 15)
- Cisco ASA (Version 9)
- Ruijie 10G Routing Switch
- Huawei VRP(Version 8)
- Huawei VRP(Version 5.20)
- Huawei VRP(Version 5.120)
- Huawei VRP(Version 5.130)
- Huawei VRP(Version 5.70)
- Juniper JUNOS(Version 10)
- H3C(Version 5)
- H3C(Version 5.20)
- H3C(Version 7)
二进制安装
从这里 下载编译好的最新二进制版本即可。注意:这些二进制只能跑在64位Linux上
源码安装
依赖$GOPATH/src/github.com/gaochao1/sw
cd $GOPATH/src/github.com/gaochao1/swcollector
go get ./...
chmod +x control
./control build
./control pack
最后一步会pack出一个tar.gz的安装包,拿着这个包去部署服务即可。
升级时,确保先更新sw
cd $GOPATH/src/github.com/gaochao1/sw
git pull
部署说明
swcollector需要部署到有交换机SNMP访问权限的服务器上。
使用Go原生的ICMP协议进行Ping探测,swcollector需要root权限运行。
支持使用 Gosnmp 或 snmpwalk 进行数据采集,如果使用 snmpwalk 模式,需要在监控探针服务器上安装个snmpwalk命令
配置说明
配置文件请参照cfg.example.json,修改该文件名为cfg.json,将该文件里的IP换成实际使用的IP。
配置说明:
{
"debug": true,
"debugmetric":{ # 在日志中 debug 具体的指标
"endpoints":["192.168.56.101","192.168.56.102"], # 必填
"metrics":["switch.if.In","switch.if.Out"], # 必填
"tags":"ifName=Fa0/1" # 有则匹配 tag,如为 "" 则打印该 metric 的全部信息
},
"switch":{
"enabled": true, #交换机IP地址段,对该网段有效IP,先发Ping包探测,对存活IP发SNMP请求
"ipRange":[
"192.168.56.101/32",
"192.168.56.102/32",
"172.16.114.233"
],
"gosnmp":true, #是否使用 gosnmp 采集, false 则使用 snmpwalk
"pingTimeout":300, #Ping超时时间,单位毫秒
"pingRetry":4, #Ping探测重试次数
"community":"public", #SNMP认证字符串
"snmpTimeout":1000, #SNMP超时时间,单位毫秒
"snmpRetry":5, #SNMP重试次数
"ignoreIface": ["Nu","NU","Vlan","Vl"], #忽略的接口,如Nu匹配ifName为*Nu*的接口
"ignorePkt": true, #不采集IfHCInUcastPkts和IfHCOutUcastPkts
"ignoreBroadcastPkt": true, #不采集IfHCInBroadcastPkts和IfHCOutBroadcastPkts
"ignoreMulticastPkt": true, #不采集IfHCInMulticastPkts和IfHCOutMulticastPkts
"ignoreDiscards": true, #不采集IfInDiscards和IfOutDiscardss
"ignoreErrors": true, #不采集IfInErrors和IfOutErros
"ignoreOperStatus": true, #不采集IfOperStatus
"ignoreUnknownProtos":true, #不采集IfInUnknownProtos
"ignoreOutQLen":true, #不采集IfOutQLen
"displayByBit": true, #true时,上报的流量单位为bit,为false则单位为byte。
"fastPingMode": false, #是否开启 fastPing 模式,开启 Ping 的效率更高,并能解决高并发时,会有小概率 ping 通宕机的交换机地址的情况。但 fastPing 可能被防火墙过滤。
"limitConcur": 1000 #限制并发数
},
"transfer": {
"enabled": true,
"addr": "127.0.0.1:8433",
"interval": 60,
"timeout": 1000
},
"http": {
"enabled": true,
"listen": ":1989"
}
}