RRDTool

1.优点:

使用RRD(Round Robin Database)存储格式,数据等于放在数据库中,可以方便地调用。比如,将一个RRD文件中的数据与另一个RRD文件中的数据相加。

可以定义任意时间段画图,可以用半年数据画一张图,也可以用半小时内的数据画一张图。

能画任意个DS,多种图形显示方式。

数据存储与绘图分开,减轻系统负载。

能任意处理RRD文件中的数据,比如,在浏览监测中我们需要将数据由Bytes转化为bits,可以将原始数据乘8。


2.缺点:

RRDTool的作用只是存储数据和画图,它没有MRTG中集成的数据采集功能。

在命令行下的使用非常复杂,参数极多。

无用户、图像管理功能。


3.特点

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

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

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

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


4.安装RRDTool

1)安装yum源

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -ivh  http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

2)同步时间 :ntpdate 202.120.2.101

3)下载rrdtool的RPM包

wget ftp://195.220.108.108/linux/centos/6.4/os/x86_64/Packages/rrdtool-1.3.8-6.el6.x86_64.rpm

4).yum安装rrdtool

yum -y localinstall --nogpgcheck rrdtool-1.3.8-6.el6.x86_64.rpm


5.RRDTool绘图步骤

步骤一︰建立RRD文件,这个文件说来就是RRDtool的专属数据库。RRDtool以自有的格式存放数据。下面会讲解!

步骤二︰抓取数据个人觉得是整个RRDtool最困难的一部分,因为RRDtool的数据是要靠自己在创建RRD数据库时定义出来,不像MRTG内建抓数据功能,但是却因为如此,可以给RRDtool画图的数据弹性也比较大,例如︰snmp查询结果、系统状态、网页中特定数据统计等等。

步骤三︰将抓下来的数据就用rrdtool update的指令进行更新到的RRD数据库中,让图表能画出最新的流量。

步骤四︰这就是重点啦!通过rrdtool graph的指令来依据RRD数据库的数据进行绘图,这也是使用者唯一看的到的东西,若规划的不好会影响使用者阅读上的困难!

循环︰由于要完成动态绘图的图表,第二步骤到第四步骤必须不断的重复执行以维持资料的更新,目前知道要达成循环的方法有两种︰

在Script中使用循环

使用crontab任务计划


6.rrdtool命令详解

//创建RRD数据库

create 语法

rrdtool create filename

[--start|-b start time]

[--step|-s step]

DS:ds-name:DST:dst arguments #最后获取的数据是PDP,更新数据时要考滤DS顺序(*把所有要更新的数据,按照DS定义的顺序用冒号格开*)

RRA:CF:cf arguments #最后获取的数据是CDP,绘图时使用的是这些数据

//参数详解:

==========================================================================================

DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。DS是用来申明数据源的,也可以理解为申明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。

DST:DST 就是DS的类型。有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种。由于网卡流量属于计数器型,所以这里应该为 COUNTER 。

RRA:RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果。RRA的作用就是定义更新的数据是如何记录的。比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。每天就是288条。这么庞大的数据量,一定不可能都存下来。肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。

PDP:Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这个值代表的一般是“xxx/秒”的含义。注意,该值不一定等于RRDtool 收到的那个值。除非是GAUGE ,可以看下面的例子就知道了

CF:CF 就是 Consolidation Function 的缩写。也就是合并(统计)功能。有 AVERAGE、MAX、MIN、LAST 四种分别表示对多个PDP 进行取平均、取最大值、取最小值、取当前值四种类型。具体作用等到 update 操作时再说。

CDP:Consolidation Data Point 。RRDtool 使用多个 PDP 合并为(计算出)一个 CDP。也就是执行上面 的CF 操作后的结果。这个值就是存入 RRA的数据,绘图时使用的也是这些数据

(0).filename

默认是以 .rrd 结尾,但也以随你设定。


(1).--start|-b start time

