1. 0x01 rrdtool
监控系统网络流量
[rrdtool 详解]
1.1. install
apt-get install libcairo2-dev libpango1.0-dev libglib2.0-dev libxml2-dev librrd-dev
pip install python-rrdtool
1.2. 一般流程
create rrd -> update rrd -> query rrd, graph png
上述步骤需要使用循环,可以使用两种方式: 在Script中使用循环
; 使用crontab任务计划
1.3. create
create(...)
create(args..): Set up a new Round Robin Database
create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CF:xff:steps:rows]
filename: 文件名
--start: 起始时间, 默认now-10s
--step: 更新频率, 默认300s
DS: DS 用于定义 Data Soure
ds-name: 数据域命名
DST: 定义数据源的类型, GAUGE | COUNTER | DERIVE | ABSOLUTE
heartbeat: 有效期
min: 允许存放的最小值 # 不设限制, "U"表示(Unknown)
max: 允许存放的最大值
RRA: RRA 用于指定数据如何存放
CF: 定义了 AVERAGE | MAX | MIN LAST 几种数据合并方式
- DST
GAUGE :GAGUE 和上面三种不同,它没有“平均”的概念,RRDtool 收到值之后字节存入 RRA 中。
COUNTER :必须是递增的,除非是计数器溢出。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量
、收到的packets 数量
都属于这一类型。
DERIVE:和 COUNTER 类似。但可以是递增,也可以递减,或者一会增加一会儿减少。
ABSOLUTE :ABSOLUTE 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。
COMPUTE :COMPUTE 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。例如CODE:DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:eth0_bytes,8, 则 eth0_bytes 每得到一个值,eth0_bits 会自动计算出它的值:将 eth0_bytes 的值乘以 8 。不过 COMPUTE 型的 DS 有个限制,只能应用它所在的 RRD 的 DS ,不能引用其他 RRD 的 DS。 COMPUTE 型 DS 是新版本的 RRDtool 才有的,你也可以用 CDEF 来实现该功能。如:CDEF:eth0_bits=eth0_bytes,8,
实例说明:
#假设 RRDtool 收到4个值,分别是300,600,900,1200。
Values = 300, 600, 900, 1200
#step 为 300
Step = 300 seconds
# COUNTER (300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300
COUNTER = 1,1,1,1
# DERIVE 同上
DERIVE = 1,1,1,1
# ABSOLUTE (300-0)/300,(600-0)/300,(900-0)/300,(1200-0)/300
ABSOLUTE = 1,2,3,4
# GAUGE 300 , 600 ,900 ,1200 不做运算,直接存入数据库
GAUGE = 300,600,900,1200
1.4. update
update插入值后,并不会有返回,无法知道插入是否正常,可以用updatev
update(...)
update(args..): Store a new set of values into the rrd
update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] [timestamp:value[:value...] ...]
filename:要更新的rrd文件
--template:
-t ds-name[:ds-name]:设置更新那个DS的数据
N|timestamp:时间戳,表示数据在哪个时间点采集的,N表示now。
value[:value...]:一个rrd文件可以有多个DS,所以一次update可以更新多个value。
1.5. updatev
带返回值的插入. 和update类似,不过每次插入后会返回一个状态码
updatev(...)
updatev is called in the same manner as update
1.6. fetch
fetch(...)
fetch(args..): fetch data from an rrd.
fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]
filename:要取出数据的rrd文件
--start:可选,默认是end-1day
--end:可选,默认是now
CF:AVERAGE、MAX、MIN、LAST。前提是你的rrd中有该类型的rra才可以。
1.7. graph(...)
graph(...)
graph(args..): Create a graph based on data from one or several RRD
graph filename [-s|--start seconds] [-e|--end seconds] [-x|--x-grid x-axis grid and label] [-y|--y-grid y-axis grid and label] [--alt-y-grid] [--alt-y-mrtg] [--alt-autoscale] [--alt-autoscale-max] [--units-exponent] value [-v|--vertical-label text] [-w|--width pixels] [-h|--height pixels] [-i|--interlaced] [-f|--imginfo formatstring] [-a|--imgformat GIF|PNG|GD] [-B|--background value] [-O|--overlay value] [-U|--unit value] [-z|--lazy] [-o|--logarithmic] [-u|--upper-limit value] [-l|--lower-limit value] [-g|--no-legend] [-r|--rigid] [--step value] [-b|--base value] [-c|--color COLORTAG#rrggbb] [-t|--title title] [DEF:vname=rrd:ds-name:CF] [CDEF:vname=rpn-expression] [PRINT:vname:CF:format] [GPRINT:vname:CF:format] [COMMENT:text] [HRULE:value#rrggbb[:legend]] [VRULE:time#rrggbb[:legend]] [LINE{1|2|3}:vname[#rrggbb[:legend]]] [AREA:vname[#rrggbb[:legend]]] [STACK:vname[#rrggbb[:legend]]]
filename:图片的名称,默认是PNG格式
--start:图片X轴数据的起始时间
--end:图片X轴数据的结束时间
--x-grid x-axis grid and label:
--y-grid y-axis grid and label:
--alt-y-grid
--alt-y-mrtg
--alt-autoscale
--alt-autoscale-max
--units-exponent
--vertical-label text Y轴的文字说明
--width pixels X轴的大小
--height pixels Y轴的大小
--interlaced
--imginfo formatstring
--imgformat GIF|PNG|GD 图片格式
--background value
--overlay value
--unit value
--lazy
--logarithmic
--upper-limit value Y轴数据值的上限,默认会自动调整Y轴的数字
--lower-limit value Y轴数据值的下限
--no-legend 取消图表下方的图例
--rigid 严格按照upper-limit/lower-limit来绘制
--step value
--base value 默认1K=1000 可以调整1K=1024
--color COLORTAG#rrggbb
--title title 图表上方的标题
DEF:vname=rrd:ds-name:CF 定义绘图用的数据源,也就是从那个RRD中取数据,因为RRA有多种类型,所以需要指定CF
CDEF:vname=rpn-expression 定义合并值,
PRINT:vname:CF:format
GPRINT:vname:CF:format 在图表的下方输出最大值、最小值之类
COMMENT:text 用来输出一些字符串
HRULE:value#rrggbb 在图表上绘制水平线
VRULE:time#rrggbb 在图表上绘制垂直线
LINE{1|2|3}:vname 使用线条来绘制vname的数据图
AREA:vname 使用方块来绘制vname的数据图
STACK:vname
2. 0x02 crontab
2.1. 配置
/etc/cron.allow
可以使用 crontab 的帐号写入其中,若不在这个文件的使用者则不可使用 crontab; /etc/cron.deny
不可以使用 crontab 的帐号写入其中,若未记录到这个文件的使用者,就可以使用 crontab。 当使用者使用 crontab 指令建立工作排成之后,该项工作会被记录到 /var/spool/cron
文件中,cron 的每项工作都会记录到 /var/log/corn
文件, 可以通过查这个文件,检查系统是否植入木马等。