FnordMetric 实战

栏目: 编程工具 · 发布时间: 6年前

内容简介: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)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

长尾理论2.0

长尾理论2.0

安德森 / 乔江涛、石晓燕 / 中信出版社 / 2009-5 / 42.00元

《长尾理论2.0》是克里斯·安德森对所有问题最明确的回答。在此书中,他详细阐释了长尾的精华所在,揭示了长尾现象是如何从工业资本主义原动力——规模经济与范围经济——的矛盾中产生出来的。长尾现象虽然是明显的互联网现象,但其商务逻辑本身,却是从工业经济中自然而然“长”出来的,网络只是把酝酿了几十年的供应链革命的诸多要素简单地结合在一起了。同时,长尾理论转化为行动,最有力、最可操作的就是营销长尾,通过口碑......一起来看看 《长尾理论2.0》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具