阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RRDtool监控绘图调研

464次阅读
没有评论

共计 9726 个字符,预计需要花费 25 分钟才能阅读完成。

调研背景

为满足公司对现网多台服务器进行性能监控,并输出性能监控图,特对几款监控软件进行调研。目前大多数监控软件都要求在服务器上安装相应的监控软件采集数据再进行监控图输出,而公司考虑到业务的稳定性,不能在服务器上安装监控软件。所以在此我重点对 RRDtool 这款监控绘图工具进行调研,利用 shell 脚本在服务器上进行监控数据采集,集中传输到另外一个专用于处理监控数据并输出监控图的服务器上,利用 rrdtool 进行绘图,满足公司对性能监控的要求。

工具介绍

RRDtool 代表“Round Robin Database tool”,作者同时也是 MRTG 软件的发明人。许多监控软件如 MRTG、Cacti 等都是调用 RRDtool 来进行绘图的。

官方站点位于 http://oss.oetiker.ch/rrdtool/。所谓的“Round Robin”其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置。我们可以把用于存储数据的数据库的空间看成一个圆,上面有很多刻度。这些刻度所在的位置就代表用于存储数据的地方。所谓指针,可以认为是从圆心指向这些刻度的一条直线。指针会随着数据的读写自动移动。要注意的是,这个圆没有起点和终点,所以指针可以一直移动,而不用担心到达终点后就无法前进的问题。在一段时间后,当所有的空间都存满了数据,就又从头开始存放。这样整个存储空间的大小就是一个固定的数值。RRDtool 就是使用类似的方式来存放数据的工具。

RRDtool 的特点:

· 首先 RRDtool 存储数据,扮演了一个后台工具的角色。但同时 RRDtool 又允许创建图表,这使得 RRDtool 看起来又像是前端工具。其他的数据库只能存储数据,不能创建图表。

· RRDtool 的每个 rrd 文件的大小是固定的,而普通的数据库文件的大小是随着时间而增加的。

· 其他数据库只是被动的接受数据,RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度(rate of change),并存储该结果。

· RRDtool 要求定时获取数据,其他数据库则没有该要求。如果在一个时间间隔内(heartbeat)没有收到值,则会用 UNKN (unknow)代替,其他数据库则不会这样。

工具安装

1. 下载 RRDtool

cd

wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.8.tar.gz

2. 安装 RRDtool

# 请确保已安装了相关的依赖包:zlib libxml2 libxml2-devel glib2 glib2-devel libpng freetype libart_lgpl pango-devel perl-CPAN

# 执行以下命令:

BUILD_DIR=/tmp/rrdbuild

INSTALL_DIR=/usr/local/rrdtool-1.4.8

mkdir -p $BUILD_DIR

mv rrdtool-1.4.8.tar.gz $ BUILD_DIR

cd $BUILD_DIR

tar zxvf rrdtool-1.4.8.tar.gz

cd rrdtool-1.4.8

./configure –prefix=$INSTALL_DIR && make && make install

# 安装完成后测试, 若输出下图表示安装成功:

/usr/local/rrdtool-1.4.8/bin/rrdtool

RRDtool 监控绘图调研

相关阅读

使用 RRDtool 自定义绘图监控 Oracle 数据库 http://www.linuxidc.com/Linux/2012-11/74755.htm

通过 RRDtool 简单绘制图像 http://www.linuxidc.com/Linux/2012-08/68095.htm

安装 RRDtool 时候的报错 configure: error: Please fix the library issues listed above and try again http://www.linuxidc.com/Linux/2012-08/67083.htm

RHEL5.5 安装 RRDtool 解决多多依赖关系 http://www.linuxidc.com/Linux/2012-05/61403.htm

CentOS 中使用 yum 安装 RRDtool http://www.linuxidc.com/Linux/2012-05/61352.htm

工具配置

1. 前期规划

A. 监测对象:170.155 服务器 a.ip 连接数使用率(connect) b.cpu 平均使用率(cpu) c.15 分钟系统平均负载(load) d. 内存使用率(memory) e.I/O wait 的使用率(iowait)

D. 数据文件:采用 1 个 rrd 文件保存单个服务器所有监控对象的数据,并以服务器的 IP 来命名,eg. 192-168-1-1.rrd

B. 数据获取:利用 shell 来获取监测对象的数据

C. 监测频率:15 分钟监测一次,监测频率是指多久获取一次监测对象的数据

e. 统计频率:15 分钟,1 小时,1 天,统计频率是指利用监测数据来统计不同时间段内监测对象的平均 / 最大 / 最小等的值,统计方式依据用户设定

E. 绘图方式:曲线

