午夜咖啡午夜咖啡

jolestar 的文章与笔记。

Post

创业公司的数据收集以及监控系统方案

2013-06-02Post

围绕创业团队的数据收集和监控需求,整理一套低成本可落地的系统与业务监控方案。

精益的 Build-Measure-Learn 环中的一个要点是 Measure。只有足够的数据,才能进行测量评估,增加认知。所以数据监控和收集对创业公司来说非常重要。 需要监控和收集的数据主要有系统数据业务数据

系统数据

系统数据主要指应用和服务的性能、可用性、频次等数据。

看了一些开源方案,业界比较常见的组合大致是:

nagios + collectd/ganglia/munin/cacti

  • nagios 用于设置阀值和报警。

  • 再整合数据收集与展示系统(collectd/ganglia/munin/cacti)。

    1. collectd:https://collectd.org/。只负责收集,不负责展示;如果要展示,需要整合一个展示系统,比较优秀的是 Graphite。
    2. ganglia:http://ganglia.info/。是一个完整的监控方案。
    3. munin:http://munin-monitoring.org/。优势是比较简单,直接定时生成静态图片。
    4. cacti:http://www.cacti.net/。相当于 munin 的升级版,支持动态绘制。
    5. graphite:用于绘图,一般和以上工具整合。优点是实时绘制,便于多个监控指标进行比较。

以上监控系统的数据大多是 RRD 格式。RRD 格式的好处是随着时间推移自动降低精度,缺点是不会保存完整数据。

以上工具主要用于收集服务器状况:

  1. cpu,硬盘,网络,load 等
  2. 通用的服务器状况 mc,mysql,nginx,jvm 等各种指标变化

以上开源的服务都有现成的插件可用,使用的是拉模式。

当前选择的方案是 collectd + graphite

应用层的性能,监控指标(如 接口响应时间 实事调用频次等)需要自行设计方案

  1. 依然是拉模式,应用层先收集数据缓存,然后通过接口方式输出。监控系统定时拉取。简单的可以直接暴露http接口。如果是java应用也可以通过java的MBean模式,通过JMX输出。
  2. 推模式,应用层将数据推送到一个中间层,由中间层汇总然后输出到监控系统。如: statsd

当前选择的方案是 statsd

接口层的可用性监控当前没找到非常合适的开源工具,有第三方服务可供选择,但一般都只支持简单的接口调用,无法做回环功能监控。想到的办法是通过自动化测试工具来定时监控可用性。

业务数据

和业务相关的数据,一般无法通过程序直接记录。需要通过日志等方式汇总并通过一定的计算公式得出。

一般的解决方案是 收集日志(scribe等),写入 hadoop集群,然后通过日志分析工具每天出报表。

但对创业公司来说,hadoop的成本较高,小成本的解决方案是写日志到mongodb中,通过mongodb的MapReduce和集合方法来汇总统计。 收集日志最终没有选择 scribe,而选择了fluentd.

fluentd 优点是和mongodb整合容易,并且支持多种方式收集日志。

  1. 应用层通过本地端口直接写入。
  2. 应用层写入本地文件,fluentd 进行读取该文件并且转换格式记录日志