FnordMetric 实战

2015-05-12  来源:本站原创  分类:Linux操作技巧  人气:234 

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)

相关文章
  • FnordMetric 实战 2015-05-12

    FnordMetric是一个使用SQL语句来实现数据收集和可视化的框架,它使用chartsql扩展了标准的sql,允许你编写查询语句来返回图表而不是返回表,查询结果作为SVG向量图或者images来呈现出来.这些图表可以很容易嵌入一个web站点中,这样你就可以在短短几分钟内绘制漂亮的图表. FnordMetric包含两个二进制文件,使用C++编写而成,分别是FnordMetric CLI和FnordMetric Server. 1 fnordmetric-cli类似gnuplot,满足你使用sq

  • Go开发实战 2013-08-05

    Go开发实战 网站 : https://github.com/astaxie/Go-in-Action 写这本书主要是灵感来自于: https://github.com/thekarangoel/Projects 然后我就想到了当初做PHP的时候,也有类似的项目,觉得golang也可以实现一个类似的书籍,暂且把书名定为<Go实战开发> 书的大纲 基础篇 开发环境配置 开发工具配置 基础语法训练 时间字符串处理技术 基础的系统信息 常用技术篇 文件操作 系统操作 图像处理 面向对象 数据库篇 M

  • js实现双向链表互联网机顶盒实战应用实现 2013-10-26

    js实现双向链表互联网机顶盒实战应用实现,需要的朋友可以参考下. 上实战代码: linkedlistnode.js 节点类 /* * 链表节点 */ Dare.LinkedListNode = function () { this.data = null;//数据域 this.prev = null;//前驱 this.next = null;//后驱 }; Dare.extend(Dare.LinkedListNode, Dare); Dare.LinkedListNode.prototype

  • Javascript 多浏览器兼容总结(实战经验) 2013-10-29

    多浏览器兼容一直都是前端备受关注的问题,本文整理了一些实战的经验,个人感觉还不错,需要的朋友可以参考下 一.document.formName.item("itemName") 问题 问题说明:IE下,可以使用 document.formName.item("itemName") 或 document.formName.elements["elementName"]:Firefox下,只能使用document.formName.elements[

  • 网站性能提高实战经验点滴记录 2013-11-13

    网站性能提高实战经验点滴记录,需要的朋友可以参考下. DB: 1.数据库可以适当设计一些冗余字段来减少联合查询 2.经常查询的字段要建立索引 3.查询内容尽量简洁, 比如cakephp中的查询尽量设置$this->recursive=-1,并指定fields. 4.数据库用单独的服务器,有条件的常用查询数据单独分库 5.把session等数据放在Memcache而不是数据库中既能满足多服务器之间共享也能降低数据库的负载. 参考如下文章: http://www.linuxjournal.com/a

  • 从javascript语言本身谈项目实战 2013-12-14

    从javascript语言本身谈项目实战 dulao5 2005-1-15 随着ajax的升温,javascript越来越得到人们的重视.重要的是,ajax在一定程度上带来了web软件架构上的变化,人们把越来越多的功能分配到客户端实现,javascript子项目规模越来越大.如何更高效的使用javascript,如何更科学的组织javascript,如何更顺利的保证项目进展?我想就我的经验谈一点浅见. 一. 开发人员需要认真学习javascript语言本身 由于javascript是"世界上最被

  • Linux vmstat命令实战详细解析 2013-12-25

    这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样) vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的

  • CoreOS 实战:CoreOS 及管理工具介绍 2014-01-05

    [编者按]CoreOS是一个基于Docker的轻量级容器化Linux发行版,专为大型数据中心而设计,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度.CoreOS作为Docker生态圈中的重要一员,日益得到各大云服务商的重视,目前已经完成了A轮融资,发展风头正劲.InfoQ希望<CoreOS实战>系列文章能够帮助读者了解CoreOS以及相关的使用方法.如果说Docker是下一代的虚拟机,那CoreOS就应该是下一代的服务器Linux,InfoQ愿和您一起探索这个新生

  • 从C语言实战谈编程:hello world程序解析 2014-01-16

    上篇要点回顾和点评: 1. 上篇谈了学习一门新语言要学会思考.请问,思考什么? 2. 上篇谈了编程流程,请问流程是什么? 3. 你自己编了helloworld程序了吗?一次编辑.编译成功了吗? 回答完了以上内容,请继续下面的内容. 本篇将对Hello world 程序作深入的解析 我们学习语言,要有好的学习方法,这就是学习或编写最少的语句,能达到对语言最佳的掌握.记住"最少"这两字.实际中很多程序员没有这个概念,能写上上千万万行程序,但是对其语言依然掌握不透.这就因为他们头脑里只看到具

  • 从零开始学习jQuery (十) jQueryUI常用功能实战 2014-01-19

    本文是实战篇. 使用jQueryUI完成制作网站的大部分常用功能. 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是实战篇. 使用jQueryUI完成制作网站的大部分常用功能. 二.前言 经过公司内部收集, 整理了一些经常使用javascript实现的功能. 实现这些功能的主角不是让人眼花缭乱的jQuery插件, 而是jQuery UI. 如果你还在为了一个小小的特效而去下载并安装插件,

  • XML卷之实战锦囊(2):动态查询 2014-01-27

    动机: 查询功能是我们在网站上见过的最普遍也是最常用的一个功能模块了.以往的信息查询都是连接到数据库的,每一次点击都必须要后台数据库的支持.然而很多情况下用户往往只针对某一部分的数据进行操作,这样不但服务器的负担加重,而且严重的影响用户浏览的速度. 针对这种情况我们需要将用户需要的某一部分数据以XML的方式传递到客户端,用户对这些数据可以很方便的进行操作.既方便了用户,又减轻了服务器数据库的负担.何乐而不为呢!而且这项功能可以通用到其他众多模块,因此添加了这个动态查询功能. 材料: XML卷之动

  • 土人系列AS入门教程--实战篇 2014-01-27

    这次我们要进入实战,我要教你们做一个很简单的游戏,下面的每句代码我都会加上注释,如果你看过上面的教程,我想要全部理解应该不会困难. 现在让我们开始吧.这个游戏是我初学的时候按教程做的一个游戏,所以印象比较深刻.这个游戏叫做蜗牛赛跑,流程是这样的:画面上有若干条赛道,每条赛道上面有一只蜗牛,每只蜗牛爬行的速度不一样.游戏开始了,你要猜猜哪只蜗牛先跑到终点.如果你猜对了,You Win,否则,Game Over. 第1步,我们先设置场景的大小 600*400 px ,运行速度为 48帧/秒 这个是我

  • PHP 时间日期操作实战 2014-01-30

    PHP 时间日期操作实战,学习php的朋友可以参考下. 常见常用的时间函数: 1.time(); //取得1970/1/1 00:00:00 到现在的总秒数 <?echo time();?> 2.mktime(); //设定时间 <?echo date("U",mktime(0,0,0,1,20,2011));//输出1970年1月1日0时0分0秒到2011年1月20日0时0分0秒的总秒数//mktime参数: mktime(时,分,秒,月,日,年);//常结合dat

  • 实时数据分析仪表盘框架 FnordMetric 2014-02-09

    FnordMetric 网站 : https://github.com/paulasmuth/fnordmetric FnordMetric 是个基于redis/ruby 的实时事件跟踪应用,是个收集和可视化时间序列数据的框架,用户可以在几分钟内创建漂亮的实时分析仪表盘. 演示视频:http://fnordmetric.io/fnordmetric-server.mp4 授权协议: GPLv3 开发语言: Ruby JavaScript 操作系统: 跨平台

  • 敏捷专家吴穹:敏捷测试的行业应用与实战解析 2014-03-30

    2014年11月14日-15日,由CTO俱乐部开设的敏捷测试研修班将在北京开课,此次培训主要面向资深测试人员.测试经理.开发经理.项目经理等中高端职位人群.该培训采取小班授课.实战练习.案例分析.寓教于乐的形式开展,人数限制在20人左右,最大可能的保证学员们的学习质量. 为了帮助大家更好地了解课程内容,我们专门采访了此次的培训讲师吴穹[采访视频],请他来谈谈有关敏捷实施.敏捷测试等话题. 资深敏捷专家 Agilean联合创始人吴穹 拥有14年实践工作经验,并具备深厚理论基础的软件工程专家.近几年

  • 实战 J2EE 开发购物网站 - 创建数据库 2014-04-11

    二:创建数据库 小试牛刀oracle 8i(顺便我们练练手) (为了方便,我就将oracle 8i简写8i了) 8i和9i确实有些不一样,不过在界面上区别不大,还是以我的oracle 8i为例为大家讲解一下吧!既然是实战,首先我们为自己新建一个开发用户,并创建一个表!! 在oracle里创建新用户和表的方法比较多,只要你有管理员的权限(废话!),首先用最简单的,在8i的程序组中启动DBA Studio程序项,在出现的数据库链接信息中输入管理用户名和口令即可,当然,在oracle中,你可以用用户名

  • 实例分析ASP上传漏洞入侵实战及扩展 2014-05-02

    [上传漏洞欺骗技术] 网络上许多程序都有着上传漏洞,比如任我飞扬整站程序.动感购物商城.秋叶商城.惠信新闻系统等.本文主要讲解上传漏洞的入侵实战以及一些扩展利用.首先我们要获得客户端和服务器之间传递的数据,事先准备好一个ASP木马准备上传,当然不可能成功,我们要的就是这中间我们向服务器提交的数据.一般用WsockExpert来获得数据,由于数据太多只能把关键部分发出来如下: POST /bbs/upfile.asp HTTP/1.1 --. 省略了N多没用信息 Content-Length: 1

  • 实战SATA硬盘安装64位XP 2014-05-18

    Sysman最新得到的电脑配置:戴尔的9100台式机,Pentium D 830双核处理器.2GB内存.两块SATA硬盘.19英寸液晶显示器.在这种情况下,他毫不犹豫的选择最新的64位Windows XP来为自己服务. 免费获取Windows XP x64 微软提供下载的Windows XP x64可以免费使用180天,这已经足够体验64位操作系统的风采了.访问http://www.microsoft.com/windowsxp/64bit/evaluation/trial.mspx页面,选择所

  • Laravel框架学习笔记(二)项目实战之模型(Models) 2014-05-21

    上一篇已经介绍开发环境的搭建,这篇将从项目实战开发,一步一步了解laravel框架.首先我们来了解下laravel框架的模型 (Models) 在开发mvc项目时,models都是第一步. 下面就从建模开始. 1.实体关系图, 由于不知道php有什么好的建模工具,这里我用的vs ado.net实体模型数据建模 下面开始laravel编码,编码之前首先得配置数据库连接,在app/config/database.php文件 'mysql' => array( 'driver' => 'mysql'

  • JQuery 无废话系列教程(二) jquery实战篇上 2014-05-22

    就进入实战?是不是太快了?我还不知道怎么用JQuery!! ... 我知道大家的想法, 放心好了,有些东西是不需要太多的理论知道做为基础, 其实在我们已经掌握JavaScript时,就已经掌握了JQuery的理论知识. 还是入门篇所说的那样,其实JQuery很简单. : ) 在我们开始学习之前建议大家先去下载JQuery1.3中文参考. 下载地址 http://www.jb51.net/books/17812.html 好了,进入正题. 再次申明JQuery很简单,take easy! 从那开始