设定RRD数据库加入的第一个数据值的时间,从1970-01-01 00:00:00 UTC时间以来的时间(秒)。RRDtool不会接受早于或在指定时刻上的任何数值。默认值是now-10s;如果 update 操作中给出的时间在 –-start 之前,则 RRDtool拒绝接受。--satrt 选项也是可选的。 如果你想指定--start 为1天前,可以用CODE:--start $(date -d '1 days ago' +%s)。注意,--start 选项的值必是 timestamp 的格式。


(2).--step|-s step

指定数据将要被填入RRD数据库的基本的时间间隔。默认值是300秒;


(3).DS:ds-name:DST:dst arguments DS(Data Source)

DS:DS 用于定义 Data Soure 。也就是用于存放结果的变量名。 DS是用来申明数据源的,也可以理解为申明数据变量,也就是你要检测的端口对应的变量名,这个参数在画图的时候还要使用的。这里开始定义RRD数据的基本属性;单个RRD数据库可以接受来自几个数据源的输入。在DS选项中要为每个需要在RRD中存储的数据源指定一些基本的属性;ds-name数据域命名;DST定义数据源的类型,dst arguments参数依赖于数据源的类型。

(4).RRA:CF:cf arguments

RRA的作用就是定义更新的数据是如何记录的。比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。每天就是288条。这么庞大的数据量,一定不可能都存下来。肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。

===============================================================================================


7.案例一:DS:mysql:COUNTER:600:0:100000000

DS(Data Source,数据源)表达式总共有六个栏位:

DS 表示这个为DS表达式

ds-name 数据域命名

DST 定义数据源的类型

heartbeat 有效期(heartbeat),案例里的值为'600',假设要取12:00的数据,而前后300秒里的值(11:55-12:05)经过平均或是取最大或最小都算是12:00的有效值;

min 允许存放的最小值,此例允许最小为0。

max 允许存放的最大值,最大为100000000。

注,如果不想设限制可以再第五个栏位和第六个栏位以 "U:U"表示(U即Unknown)。


8.DST定义数据源的类型:数据源项的后续参数依赖于数据源的类型

对于GAUGE、COUNTER、DERIVE、以及ABSOLUTE,其数据源的格式为: DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE:heartbeat:min:max。

DST 的选择是十分重要的,如果选错了 DST ,即使你的脚本取的数据是对的,放入 RRDtool 后也是错误的,更不用提画出来的图是否有意义了。

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,*


9.案例二:DST 实例说明

Values = 300, 600, 900, 1200

#假设 RRDtool 收到4个值,分别是300,600,900,1200。 

Step = 300 seconds

#step 为 300 

COUNTER = 1,1,1,1

#(300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300 ,所以结果为 1,1,1,1 

DERIVE = 1,1,1,1 # 同上 

ABSOLUTE = 1,2,3,4

#(300-0)/300,(600-0)/300,(900-0)/300,(1200-0)/300,所以结果为 1,2,3,4 

GAUGE = 300,600,900,1200 # 300 , 600 ,900 ,1200 不做运算,直接存入数据库。所以第一行的 values 并不是 PDP,后面4行才是PDP。


10.案例三:建立一个RRD库文件

[root@node1 ~]# rrdtool create eth0.rrd \

> --step 300 \

> DS:eth0_in:COUNTER:600:0:12500000 \

 # 600 是 heartbeat;0 是最小值;12500000 表示最大值;

> DS:eth0_out:COUNER:600:0:12500000 \

# 如果没有最小值/最大值,可以用 U 代替,例如 U:U

> RRA:AVERAGE:0.5:1:600 \

# 1 表示对1个 PDP 取平均。实际上就等于 PDP 的值

> RRA:AVERAGE:0.5:4:600 \

# 4 表示每4个 PDP 合成为一个 CDP,也就是20分钟。方法是对4个PDP取平均,

> RRA:AVERAGE:0.5:24:600 \ # 同上,但改为24个,也就是24*5=120分钟=2小时。

> RRA:AVERAGE:0.5:288:730

 # 同上,但改为288个,也就是 288*5=1440分钟=1天

