1. 0x01 rrdtool

监控系统网络流量

rrdtool python

python-rrdtoool github

[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 doc

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

鸟哥的私房菜 cron

gitbook crontab

2.1. 配置

/etc/cron.allow 可以使用 crontab 的帐号写入其中,若不在这个文件的使用者则不可使用 crontab; /etc/cron.deny 不可以使用 crontab 的帐号写入其中,若未记录到这个文件的使用者,就可以使用 crontab。 当使用者使用 crontab 指令建立工作排成之后,该项工作会被记录到 /var/spool/cron 文件中,cron 的每项工作都会记录到 /var/log/corn 文件, 可以通过查这个文件,检查系统是否植入木马等。

results matching ""

    No results matching ""