F. 脚本规划:a.rrd_create.sh(创建 rrd 文件) b.rrd_update.sh(获取监控数据并更新 rrd 文件) c.rrd_graph.sh(绘图)

# 注意:

# 此处监测对象 a 采用使用率是方便在同一张图片上显示 4 个监测对象。

# 此处为测试时的规划,后期在正式使用时,将监测多台现网服务器的监测对象,将数据传输到 170.155 服务器后再进行绘图。

# 此次的监测频率为测试时的规划,后期在正式使用时,将依据实际情况进行调整。

2.rrd 脚本

# 创建数据保存目录:

mkdir -p /usr/local/rrdtool-1.4.8/data/170.155

# 创建以下脚本:

rrd_create.sh

#########################################################################

#!/bin/bash

#创建一个 rrd

rrdhome="/usr/local/rrdtool-1.4.8"
datadir="$rrdhome/data/170.155"
tooldir="$rrdhome/bin"
rrdname="170-155.rrd"
step="900"
success="Success to create $rrdname."
error="Error to create $rrdname."

#创建 rrd 文件,依据 step=900 秒(即 15 分钟)进行 1 /4/96(15 分钟 / 1 小时 / 1 天)分别进行统计平均值和最大值,并分别保存 672/720/365 个 (1 周 / 1 月 / 1 年) 数据。#以下数据都以百分比后的值表示,方便在同一张图上显示多个监控对象的曲线图。createrrd(){$tooldir/rrdtool create ${rrdname} --step ${step}         DS:connect:GAUGE:1200:0:100         DS:cpu:GAUGE:1200:0:100         DS:load:GAUGE:1200:0:100         DS:memory:GAUGE:1200:0:100         DS:iowait:GAUGE:1200:0:100         RRA:AVERAGE:0.5:1:672         RRA:AVERAGE:0.5:4:720         RRA:AVERAGE:0.5:96:365         RRA:MAX:0.5:1:672         RRA:MAX:0.5:6:720         RRA:MAX:0.5:144:365
        ["$?" == 0 ] && return 0 || return 1
}
cd $datadir
if [! -f ${rrdname} ]; then
        createrrd
else
        read -p "$datadir 目录下已存在该文件。删除重建该文件请输入数字 1,其他输入将退出:" todo
        if ["$todo" == "1" ] ;then
                rm -rf $datadir/$rrdname
                createrrd
                exit 0
        fi
        exit 1       
fi
#########################################################################

rrd_update.sh

# 方法 1:放置于 crontab 中 15 分钟执行一次。脚本如下:

#########################################################################

#!/bin/bash

#更新 rrd 数据库的数据。请将此脚本放置于 crontab 内,15 分钟执行一次。rrdhome="/usr/local/rrdtool-1.4.8"
datadir="$rrdhome/data/170.155"
tooldir="$rrdhome/bin"
rrdname="170-155.rrd"
maxConnectNum="65535"

cd $datadir
if [-f ${rrdname} ]; then
        #ip 连接率
        ## 获取 ip 连接数
        connected=`cat /proc/sys/net/netfilter/nf_conntrack_count`
        ##connected=`cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count`
        ## 计算出 ip 连接率
        ##connect=$((${connected}*100/${maxConnectNum}))
        connect=$(echo "${connected}*100/${maxConnectNum}"|bc)

        #cpu 的使用率
        ## 获取 cpu 空闲率
        cpu_used=`top -b -n 1| sed -n '1,5p'|grep Cpu|awk -F ""'{print $5}'|awk -F "%" '{print $1}'`
        ## 计算出 cpu 的使用率
        ##cpu=$((100-${cpu_used}))
        cpu=$(echo "100-${cpu_used}"|bc)

        #load 系统的负载率
        ## 获取 15 分钟内的平均负载
        loadaverage=`uptime|awk -F "," '{print $6}'`
        ## 获取 cpu 的核芯数量
        cpunum=`grep 'model name' /proc/cpuinfo |wc -l`
        ## 计算系统的负载率
        ##load=$((${loadaverage}*100/${cpunum}))
        load=$(echo "${loadaverage}*100/${cpunum}"|bc)

        #memory 的使用率
        ##memory 的总量
        memory_total=`free -t|grep Total|awk -F ""'{print $2}'`
        memory_use=`free -t|grep Total|awk -F ""'{print $3}'`
        memory=$(echo "${memory_use}*100/${memory_total}"|bc)

        #iowait 率
        iowait=`sar -p 3 1|sed -n '5p'|awk -F ""'{print $6}'`

#       echo $connected+$connect+$cpu_used+$cpu+$loadaverage+$cpunum+$load+$iowait

        #更新 rrdtool 的数据
        ${tooldir}/rrdtool update ${rrdname} N:${connect}:${cpu}:${load}:${memory}:${iowait}

        #调用绘图程序。将绘图与数据更新分开是因为后期部署时,数据更新与绘图在不同的服务器上。sh $datadir/rrd_graph.sh

        exit 0
