转载

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

    

        支持以下参数:

(mandatory) the x axis value, type can be any of String, DateTime, Numeric
(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)

正文到此结束
Loading...