[root@node1 ~]# ll -h eth0.rrd

-rw-r--r--  1 root   root     41K 10月 11 10:16 eth0.rrd

有的人可能会问,上面有两个 DS,那 RRA 中究竟存的是那个 DS 的数据呢?实际上,这些 RRA 是共用的,你只需建立一个 RRA,它就可以用于全部的 DS 。所以在定义 RRA 时不需要指定是给那个 DS 用的。

什么是 CF?

以上面的案例中第2个RRA 和 4,2,1,3 这4个 PDP 为例

AVERAGE :则结果为 (4+2+1+3)/4=2.5

MAX :结果为4个数中的最大值 4

MIN :结果为4个数中的最小值1

LAST :结果为4个数中的最后一个 3

同理,第三个RRA和第4个RRA则是每24个 PDP、每288个 PDP 合成为1个 CDP。

RRD的一个目的是在一个环型数据归档中存储数据。一个归档有大量的数据值或者每个已定义的数据源的统计,而且它是在一个RRA行中被定义的。当一个数据进入RRD数据库时,首先填入到用 -s 选项所定义的步长的时隙中的数据,就成为一个pdp值,称为首要数据点(Primary Data Point)。该数据也会被用该归档的CF归并函数进行处理。可以把各个PDPs通过某个聚合函数进行归并的归并函数有这样几种:AVERAGE、MIN、MAX、LAST等。这些归并函数的RRA命令行格式为:RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows。


11.解释度(Resolution)

举个例子,如果我们要绘制1小时的数据,也就是60分钟,那么我们可以从第一个RRA 中取出12个 CDP 来绘图;也可以从第2个 RRA中取出3个 CDP 来绘图。到底 RRDtool 会使用那个呢?让我们看一下 RRA 的定义 :RRA:AVERAGE:0.5:4:600 。

Resolution 就等于 4 * step = 4 * 300 = 1200 ,也就是说 ,resolution 是每个CDP 所代表的时间范围,或者说 RRA 中每个 CDP(记录)之间的时间间隔。所以第一个 RRA 的 resolution 是 1* step=300,第2是 1200,第三个是 24*300=7200,第4个 RRA 是 86400 。

默认情况下,RRDtool 会自动挑选合适的 resolution 的那个 RRA 的数据来绘图。我们大可不必关心它。但如果自己想取特定 RRA 的数据,就需要用到它了。关于 Resolution 我们还会在 fetch 和 graph 中提到它。


xff 字段

细心的朋友可能会发现,在 RRA 的定义中有一个数值,固定是 0.5 ,这个到底是什么东东呢? 

这个称为 xff 字段,是 xfile factor 的缩写。让我们来看它的定义 :

QUOTE:

The xfiles factor defines what part of a consolidation interval may be made up from *UNKNOWN* data while 

the consolidated value is still regarded as known. It is given as the ratio of allowed *UNKNOWN* PDPs to 

the number of PDPs in the interval. Thus, it ranges from 0 to 1 (exclusive)

这个看起来有点头晕,我们举个简单的例子 :例如

CODE:RRA:AVERAGE:0.5:24:600

这个 RRA 中,每24个 PDP (共两小时)就合成为一个 CDP,如果这 24 个 PDP 中有部分值是 UNKNOWN (原因可以很多),例如1个,那么这个 CDP合成的结果是否就为 UNKNOWN 呢?

不是的,这要看 xff 字段而定。Xff 字段实际就是一个比例值。0.5 表示一个 CDP 中的所有 PDP 如果超过一半的值为 UNKNOWN ,则该 CDP 的值就被标为UNKNOWN。也就是说,如果24个 PDP中有12个或者超过12个 PDP 的值是 UNKNOWN ,则该 CPD 就无法合成,或者合成的结果为 UNKNOWN;如果是11个 PDP 的值为 UNKNOWN ,则该 CDP 的值等于剩下 13 个 PDP 的平均值。