else
        echo "文件 $datadir/$rrdname 不存在,请先创建 $rrdname 文件"
        exit 1
fi
 

#########################################################################

# 方法 2:脚本运行后不退出, 一直运行:

#########################################################################

#!/bin/bash

#更新 rrd 数据库的数据。请将此脚本放置于 crontab 内,15 分钟执行一次。rrdhome="/usr/local/rrdtool-1.4.8"
datadir="$rrdhome/data/170.155"
tooldir="$rrdhome/bin"
rrdname="170-155.rrd"
maxConnectNum="65535"

cd $datadir
if [-f ${rrdname} ]; then
   while true
      do
        #ip 连接率
        ## 获取 ip 连接数
        connected=`cat /proc/sys/net/netfilter/nf_conntrack_count`
        ##connected=`cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count`
        ## 计算出 ip 连接率
        ##connect=$((${connected}*100/${maxConnectNum}))
        connect=$(echo "${connected}*100/${maxConnectNum}"|bc)

        #cpu 的使用率
        ## 获取 cpu 空闲率
        cpu_used=`top -b -n 1| sed -n '1,5p'|grep Cpu|awk -F ""'{print $5}'|awk -F "%" '{print $1}'`
        ## 计算出 cpu 的使用率
        ##cpu=$((100-${cpu_used}))
        cpu=$(echo "100-${cpu_used}"|bc)

        #load 系统的负载率
        ## 获取 15 分钟内的平均负载
        loadaverage=`uptime|awk -F "," '{print $6}'`
        ## 获取 cpu 的核芯数量
        cpunum=`grep 'model name' /proc/cpuinfo |wc -l`
        ## 计算系统的负载率
        ##load=$((${loadaverage}*100/${cpunum}))
        load=$(echo "${loadaverage}*100/${cpunum}"|bc)

        #memory 的使用率
        ##memory 的总量
        memory_total=`free -t|grep Total|awk -F ""'{print $2}'`
        memory_use=`free -t|grep Total|awk -F ""'{print $3}'`
        memory=$(echo "${memory_use}*100/${memory_total}"|bc)

        #iowait 率
        iowait=`sar -p 3 1|sed -n '5p'|awk -F ""'{print $6}'`

#       echo $connected+$connect+$cpu_used+$cpu+$loadaverage+$cpunum+$load+$iowait

        #更新 rrdtool 的数据
        ${tooldir}/rrdtool update ${rrdname} N:${connect}:${cpu}:${load}:${memory}:${iowait}

        #调用绘图程序。将绘图与数据更新分开是因为后期部署时,数据更新与绘图在不同的服务器上。sh $datadir/rrd_graph.sh
        
        #休眠 15 分钟
        sleep 900
     done
        exit 0
else
        echo "文件 $datadir/$rrdname 不存在,请先创建 $rrdname 文件"
        exit 1
fi

 

#########################################################################

rrd_graph.sh

#########################################################################

#!/bin/bash

#执行绘图

rrdhome="/usr/local/rrdtool-1.4.8"
datadir="$rrdhome/data/170.155"
tooldir="$rrdhome/bin"
rrdname="170-155.rrd"
#绘制图片的名称
pngname="170-155.png"
#绘图时用的开始时间
starttime=`date -d "-1 day" +%s`
#绘图时图���的上标题
title="170.155 系统性能参数"
#绘图时图片的左标题
vtitle="使用率(%)"
#绘图时所取数据的解释度(用于控制从哪一个 RRA 中获取数据)一般可以先不使用
#step="900"

cd $datadir

#### 绘制系统性能监控图
${tooldir}/rrdtool graph ${pngname} --start $starttime --width 727 --height 364 -t "$title" -v "$vtitle" DEF:t1=${rrdname}:connect:AVERAGE DEF:t2=${rrdname}:cpu:AVERAGE DEF:t3=${rrdname}:load:AVERAGE DEF:t4=${rrdname}:memory:AVERAGE DEF:t5=${rrdname}:iowait:AVERAGE COMMENT:" \n" COMMENT:'------------------- 当前值 ---------------------' COMMENT:" \n" LINE1:t1#FF0000:connect GPRINT:t1:AVERAGE:%13.2lf LINE2:t2#0000FF:cpu GPRINT:t2:AVERAGE:%13.2lf COMMENT:" \n" LINE1:t3#00FF00:load GPRINT:t3:AVERAGE:%13.2lf LINE2:t4#F0FF0F:memory GPRINT:t4:AVERAGE:%13.2lf COMMENT:" \n" LINE2:t5#FF00FF:iowait GPRINT:t5:AVERAGE:%13.2lf COMMENT:" \n" COMMENT:"上次更新 \: $(date'+%Y-%m-%d %H\:%M\:%S'-r $rrdname)"
#COMMENT:"Last update\: $(date'+%Y-%m-%d %H\:%M\:%S'-r $rrdname)"

