WEB监控系列第三篇:graphite指南
一 使用说明
以下是喂数据的方式,但是在实际使用中我们使用statsd来喂数据,请参考我的第四篇文章:statsd指南
喂数据有三种方式:
There are three main methods for sending data to Graphite: Plaintext, Pickle, and AMQP.
Choosing the right transfer method for you is dependent on how you want to build your application or script to send data:
- For a singular script, or for test data, the plaintext protocol is the most straightforward method.
- For sending large amounts of data, you’ll want to batch this data up and send it to Carbon’s pickle receiver.
- Finally, Carbon can listen to a message bus, via AMQP.
The plaintext protocol
The plaintext protocol is the most straightforward protocol supported by Carbon.
The data sent must be in the following format: <metricpath><metricvalue><metrictimestamp>.
Carbon will then help translate this line of text into a metric that the web interface and Whisper understand.
On Unix, the nc program can be used to create a socket and send data to Carbon (by default, ‘plaintext’ runs on port 2003):
PORT=2003
SERVER=graphite.your.org
echo "local.random.diceroll 4 `date +%s`" | nc ${SERVER} ${PORT};
The pickle protocol
The pickle protocol is a much more efficient take on the plaintext protocol, and supports sending batches of metrics to Carbon in one go.
The general idea is that the pickled data forms a list of multi-level tuples:
[(path, (timestamp, value)), ...]
Once you’ve formed a list of sufficient size (don’t go too big!), send the data over a socket to Carbon’s pickle receiver (by default, port 2004). You’ll need to pack your pickled data into a packet containing a simple header:
payload = pickle.dumps(listOfMetricTuples)
header = struct.pack("!L", len(payload))
message = header + payload
You would then send the message object through a network socket.
Using AMQP
高级消息队列协议(AMQP)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。
这个应该不容易使用
问题:
1 y轴的单位和发送的不匹配
二使用方法
总结来说,偶尔观察的话,直接打开整个graphite(server:8080)看就行;如果是长期使用,用dashboard比较方便。
但是在我电脑上通配符不能使的情况,使用url api的方式可以得到通配符;dashboard的话,这能把所有的拉到一张图上
参考:http://www.jsxubar.info/graphite-dashboard.html
进入虚拟主机的方式是server:8080
变量使用说明:变量名字以树的结构展开,比如carbon.agents.alg-1-a.cpuUsage表示在cpuUsage这个变量在carbon.agents.alg-1-a.这个路径下。
1 dashboard
顾名思义,以面板的方式显示。
这种方式可以选定项目,画出图形,最后保存为一个网页的形式。再查看时可以直接打开网页。
server:8080/dashboard 打开面板
- 选择数据源的时候可以使用“*”这个通配符,这就相当方便。比如我要比较多个主机的空闲内容,那可以使用*.meminfo.free来进行筛选
- 找到数据源的最底层信息,然后点击,出现加粗,说明数据源已选上,下面就会出现该数据的图形
选择数据,产生图形,保存为一个dashboard,如将CPU的图形信息保存为cpu,关闭这个浏览器窗口,下次查看时就可以使用server:8080/dashboard/#cpu 进行查看。
下次打开面板时,我不记得以前建立的面板,这时可以通过“Finder”,选择面板列表
自己在做的时候,发现通配符不管用,有种反应很慢的感觉。??????????????????
2 cli
命令行操作
参考上面提到的jsxubar博客或者官网http://graphite.wikidot.com/cli-reference
3 Url Api
使用网址的方式直接获取所需的图形。
例如,http://127.0.0.1:8080/render?target=*.test&target=*.bigboy&from=-60min
参考上面提到的jsxubar博客或者官网http://graphite.wikidot.com/url-api-reference
一些小点
设置yStep
Default: Calculated automatically
Manually set the value step between Y-axis labels and grid lines
主要参考:
graphite文档 :https://graphite.readthedocs.org 基本可以查到所有东西
原文地址:https://www.cnblogs.com/catkins/archive/2012/12/27/5270669.html
WEB监控系列第三篇:graphite指南的更多相关文章
- 深入理解javascript函数系列第三篇——属性和方法
× 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...
- Webpack系列-第三篇流程杂记
系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 本文章个人理解, 只是为了理清webpack流程, 没有关注内部过多细节 ...
- 深入理解javascript函数系列第三篇
前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数 ...
- javascript面向对象系列第三篇——实现继承的3种形式
× 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...
- 深入理解javascript作用域系列第三篇——声明提升(hoisting)
× 目录 [1]变量 [2]函数 [3]优先 前面的话 一般认为,javascript代码在执行时是由上到下一行一行执行的.但实际上这并不完全正确,主要是因为声明提升的存在.本文是深入理解javasc ...
- 构建安全的Xml Web Service系列之SSL篇
原文:构建安全的Xml Web Service系列之SSL篇 首先介绍一下SSL, SSL 的英文全称是 "Secure Sockets Layer" ,中文名为 "安全 ...
- 深入理解javascript作用域系列第三篇
前面的话 一般认为,javascript代码在执行时是由上到下一行一行执行的.但实际上这并不完全正确,主要是因为声明提升的存在.本文是深入理解javascript作用域系列第三篇——声明提升(hois ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
- 前端工程师技能之photoshop巧用系列第三篇——切图篇
× 目录 [1]切图信息 [2]切图步骤 [3]实战 前面的话 前端工程师除了使用photoshop进行测量之外,更重要的是要使用该软件进行切图.本文是photoshop巧用系列的第三篇——切图篇 切 ...
随机推荐
- Hadoop环境搭建|第四篇:hive环境搭建
一.环境搭建 注意:hive版本不能太高,否则会出现兼容性问题 1.1.上传hive安装包 创建文件夹用于存放hive文件命令:mkdir hive 1.2.解压hive安装包 命令:tar -zxv ...
- 异步机制 - Overlapped
1 前面说到 GetOverlappedResult的bWait含义 GetOverlappedResult的bWait含义表示是否需要等待,如果IO还处于PENDING状态,内部大概实现是这样 hO ...
- ASP.NET的MVC设计模式
当开发者听到“设计模式”这个词时,他们通常联想到两个场景.一组开发者正在讨论许多创造性意见,正在开会,但是却没有进行编码.另外一组人能制定出正确的计划,保证系统能够开发成功,代码可以重用. 而现实一般 ...
- pwn学习日记Day10 《程序员自我修养》读书笔记
第一章 从 Hello world 说起 抛出问题: 1.程序为什么要被编译器编译后才能执行? 2.编译器在把C语言程序转换成可以执行的机器码的过程中做了什么,怎么做的? 3.最后编译出来的可执行文件 ...
- spring配置hibernate在使用oracle驱动时报错Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver '
在看到这个错误的时候就感觉有点不对劲了,在错误的结尾和引号之间还有空间,如果敏锐的点应该察觉到可能是空格问题.由于本人的粗心导致这个问题一直困扰了我接近一个上午. 在排查这个问题的时候首先想到的就是关 ...
- android studio的安装和配置及解决uiautomatorviewer报错
参考博客:https://www.cnblogs.com/singledogpro/p/9551841.html 安装Android Studio 走了不少弯路,现在整理出来,仅当备忘使用. 首先要先 ...
- win系统动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...
- 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈 绝对值?相对值
小结: 1. 常数时间内检索到最小元素 2.存储 存储绝对值?相对值 存储差异 3. java-ide-debug 最小栈 - 力扣(LeetCode)https://leetcode-cn.com/ ...
- js获取本地ip
function getUserIP(onNewIP) { // onNewIp - your listener function for new IPs //compatibility for fi ...
- vue2.0+vue-dplayer实现hls播放
vue2.0+vue-dplayer实现hls播放 开始 安装依赖 npm install vue-dplayer -S 1,编写组件HelloWorld.vue <template> & ...