golang常用的监控解决方案

graphite

按照graphite的官方介绍,graphite只干两件事:

  1. 存储数字型的时序数据
  2. 后台渲染为这些数据渲染图

不干的事情:不负责收集数据,只负责收到数据并存储起来;

接受数据的方法为:

1
<metric path> <metric value> <metric timestamp>

1
2
3
PORT=2003
SERVER=graphite.your.org
echo "local.random.diceroll 4 `date +%s`" | nc ${SERVER} ${PORT}

statsD

statsD是一个运行在Node.js平台的聚合器,主要功能是对收到的时序数据按照设定的时间间隔进行聚合,然后将聚合后的数据发送到类似graphite一类的数据库。

主要概念包括:

  1. buckets:类似metric name
  2. value:需要进行聚合的值
  3. flush:刷新的时间间隔

写入数据的协议为

1
<metricname>:<value>|<type>

其中type包括有:

  1. counting计数值
    1
    gorets:1|c

简单的counter,每次都会+1到gorets上,每次flush都会重置为0;
在发送到后端存储的时候不仅会发送counter,还会发送rate。

  1. sampling采样值
    1
    gorets:1|c|@0.1

在每个flush周期发送1/0.1次数据到后端存储,等于每秒采样一次;

  1. timing
    1
    glork:320|ms|@0.1

timing类型的数据会对发送过来的数据计算所有数据的pct90,pct99,平均值,标准差,总和,最大值和最小值,然后发送到后端存储。

  1. gauges原始值

    1
    gaugor:333|g
  2. sets

    1
    uniques:765|s

Statsite

Statsite是一个metrics的聚合的服务,是基于StatsD的;

其中Statsite最重要的一个功能是,它支持多个sink:

  • Graphite
  • InfluxDB
  • Ganglia
  • Librato
  • CloudWatch
  • OpenTSDB
  • HTTP

也就是说,只需要它支持将metrics聚合后写入多个后端存储。