文档章节

Graphite简介

摩云菜
 摩云菜
发布于 2016/06/28 09:45
字数 1042
阅读 1.8K
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

Graphite引入的前提

       之前公司的监控系统使用mysql做过物理设备cpu,内存,磁盘和网卡等资源的数据统计功能,但是效果并不好。因为这些统计数据不适合用mysql来存储,它们的量太大了,量一大,mysql数据库查询响应就变得非常缓慢。所以后来就把cpu,内存,磁盘和网卡等资源的数据统计功能去掉了。

         最近对监控系统又增加了一些需求,主要也是一些数据统计的功能。所以如果还按以前的路来走,使用mysql来做,那么结局必然跟cpu,内存,磁盘和网卡等资源的数据统计功能是一样的。所以我们不能走老路,我们必须寻找新的解决方案。

        后来经过调研,我们找到了Graphite这个工具。它天生就是用来做数据统计功能的,正好满足我们目前的需求,所以我们对它进行了研究。

Graphite简介

       Graphite是一个用Python写的web应用,是一个企业级的系统监控工具,可以在廉价机硬件上运行。它由三个软件组件组成:

1:carbon - 一个Twisted守护进程,监听并接收时间序列数据

2:whisper - 一中固定大小的数据库,用来存储时间序列数据,在设计上类似于RRD

3:graphite-web – 使用Django框架实现的一个webapp,它可以从whisper数据库获取时间序列数据并且进行展示。

Graphite的系统架构如下所示:

        图中的metrics就是发送给Graphite系统的数据指标,这些发送过来的数据指标,首先通过carbon模块进行收集,然后存储在whisper数据库中,最后graphite-web从whisper数据库中获取这些数据指标并进行展示。

如何给Graphite喂数据

         Graphite不负责收集数据,数据的收集工作是由使用Graphite的人来做的。也就是说图中metrics的发送工作是由使用Graphite的人来做的。你想使用Graphite存储什么数据,你就给Graphite发送什么数据。Graphite采用简单的文本协议,给Graphite发送数据指标时,使用它定义好的数据格式给他发送数据指标就可以。

Graphite的指标数据的文本格式定义如下:

metric_path value timestamp\n

1:metric_path : 指标名称

2:value : 指标值

3;timestamp : 时间戳

下面是使用shell给Graphite发送指标的例子:

ORT=2003

SERVER=graphite.your.org

echo "local.random.diceroll 4 `date +%s`" | nc ${SERVER} ${PORT};


   如果要使用代码给Graphite喂数据,那么应该是使用下面几个步骤:

   1:使用Graphite所在机器的IP和端口(2003或者2004)建立一个到Graphite的网络连接

   2:收集数据指标

   3:把收集的数据指标格式化成“metric_path value timestamp\n“格式的字符串

   4:把格式化后的字符串通过之前建立的网络连接发送出去

Graphite跟现有监控系统整合

如果现有的监控系统想使用Graphite来做数据统计相关的功能,需要做以下三件事情:

1:在收集端添加给Graphite发送数据指标的代码

2:在展示端使用graphite-web提供的API接口获取whisper数据库里面的数据,并生成适合现有监控系统的API接口,供监控系统前端页面使用

3:增加各项指标的前端展示页面,展示这些指标

        当然目前对于收集端和展示端,都有很多现成的开源组件可以使用,比如指标收集端的工具有Statsd等,指标展示端口的工具有grafana等。

         使用开源的工具,还是基于graphite做二次开发,视自己的实际情况而定,应该来说都不复杂。

-----------------------------------------------------

欢迎关注我的微信公众号 ^_^

上一篇: whisper数据库
下一篇: 代码极简主义
摩云菜
粉丝 26
博文 34
码字总数 42147
作品 0
闵行
高级程序员
私信 提问
加载中
此博客有 2 条评论,请先登录后再查看。
实时分析系统--istatd

istatd是IMVU公司工程师开发的一款优秀的实时分析系统,能够有效地收集,存储和搜索各种分析指标,类似cacti,Graphite,Zabbix等系统。实际上,istatd修改了Graphite的存储后端,重新实现了...

匿名
2013/02/07
3K
1
开源数据访问组件--Smark.Data

Smark.Data是基于Ado.net实现的数据访问组件,提供基于强类型的查询表达式进行灵活的数据查询,统计,修改和删除等操作;采用基于条件驱动的操作模式,使数据操作更简单轻松;内部通过标准SQL...

泥水佬
2013/03/12
2.6K
0
kubernetes+docker监控之简介

kubernetes+docker监控 Docker的监控原则:根据docker官方声明,一个容器不建议跑多个进程,所以不建议在容器中使用agent进行监控(zabbix等),agent应该运行在宿主机,通过cgroup或是docke...

perofu
2016/07/19
6.4K
10
YAML简介与使用实例

一、YAML介绍 YAML:是YAML Ain't a Markup Language(YAML不是一种置标语言)的递归缩写,早先YAML的意思其实是:Yet Another Markup Language(另外一种置标语言),但为了强调这种语言以数...

孟飞阳
2016/07/12
1.2K
3
教程分享:Unreal SDK 游戏开发从入门到精通(UnrealScript语法、UI Scene界面、UDK独立开发游戏)

Unreal SDK 游戏开发从入门到精通(UnrealScript语法、UI Scene界面、UDK独立开发游戏) 课程讲师:Shark 课程分类:.Net 适合人群:初级 课时数量:56课时 用到技术:UnrealScript、UDK动画系...

光大不如深发展
2014/06/13
48
0

没有更多内容

加载失败,请刷新页面

加载更多

配置Jupyter环境:安装+补全+美化+常用库

1 Jupyter简介 Jupyter Notebook是一个交互式笔记本,支持运行40多种编程语言,本质是一个Web应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和Markdown。 2 安装 ...

氷泠
9分钟前
7
0
IDEA 运行和远程提交 MapReduce 程序

项目依赖管理这里使用 Gradle,Maven 只需要添加所需依赖即可。 所需软件:Hadoop、JDK、Idea 前提:已经设置好 JAVA_HOME 环境变量和安装好 Idea。 1、Idea 本地独立模式运行 MapReduce 1....

大数据小先
20分钟前
11
0
如何使用Sublime Text 2重新格式化HTML代码? - How do I reformat HTML code using Sublime Text 2?

问题: I've got some poorly-formatted HTML code that I'd like to reformat. 我有一些格式很差的HTML代码,我想重新格式化。 Is there a command that will automatically reformat HTML......

法国红酒甜
32分钟前
13
0
Hacker News 简讯 2020-08-12

最后更新时间: 2020-08-12 00:01 Single Page Applications using Rust - (sheshbabu.com) 使用Rust的单页应用程序 得分:126 | 评论:68 The case for why Google should be regulated as a ......

FalconChen
41分钟前
78
0
在关系数据库中存储分层数据有哪些选择? [关闭]

问题: Good Overviews 良好的概述 Generally speaking, you're making a decision between fast read times (for example, nested set) or fast write times (adjacency list). 一般来说,您......

fyin1314
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部