如果一个 CDP 是有2个 PDP 组成,xff 为 0.5 ,那么只要有一个 PDP 为 UNKNOWN ,则该 PDP 所对应的 CDP 的值就是 UNKNOWN 了。


12.抓取数据

1)利用snmp来获取进入网卡的流量:

[root@node1 ~]# snmpget -v 2c -c public 192.168.18.201 ifInOctets.2

IF-MIB::ifInOctets.2 = Counter32: 57266195

上面的例子是使用snmpget来抓取192.168.18.201的网卡输入流量,-v 2c表示snmp版本号,-c public snmp共同体名称,192.168.18.201是这台主机的IP地址,ifInOctets.2是指eth0网卡的输入流量,ifInOctets.1是指lo0网卡的输入流量。从上面我们可以看出,eth0输入的流量为57266195。

2)下面我们来截取一下输入流量:

[root@node1 ~]# snmpget -v 2c -c public 192.168.18.201 ifInOctets.2 | sed -e 's/.*ter32: \(.*\)/\1/'

57463513

我们只要用shell脚本写个循环就可以收集网卡的输入流量了,再用rrdtool update命令将收集到的数据更新到RRD数据库中即可。

当然,您不一定要使用snmpget,也可以使用snmpwalk、tcpdump等等抓取数据回来分析,说夸张点,凡是有变化的数据都可以经过处理变成我们要的资料,然后画成图表。


13.更新RRD数据库数据

1)update 语法

rrdtool update filename [--template|-t ds-name[:dsname]...] N|timestamp:value[:value...]

filename RRD数据库文件名称

--template|-t ds-name[:ds-name] 要更新RRD数据库中数据源的名称,其中-t指定数据源的顺序

N|timestamp:value[:value...] 时间:要更新的值

2)案例:

[root@node1 ~]#rrdtool update eth0.rrd 1381467942:60723022 或

[root@node1 ~]# rrdtool update eth0.rrd N:60723022

其中,1381467942是当前的时间戳,可以用date +%s命令获得,或者直接用N代替。60723022是当前要更新的流量数据,可以用shell脚本获得。

下面我们来查看一下,更新的数据:[root@node1 ~]# rrdtool fetch eth0.rrd AVERAGE


14.绘制图表

graph 语法

rrdtool graph filename [option ...]

[data definition ...]

[data calculation ...]

[variable definition ...]

[graph element ...]

[print element ...]

其中的 data definiton、variable definition 、data calculation、分别是下面的格式,

DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>]

VDEF:vname=RPN expression

CDEF:vname=RPN expression

其中 filename 就是你想要生成的图片文件的名称,默认是 png 。你可以通过选项修改图片的类型,可以有 PNG、SVG、EPS、PDF四种。

(1).DEF 是 Definition (定义)的意思。定义什么呢?你要绘图,总要有数据源吧?DEF 就是告诉 RRDtool 从那个 RRD 中取出指定。

为什么还有一个 CF 字段?因为 RRA 有多种CF 类型,有些 RRA 可能用来保存平均值、有些 RRA 可能用于统计最大值、最小值等等。所以你必须同时指定使用什么 CF 类型的 RRA的数据。

至于 :start 和 :end 、:reduce 则用得比较少,最常用的就是 :step 了,它可以让你控制 RRDtool 从那个 RRA 中取数据。


(2).VDEF 是 Variable Definition (变量定义)的意思。定义什么呢?记得 MRTG 在图表的下面有一个称之为 Legend 的部分吗?那里显示了1个或者2个 DS (MRTG 没有 DS 一说,这里是借用 RRDtool 的)的 “最大值”、“平均值”、“当前值”。 


RRDtool 中用 VDEF 来定义。这个变量专门存放某个 DS 某种类型的值,例如 eth0_in 的最大值、eht0_out 的当前值等。当你需要象MRTG 一样输出数字报表(Legend) 时,就可以在 GPRINT 子句(sub clause)中调用它。同样它也需要用一个变量来存放数值。要注意的是,旧版 的 RRDtool 中是用另外一种格式来达到相同的目的。新版的 RRDtool 则推荐使用VDEF语句。但在使用过程中,却发现 VDEF 的使用反而造成了困扰。 例如你有5个 DS 要画,每个 DS 你都想输出最大值、最小值、平均值 、当前值。 如果使用 VDEF ,则需要 4 * 5 = 20 个 VDEF 语句,这会造成极大的困扰。


