Techyou labs
文章RSS
评论RSS
登录
真正的爱应该超越生命的长度,心灵的宽度,灵魂的深度
搜索
关于作者
文章分类
Default
Linux/Unix
Database
Cloud
Networking
Security
Programming
最新文章
带你重走 TiDB TPS 提升 1000 倍的性能优化之旅
Unicode 中的 BIDI 双向性算法[转]
在linux中设置优先使用ipv4,而不是ipv6
linux下WPS高分辨率下因字体缩放导致字体发虚的问题
ssh-rsa not in pubkeyacceptedalgorithms问题解答及处理办法 Permission denied (publickey)
在 Ubuntu 22.04 中使用 PipeWire 替换 PulseAudio
MYSQL简单监控指标
deepin-wine6-stable下TIM悄悄崩溃问题
openwrt 设置ipv6地址分配
Redis 实战篇:巧用数据类型实现亿级数据统计
最新评论
renothing: 备注:路由器端优先设置ipv4并不影响客户端的ip...
renothing: 二次反向代理跟你应用程序得处理时间有关系吧?尤其是...
二次反向代理性能很差,怎么优化的?: 我也用nginx 做了个二次反向代理,但是并发连3...
hostyep: 交换链接么?目前每天保持30个左右对口IP,每月都...
yzhkpli: error while loading share...
美肤宝: 感谢分享。。。
lq: 嗯 喜欢弄得点单点
按月归档
March 2023
December 2022
November 2022
September 2022
August 2022
March 2022
January 2022
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
February 2021
September 2020
May 2020
September 2019
August 2019
July 2019
June 2019
May 2019
January 2019
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
April 2018
March 2018
December 2017
October 2017
September 2017
August 2017
April 2017
March 2017
February 2017
August 2016
July 2015
November 2014
September 2014
August 2014
July 2014
June 2014
July 2013
April 2013
September 2012
July 2012
May 2012
April 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
August 2009
June 2009
May 2009
April 2009
March 2009
February 2009
December 2008
November 2008
September 2008
August 2008
July 2008
June 2008
常用标签
Mysql
nginx
mysql优化
linux
debian
Powered by
Typecho)))
Optimized by
EAimTY
statsd+graphite学习笔记
June 16, 2014
##基础介绍 eBay 云谈及 OpenStack 的监控和报警时,提及了 statsd 和 graphite,如下图所示:  ###statsd Statsd 最早是 2008 年 Flickr 公司用 Perl 写的针对 Graphite、datadog 等监控数据后端存储开发的前端网络应用,2011 年 Etsy 公司用 node.js 重构。statsd狭义来讲,其实就是一个监听UDP(默认)或者TCP的守护程序,根据简单的协议收集statsd客户端发送来的数据,聚合之后,定时推送给后端,如graphite和zabbix statsd系统包括三部分: > - 客户端(client) - 服务器(server) - 后端(backend) 客户端以sdk方式植入于应用代码中,将相应的metrics上报给statsd server。statsd server聚合这些metrics之后,定时发送给backends。backends则负责存储这些时间序列数据,并通过适当的图表工具展示。 ###Graphite Graphite 是一个企业级的监控工具,用 Python 编写,采用 django 框架,sqlite 数据库存储,自有简单文本协议通讯,绘图功能强大。最初由 Chris Davis 在 Orbitz 工作时,作为一个辅助项目开发的,最终成了一个监控基础工具,如他所言,Graphite provides real-time visualization and storage of numeric time-series data,重点解决: > - 实时可视化 - 时间序列数据的存储 Graphite 分为三个组件: > - carbon - a Twisted daemon that listens for time-series data - whisper - a simple database library for storing time-series data (similar in design to RRD) - graphite webapp - A Django webapp that renders graphs on-demand using Cairo  严格地说,Graphite 只是一个根据数据绘图的工具,数据收集通常由第三方工具或插件完成,它自带了 carbon 和 whisper,还可根据其协议选用别的数据源供其绘图。官方描述,预计用 Ceres 替代 Whisper。  ##基本原理与概念 statsd采用简单的行协议: ```
:
|
[|@sample_rate] ``` **bucket** bucket是一个metric的标识,可以看成一个metric的变量。 **value** metric的值,通常是数字。 **type** metric的类型,通常有timer、counter、gauge和set四种。 **sample_rate** 采样频率。适当的降低采样,减少server负载。 这个频率容易误解,需要解释一下。客户端减少数据上报的频率,然后在发送的数据中加入采样频率,如0.1。statsd server收到上报的数据之后,如cnt=10,得知此数据是采样的数据,然后flush的时候,按采样频率恢复数据来发送给backend,即flush的时候,数据为cnt=10/0.1=100,而不是容易误解的10*0.1=1。 UDP 和 TCP statsd可配置相应的server为UDP和TCP。默认为UDP。 > 建议使用UDP以节省资源。 采集到的数据会走 UDP 协议发给 StatsD,由 StatsD 解析、提取、计算处理后,周期性地发送给 Graphite。 数据推送到 Graphite 时,时间周期为1分钟,采集1分钟内的业务数据按照 metric_path value timestamp\n 的格式发送。需要注意的是每次发送的数据必须以 \n 结尾,不能省略。 ##graphite主要配置 Graphite 里有一个 retention(保留)的概念,即明确数据精度以及丢弃多久之前的数据,在 /opt/graphite/conf/storage-schemas.conf 配置文件里定义。retention 定义的表达式为 frequency:history,每一个 retention 之间用英文逗号分隔。 默认是按10秒一个数据的方式,存一天的数据,一天前的数据就没了,如下面的配置所言: ``` [default_1min_for_1day] pattern = .* retentions = 10s:1d ``` 可以自定义 retentions,注意表达式里每一个时间间隔必须是第一个的倍数,也就是说,第一个是10s,那么第二个只能是10s的整数倍,以此类推: ``` [stats] pattern = ^stats.* retentions = 10s:1d,30s:7d,1m:28d,15m:1y ``` 依次解释一下: 10s:1d——1天以内的数据是10秒为一个值 30s:7d——大于1天小于7天内的数据是以30秒为一个值 1m:28d——大于7天小于28天内的是以1分钟为一个值 15m:1y——大于28天小于1年的,是以15分钟为一个值 大于1年的数据丢弃。 ##statsd主要配置 statsd提供默认的配置文件exampleConfig.js。可以参考相应的注释按需配置 **backends后端** 后端默认有console、greaphite等。console的后端通常加上prettyprint。可以同时配置多个backends。backends都要放在代码目录的backends目录下。 ``` backends: ["./backends/console", "./backends/graphite"], console: { prettyprint: true } ``` **flush interval** statsd 默认是10s执行一次flush。可通过flushInterval设置,单位ms。 ``` flushInterval: 2000 // 设为2s ``` **delete系列配置** metric上报时,每次flush之后,就会重置为0(gauge是保持原有值)。如果不上报这些空闲值,可以通过delete*来设置。 ``` deleteGauges: true, deleteTimers: true, deleteSets: true, deleteCounters: true ``` **percentThreshold** 对于timer数据,会计算一个百分比的数据(过滤掉峰值数据),默认是90%。可以通过percentThreshold修改这个值或配置多个值。 ``` //分别计算50%和80%的相关值 percentThreshold: [50, 80] ``` **指标 metric** statsd 有四种指标类型:counter、timer、gauge和set。 **计数器 counter** 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 ``` **计时器 timer** 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 ``` 对于百分数相关的数据需要解释一下。以90%指标监控为例。statsd会把一个flush期间上报的数据,去掉10%(1-90%)的峰值,即按大小取cnt*90%(四舍五入)个值来计算百分值。 举例说明,假如10s内上报以下10个值。 ``` 1,3,5,7,13,9,11,2,4,8 ``` 则只取10*90%=9个值,则去掉13。百分值即按剩下的9个值来计算。 ``` $KEY.mean_90 // (1+3+5+7+9+2+11+4+8)/9 $KEY.upper_90 // 11 $KEY.lower_90 // 1 ``` **标量 gauge** 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,替代前一个值 ``` **sets** 单个flush周期内不重复的值。 ``` request:1|s // user 1 request:2|s // user1 user2 request:1|s // user1 user2 ``` **statsd 客户端** statsd的客户端已经支持多种语言的实现,[参看列表](https://github.com/etsy/statsd/wiki "参看列表") statsd结合Graphite 之后,graphite还支持根据metric路径自动聚合,你可以在它自带的管理站点上看到所有指标的历史数据,可以选时间范围,如下图所示:
暂无评论
添加新评论
称呼
Email
网站
取消回复
内容
发表评论