监控方式有:SNMP、RRDTool、Cacti、Nagios、Remote script
- Cacti用于将RRDTool监控到的时间序列数据,进行展示。
- Nagios用于监控状态:on --> off
网络管理可以管理的要素有:故障管理、配置管理、审计管理、性能管理、安全管理。
SNMP,Simple Network Management Protocol,简单网络管理协议,其支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。应用层协议:UDP 161/162
其由三个组件构成:网络管理系统(NMS,Network Management System),被管理设备和代理(Agent)。
- NMS:一个运行在管理节点上的软件,其定期会将被管设备发送处理器、内存状态等请求信息,这些请求信息会发送给被管设备的agent。
- Agent:一个运行在被管理设备上的软件模块,通过接受NMS发送来的请求,查询本地MIB之后,返回给NMS。
双方通过community进行通信,community有三类:read-only、read-write和trap。设备默认会有两类community,一个是public为read-only,一个是private为read-write。Trap:agent会主动发送消息给NMS,通常为故障信息。
- SNMP v1:get(获取指定OID信息)、getnext(获取指定叶子的父节点的OID以及其叶子节点的相关信息,)、set、getresponse(响应消息)、trap
- SNMP v2c,v3:getbulk(获取指定OID及其所有子节点的信息)、notification、inform、report
管理信息库(Management Information Base),描述全球唯一的资源。用点分十进制数标识,称为OID(Object Identifier)。
- 设备网络接口信息为1.3.6.1.2.1.2,Host管理OID为1.3.6.1.2.1.25
- 在/etc/snmp/snmpd.conf中会有可以查看的mib库
Redhat中两个snmp软件包net-snmp(发包)以及net-snmp-utils(收包)
snmpwalk -v 2c -c public 127.0.0.1
- RRD,Round Robin Database,轮询数据库,为环形数据库,分为许多扇形,数据会存在这些扇形里,每个扇形称之为time slot。当数据存满后,会将最初的数据覆盖,其数据库大小不会改变。
- RRA:Round Robin Archive,轮转归档信息,描述CDP聚合PDP的数量。
- 当抓取到数据时,先会放到PDP(Primary Data Point,主数据节点),将其进行聚合计算,得到CDP(Consolidation Data Point,聚合数据点)才会保存到time slot中。
rrd create filename \ # filename:保存文件的文件名
[--start | -b start time] \ # --start:开始时间,默认10s之前
[--step | -s step] \ # --step:接受数据的时间跨度
[--no | -overwrite] \
[DS:ds-name:DST:dst arguments] \
[RRA:CF:cf argument]
# DS:指定数据源;
# ds-name:数据源名称;
# DST:对数据如何聚合,数据源类型有:
# gauge,保存PDP精确数值;
# counter,递增数据的相对值;
# derive,任意数据的相对值;
# absolute,与初始值的相对值;
# compute,自定义计算;
# dst arguments:
# heartbeat(描述数据在某个时间内达到有效,如step为5s,数据在10s以内达到都有效)
# min,max(描述可以接受值的范围)
# RRA:如何聚合,average,min,max,last;
# CF:聚合参数:
# xff(描述PDP比例为多大时,还可以进行计算CDP,unknown值会进行智能计算)
# steps(聚合跨度)
# rows(保存结果的数量)
举个例子
rrdtool create test.rrd --step 5 \ # 创建一个RRDTool文件名为test.rrd,每5s收集一次数据
DS:testds:GAUGE:8:0:U \ # 数据源名称为testds,保存的数据类型为GAUGE,
\ # 数据在8s以内到达都有效,数值的范围是0到无穷大
RRA:AVERAGE:0.5:1:17280 \ # 聚合方法为取平均数,50%的PDP为unknown时,
\ # CDP为unknown,CDP对每1个PDP进行聚合,
\ # 要保存17280(CDP)*5(s/PDP)*1(PDP/CDP)=1天
RRA:AVERAGE:0.5:10:3456 \ # 聚合方法为取平均数,50%的PDP为unknown时,
\ # CDP为unknown,CDP对每10个PDP进行聚合,
\ # 要保存3456(CDP)*5(s/PDP)*10(PDP/CDP)=2天
RRA:AVERAGE:0.5:100:1210 \ # 聚合方法为取平均数,50%的PDP为unknown时,
\ # CDP为unknown,CDP对每100个PDP进行聚合,
\ # 要保存1210(CDP)*5(s/PDP)*100(PDP/CDP)=7天
rrdtool info test.rrd \ # 查看该数据库文件格式
rrdtool {update | updatev} \
filename \ # filename:数据库文件
[--template | -t ds-name[:ds-name[:…]]] \
timestamp:time:value1[:value2[…]] # timestamp:时间戳;
# value1:对应第一个ds的值;
# value2:对应第二个ds的值……
# template:指定ds的顺序,如:
# rrdtool create test.rrd DS:ds1 DS:ds2
# rrdtool update test.rrd N:30:40 #or rrdtool update test.rrd -t ds2:ds1 40:30
举个例子:
rrdtool update test.rrd N:$RANDOM
rrdtool fetch [-r 10] test.rrd AVERAGE # 查看数据源[指定解析度为10的数据]
编写脚本:gen.sh
while true; do
rrdtool update test.rrd N:$RANDOM
sleep 5
done
bash -n gen.sh #检查是否有语法错误
bash -x gen.sh #让程序在前台执行
rrdtool {graph | graphy} filename-pic [option…] \
[data definetion] [data calculation]
option:[-s | --start time] [-e | --end time] \
[-S | --step seconds] [-t | --title string] \
[-v | --vertical-label string] [-w | --width pixels] \
[-h | --height pixels] [-j | --only-graph] \
[-D | --full-size-mode] [-a | --imgformat PNG|SVG|EPS|PDF] [13min]
data definetion:
DEF(vname=rrdfile:ds-name:CF[:step =step][:start =time][:end =time])
CDEF
VDEF
举个例子:
rrdtool graph a.png \ #画一个图,文件名为a.png
-s 1494568250 \ #开始时间为1494568250
DEF:vartest5=test.rrd:testds:AVERAGE:step=5 \
\ # 定义DEF:vartest5,其数据库为test.rrd,聚合方法为AVERAGE,聚合度为5
DEF:vartest50=test.rrd:testds:AVERAGE:step=50 \
\ # 定义DEF:vartest50,其数据库为test.rrd,聚合方法为AVERAGE,聚合度为50
LINE1:vartest5#0000FF:"5 sec" \ # 利用DEF:vartest5绘制线条,
\ # 颜色为蓝色,显式为‘5 sec’
LINE1:vartest50#FF0000:"50 sec" \ # 利用DEF:vartest50绘制线条,
# 颜色为红色,显式为‘50 sec’
每个3s钟抓取一次ens32口的发出的字节数,并且将其绘制成表
- 创建数据库
rrdtool create ifrx.rrd --step 3 \
DS:ifrxds:GAUGE:5:0:U \
RRA:AVERAGE:0.5:1:28800 \
RRA:AVERAGE:0.5:10:2880 \
RRA:MAX:0.5:10:100
- 撰写脚本,输入数据
while true; do
RX=`/sbin/ifconfig ens32 | grep "RX bytes" | awk -F'[ :]+' '{print $4}'`
rrdtool update ifrx.rrd N:$RX
sleep 2
done
- 绘制图像
rrdtool graph ifrx.png \
-s 1494576879 -t "if ens32" \
-v "if ens32/3" \
DEF:if3=ifrx.rrd:ifrxds:AVERAGE:step=3 \
LINE1:if3#ff0000:"if3"
Cacti是基于RRDTool的一款集成工具,可以建立,周期性的更新数据,展示生成的图,支持多种模版来展示数据,支持插件,thold具有报警功能。
安装cacti:http://os.51cto.com/art/201404/434909_all.htm
分为数据查询和数据输入方法。数据查询使用xml语言。数据输入方法使用命令或者脚本,使用的脚本是需要指定如何获取数据,并且获取到的数据经过处理后要按照规定输入:TAG:data TAG:data
add device --> add graph --> add data source --> add graph trees
- 撰写脚本,输出格式为:【TAG1:data1 TAG2:data2】;
- 添加数据收集方法(Data Input Methods);
- 创建数据模版(Data Template)&数据源(Data Source);
- 创建图像模版(Graph Template)&图片(Graph Management)
thold-v0.4.9-3.tgz
settings-v0.71-1.tgz