(3).CDEF 是 Calculation Define 的意思。CDEF 支持很多数学运算,甚至还支持简单的逻辑运算 if-then-else ,可以解决前面提到的第2个问题:如何只绘制你所关 心的数据。不过这一切都需要熟悉 RPN 的语法.


(4).其它选项分类

本部分我们按照官方文档的方式,把选项分成几大类,分为 :

Time range : 用于控制图表的X轴显示的起始/结束时间,也包括从RRA中提取指定时间的数据。

Labels :用于控制 X/Y 轴的说明文字。

Size :用于控制图片的大小。

Limits :用于控制 Y 轴的上下限。

Grid :用于控制 X/Y 轴的刻度如何显示。

Miscellaneous :其他选项。例如显示中文、水印效果等等。

Report :数字报表

filename 要绘制的图片名称

Time range时间范围

[-s|--start time] 启始时间[-e|--end time]结束时间 [-S|--step seconds]步长

Labels

[-t|--title string]图片的标题 [-v|--vertical-label string] Y轴说明

Size

[-w|--width pixels] 显示区的宽度[-h|--height pixels]显示区的高度 [-j|--only-graph]

Limits

[-u|--upper-limit value] Y轴正值高度[-l|--lower-limit value]Y轴负值高度 [-r|--rigid]

Data and variables

DEF:vname=rrdfile:ds-name:CF[:step=step][:start=time][:end=time]

CDEF:vname=RPN expression

VDEF:vname=RPN expression


15.RRDTool绘图案例

案例:利用RRDTool来绘制mysql服务器查询次数的曲线图。

1.安装mysql服务器

2.启动并测试

3.创建RRD数据库文件

[root@node1 ~]# rrdtool create mysql.rrd --step 3 DS:mysqlselect:COUNTER:5:0:U RRA:AVERAGE:0.5:1:28800 RRA:AVERAGE:0.5:10:2880 RRA:MAX:0.5:10:2880 RRA:LAST:0.5:10:2880

[root@node1 ~]# ll -h

总用量 620K

-rw-------. 1 root root 970 8月 17 18:50 anaconda-ks.cfg

-rw-r--r--. 1 root root 16K 8月 17 18:50 install.log

-rw-r--r--. 1 root root 4.1K 8月 17 18:48 install.log.syslog

-rw-r--r-- 1 root root 294K 10月 11 15:57 mysql.rrd

-rw-r--r-- 1 root root 294K 10月 10 21:53 rrdtool-1.3.8-6.el6.x86_64.rpm

4.抓取数据

[root@node1 ~]# mysql --batch -e "show global status like 'com_select'" | awk '/Com_select/{print $2}'

5

5.更新RRD数据库

[root@node1 ~]# vim getselect.sh

#!/bin/bash

#

while true; do

    SELECT=`mysql --batch -e "show global status like 'com_select'" | awk '/Com_select/{print $2}'`

    rrdtool update mysql.rrd N:$SELECT

    sleep 3

done

[root@node1 ~]# bash -n getselect.sh

[root@node1 ~]# bash -x getselect.sh

+ true

++ mysql --batch -e 'show global status like '\''com_select'\'''

++ awk '/Com_select/{print $2}'

+ SELECT=10

+ rrdtool update mysql.rrd N:10

+ sleep 3

+ true

++ awk '/Com_select/{print $2}'

++ mysql --batch -e 'show global status like '\''com_select'\'''

+ SELECT=11

+ rrdtool update mysql.rrd N:11

+ sleep 3

+ true

++ mysql --batch -e 'show global status like '\''com_select'\'''

++ awk '/Com_select/{print $2}'

+ SELECT=12

