这4个文章是一个系列的,关于如何配置 StatsD,Graphite以及如何使用两者来显示访问信息:

  1. StatsD学习:http://blog.csdn.net/puncha/article/details/9083061
  2. 在Ubuntu Server 12.04 x64下安装Graphite: http://blog.csdn.net/puncha/article/details/9092765
  3. StatsD与Graphite联合作战:http://blog.csdn.net/puncha/article/details/9112293
  4. Graphite实战:http://blog.csdn.net/puncha/article/details/9137001

在上次把StatsD和Graphite搭建完工后,今天就开始深入研究Graphite怎么用了。Graphite默认绑定在80端口,所以直接用浏览器访问就行,左侧是所有的bucket:

假如你要配置的话,可以访问http://<graphite server>/admin/。最后的/不能漏!这个是配置界面可以增加删除用户(需要superuser权限,在第二篇博文里面有讲如何创建superuser的),界面是有够丑的:

这个界面的实用性一般,我比较喜欢使用Dashboard界面(点击Dashboard就可以进入):

Dashboard可以保存点击Dashboard-》Save就可以了,点击Finder可以让你加载你保存的Dashboard。

好,下面是我要统计的信息:

1) 用户账号信息,我想知道到底有谁来访问过我的网站,本身statsd不是用来统计这个的,但是为了简单起见,有一个人来访问,我就把他的域账号作为bucket名字,然后increment。

2) 页面的访问计数和页面的渲染时间,这个我使用了timing功能,timing的sum就是10s内页面渲染的总时间,这个没啥用,但是其他两个属性很有用count(用来统计页面访问次数)、upper(用来统计页面渲染最大值)。

3) 状态码,这个用来统计出错的次数(404,500)这些。

开始写代码,statsd-client默认提供了一个expressJs的中间件,但是不太符合我的要求,所以我照着他,重写了一个:

