StatsD

作者: 猴子精h | 来源:发表于2017-08-21 15:10 被阅读1473次

介绍

https://github.com/etsy/statsd

简单来讲,StatsD 就是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务,如 Graphite。

Installation and Configuration

  • Install node.js
  • Clone the project
  • Create a config file from exampleConfig.js and put it somewhere
  • Start the Daemon:
  • node stats.js /path/to/config

statsD默认每10s将数据聚合并发送给后端,可以通过配置文件config.js中的config.flushInterval修改

以docker容器的方式运行

docker run -d \
    -p 8125:8125/udp \
    -p 8126:8126 \
    -v ~/statsd/config.js:/usr/src/app/config.js \
    stats

展例:将StatsD将收集的metrics汇总输出到console

{
  port: 8125
, backends: [ "./backends/console" ]
, console: { prettyprint: true }
}

通过nc向statsd发送数据

statsd接收的数据格式如下:

<metricname>:<value>|<type>

nc发送

echo "foo:1|c" | nc -u -w0 127.0.0.1 8125

StatsD 支持汇总的数据类型

Metirc Type: Counting

最简单的metric应该就是counter,也就是通常的计数功能,StatsD会将收到的counter value累加,然后在flush的时候输出,并且重新清零。所以我们用counter就能非常方便的查看一段时间某个操作的频率,譬如对于一个HTTP服务来说,我们可以使用counter来统计request的次数,finish这个request的次数以及fail的次数。

echo "foo:1|c" | nc -u -w0 127.0.0.1 8125
{ counters:
   { 'statsd.bad_lines_seen': 0,
     'statsd.packets_received': 1,
     'statsd.metrics_received': 1,
     fooccc: 0,
     hhcc: 2 },
  timers: {},
  gauges: { 'statsd.timestamp_lag': 0 },
  timer_data: {},
  counter_rates:
   { 'statsd.bad_lines_seen': 0,
     'statsd.packets_received': 0.1,
     'statsd.metrics_received': 0.1,
     fooccc: 0,
     hhcc: 0.2 },
  sets: {},
  pctThreshold: [ 90 ] }

Metirc Type: Gauges

不同于Counter,Gauge在下次flush的时候是不会清零的,另外,gauge通常是在client进行统计好在发给StatsD的,譬如, capacity:100|g 这样的gauge,即使我们发送多次,在StatsD里面,也只会保存100,不会学counter那样进行累加。

Metirc Type: Set

Set用来计算某个metric unique事件的个数,譬如对于一个接口,可能我们想知道有多少个user访问了,我们可以这样:

StatsD就会展示这个request metric只有1,2两个用户访问了。

request:1|s
request:2|s
request:1|s

Metirc Type: Timing

最后再来说timing,timing顾名思义,就是记录某个操作的耗时,譬如:

foo:100|ms

上面的例子中,完成foo这个操作花费了100ms,但仅仅是记录这个操作的耗时,并不能让我们很好的知道当前系统的情况,所以通常,timing都是跟histogram一起来使用的。

在StatsD里面,配置histogram很简单,例如:

histogram: [ { metric: '', bins: [10, 100, 1000, 'inf']} ]

在上面的例子中,我们开启了histogram,这个histogram的bin的间隔是[-inf, 10ms),[10ms - 100ms), [100ms - 1000ms), 以及[1000ms, +inf),如果一个timing落在了某个bin里面,相应的bin的计数就加1,譬如:

foo:1|ms
foo:100|ms
foo:1|ms
foo:1000|ms

那么StatsD在console就会显示:

histogram: { bin_10: 2, bin_100: 0, bin_1000: 1, bin_inf: 1 } } },

相关文章

  • StatsD

    介绍 https://github.com/etsy/statsd 简单来讲,StatsD 就是一个简单的网络守护...

  • StatsD Metric

    Why StatsD 在很多系统中,大家都能看到metric的踪影,我们通过监控metric的变化,就可能知道当前...

  • statsd + Telegraf + influxdb +

    statsd + Telegraf + influxdb + grafana 配置网站性能监控 本文默认开发环境...

  • 数据可视化(七)Graphite 体系结构详解

    1.指标采集器 - Dropwizard Metrics, StatsD 2.监听器 - Carbon, gra...

  • 编写Telegraf Input插件

    Telegraf是一个Influxdata的数据采集套件,使用起来跟Collectd、Statsd、Logstas...

  • collectd[statsd plugin]+influxdb

    最近需要撘一套监控系统,调研了几个方案,这里记录一个暂时放弃的方案:应用通过statsd client写stats...

  • StatsD 的使用小结

    应用程序的监控是微服务中很重要的一环。监控主要包括四个方面的内容:指标(metrics)的采集、存储、展示以及相应...

  • StatsD 的使用小结

    [TOC]应用程序的监控是微服务中很重要的一环。监控主要包括四个方面的内容:指标(metrics)的采集、存储、展...

  • graphite statsd接口数据格式说明

    graphite statsd接口数据格式说明 spring maven项目 实时接口请求次数及时间发送到graf...

  • Kubernetes - 监控系统statsd+influxdb

    1. 概述 StatsD 是一个使用 Node.js 开发的简单的网络守护进程,通过 UDP 或者 TCP 方式侦...

网友评论

      本文标题:StatsD

      本文链接:https://www.haomeiwen.com/subject/erocdxtx.html