+ rrdtool update mysql.rrd N:12

注,让这个脚本一直执行着。

6.创建一个测试数据库

mysql> create table tb1 (id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name char(50) NOT NULL);

Query OK, 0 rows affected (0.02 sec)

mysql> show tables;

+------------------+

| Tables_in_testdb |

+------------------+

| tb1       |

+------------------+

1 row in set (0.00 sec)

mysql>

7.创建一个脚本不断的插入数据并查询

[root@node1 ~]# vim insert.sh

#!/bin/bash

#

for I in {1..200000}; do

    mysql -e "INSERT INTO testdb.tb1(name) VALUES ('stu$I')"

    mysql -e "SELECT * FROM testdb.tb1" &> /dev/null

done

~

[root@node1 ~]# bash -n insert.sh

[root@node1 ~]# bash -x insert.sh

8.查看一下RRD数据库更新的数据

[root@node1 ~]# rrdtool fetch -r 3 mysql.rrd AVERAGE

9.制作查询曲线图

[root@node1 ~]# rrdtool graph mysql.png -s 1381478754 -t "mysql select" -v "selects/3" DEF:select3=mysql.rrd:mysqlselect:AVERAGE:step=3 LINE1:select3#FF0000:"select"

497x174

10.取出mysql.png图片并查看


转载于:https://my.oschina.net/xiaoq6427/blog/208860

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cacti是一种开源的网络图形化监控工具,它可以监控网络设备、服务器等各种设备,提供可视化的监控数据,方便管理员进行监控和管理。 下面是在Linux系统上部署Cacti的步骤: 1.安装LAMP环境 Cacti是基于PHP开发的,因此需要安装LAMP环境。在Linux系统中,可以通过以下命令安装: ``` sudo apt-get install lamp-server^ ``` 安装过程中需要设置MySQL的root密码。 2.安装SNMP Cacti需要使用SNMP协议来监控网络设备,因此需要安装SNMP。 ``` sudo apt-get install snmp ``` 3.安装RRDtool RRDtool是Cacti的一个依赖库,用于存储和处理监控数据。 ``` sudo apt-get install rrdtool ``` 4.下载Cacti 可以从Cacti官网下载最新版本的Cacti,并解压到web服务器的根目录下。 ``` cd /var/www/html sudo wget https://www.cacti.net/downloads/cacti-latest.tar.gz sudo tar zxvf cacti-latest.tar.gz sudo mv cacti-* cacti ``` 5.创建Cacti数据库 使用MySQL创建一个Cacti数据库和用户,并授权: ``` mysql -u root -p create database cacti; grant all privileges on cacti.* to cactiuser@localhost identified by 'cactiuser_password'; flush privileges; exit; ``` 6.导入Cacti数据库 在Cacti源码包中,可以找到cacti.sql文件,将其导入到cacti数据库中: ``` cd /var/www/html/cacti sudo mysql -u cactiuser -p cacti < cacti.sql ``` 7.配置Cacti 进入Cacti目录,复制config.php文件: ``` cd /var/www/html/cacti/include sudo cp config.php{.dist,} ``` 编辑config.php文件,将以下几行代码修改为正确的值: ``` $database_type = "mysql"; $database_default = "cacti"; $database_hostname = "localhost"; $database_username = "cactiuser"; $database_password = "cactiuser_password"; ``` 8.配置Web服务器 修改Apache的配置文件,启用mod_rewrite模块: ``` sudo a2enmod rewrite ``` 编辑Cacti的.htaccess文件: ``` sudo nano /var/www/html/cacti/.htaccess ``` 将AllowOverride设置为All: ``` <Directory "/var/www/html/cacti"> AllowOverride All </Directory> ``` 重启Apache服务: ``` sudo service apache2 restart ``` 9.访问Cacti 在浏览器中输入服务器的IP地址,加上/cacti路径,例如: ``` http://192.168.1.100/cacti ``` 按照提示进行配置,设置管理员账户和密码。完成后,就可以登录Cacti了,并开始监控网络设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值