当前位置:首页 > 日记 > 正文

用Node.js和MongoDB简单的日志分析系统的实现

用Node.js和MongoDB简单的日志分析系统的实现
在最近的项目中,项目的日志存储在易于分析JSON格式。以前的日志直接在文件中,并mondb正式闯入我的视线并保存日志到mondb。它是保存日志毫无意义,而最重要的是发现业务发展的趋势,系统漏洞,所以从日志。之前,有一个用java写的分析模块,在tomcat下运行。实现了相当重的分量,添加一个新的指标,过程也繁琐,并分析失败因为NFS。总是想重写,首先要使用Ruby on Rails,但已经没有时间去研究和发展(的借口!)我遇到Node.js又在QCon杭州2011。虽然我以前听说过,但我并没有深入研究。听了宿迁淘宝的演讲,有使用Node.js来完成这个日志分析系统的想法。JS前端js服务器,即使壳数据库是JS,很酷,当然关键是少量的代码。

1。用js实现的服务器端代码

为了有一个良好的风格和快速的编写代码,一个简单的框架应采用它是不可避免的。表达实现了大部分的功能,但熟悉它需要花费大量的时间,和它看起来有点重量级项目。在节点。JS的官方网站,有一个聊天演示程序,简单的动作,将URL返回JSON处理。所以我用fu.js直接改写了server.js:

复制代码代码如下所示:

主机= null; / /本地

端口= 8001;

var =要求(),

系统=需要(工具),

要求(URL),

周一=需要(, / request_handler );

fu.listen(编号(process.env.port | |端口),主持人);

fu.get( /
太简单了,对吧但是服务器确实已经建立起来了。

下面的代码在request_handler.js寻找处理的要求:

复制代码代码如下所示:

无功mondb =需要(mondb );

var =要求();
10用户操作

fu.get( / useractiontop10

Mondb.connect('mondb: / /本地:27017 /日志功能(呃,Conn){

conn.collection('action_count功能(呃,Coll){

Coll.find({价值。行动:{ $:user_action } })。排序({价值。计数:1 })。限制(10)。ToArray(功能(呃,Docs){ {)

如果(!ERR){

var动作{ };

var计数{ };

对于(var i = 0;i < docs.length;i++){

/ / console.log(Docs {我});

Action.push(Docs {我}。价值。行动);

Count.push(Docs {我}。值。计数);

}

res.simplejson(200,{行动:行动,计数:计数});
必须记住关闭数据库连接。

Conn.close();

}

});

});

});

});
二、客户机

最重要的日志系统的直观显示,一个插件jQuery使用jqPlot图。首先,使用一个静态的HTML页作为图形显示容器。

复制代码代码如下所示:

会合监控系统



这几乎jqPlot实例的完整副本,好吧,我承认我太懒了。

以下是chart.js是用来显示所生成的图形。

复制代码代码如下所示:

所有图表绘制/存储功能,如果我们想禁用一个图表,只需要

评论推线时把 /功能到数组。

var绘制{ };

排名前10的用户动作开始********************************* / / ******************************