var should = require("should");// For each requested URL (exclude the static resources), we will statistics
// 1) Counter: cer.status_codes.*
// 2) Timing: timers.cer.pages.*
exports.statsdMiddleware = function (statsdClient) {return function (req, res, next) {should.exists(res.locals);should.exists(req.method);var startTime = new Date();// Shadow end requestvar end = res.end;res.end = function () {end.apply(res, arguments);// Statistics the status code, especailly for 500, 404statsdClient.increment('status_codes.' + res.statusCode);var timeElapse = new Date() - startTime;if (req.route && req.route.path) {var path = req.route.path;if (Object.prototype.toString.call(path) === '[object RegExp]') {path = path.source;}if (path === "/") {path = "root";}if (req.query.productId) {path += '_' + req.query.productId;}// Statistics the page hit count and time to render the pagevar key = 'pages.' + req.method.toLowerCase() + '_' + path.replace(/:/g, "").replace(/\//, "").replace(/\//g, "_");statsdClient.timing(key, timeElapse);// Statistics user accountsvar user = req.headers["x-iisnode-auth_user"];if (user) {console.log(user);statsdClient.increment("users." + user.replace(/\\/g, '_'));}}};next();};
}

原作者构思很巧妙,把res.end函数替换掉,这样就可以在每次完成HTTP request的时候,进行统计了。我这里的思路是,假如有req.route.path这个属性(这个可以过滤掉一些静态资源的访问),我就格式化一下key,然后发送给statsD。同时也增加2个计数器,一个是status_codes.*,一个是users.*。这个就完成了,还要做的一件事就是把中间件加入到expressJs里面:

var express = require('express'), http = require('http'), path = require('path'), util = require('util'), middlewares = require('./middlewares');var app = express();
var SDC = new require('statsd-client');
var sdc = new SDC({ host: 'localhost', port: 8125, debug: false }).getChildClient('cer');app.configure(function () {app.set('env', 'production');app.set('port', process.env.PORT || 80);app.set('views', __dirname + '/views');app.set('view engine', 'ejs');app.use(middlewares.statsdMiddleware(sdc));app.use(express.favicon());app.use(express.logger('dev'));app.use(express.bodyParser());app.use(express.methodOverride());app.use(app.router);app.use(express.static(path.join(__dirname, 'public')));app.use(express.errorHandler());
});

这么简单,一切就OK了!接下来的事情就是在Dashboard里面做几个统计:

1. 统计1天内所有页面的访问次数:sumSeries(summarize(*.timers.cer.pages.*.count,"1d"))

2. 查看304状态每隔10秒的出现次数(statsD每隔10秒发送一次):stats_counts.cer.status_codes.304

3. 查看所有用户每隔10秒的访问次数:stats_counts.cer.users.*

4. 查看某一个页面每隔10秒的访问总量:*.timers.cer.pages.get_cer_weeklyCrashCount.count

5. 查看某一个页面每隔10秒的最大渲染时间: *.timers.cer.pages.*.upper

然后保存这个dashboard为CER_SITE之后,每次就可以通过http://10.31.143.230/dashboard/#CER_SITE来访问了。

Graphite实战相关推荐

  1. StatsD与Graphite联合作战

    这4个文章是一个系列的,关于如何配置 StatsD,Graphite以及如何使用两者来显示访问信息: StatsD学习:http://blog.csdn.net/puncha/article/deta ...

  2. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  3. python代码大全p-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  4. python爬虫项目-32个Python爬虫实战项目,满足你的项目慌

    原标题:32个Python爬虫实战项目,满足你的项目慌 爬虫项目名称及简介 一些项目名称涉及企业名词,小编用拼写代替 1.[WechatSogou]- weixin公众号爬虫.基于weixin公众号爬 ...

  5. python爬虫项目-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  6. python爬虫源码项目_32个Python爬虫实战项目,满足你的项目慌(带源码)

    写在前面 学习Python爬虫的小伙伴想成为爬虫行业的大牛么? 你想在网页上爬取你想要的数据不费吹灰之力么? 那么亲爱的小伙伴们肯定需要项目实战去磨练自己的技术,毕竟没有谁能随随便便成功! 小编前段时 ...

  7. python常用代码大全-Python 网络爬虫实战项目代码大全

    原标题:Python 网络爬虫实战项目代码大全 DouBanSpider 豆瓣读书的爬虫.你可以爬豆瓣读书下面标签下的所有图书,按评分排名依次存储,存储到Excel中,可方便大家筛选搜罗,比如筛选评价 ...

  8. python基础代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  9. python微博爬虫实战_32个Python爬虫实战项目,满足你的项目荒,附赠资料

    写在前面 学习Python爬虫的小伙伴想成为爬虫行业的大牛么? 你想在网页上爬取你想要的数据不费吹灰之力么? 那么亲爱的小伙伴们肯定需要项目实战去磨练自己的技术,毕竟没有谁能随随便便成功! 小编前段时 ...

最新文章

  1. SpringBoot 2 + Spring Security 5 + JWT 的单页应用 Restful 解决方案
  2. 2019年汽车行业深度投资研究
  3. 骑行318、 2016.7.8
  4. anaconda 设置python3为主_关于在Windows、Linux和Mac上安装设置Python的问题
  5. 深入掌握JMS--转
  6. linux命令--VI命令详解(二)
  7. linux设备:cdev和kobj_map
  8. html li去掉黑点_10分钟教你Python爬虫(上) HTML和爬虫基础
  9. python sklearn库 rnn_如何使用Tensorflow计算RNN和LSTM模型的AUC并生成ROC曲线?
  10. html设置nav标签高度,html – Bootstrap带导航栏的100%高度
  11. VMware8安装教程
  12. Matlab textscan
  13. AD域控与ISA防火墙控制上网
  14. 关于通过邮箱找回密码的实现
  15. 2022.11.11 英语背诵
  16. 2021物联网国赛zigbee点对点通讯——G卷
  17. 01.自我意识的觉醒
  18. cesium绘制折线_polyline
  19. node-sass是什么?
  20. DataGear 轻松制作支持图表联动的全国地图、省级地图数据可视化看板

热门文章

  1. 有关PHP文档生成工具---PHPDocumentor
  2. Oracle基础知识(一)
  3. (ChatGPT)429 You are being rate limited
  4. 从业务架构师角度看区块链为什么以及如何改变世界
  5. 【LabVIEW串口编程】03 串口接收
  6. DeepLabv3+
  7. 【人工智能AI】禅与计算机程序设计艺术:文心一言 vs ChatGPT对比:文心一言当然不仅仅只是“问答对话”那么简单,背后是 “人工智能的全栈技术体系”!
  8. 数据库连接池种类、C3P0数据库连接池、德鲁伊数据库连接池
  9. 学习随记三十一——递归实现二叉查找树
  10. newifi无盘服务器,newifi 3 padavan纯净版固件,2.4G挺稳定,2019年5.09更新