FnordMetric 实战

FnordMetric是一个使用SQL语句来实现数据收集和可视化的框架,它使用chartsql扩展了标准的sql,允许你编写查询语句来返回图表而不是返回表,查询结果作为SVG向量图或者images来呈现出来。这些图表可以很容易嵌入一个web站点中,这样你就可以在短短几分钟内绘制漂亮的图表。

FnordMetric包含两个二进制文件,使用C++编写而成,分别是FnordMetric CLI和FnordMetric Server。

1 fnordmetric-cli类似gnuplot,满足你使用sql语句来生成图表的需求,允许你使用chartsql在命令行对外部的数据(csv文件或者mysql)进行图表绘制。

2 fnordmetric-server是一个标准的HTTP应用服务,它包含了一个web UI和一个HTTP API接口来允许chartsql查询。查询结果可以作为JSON、SVG、PNG类型返回。和fnordmetric-cli一样,server也允许你对外部数据进行查询,不同的是,server还包含了一个以时间序列为基础的数据收集,并把该数据存储到本地磁盘或者内存或者HBase。你可以把fnordmetric-server作为一个数据收集和展示的一站式解决方案。

FnordMetric Client

FnordMetric还提供了一些客户端lib库,例如HTML5 API。

安装FnordMetric

FnordMetric使用C++编写,你可以安装编译好的二进制文件,也可以自己编译安装。安装完成后会在系统中生成两个二进制文件fnordmetric-cli和fnordmetric-server。

1 源码安装

git clone https://github.com/paulasmuth/fnordmetric.git && cd fnordmetric/fnordmetric-core

mak

make install

2 下载编译好的版本

貌似没有,需要自己编译

1 如果你只是想在命令行使用FnordMetric命令接口配合sql语句来绘制图表,则可以简单的使用以下方案:

http://fnordmetric.io/documentation/getting_started/fnordmetric-cli/

2 如果你想基于时间序列来收集数据并进行UI展示,我们可以使用以下方案:

本文讲解怎样启动FnordMetric Server实例,如何使用chartsql来插入metric数据、查询metric数据。 fnordmetric-server是一个标准的HTTP应用服务,它包含了一个web UI和一个HTTP API接口来允许chartsql查询。你在启动FnordMetric Server时可以设置storage backend,如果你在启动FnordMetric Server时没有设置storage backend,你可以使用web UI接口针对外部数据源进行查询(CSV或者mysql),如果你启动 FnordMetric Server时设置了storage backend,你还可以使用HTTP API接口来收集基于时间序列的数据到storage backend中,并且随后进行查询。

目前支持三者storage backend:inmemory、disk、hbase

启动 FnordMetric Server

mkdir /tmp/fnordmetric-data

fnordmetric-server --http_port 8080 --statsd_port 8125 --storage_backend disk --datadir /tmp/fnordmetric-data

收集基于时间序列的值

fnordmetric server建议记录时间序列值在metrics中,一个metric就像一个SQL database中的table,每个metric包含一个唯一的name和一个被称作samples的收集来的值,该值是基于时间序列的。一个sample就是一个datapoint ,每个sample至少包含了一个timestamp和一个numeric value,如果和database的table进行类比,就像每个metric是一个table,包含了两个默认的列value和time,每个sample都是table中的一行。

例如,我们要监控HTTP应用的响应时间,我们可以创建一个metric叫做http_response_times,它会记录http的响应时间。我们会把每个http请求的响应时间插入这个sample中,有很多client lib允许使用HTTP或者statsd API发送数据到FnordMetric Server。

我们给http_response_time中插入一个value,我们先手动的在命令行给server发送数据,最简单的发送sample就是使用statsd API,这需要在启动server时进行端口设置,我们使用netcat发送sample:

echo "http_response_times:42" | nc -u -w0 127.0.0.1 8125

执行这个命令,每次使用不同的value,server会自动创建不存在的metric。

在WEB UI执行chartsql查询

我们可以从http_respone_times获取最新100次的samples,以sample time作为X轴,以sample value作为Y轴:

DRAW LINECHART AXIS LEFT AXIS BOTTOM;

SELECT time as x, value as y FROM http_response_times

ORDER BY time DESC LIMIT 100;

增加labels

