欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

开源服务内部监控系统(一) graphite简介 博客分类: 监控 监控graphite

程序员文章站 2024-03-17 13:55:58
...

开源监控系统,大名鼎鼎的有nagois,catis。公司就有运维采用nagios作服务器与服务状态监控,同时结合插件提供邮件短信报警功能;catis通过snmp协议对服务器进行监控,利用RRDTool绘制漂亮的报表供你做性能分析。
这些是运维人员的利器,然而服务开发人员却很少去使用这样的工具,因为它们难以做到对我们开发的服务内部运行状态的监控。假如,你想监控自己开发服务的响应时间,五分钟一个点去绘制报表,或者监控你的服务各个时间内部缓存命中率等信息,这些工具基本帮上不忙。

常用方案

为了满足这类需求,很多时候,开发人员会是自行开发一套监控系统,将服务内部的状态,定时发往监控服务器,将这些状态存入数据库,然后自行汇制报表。如果你要监控的服务是个集群的话,就还需要解决监控数据汇总的问题。
另一种常用方案,将各种状态数据打印到日志文件中,定时将这些日志进行汇总,然后对汇总结果运行job分析(有些是汇总到hadoop中,跑mapreduce job),这样做的话监控效果的实时性较差。
为了避免上述的工作量,我们接触并使用了两种可用于服务内部数据监控,提供出色报表效果的的开源系统,分别是Graphite与Ganglia。

Graphite

Graphite给我最大的体会是它使用方式的简单易用。catis采用snmp协议,意味着需要在被监控节点上安装snmp代理;ganglia的监控也需要你在被监控节点上安装gmond用于采集信息。Graphite使用简单的文本协议,只需要简单地通过TCP socket向graphite server发送文本数据

quentinxxz.server.count  1234 1440245016

其中quentinxxz.server.count是一项具体的监控指标的名称, 1440245016是数据产生的时间戳,1234是该时间截下的指标数值。随后你就可以在graphite web上看到相应的数据曲线。
Graphite使用python实现,主要包含三个部份:

1.whisper

Whisper is a fixed-size database, similar in design to RRD (round-robin-database)

whipser是一个固定文件大小的数据库。这意味着whipser的数据文件被创建时具有固定的大小。
例我们对quentinxxz.server.count条目,在/opt/graphite/conf/storage-schemas.conf文件中
做如下配置

[quentinxxz]
pattern = quentinxxz.server.count
retentions = 1min:50d,10min:50d

1min表示以1分种为精度记录一个点,50d表存储50天。所以创建文件的需要保存的点数量,应为1 * 60 * 24 * 50.
whisper另一个有趣的地方是其强大的聚合功能,上述配置中10min表示我们配置的另一精度,whisper会根据我们指定的聚合方式(例如,取10个点中的最大值,最小值,平均值),按照10min一个点的精度将结果存储到另一个存储区中。具体聚合方式的配置位于/opt/graphite/conf/storage-aggregation.conf文件中。
此外,RRD是不接收先于当前最近时间截的update的,而whisper则可以做到(但是这种需求好像不多)。关于更多RRD与whisper的比较,可以参考文档 http://graphite.wikidot.com/whisper

2. carbon (监控数据的 Twisted 守护进程)

Carbon是基于Twisted实现,是Graphite的后端实现。
Carbon的主要作用,是接收被监控节点的连接,收集各个指标的数据,将这些数据写入缓存并最终持久化到whisper存储文件中去。Carbonr能保证Graphite web 绘制出实时接到的指标更新,其原理也很简单位,有点类似lucence,carbon接收到的数据会先存在缓存中,然后再一起写入whisper的硬盘存储。Graphite web通过向carbon-cache发起请求,会同时查询位于缓存与硬盘中的数据。

3. graphite-web

Graphite web是基于Django实现的webapp,其主要功能自然是绘制报表与展示。我不并建议直接使用Graphite web,因为尽管其功能还是比较强大,但界面让我觉得丑得要死。这里我推荐使用第三方的一个Graphite前端开源应用Tessera。
使用Tessera的前提还是需要Graphite web的安装,因为它会直接请求Graphite web获取数据。Tessera的界面还是相当酷炫的,比较符合技术人员的审美。这是它吸引我去使用Graphite的一个重要的加分项。
此外,其灵活的配置,可以让我们*组合,我们的Dashboard。 不多说,直接上图。


开源服务内部监控系统(一) graphite简介
            
    
    博客分类: 监控 监控graphite
 

Graphite使用总结

个人使用感受,Graphite配合Tessera,最主要的优点是在于界面简洁漂亮,传输协议简单。其的缺点在于,当你的应用是一个大集群时,目前Graphite没有为你把集群中来自不同服务器的数据整合汇总的能力,例如,对集群中有10个搜索结点的缓存命中情况进行监控,就需要采用10个不同的指标名称(一般在其中加入主机名区分),意味着10条不同的曲线,但无法直接利用Graphite进行汇总成一个指标或曲线,让你看到搜索集群整体的缓存命中情况。

 

20150822首发于3dobe.com   http://3dobe.com/archives/160/

iteye链接: http://quentinXXZ.iteye.com/blog/2237318

  • 开源服务内部监控系统(一) graphite简介
            
    
    博客分类: 监控 监控graphite
  • 大小: 185.5 KB
相关标签: 监控 graphite