前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go监控方案(3) -- statsd

go监控方案(3) -- statsd

作者头像
solate
发布2019-07-22 16:22:50
1.2K0
发布2019-07-22 16:22:50
举报
文章被收录于专栏:solate 杂货铺solate 杂货铺

statsd

statsd也是一款数据采集工具。

statsd狭义来讲,其实就是一个监听UDP(默认)或者TCP的守护程序,根据简单的协议收集statsd客户端发送来的数据,聚合之后,定时推送给后端,如graphite和influxdb等,再通过grafana等展示。

statsd 其实也有很多第三方包用来收集数据,但是statsd支持的类型较少,度量只有四种,所以我只用statsd作为传输协议进行数据传输。所以没有直接使用下面介绍的这4个第三方包

git 官方介绍了4种,地址:https://github.com/statsd/statsd/wiki#client-implementations

statsd

协议

代码语言:javascript
复制
<bucket>:<value>|<type>[|@sample_rate]
  • bucket是一个metric的标识,可以看成一个metric的变量。
  • value: metric的值,通常是数字。
  • metric的类型,通常有timer、counter、gauge和set四种。
  • sample_rate

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 。

实际上,在客户端每次调用发送接口会计算其发送概率。

UDP 和 TCP

statsd可配置相应的server为UDP和TCP。默认为UDP

  • UDP不需要建立连接,速度很快,不会影响应用程序的性能。
  • “fire-and-forget”机制,就算statsd server挂了,也不会造成应用程序crash。

UDP更适合于上报频率比较高的场景,就算丢几个包也无所谓,对于一些一天已上报的场景,任何一个丢包都影响很大。

网络环境比较差的场景,适合用TCP,会有相应的重发,确保数据可靠

代码语言:javascript
复制
建议使用UDP。TCP还是有许多弊端的。

默认端口

statsd 默认监听8125来收集udp包。

代码语言:javascript
复制
port: 8125

指标 metric

statsd 支持的数据类型:

metric_types

代码语言:javascript
复制
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

代码语言:javascript
复制
gorets:1|c\nglork:320|ms\ngaugor:333|g\nuniques:765|s

Counting

counter类型的指标,用来计数。在一个flush区间,把上报的值累加。值可以是正数或者负数。

代码语言:javascript
复制
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

Timing

timers用来记录一个操作的耗时,单位ms。statsd会记录平均值(mean)、最大值(upper)、最小值(lower)、累加值(sum)、平方和(sum_squares)、个数(count)以及部分百分值。

代码语言:javascript
复制
rpt:100|g

如下是在一个flush期间,发送了一个rpt的timer值100。以下是记录的值。

代码语言:javascript
复制
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 

Gauges

gauge是任意的一维标量值。gague值不会像其它类型会在flush的时候清零,而是保持原有值。statsd只会将flush区间内最后一个值发到后端。另外,如果数值前加符号,会与前一个值累加。

代码语言:javascript
复制
age:10|g    // age 为 10
age:+1|g    // age 为 10 + 1 = 11
age:-1|g    // age为 11 - 1 = 10
age:5|g     // age为5,替代前一个值

Sets

记录flush期间,不重复的值。

可以针对某一个集合进行统计,统计总共出现了多少种类的值。

代码语言:javascript
复制
request:1|s  // user 1
request:2|s  // user1 user2
request:1|s  // user1 user2
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • statsd
    • 协议
      • sample_rate
    • UDP 和 TCP
      • 默认端口
        • 指标 metric
          • Counting
          • Timing
          • Gauges
          • Sets
      相关产品与服务
      Grafana 服务
      Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档