我在flatfile中收集一些系统数据,其格式如下:
YYYY-MM-DD-HH24:MI:SS DD1 DD2 DD3 DD4
Run Code Online (Sandbox Code Playgroud)
其中DD1-DD4是四项数据.该文件的一个示例是:
2011-02-01-13:29:53 16 8 7 68
2011-02-01-13:29:58 13 8 6 110
2011-02-01-13:30:03 26 25 1 109
2011-02-01-13:30:08 13 12 1 31
2011-02-01-13:30:14 192 170 22 34
2011-02-01-13:30:19 16 16 0 10
2011-02-01-13:30:24 137 61 76 9
2011-02-01-13:30:29 452 167 286 42
2011-02-01-13:30:34 471 177 295 11
2011-02-01-13:30:39 502 192 309 10
Run Code Online (Sandbox Code Playgroud)
该文件超过200万行,每五秒钟有一个数据点.
我需要绘制这些数据,以便能够从中获得意义.
我试过的
目前我已尝试使用各种unix工具gnuplot和rrdtool(awk,sed等).这两种方法都有效,但每次我想以不同的方式查看数据时,似乎都需要大量的切割和重新编辑数据.我的直觉是rrdtool是正确的方法,但目前我正在努力将数据快速地加入其中,部分原因是因为我必须将我的时间戳转换为Unix时代.我的理解是,如果我决定我想要一个新的聚合粒度,我必须重建rrd(这对于实时收集是有意义的,但不是像这样的追溯加载).这些事情让我觉得我可能正在使用错误的工具.
将数据收集到平面文件是固定的 - 例如,我无法将集合直接传递到rrdtool.
我的问题
我希望人们对制图的最佳方式有所了解.我有这些要求:
有什么建议?
我需要监控大量数据,我知道RRDTool是一个不错的选择,但是整个应用程序都是c#,所以我更喜欢微软的方式或.net端口.
是否有.net方式与RRDTool一样?
我有一个rrd主要包含0到1的值(linux load avarage).
有时图表显示在y轴=>"0.1 0.2 ... 0.9".这就是我想要的方式.
但其他时候,我看到以下"100m 200m ......".
有没有办法强制显示为"0.1等" 值?
我正在监控超过300台服务器,因为我正在使用Ganglia.其中RRD用作数据库来收集和存储与每个服务器的资源相关的数据.我想有2年或更长的历史,所以阅读这篇文章,我认为我的RRA配置应该是:
RRAs "RRA:AVERAGE:0.5:1:17520"
Run Code Online (Sandbox Code Playgroud)
17520 =(365天[年] x 2)*24 [小时]
这是Ganglia默认配置,今天正在运行:
#
# Round-Robin Archives
# You can specify custom Round-Robin archives here (defaults are listed below)
#
# RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" "RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" \
# "RRA:AVERAGE:0.5:5760:374"
#
Run Code Online (Sandbox Code Playgroud)
这是我的思维方式还是我在这里遗漏了什么?
我有兴趣知道rrdtool是否有任何替代方法来记录时间序列数据.我正在寻找可以扩展以监控大量设备的东西.
根据我在这个主题上阅读的内容,当你用大量数据点击时,rrdtool就会受到I/O限制.由于我设想这可以扩展到大量要监控的设备,我很好奇是否有任何不会阻塞I/O的替代方案.优先使用SQL,但不一定.
谢谢
我有几百个rrds,我想为所有这些rrds添加5个额外的数据源.
- 索恩 -
David OBrien在邮件列表中回复
在搜索档案(你应该先做的)和谷歌搜索后,我发现有几个人使用这个......
与perl.安装RRD:简单
#!/usr/local/bin/perl
use strict;
use RRD::Simple ();
my $rrd = RRD::Simple->new();
my $rrdfile=$ARGV[0];
my $source=$ARGV[1];
my $type=$ARGV[2];
chomp($type);
$rrd->add_source($rrdfile, $source => $type);
Run Code Online (Sandbox Code Playgroud)
用法:
./addSource.pl file.rrd ds GAUGE
Run Code Online (Sandbox Code Playgroud)
或者不管是什么类型..
请享用.
我想从rrdtool数据库中提取一些每小时数据,以便在仪表板系统中创建一些图形.
这些数据库没有每小时的数据源,最接近的是30分钟的数据源(它们是由munin生成的)
现在,我可以使用rrdfetch,但这并不能做到很好的平均rrdgraph,所以这样的事情
rrdtool fetch xxx-apache_accesses-accesses80-d.rrd AVERAGE \
--resolution 3600 -s 1328458200 -e 1328544600
Run Code Online (Sandbox Code Playgroud)
可能会给我这样的30分钟数据点
2012-Feb-05 16:30:00 3.5376357135e+00
2012-Feb-05 17:00:00 3.4655067194e+00
2012-Feb-05 17:30:00 4.0483210375e+00
2012-Feb-05 18:00:00 4.3210061422e+00
....
Run Code Online (Sandbox Code Playgroud)
我可以平均那些,但似乎rrdgraph可以输出可解析的文本,但我无法弄清楚正确的咒语.这是我尝试过的
rrdtool graph dummy.png -s 1328523300 -e 1328609700 \
DEF:access=xxx-apache_accesses-accesses80-d.rrd:42:AVERAGE \
"PRINT:access:AVERAGE: %5.1lf %S"
Run Code Online (Sandbox Code Playgroud)
输出
0x0
4.7
Run Code Online (Sandbox Code Playgroud)
现在我认为这只是给定期间的平均值,但是有没有办法可以rrdtool吐出特定块或步长的平均值?我试过--step但这没有改变输出.
我可以调用rrdtool graph我需要的每个数据点,但这似乎相当浪费.
我有几个由RRDTool创建的图表,它们在几个小时的时间段内收集了错误的数据.
如何在该时间段内从RRD中删除数据,使其不再显示?
与此问题密切相关:Bash printf前缀
我有以下使用RRDTool生成RRDGraph的Bash脚本。
#!/bin/bash
now=$(date +%s)
now_formatted=$(date +%s | awk '{printf "%s\n", strftime("%c",$1)}' | sed -e 's/:/\\:/g')
# create power graph for last week
/usr/bin/rrdtool graph /var/www/power-week.png \
--start end-7d --width 543 --height 267 --end $now-1min --slope-mode \
--vertical-label "Watts" --lower-limit 0 \
--alt-autoscale-max \
--title "Power: Last week vs. week before" \
--watermark "(©) $(date +%Y) Alyn R. Tiedtke" \
--font WATERMARK:8 \
DEF:Power=/root/currentcost/ccdata.rrd:Power:AVERAGE \
DEF:Power2=/root/currentcost/ccdata.rrd:Power:AVERAGE:end=$now-7d1min:start=end-7d \
VDEF:Last=Power,LAST \
VDEF:First=Power,FIRST \
VDEF:Min=Power,MINIMUM \
VDEF:Peak=Power,MAXIMUM \
VDEF:Average=Power,AVERAGE \
CDEF:kWh=Power,1000,/,168,* …Run Code Online (Sandbox Code Playgroud) 我ganglia用于监听。ganglia将其数据存储为rrd文件。
它是rrd在上存储指标数据的文件gmetad。通常,默认路径是/var/lib/ganglia/rrds/<cluster-name>/<node-name>/每个指标存储在单个rrd文件(如)中的位置bytes_in.rrd。
有什么办法可以使用这些rrd数据influxdb吗?