为了让你在任意维度深度的度量你的metric数据,每个sample可以设置一个或者多个lables。每个lable是一个K/V对。在我们的例子中,假如我们的web应用运行在多台机器上,我们则可以给每个sample设置一个hostname lable或者datacenter lable,这样我们就可以查看每台主机的响应时间或者datacenter的响应时间。

让我们给http_response_times中插入更多的示例samples,并且加入lables,如下:

echo "http_response_times[hostname=machine82][datacenter=ams1]:18" | nc -u -w0 127.0.0.1 8125
echo "http_response_times[hostname=machine83][datacenter=ams1]:42" | nc -u -w0 127.0.0.1 8125

echo "http_response_times[hostname=machine84][datacenter=ams1]:23" | nc -u -w0 127.0.0.1 8125

当我们使用chartsql查询时,lable的key作为table的列,因此你可以通过lable来过滤你的值。现在我们的http_response_times包含了四个列:time、value、hostname、datacenter

现在我们可以在WEB UI中执行chartsql来查询最近一个小时内http_response_times的samples,我们以hostname进行rolled up,还是以sample time为X,以sample value为Y。

DRAW LINECHART AXIS LEFT AXIS BOTTOM ;

SELECT hostname as series , time as x , value as y FROM http_response_times

WHERE time > - 1hour ;

ChartSQL Overview

chartsql查询语句支持标准的sql语句,虽然它的一些特性还没完成,但是chartsql支持所有的标准sql语句,group by、having、joins等等。以下是ChartSQL和标准SQL的不同之处:

DRAW声明语句

DRAW语句允许你指定查询的返回结果是作为图表返回还是作为table返回:

DRAW LINECHART

WITH AXIS BOTTOM

SELECT time AS x, value AS y FROM example_data;

IMPORT声明语句

IMPORT允许你导入外部数据,例如CSV和mysql数据库:

IMPORT TABLE example_data FROM 'csv:examples/data/measurement.csv?headers=true' ;

SELECT * FROM example_data ;

IMPORT TABLE mytable FROM 'mysql://localhost:3306/mydatabase' ;

SELECT * FROM mytable ;

GROUP OVER TIMEWINDOW条款

GROUP OVER TIMEWINDOW当和timeseries data一起工作时,是一个基于时间的简单汇总:

SELECT time, mean(value) FROM mymetric GROUP OVER TIMEWINDOW(60);

DRAW Charts

DRAW语句允许你指定查询的返回结果是作为图表返回还是作为table返回,所有跟在DRAW语句后面的SELECT语句都被解释为图表数据,DRAW可以绘制图表的类型有AREACHART、BARCHART、LINECHART、POINTCHART四种。

DRAW LINECHART; -- first chart

SELECT ...; -- data is added to first chart

SELECT ...; -- data is added to first chart

DRAW BARCHART; -- second chart

SELECT ...; -- data is added to second chart

Add Series 所有的图表都可以渲染一个或者多个series数据,每个SELECT都必须有X和Y列,你可以通过设置serieslie来设置series名称。

手动设置series

SELECT "myseries" as series, ... as x, ... as y FROM ...;

或者使用series列在一个select语句中返回多个series,city_temperatures表有month、temperature、city三列

DRAW LINECHART;

SELECT city AS series, month AS x, temperature AS y FROM city_temperatures;

Adding Legends 在每个DRAW语句添加legend

DRAW LINECHART WITH

LEGEND BOTTOM LEFT OUTSIDE;

Labels, Colors & more

label 当返回值列表是label列,则在每个point点的label列的值上可以设置tag或者tooltip

SELECT ... as x, ... as y, "value is: " + value as label FROM ...;

color 使用color列控制series的颜色,color列的值可以是color0..color9,或者hex rgb值

SELECT ... as x, ... as y, "color3" as color FROM ...;

SELECT ... as x, ... as y, "#f73e14" as color FROM ...;

point_style pointstyle列控制series的point style,值可以是circle和none

SELECT ... as x, ... as y, "circle" as pointstyle FROM ...;

point_size pointsize列控制series的point size,值可以是0..100

SELECT ... as x, ... as y, 4 as pointsize FROM ...;

line_style linestyle列控制series的line style,值可以是none和solid