#########################################################################

 

 

 

# 修改脚本的权限

chmod 750 /usr/local/rrdtool-1.4.8/data/170.155/*.sh

3. 脚本部署

# 创建 rrd 文件

/usr/local/rrdtool-1.4.8/data/170.155/rrd_create.sh

#cron 设置

*/15 * * * * /usr/local/rrdtool-1.4.8/data/170.155/rrd_update.sh>/dev/null 2>&1

4. 绘图结果

 

# 结果说明:

# 由于是在 170.155 上测试,在此服务器上基本没有程序在运行,各项监控参数的使用率接近 0,所以看上去不明显,在实际生产环境中应该不会存在此情况。

调研背景

为满足公司对现网多台服务器进行性能监控,并输出性能监控图,特对几款监控软件进行调研。目前大多数监控软件都要求在服务器上安装相应的监控软件采集数据再进行监控图输出,而公司考虑到业务的稳定性,不能在服务器上安装监控软件。所以在此我重点对 RRDtool 这款监控绘图工具进行调研,利用 shell 脚本在服务器上进行监控数据采集,集中传输到另外一个专用于处理监控数据并输出监控图的服务器上,利用 rrdtool 进行绘图,满足公司对性能监控的要求。

工具介绍

RRDtool 代表“Round Robin Database tool”,作者同时也是 MRTG 软件的发明人。许多监控软件如 MRTG、Cacti 等都是调用 RRDtool 来进行绘图的。

官方站点位于 http://oss.oetiker.ch/rrdtool/。所谓的“Round Robin”其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置。我们可以把用于存储数据的数据库的空间看成一个圆,上面有很多刻度。这些刻度所在的位置就代表用于存储数据的地方。所谓指针,可以认为是从圆心指向这些刻度的一条直线。指针会随着数据的读写自动移动。要注意的是,这个圆没有起点和终点,所以指针可以一直移动,而不用担心到达终点后就无法前进的问题。在一段时间后,当所有的空间都存满了数据,就又从头开始存放。这样整个存储空间的大小就是一个固定的数值。RRDtool 就是使用类似的方式来存放数据的工具。

RRDtool 的特点:

· 首先 RRDtool 存储数据,扮演了一个后台工具的角色。但同时 RRDtool 又允许创建图表,这使得 RRDtool 看起来又像是前端工具。其他的数据库只能存储数据,不能创建图表。

· RRDtool 的每个 rrd 文件的大小是固定的,而普通的数据库文件的大小是随着时间而增加的。

· 其他数据库只是被动的接受数据,RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度(rate of change),并存储该结果。

· RRDtool 要求定时获取数据,其他数据库则没有该要求。如果在一个时间间隔内(heartbeat)没有收到值,则会用 UNKN (unknow)代替,其他数据库则不会这样。

工具安装

1. 下载 RRDtool

cd

wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.8.tar.gz

2. 安装 RRDtool

# 请确保已安装了相关的依赖包:zlib libxml2 libxml2-devel glib2 glib2-devel libpng freetype libart_lgpl pango-devel perl-CPAN

# 执行以下命令:

BUILD_DIR=/tmp/rrdbuild

INSTALL_DIR=/usr/local/rrdtool-1.4.8

mkdir -p $BUILD_DIR

mv rrdtool-1.4.8.tar.gz $ BUILD_DIR

cd $BUILD_DIR

tar zxvf rrdtool-1.4.8.tar.gz

cd rrdtool-1.4.8

./configure –prefix=$INSTALL_DIR && make && make install

# 安装完成后测试, 若输出下图表示安装成功:

/usr/local/rrdtool-1.4.8/bin/rrdtool

RRDtool 监控绘图调研

相关阅读

使用 RRDtool 自定义绘图监控 Oracle 数据库 http://www.linuxidc.com/Linux/2012-11/74755.htm

通过 RRDtool 简单绘制图像 http://www.linuxidc.com/Linux/2012-08/68095.htm

安装 RRDtool 时候的报错 configure: error: Please fix the library issues listed above and try again http://www.linuxidc.com/Linux/2012-08/67083.htm

RHEL5.5 安装 RRDtool 解决多多依赖关系 http://www.linuxidc.com/Linux/2012-05/61403.htm

CentOS 中使用 yum 安装 RRDtool http://www.linuxidc.com/Linux/2012-05/61352.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计9726字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7962764
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...