Summary: The company has drawn a flow chart using mrtg. here we need to summarize the existing flow chart. I want to use rrdtool to plot the total traffic diagram.
1. Understand the mrtg log format:
1233645600 1543128 37293414 1724764 39253194
1233645300 1585731 38744665 1794511 41541920
1233645000 2006102 47017612 2433360 53782126
......
MRTG logs are divided into two parts:
+ Part 1
The first line of the log is the first part. There are three columns, representing the previous running timestamp of MRTG.
Total traffic and total output traffic.
+ Part 2
The remaining part of the first row is the second part, with a total of five columns representing:
1. The timestamp of the related data in column A (first column). Note that the time between each row at the beginning
Every five minutes, the last day.
Perl-e 'print scalar localtime (x), "\ n "'
2. average input (average incoming) traffic per second in column B (second), in bytes.
3. average output (average outgoing) traffic per second in Column C, in bytes.
4. D (column 4) maximum incoming (in bytes)
Bit. This is calculated from all updates in the current interval. Assume that the current interval is 1 hour, every 5 minutes
Once, this value is the largest of all 12 data records.
5. E (column 5) maximum outgoing per second during the current interval, in bytes
Bit. The calculation method is the same as above.
2. Collect mrtg logs:
[Root @ hj addflow] # cat addflow. sh
#! /Bin/sh
If [$ #-ne 3]; then
Echo "usage: $0 log_file log_dir swfile"
Echo "Example usage: $0 all_sw.log all all_sw"
Exit 1
Fi
Curdir = "/usr/local/NetFlow/All_mrtg_log"
Vlan1 = "$ curdir/$1"
Swfile = "$ curdir/$2"
Swlog = 'cat $ swfile'
Log_dir = $3
For I in $ swlog
Do
Rsync-avL -- timeout = 120 $ curdir/log/$ I $ curdir/addflow/$ log_dir
Done
# Getti ()
#{
# Ti = $1
#}
# While read LINE
# Do
# Getti $ LINE
# Break
# Done <$ vlan1
Addto ()
{
To1 = 'expr $ to1 + $2'
To2 = 'expr $ to3 + $3'
}
Addport ()
{
Ti1 = 'expr $ ti1 + $2'
Ti2 = 'expr $ ti2 + $3'
Ti3 = 'expr $ ti3 + $4'
Ti4 = 'expr $ ti4 + $5'
}
Sumport ()
{
File = "$ dir/$1"
Num = 0
While read PORT
Do
If [$ num-gt 1]; then
Break
Fi
If [$ num-lt 1]; then
Addto $ PORT
Else
Addport $ PORT
Fi
Num = 'expr $ num + 1'
Done <$ file
}
Ti = 'date + % s'
Port = 'ls $ curdir/addflow/$ log_dir/*. Log'
For I in $ port
Do
Sumport $ I
Done
Sed-I '1, 2d '$ vlan1
Sed-I "1 I $ ti $ ti1 $ ti2 $ ti3 $ ti4" $ vlan1
Sed-I "1 I $ ti $ to1 $ to2" $ vlan1
3. Create an rrd File
The GAUGE type is used here, and the calculated data is directly stored in rrd.
[Root @ hj NetFlow] # cat create_rrd.sh
#! /Bin/bash
/Usr/bin/rrdtool create all_sw.rrd -- step 300 DS: input: GAUGE: 600: 0: u ds: output: GAUGE: 600: 0: u rra: AVERAGE: 0.5: 1: 2400 RRA: AVERAGE: 0.5: 4: 2400 RRA: AVERAGE: 0.5: 24: 2400 RRA: AVERAGE: 0.5: 288: 2400
Update rrd and drawing are written to a bash script.
4. Update the rrd file Function
Update_rrd ()
{
Rrdfile = $1
Log_file = $2
STEP = 2
HEARTBEAT = 4
Now = 'date + % s'
Input = 'less $ log_file | awk '{if (NR = 2) print $2 }''
Output = 'less $ log_file | awk '{if (NR = 2) print $3 }''
Echo-e "input: $ input \ noutput: $ output"
/Usr/bin/rrdtool updatev $ rrdfile $ now: $ input: $ output
}
5. rrdtool draws the diagram of the past 24 hours
Update_png ()
{
DIR = $1
Image_path = "$ {DIR}/$2"
Rrdfile = "$ {DIR}/$3"
PIC =$ {image_path}/$4
Dk = $5
Title1 = $6
Now = 'date "+ % Y/% m/% d % H \: % M \: % S "'
Rrdtool graph $ PIC \
-- Title "$ title1 "\
-- Vertical-label "unit: (Bits per Second )"\
-- End now -- start end-86400 \
-W 700-h 200 \
-Y-X 9-B 1000 \
-- X-grid MINUTE: 12: HOUR: 1: HOUR: 1: 0: '% H '\
-- Lower-limit = 0 \
-- Font TITLE: 10 :\
-- Font AXIS: 7 :\
-- Font LEGEND: 8 :\
-- Font UNIT: 7 :\
DEF: in = $ rrdfile: input: AVERAGE \
DEF: out = $ rrdfile: output: AVERAGE \
CDEF: v1 = in, 8 ,*\
CDEF: v2 = out, 8 ,*\
AREA: v1 #00FF00: "Upload "\
Uplint: v1: LAST: "Current: % 8.2lf % s "\
Uplint: v1: MAX: "MAX: % 8.2lf % s "\
Uplint: v1: MIN: "MIN: % 8.2lf % s "\
Uplint: v1: AVERAGE: "AVERAGE: % 8.2lf % s \ n "\
LINE1: v2 # 0000ff: "Download "\
Uplint: v2: LAST: "Current: % 8.2lf % s "\
Uplint: v2: MAX: "MAX: % 8.2lf % s "\
Uplint: v2: MIN: "MIN: % 8.2lf % s "\
Uplint: v2: AVERAGE: "AVERAGE: % 8.2lf % s \ n "\
COMMENT: "total purchased bandwidth $ {dk} G \ t \ tLast Updated \: $ now"
}
6. rrdtool draws the diagram of the past week
Update_week_png ()
{
DIR = $1
Image_path = "$ {DIR}/$2"
Rrdfile = "$ {DIR}/$3"
PIC =$ {image_path}/$4
Dk = $5
Title1 = $6
Now = 'date "+ % Y/% m/% d % H \: % M \: % S "'
Etime = 'date + % s'
Stime = 'expr $ etime-604800'
Echo "etime: $ etime stime: $ stime"
Rrdtool graph $ PIC \
-- Title "$ title1 "\
-- Vertical-label "unit: (Bits per Second )"\
#-S 'date-d "-1 week" + % s '\
-- Start = $ stime \
-- End = $ etime \
-W 700-h 200 \
-Y-X 9-B 1000 \
-- Lower-limit = 0 \
-- Font TITLE: 10 :\
-- Font AXIS: 7 :\
-- Font LEGEND: 8 :\
-- Font UNIT: 7 :\
DEF: in = $ rrdfile: input: AVERAGE \
DEF: out = $ rrdfile: output: AVERAGE \
CDEF: v1 = in, 8 ,*\
CDEF: v2 = out, 8 ,*\
AREA: v1 #00FF00: "Upload "\
Uplint: v1: LAST: "Current: % 8.2lf % s "\
Uplint: v1: MAX: "MAX: % 8.2lf % s "\
Uplint: v1: MIN: "MIN: % 8.2lf % s "\
Uplint: v1: AVERAGE: "AVERAGE: % 8.2lf % s \ n "\
LINE1: v2 # 0000ff: "Download "\
Uplint: v2: LAST: "Current: % 8.2lf % s "\
Uplint: v2: MAX: "MAX: % 8.2lf % s "\
Uplint: v2: MIN: "MIN: % 8.2lf % s "\
Uplint: v2: AVERAGE: "AVERAGE: % 8.2lf % s \ n "\
COMMENT: "total purchased bandwidth $ {dk} G \ t \ tLast Updated \: $ now"
}
7. function call
M_DIR =/usr/local/NetFlow
Update_rrd $ M_DIR/all_sw.rrd $ M_DIR/All_mrtg_log/all_sw.log
Update_png $ M_DIR images all_sw.rrd all_sw.png 1024 "Total offline and cloud streaming traffic in the past 24 hours"
Update_week_png $ M_DIR images all_sw.rrd all_sw_week.png 1024 "Total offline and cloud broadcast traffic in the past week"
8. display:
Use RRDtool to customize plotting to monitor Oracle databases
Simple Image Rendering using RRDtool
When installing RRDtool, the following error occurs: configure: error: Please fix the library issues listed above and try again.
RHEL5.5 installing RRDtool solves many Dependencies
Use yum to install RRDtool in CentOS