statsd也是一款数据采集工具。html
statsd狭义来说,其实就是一个监听UDP(默认)或者TCP的守护程序,根据简单的协议收集statsd客户端发送来的数据,聚合以后,定时推送给后端,如graphite和influxdb等,再经过grafana等展现。git
statsd 其实也有不少第三方包用来收集数据,可是statsd支持的类型较少,度量只有四种,因此我只用statsd做为传输协议进行数据传输。因此没有直接使用下面介绍的这4个第三方包github
git 官方介绍了4种,地址:https://github.com/statsd/statsd/wiki#client-implementationsgolang
statsd后端
<bucket>:<value>|<type>[|@sample_rate]
若是数据上报量过大,很容易溢满statsd。因此适当的下降采样,减小server负载。网络
客户端减小数据上报的频率,而后在发送的数据中加入采样频率,如0.1。statsd server收到上报的数据以后,如cnt=10,得知此数据是采样的数据, 而后flush的时候,按采样频率恢复数据来发送给backend,即flush的时候,数据为cnt=10/0.1=100,而不是容易误解的10*0.1=1。工具
这个参数的主要做用是下降网络的传输带宽,例如 0.5 表示 UDP 包减小一半,其代价是下降了精确度。对于客户端,若是设置了 0.5 ,也就意味着只有原先 50% 的时间发送统计值;在服务端,会根据采样值进行一些修正,简单来讲就是乘以 2 。post
实际上,在客户端每次调用发送接口会计算其发送几率。性能
statsd可配置相应的server为UDP和TCP。默认为UDPui
UDP更适合于上报频率比较高的场景,就算丢几个包也无所谓,对于一些一天已上报的场景,任何一个丢包都影响很大。
网络环境比较差的场景,适合用TCP,会有相应的重发,确保数据可靠
建议使用UDP。TCP仍是有许多弊端的。
statsd 默认监听8125来收集udp包。
port: 8125
statsd 支持的数据类型:
Counting: gorets:1|c Sampling: gorets:1|c|@0.1 Timing: glork:320|ms|@0.1 Gauges: gaugor:333|g Sets: uniques:765|s
Multi-Metric Packets
gorets:1|c\nglork:320|ms\ngaugor:333|g\nuniques:765|s
counter类型的指标,用来计数。在一个flush区间,把上报的值累加。值能够是正数或者负数。
user.logins:10|c // user.logins + 10 user.logins:-1|c // user.logins - 1 user.logins:10|c|@0.1 // user.logins + 100 // users.logins = 10-1+100=109
timers用来记录一个操做的耗时,单位ms。statsd会记录平均值(mean)、最大值(upper)、最小值(lower)、累加值(sum)、平方和(sum_squares)、个数(count)以及部分百分值。
rpt:100|g
以下是在一个flush期间,发送了一个rpt的timer值100。如下是记录的值。
count_80: 1, mean_80: 100, upper_80: 100, sum_80: 100, sum_squares_80: 10000, std: 0, upper: 100, lower: 100, count: 1, count_ps: 0.1, sum: 100, sum_squares: 10000, mean: 100, median: 100
gauge是任意的一维标量值。gague值不会像其它类型会在flush的时候清零,而是保持原有值。statsd只会将flush区间内最后一个值发到后端。另外,若是数值前加符号,会与前一个值累加。
age:10|g // age 为 10 age:+1|g // age 为 10 + 1 = 11 age:-1|g // age为 11 - 1 = 10 age:5|g // age为5,替代前一个值
记录flush期间,不重复的值。
能够针对某一个集合进行统计,统计总共出现了多少种类的值。
request:1|s // user 1 request:2|s // user1 user2 request:1|s // user1 user2
Telegraf Service Plugin: statsd
Getting Started with Sending StatsD Metrics to Telegraf & InfluxDB