• RRDtool 数据库


    RRDtool 数据库

    RRDtool 介绍

    RRDtool 旨在存储时间序列数据。每次数据更新时,都会存储一个相关的时间戳。时间始终以自纪元 (01-01-1970) 以来经过的秒数表示。RRDtool 可以安装在 Unix 和 Windows 上。它带有一个命令集,用于对 RRD 数据库执行各种操作。

    RRDtool 适合场景

    只要存储数据为某种时间序列数据,它可能就适合(如:带宽,流量,潮汐波、太阳辐射、电力消耗等等)。这意味着您必须能够在多个时间点测量某些值并将此信息提供给 RRDtool。如果你能做到这一点,RRDtool 将能够存储它。这些值必须是数字,但不必是整数。

    RRDtool 的特性

    RRD 数据库的结构不同于其他线性数据库。其他数据库定义具有列和许多其他参数的表。这些定义有时非常复杂,尤其是在大型数据库中。RRDtool 数据库主要用于监控目的,因此结构非常简单。需要定义的参数是保存值的变量和这些值的存档。由于时间敏感,还定义了几个与时间相关的参数。由于其结构,RRDtool 数据库的定义还包括规定在没有更新值的情况下要采取的具体行动。Data Source (DS)、heartbeat、Date Source Type (DST)、Round Robin Archive (RRA) 和 Consolidation Function (CF) 是与 RRDtool 数据库相关的一些术语。特点如下:

    • RRDtool 作为一个数据库,但它有一个强大的绘图引擎,可以根据数据库内容,通过 rrdtool graph 命令生成 png 格式的图片,这一点使其看起来又像一个前端工具。

    • RRDtool 是一个基于时间序列的环形数据库。可以看成是一个圆,圆周上有一些均匀分散的点。这些点就是数据存储的位置。从圆心画一条到圆周的某个点的箭头,这个箭头就是指向当前元素的指针。在当前元素被读或写之后,指针就往下一个元素移动。当所有位置都被用过,原来的位置就会被重用。这样,数据库文件大小是固定的,而不像其他数据库文件的大小随着时间而增加。

    • RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度,并存储该结果。

    • RRDtool 要求定时获取监控数据,如果在一个时间间隔内(heartbeat)内没收到值,该时间段的值则用UNKN(unknow)代替。

    RRDtool 下载与安装

    RRDtool 支持windows 和 linux 系统。官网地址

    接下来以 centos7.6 为例

    通过 yum 安装

    yum install -y rrdtool    # 目前能安装 1.4.8 版本
    # 安装工具
    yum install -y gcc
    yum install -y rrdtool-python  
    # 卸载旧版本
    yum erase rrdtool -y
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    RRDtool 的使用

    rrdtool create

    rrdtool create filename
    	[--start|-b start time]
    	[--step|-s step]
    	----- 不常用 -----
    	[--template|-t template-file] 
    	[--source|-r source-file] 
    	[--no-overwrite|-O] 
    	[--daemon|-d address] 
    	----- 不常用 -----
    	[DS:ds-name:DST:dst arguments] 	// 最后获取的数据是PDP,更新数据时要考滤DS顺序(*把所有要更新的数据,按照DS定义的顺序用冒号格开*)			
    	[RRA:CF:cf arguments] // 最后获取的数据是CDP,绘图时使用的是这些数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    描述

    RRDtool 的创建功能可让您设置新的循环数据库 ( RRD ) 文件。除非指定了一个或多个源RRD文件并且它们包含合适的数据以“预填充”新的RRD文件,否则该文件以其最终的完整大小创建并填充UNKNOWN数据。

    filename:    默认为.rrd为后辍的文件,名称自己随意取;
    --start:     指定RRDtool的第一个记录的起始时间,--start选项的值必须是timestamp的格式。
                 如查你想自己设定时间可以使用--start $(date -d '1 days ago' +%s) ,当然还有一种方法就是使用rrdtool fetch filename.rrd AVERAGE;
    --step:      就是RRDtool“期望”每隔多长时间就收到一个值;
    DS:         用于定义数据源;
    ds-name:     指定数据源的名字,随意取。必须是119个字符,且是a-z、A-Z、或者0-9;
    DST:        定义源数据类型,源数据类型分以下几种:
                        1、COUNTER      数据必须是递增的,保存的是相对于前面的一个值
                        2、GUAGE        保存原值
                        3、DERIVE       可增可减
                        4、ABSOLUTE     相对于初始值的数值
                        5、COMPUTE      对于COMPUTE数据源来说格式是DS:ds-name:COMPUTE:rpn-expression
    dst argument:数据源参数,形式是:    heartbeat:min:max
                     heartbeat:  定义在我们这个时间跨度之内,再过多长时间过期,过期的标记为unknown;
                     min:        接收的最小值,一般我们可以都设为0max:        接收的最大值,如果不是很清楚其最大值可以设置为U;
    RRA:        用于指定数据如何存放;
    CF:          指定数据合并方法,合并方法分以下几种:
                        1、average    平均值
                        2max        最大值
                        3min        最小值
                        4、last       当前值
    cf arguments:数据保存,它的形式是:    xff:steps:rows
                  xff:  默认值为0.5 定义PDP中出现unknown的百分比高于设置的这个比例以后CDP也被标记为unknown,如果24个 PDP中有12个或者超过12个 PDP 的值是 UNKNOWN ,则该 CPD 就无法合成,或者合成的结果为 UNKNOWN;如果是11个 PDP 的值为 UNKNOWN ,则该 CDP 的值等于剩下 13 个 PDP 的平均值。
                  steps:     聚合函数对多少个pdp做聚合生成cdp;
                  rows:      保存多少个聚合的cdp结果;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    PDP与CDP与CDP 关系图

    PDP(Primary Data Point): 主数据点

    CDP(Consolidation Data Point): 聚合数据点

    解析度(resolution): 指的就是时间跨度

    DS(Data Source): 数据源,每一个数据源都可以对其做单独的聚合

    在这里插入图片描述

    示例

    "rrdtool create" + filename +\
    " --start now-1h " +\      // 从1小时前开始
    "--step 60 " +\            // 每分钟获取一次
    "DS:latency:GAUGE:120:0:U " +\  // 保存原值, 120s过期时间, 最小0 最大不限
    "RRA:AVERAGE:0.5:1:1y " +\      // 平均值,50% 的比例, 1个pdp制作一个 cdp,保存 1年内的值 
    "RRA:AVERAGE:0.5:10:1y " +\		// 平均值,50% 的比例, 10个pdp制作一个 cdp,保存1年内的值
    "RRA:AVERAGE:0.5:30:1y " +\
    "RRA:AVERAGE:0.5:60:1y " +\
    "RRA:AVERAGE:0.5:360:1y " +\
    "RRA:AVERAGE:0.5:1440:1y " +\
    "RRA:AVERAGE:0.5:10080:527040 " +\
    "RRA:AVERAGE:0.5:43200:527040"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    rrdtool update

    rrdtool {update | updatev} filename [--template | -t ds-name[:ds-name]...]
    [--] N | timestamp:value[:value...]
    -t :    改变接收数据的次序
                例如,我们定义的rrdtool create test.rrd DS:ds1 DS:ds2,默认情况下我们想这个数据库里面输入值得话是:rrdtool update test.rrd N:30(DS1值):40(DS2值),
                使用rrdtool update test.rrd -t  ds2:ds1 40:30 把循序给颠倒; 
    N:       表示当前时间
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    rrdtool info

    rrdtool info filename    用于查看filename的数据结构
    
    • 1

    rrdtool fetch

    rrdtool fetch filename [-r #] [CF]
        -r #:    指定#个PDP为一个数据;
        CF:      指定使用哪种合并函数,与rrdtool create中cf argument一样;
    
    • 1
    • 2
    • 3

    rrdtool graph

    rrdtool graph|graphv filename [option ...][datadefinition ...][data calculation ...][variabledefinition ...][graph element ...][print element ...]
    [-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]
    
    OPTION:
    Graph Limits
    [-u | --upper-limit value]:     显示数值的最大上限的值
    [-l | --lower-limit value]:    显示的最低下限的值
    [-r | --rigid ]:                不会自动缩放,以定义的最大值和最小值来显示
    [-A | --alt-autoscale ]:        启用自动缩放,但是最大的和最小的是不能超过上面的范围
    [-J | --alt-autoscale-min]:     只自动缩放最小值
    [-M | --alt-autoscale-max ]:    只自动缩放最大值
    [-N | --no-gridfit]:            不显示网格线
    
    定义横轴:
    X-Axis
        [-x|--x-grid GTM:GST(定义基准网格线,前面是单位,后面是数值)
        :MTM:MST(定义主网格线,前面的是单位,后面的是数值)
        :LTM:LST(定义横轴底面的标签的单位和距离,前面是单位,后面是距离)
        :LPR:LFM(显示标签的显示格式)]
        [-x | --x-grid none ]
    
    Y-Axis
        [-y|--y-grid grid(刻度是什么) step(多长显示一个刻度)
        :label(卷标显示是什么) factor(卷标多长时间显示一个)]:
        [-y|--y-grid none ]
        [-Y| --alt-y-grid]
    
    图片全局定义
       [-c| --color COLORTAGE #rrggbb[aa]]
           BACK          #背景色
           CANVAS        #画布颜色
           SHADEA        #左边和上边的颜色
           SHADEB        #右边和下边的颜色
           GRID,MGRID   #主网格线的颜色
           FONT          #字体颜色
           AXIS          #坐标轴的颜色
           FRAME         #边框颜色
           ARROW         #箭头的颜色
        -n | --font FONTTAG(字体名字):size(大小):[font(路径)]   #指定字体的参数
        [-R|--font-render-mode(字体格式) {normal(正常),light(发亮),mono(粗体)}]
        [-a|--imgformat PNG|SVG|EPS|PDF]   #图像输出格式
        [-W| --watermark string ]          #加水印
    
    数据与变量
    定义数据获取方式:
      DEF:vname(变量名,只能包含数字和字母,最长不能超过255字符)=rrdfile(rrd文件路径):ds-name(数据源名称):CF(聚合函数)[:step=step][:start=time][:end=time]
      CDEF:vname=RPN expression
      VDEF:vname=RPN expression
    
    图片
    线状图:
       LINE[width(线条的粗细程度,1最细的3是最粗的)
       :value(上面定义的变量名称)[#color(线条颜色)]
       [:[legend(底面的标签名称)][:STACK]]
       [:dashes[=on_s[,off_s[,on_s,off_s]...]
       [:dash-offset=offset]
    面积图:
        AREA:value[#color][:[legend][:STACK]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    扩充

    snmp

    SNMP是基于TCP/IP协议族的网络管理标准,它的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。但由于SNMP第一版没有考虑安全问题,为此SNMPv2在提高安全性和更有效性地传递管理信息方面加以改进,具体包括提供验证、加密和时间同步机制,SNMPv3的重点是安全、可管理的体系结构和远程配置。

    近年来,SNMP发展更快,已经超越传统的TCP/IP环境,受到更为广泛的支持。管理信息库(MIB)存储网络的通信信息和有关网络设备的统计数据。从被管理设备中收集数据有两种方法:—种是轮询方法,另—种是基于中断的方法。

  • 相关阅读:
    静态代理IP是什么?一文看懂静态代理IP
    Zipkin_Slueth微服务链式追踪
    开学季征文 | 新学期,新规划
    【Spring 篇】SpringMVC的请求:舞台上的开端
    UE4 TCP协议连接服务器与客户端
    vscode 下载安装
    vim 工具的使用
    一个linux最简otg驱动源代码
    【SpringMVC】集成Web、MVC执行流程、数据响应、数据交互
    【NodeJs-5天学习】第一天篇④ ——了解NodeJs回调函数和事件驱动机制
  • 原文地址:https://blog.csdn.net/qq_55752792/article/details/126486652