SELECT ... as x, ... as y, "solid" as linestyle FROM ...;

line_width linewidth列控制series的line width,值可以是0..100

SELECT ... as x, ... as y, "2" as linewidth FROM ...;

Value Domains 设置XYZ轴的区间

DRAW LINECHART WITH

XDOMAIN 0, 100

YDOMAIN 0, 100

AXIS BOTTOM

AXIS LEFT;

绘制对数log

DRAW LINECHART WITH XDOMAIN LOGARITHMIC

YDOMAIN 0, 100 LOGARITHMIC

AXIS BOTTOM

AXIS LEFT;

Add Chart Title/Subtitle 增加标题

DRAW LINECHART WITH

TITLE "mychart" SUBTITLE "mysubtitle";

Combining Charts 合并多个图表类型或者画多条Y轴

DRAW LINECHART WITH AXIS LEFT TITLE "y axis 1";

SELECT ....;

DRAW LINECHART WITH AXIS RIGHT TITLE "y axis 2";

SELECT ....;

Axes 图表默认没有axes,要手动设置

DRAW <charttype> [ WITH ]

[ AXIS { TOP | RIGHT | BOTTOM | LEFT }

[ TITLE 'title' ]

[ TICKS [ { INSIDE | OUTSIDE | OFF } ] [ ROTATE deg ]]

X轴在底部,Y轴在左边,并在每个轴添加title

DRAW LINECHART WITH

AXIS LEFFT TITLE "my y axis"

AXIS BOTTOM TITLE "my x axis";

Collecting Data

collecting metrics

我们可以在启动server时配置--storage_backend参数来收集数据,Metrics相当于database中的tables。每个metric都由一个唯一的name和由收集来的数据组成(叫做samples),这些数据以时间序列进行记录。

一个sample就是一个datapoint,每个sample至少包含一个timestamp和一个numeric value。在每个metric中都默认包含两个列value和time,而每个sample是表中的一行。metric的名称可以是由A-Za-z0-或者'.',或者'_',或者'-',或者'/'组成。

storage backends

server的后端存储计划支持以下方式:inmemory、disk、mysql、hbase。目前只实现了inmemory和disk

fnordmetric-cli --storage_backend=disk --datadir=/tmp/fnordmetric-data
fnordmetric-cli --storage_backend=inmemory

send data via HTTP

在使用HTTP接口发送数据的时候,需要在启动server是设置--http_port参数

fnordmetric-server --storage_backend inmemory --http_port 8080

FnordMetric Server会监听在HTTP端口,你可以发送POST/metrics请求,有两个主要的参数:metric和value。metric=<metric-name>&value=<value>

curl -X POST -d "metric=test_metric&value=23.5" localhost:8080/metrics

也可以在发送数据时增加metric的labels,通过设置labels参数来实现

metric=<metric-name>&value=<value>&label[<k1>]=<v1>&label[<k2>]=<v2>

send data via statsd

fnordmetric sever允许你通过tastsd协议来发送数据,statsd是一个简单的文本协议。需要在启动server时设置--statsd_port参数,发送数据的格式是metricname:value格式

echo "foo:1" | nc -u -w0 127.0.0.1 8125

也可以使用statsd发送带labels的metric,格式是<metricname>[<label1_key>=<label1_value>][<label2_key>=<label2_value>]:<value>

cpu-utilization[hostname=machine83][datacenter=ams1]:0.642

Customizing Charts

可以绘制Line、Area、Bar、Point等图表,我目前只关注LIne

Line Charts

支持以下参数:

x (mandatory) the x axis value, type can be any of String, DateTime, Numeric
y (mandatory) the y axis value, type can be any of String, DateTime, Numeric
series (optional) if set, each series will be displayed as a separate line
linestyle (optional) the line style, valid values are solid and none. default: solid
linewidth (optional) the line width in pixel. default: 2
pointstyle (optional) the point style, valid values are circle and none. default: none.
pointsize (optional) the line width in pixel. default: 4
label (optional) a label to be displayed above each point
color (optional) the line/point color (hex value, eg. #ff0000)

分类:Linux操作技巧 时间:2015-05-12 人气:357
本文关键词: FnordMetric
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.059 (s). 12 q(s)