Kamon 和 Statsd, Graphite, Grafana

监控分布式应用本来就是一个困难的事情,每个线程每个任务都在随机的硬件实例上执行,茫茫多的日志,有意设计的Failure Tolerance 都使定位、debug一个问题变得不太可能。

最近为了监控akka项目引入了Kamon以及相关的技术栈:

  • Kamon: 在应用程序中使用;
  • statsd:收集监控信号
  • Graphite:存储监控信息的时序数据库
  • Grafana:图形化监控结果

#Kamon Kamon是一个在jvm之上运行的监控程序运行的库。Kamon专注于集成Typesafe旗下的框架和scala语言,但事实上只要是JVM之上的程序都能用。

Kamon中用户既可以创建自己的metrics,也可以通过AspectJ获得Kamon已做好的几个流行的框架/库里的监测信息。Kamon支持的这样的框架有:

  • AKKA
  • Spray
  • Play Framework
  • JDBC

###非常容易上手

  1. sbt/maven 安装
  2. 修改配置文件
  3. 主程序中Kamon.start()

AKKA集成

Kamon通过两个module来集成akka:

  • kamon-akka
  • kamon-akka-remote:允许远程/分布式的情况下保持TraceContext

__TraceContext__用来保持程序运行过程中的更多调用细节。比如"发帖"和"获取文章列表"两个功能都要使用"获取用户详情"的方法,则单独监控"获取用户详情"方法是不够的。 we refer to the invocation of a functionality as a Trace and to each of the components being used to make up the trace as Segments. Each request to “post new status” is generating a new trace, and, each usage of the “get user details” section is a segment that belongs to the aforementioned trace. All the information related to a trace is stored in a single TraceContext instance.

获取Actor、dispatcher和route的metrics以及TraceContext是基本不需要写代码的。在配置文件中做类似这样的配置即可:

  kamon.metric.filters {
  	akka-actor {
	  includes = ["Arachne/user/**"]
	  excludes = ["Arachne/system/**"]
    }

    akka-dispatcher {
	  includes = [
        "Arachne/akka.actor.default-dispatcher",         "Arachne/akka.actor.fetcher-dispatcher",         "Arachne/akka.actor.preparse-filter-dispatcher"
        ]
    }

    akka-router {
  	  includes = ["Arachne/user/**"]
    }
  }

Include里面写的都是Akka的actor path,ActorPath和ActorRef的关系可见下图: AKKA ActorPath & ActorRef Kamon可获取的Metric就不列了,比较常见的有如消息处理的时间和消息在mailbox中的堆积。

#Statsd 在监控数据统计中类似于logstash的角色,经UDP协议接收监控数据,聚集,并发给下一个应用。比如说一个Counter,他就会把10秒内该Counter累加的值,发送到后端。比如Time/Timing,他会把次数、最大值、最小值、平均值发往后端。所有的数据都是以10秒为一个周期的。

#Graphite/InfluxDB Graphite和InfluxDB类似于ELK中Elasticsearch的角色,负责存储和pivot数据。相比之下,Graphite/InfluxDB应该算作"Time Series DBMS" 而不是搜索引擎,其更注重于大量数字数据的统计信息,而不是每个文档/记录。

ElasticsearchGraphite/InfluxDB
适合以分类建模适合以数字建模
文档大量的以时间间隔的数字,字符串(InfluxDB)
信息之间的关系可以使用query来确定信息之间有定义
非结构化的模型模型之间的关系可以预先定义

时序化数据库是个很有意思的话题,现在最流行的三个产品是InfluxDB,RRDtool和Graphite,以后再聊。 TS DBMS

#Grafana 在监控数据统计中类似于Kibana的角色,和Kibana的主要区别有:

  • 所有图标都是基于时间轴的;
  • 不支持数据查询;
  • 有访问权限系统;

转载于:https://my.oschina.net/princeicelk/blog/715036

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值