Document.write ('');
无功drawuseractiontop10chart =函数(){()

如果(!$(# useractiontop10chart)。Attr(' ')){

$(# useractiontop10chart)。Attr(' ','small_chart);

}
$ ajax({

异步:假,

网址: / useractiontop10,

DataType:'json,

缓存:false,

成功:函数(数据){

尝试{

$(# useractiontop10chart')Html(‘);
美元。jqplot('useractiontop10chart,{数量},{数据。)

标题:前10个用户操作

seriesdefaults:{

渲染:jqplot.barrenderer美元,

rendereroptions:{ filltozero:true},

pointlabels:{

显示:真实,

ypadding:1

}

},

axesdefaults:{

tickrenderer:jqplot.canvasaxistickrenderer美元,

tickoptions:{

角度:- 30,

FontSize:'12px

}

},

轴:{

Xaxis:{

渲染:jqplot.cateryaxisrenderer美元,

蜱:data.action

},

Yaxis:{

Pad: 1.05

}

}

});

} catch(e){

/ /警报(e.message);

}

}

});

}
Draws.push('drawuseractiontop10chart);
排名前10的用户操作端************************************ / / *******************************

图***************** / / ***********开始
将您的图表绘制功能放在这里

1。为图表插入一个div

2。实现功能图

3。将函数名推入数组绘制
图******************* / / ***********结束
所有图表

无功drawallcharts =函数(){()

对于(var i = 0;i < draws.length;i++){

eval(画{我} +());

}
在5分钟内回忆起自己。

window.settimeout(drawallcharts,5×60×1000);

}
$(函数(){())

DrawAllCharts();

});
服务器端和客户端代码都有,然后运行查看效果:
什么东西似乎被遗忘了测井分析代码。

三。使用mondb增量MapReduce的日志分析

这是在mondb文件增量MapReduce的介绍。在一开始,它一直被认为是mondb实现了流处理,可以自动执行增量MapReduce。原来我错了,文件没有写这个,就如何建立MapReduce的增量执行。

为了方便,我写mondb MapReduce使用Javascript在一个单独的js文件,然后执行它定期通过crontab。统计。JS代码:

复制代码代码如下所示:

/ **************文件执行的每5分钟/等/ / ***************** crontab。

无功action_count_map =函数(){()

发出(this.action,{行动:this.action,计数:1 });

}

无功action_count_reduce =功能(键,值){

var计数= 0;

values.foreach(函数(值){)

数= value.count;

});

返回{操作:键,计数:计数};

}
Db.log.mapReduce(action_count_map,action_count_reduce,{查询:{ 'action_count:{ 1 } },为NE::{ } }减少:'action_count);

db.log.update({ 'action_count:{ 1 } },为NE:{ $集:{ 1 } },'action_count:假,真的);
这个想法很简单:

1。在map中,每个操作访问号设置为1。

2。减少、计算同一动作的访问次数。

三.执行MapReduce。查询指定为action_count ',这不等于1,即没有执行的统计;结果存储在action_count的收集和减少选项是用来表示作为下一个的输入减少的结果。

4。当前所有的日志记录设置to'action_count'is值1,表明统计已经完成。不知道这是否会导致记录尚未统计和更新看经验启迪英雄!

定期执行stats.js壳:

复制代码代码如下所示:

* / 5 *根CD /根/日志;非本地:27017 /日志stats.js
嗯,这是所有代码,没有什么特别神秘的地方,但是Node.js真的是个好东西。

相关文章

怎么是PS图象处理软件的出血线的设

怎么是PS图象处理软件的出血线的设

设置,教程,图象,处理软件,电脑软件,怎么是PS图象处理软件的出血线的设置印刷和出版需要削减许多书籍和海报。在设计时,我们需要设置出血线。接下来,我们分享ps关于打印出血线的教程。 许多书籍海报在印刷出版时都需要被削减,所以在设计时需要…

PS很快把黑白照片变成彩色照片。

PS很快把黑白照片变成彩色照片。

照片,黑白,彩色,电脑软件,PS,本教程是向朋友介绍PS快速将黑白照片转化为彩色照片。这个教程很好,很简单。它非常适合你学习。建议大家一起学习。 每个家庭都有一张珍贵的旧照片,把它变成颜色不是很有趣。本教程是介绍PS给朋友们,快速把黑白照…

使用AOP来改进Javascript代码

使用AOP来改进Javascript代码

代码,电脑软件,AOP,Javascript,AOP也被称为面向方面编程,Spring的学生对它很熟悉,而在JS中,AOP是一种被严重忽视的技术,本文通过下面的例子,比如说在JS中使用AOP。 1、防止在window.onload从被两次。 2、无创统计代码。 3、分开形式请求和核…

画家画的两种风格美(古代美女和Loll

画家画的两种风格美(古代美女和Loll

两种,画家,古代,娃娃,风格,本教程介绍了用画家把两种风格的美画给大家,都是服装美的气质和洛丽塔娃娃的衣服花边。教程很实用,推荐给大家,希望对大家有帮助。 本教程介绍了画家用画两风格美的每个人,都是古装美女的气质和大师洛丽塔娃娃蕾丝服…

插图:铅笔画风格手绘涂鸦效果的艺术

插图:铅笔画风格手绘涂鸦效果的艺术

特征,铅笔画,插图,手绘,涂鸦,本教程将向你介绍一位朋友的艺术特征,用铅笔画铅笔画涂鸦效果。教程制作的艺术字很美,难度也不大。 本教程主要使用插画制作铅笔艺术风格的艺术字课程。在这段时间里,我被艺术课程困住了,它给你带来了素描风格的字…

ps使用油漆桶工具制作连续的图案教

ps使用油漆桶工具制作连续的图案教

工具,教程,连续,油漆,图案,本教程介绍给一个朋友,ps,使用油漆桶工具创建连续模式。本教程是比较基础的,非常适合初学者学习。推荐朋友一起学习。 对于许多初学者,当你刚刚接触PS图象处理软件的软件,你将不可避免地遇到一些问题,例如,如何用油漆桶…

PPT动画如何制作PPT制作教程

PPT动画如何制作PPT制作教程

动画,制作教程,电脑软件,PPT,如何制作PPT动画,跟随小编辑一起学习研究。 首先,我们需要准备工具和材料。我们使用的工具是PowerPoint2003。我们用的材料是枫叶画。所有工作就绪后,我们可以创建关于落叶的PPT动画。 PPT动画的第一步 打开PPT,单…

美丽的红葡萄酒箱盖的特殊效果,PS图

美丽的红葡萄酒箱盖的特殊效果,PS图

图象处理,软件设计,红葡萄酒,特殊效果,美丽,设计与客户沟通是非常重要的,清楚了解客户的要求;然后上网参考一些优秀的作品,寻找灵感;然后收集材料;最后是纹理效果,设计为 设计与客户沟通是非常重要的,清楚了解客户的要求;然后上网参考一些优秀的作…

2015超级搞笑QQ签名

2015超级搞笑QQ签名

超级搞笑,电脑软件,QQ,恐怕我的黑眼圈暴露了我的国宝身份。 不要浪费青春。 女商人不懂她们的恨,所有的功课。 我不想减肥。我只是害怕反弹。 我没有心脏病,但我的心脏断了,医生,这能治好吗; 尘归尘,土归土,挥手告别二百五十。 之所以把花放在牛粪…

如何在透明层锁定PS不被编辑

如何在透明层锁定PS不被编辑

锁定,不被,编辑,如何在,电脑软件,如何在透明层锁定PS不被编辑有时候PS需要编辑透明层,但是你怎么处理不可编辑的透明图层呢如果发生这种情况,该层通常是锁定的,让我们看看结果。 有时我们只使用软件打开一个透明的图层来编辑,它会显示出这种方…

如何提高手机的速度QQ常见问题

如何提高手机的速度QQ常见问题

常见问题,速度,电脑软件,QQ,提高手机速度的方法:进入手机管理器=手机正在加速,点击一键加速 移动加速包含以下内容: 1,一键加快你清理手机缓存,结束额外的进程,优化开机启动项,为你加快手机的速度。 2,手机加速功能还提供手动操作,其中进程管理可…

什么permutExcel函数是Excel

什么permutExcel函数是Excel

函数,电脑软件,permutExcel,Excel,Excel的permut函数是返回一个数字的排列,从中选择一定数量的对象的一组对象的对象的数量。任意设置或对象或安排在一个内部秩序的事件的子集。安排不同的组合,组合的内部秩序是毫无意义的。这个功能可用于概…