当前位置:   article > 正文

第三十三章 metrics(1) - graphite搭建 + whisper存储模式 + 高精度向低精度聚合方式 + 集成StatsD + 集成grafana...

graphite 聚合函数

组件介绍:

  • carbon:Carbon实际上是一系列守护进程,组成一个Graphite安装的存储后端。这些守护进程用一个名为Twisted的事件驱动网络引擎监听时间序列数据。Twisted框架让Carbon守护进程能够以很低的开销处理大量的客户端和流量。
  • whisper:whisper是一个用于存储时间序列数据的数据库,之后应用程序可以用create,update和fetch操作获取并操作这些数据。
  • graphite-web:用于从whisper查询数据,并展示在图表上,并且维护了一个数据库SQLite用于存储图表信息。重要的是,其提供了一系列接口用于查询数据,这样的话很容易和grafana集成(grafana调用graphite-web的接口来进行查询)

 

软件版本:(不要按照官网进行安装,有很多坑,尤其是版本的坑)

  • Red Hat 4.4.7-11(cat /proc/version)(mac上不好装)
  • Python 2.6.6(python -V)
  • carbon-0.9.14.tar.gz(下载地址:https://pypi.python.org/pypi/carbon/)
  • whisper-0.9.14.tar.gz(下载地址:https://pypi.python.org/pypi/whisper)
  • graphite-web-0.9.14.zip(下载地址:https://pypi.python.org/pypi/graphite-web/)
    • 0.9.14居然是zip包,与前两者风格不统一
  • statsd: 0.8.0 (下载地址:https://github.com/etsy/statsd.git)
  • grafana-3.1.1

 

一、安装

1、安装基本依赖

  • yum install -y epel-release

  • yum install -y gcc Django14 cairo python-pip python-django-tagging pycairo python-gunicorn python-devel supervisor nodejs pytz bitmap-fonts-compat

  • pip install twisted==15.4.0

2、安装3个组件

  • 下载上述的三个包

2.1、安装carbon

  • tar zxvf carbon-0.9.14.tar.gz

  • cd carbon-0.9.14

  • python setup.py install

2.2、安装whisper

  • tar zxvf whisper-0.9.14.tar.gz

  • cd whisper-0.9.14

  • python setup.py install

2.3、安装graphite-web

  • yum install unzip(可选)

  • unzip graphite-web-0.9.14.zip

  • cd graphite-web-0.9.14

  • python setup.py install

三、创建配置文件

  • cd /opt/graphite/conf
  • cp carbon.conf.example carbon.conf
  • cp storage-aggregation.conf.example storage-aggregation.conf
  • cp storage-schemas.conf.example storage-schemas.conf

四、初始化数据库

  • cd /opt/graphite/webapp/

  • chmod 755 graphite/*.py

  • chmod 755 graphite/*.pyc

  • graphite/manage.py syncdb(在此期间可以选择是否创建用户名、密码、邮箱)

五、启动carbon

  • cd /opt/graphite/bin
  • ./carbon-cache.py start

六、启动graphite-web

  • cd /opt/graphite/webapp
  • /usr/bin/gunicorn_django -b0.0.0.0:8000 -w2 graphite/settings.py
  • 浏览器输入ip:8000

所有软件安装并启动成功!!!

 

七、测试

  • yum install nc

  • echo "1001.carbon.zjg.metrics1 10112 `date +%s`" | nc localhost 2003

  • 查看/opt/graphite/storage/whisper下的数据以及/opt/graphite/storage/log/carbon-cache/carbon-cache-a下的日志
  • 查看graphite-web

 

至此,graphite-web安装成功!!!

 

八、部分API使用

在执行如上测试之后,会生成一个metrics.wsp文件,可以通过如下命令来查看该wsp文件的元数据信息。

  • whisper-info.py /opt/graphite/storage/whisper/1001/carbon/zjg/metrics1.wsp
  1. 1 maxRetention: 86400
  2. 2 xFilesFactor: 0.5
  3. 3 aggregationMethod: average
  4. 4 fileSize: 17308
  5. 5
  6. 6 Archive 0
  7. 7 retention: 86400
  8. 8 secondsPerPoint: 60
  9. 9 points: 1440
  10. 10 size: 17280
  11. 11 offset: 28
View Code
  • whisper-dump.py /opt/graphite/storage/whisper/1001/carbon/zjg/metrics1.wsp(更加详细)
  1. 1 Meta data:
  2. 2 aggregation method: average
  3. 3 max retention: 86400
  4. 4 xFilesFactor: 0.5
  5. 5
  6. 6 Archive 0 info:
  7. 7 offset: 28
  8. 8 seconds per point: 60
  9. 9 points: 1440
  10. 10 retention: 86400
  11. 11 size: 17280
  12. 12
  13. 13 Archive 0 data:
  14. 14 0: 1475296140, 10112
  15. 15 1: 1475296200, 10
  16. 16 2: 0, 0
  17. 17 3: 0, 0
  18. 18 ...
  19. 19 1439: 0, 0
View Code

再执行一遍,echo "1001.carbon.zjg.metrics1 101011 `date +%s`" | nc localhost 2003

会看到,除了第一个数据点有数据之外,还有 1353: 1475377320,     101010

 

九、whisper存储模式

1、存储模式

当Whisper文件被创建时,将拥有一个固定的文件尺寸,这个尺寸永远不会再改变。在Whisper文件中可能会包含多个用于不同分辨率的数据点的“存储区(bucket)”,这些存储区是在配置文件storage-schemas.conf中定义的,

例如:

  • 存储器A:拥有10秒分辨率的数据点(即每10s发布一次metrics)
  • 存储区B:拥有60秒分辨率的数据点
  • 存储区C:拥有10分钟分辨率的数据点

每个存储区还拥有一个保留期(retention)属性用于标识该存储区中的数据点应该保留的时间长度。例如:

  • 存储区A:分辨率为10秒,保留时间6小时的数据点
  • 存储区B:分辨率为60秒,保留时间1天的数据点
  • 存储区C:分辨率为10分钟,保留时间7天的数据点

根据上述两种信息,Whisper可以进行一些简单的数学计算,计算出在每个存储区中实际需要保存多少数据点。

  • 存储区A:6小时 x 60分钟/小时 x 6数据点/分钟 = 2160点
  • 存储区B:1天 x 24小时/天 x 60分钟/小时 x 1数据点/分钟 = 1440点
  • 存储区C:7天 x 24小时/天 x 6数据点/小时 = 1008点

如果根据这个存储模式配置创建Whisper文件,该文件大小是56KB。如果在这个文件上执行whisper-dump.py脚本,会有如下输出。需要注意的是,一个archive对应一个存储区,每点秒数(seconds per point )和点数(points )属性则与我们之前的计算相匹配。

 

2、默认存储模式

包含carbon和default_1min_for_1day两个section。storage-schemas.conf:

  1. 1 # Schema definitions for Whisper files. Entries are scanned in order,
  2. 2 # and first match wins. This file is scanned for changes every 60 seconds.
  3. 3 #
  4. 4 # [name]
  5. 5 # pattern = regex
  6. 6 # retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...
  7. 7
  8. 8 # Carbon's internal metrics. This entry should match what is specified in
  9. 9 # CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings
  10. 10 [carbon]
  11. 11 pattern = ^carbon\.
  12. 12 retentions = 60:90d
  13. 13
  14. 14 [default_1min_for_1day]
  15. 15 pattern = .*
  16. 16 retentions = 60s:1d
View Code

说明:

  • 以carbon开头的(carbon内部的metrics,在实际使用中,根据需要可能会去掉该section,该section去掉后,这些内部metrics会被记录到default_1min_for_1day的section下去),每60s发布一次,存储90天。
  • 在生产中,default_1min_for_1day下会存储一些并不重要的数据,设置为60s:1d就足够了
  • 剩下所有的metrics,每60s记录一次,保留1天,那么,默认条件下:
    • seconds per point=60(每60s记录一个点)
    • points=1*24*60*1=1440
    • retention=1*24*60*60=86400s
    • max retention=max(retentions)=86400s(几个存储区存储时间最长的)

注意:

  • 匹配由上到下,上边的已经匹配了,就不会再去匹配下边的了
  • storage-schemas.conf文件每隔60s会被扫描一次,所以修改了该文件不必重启服务器,60s后自动生效(老的文件不变--即使是再写入新的metrics,原因是"当Whisper文件被创建时,将拥有一个固定的文件尺寸,这个尺寸永远不会再改变",新的文件采用新的规则)。

 

3、修改存储模式

  1. 1 [default_1min_for_1day]
  2. 2 pattern = .*
  3. 3 retentions = 10s:6h,60s:1d,10m:7d
View Code

说明:存储模式与1中一样

whisper-info查看

  1. 1 maxRetention: 604800
  2. 2 xFilesFactor: 0.5
  3. 3 aggregationMethod: average
  4. 4 fileSize: 55348
  5. 5
  6. 6 Archive 0
  7. 7 retention: 21600
  8. 8 secondsPerPoint: 10
  9. 9 points: 2160
  10. 10 size: 25920
  11. 11 offset: 52
  12. 12
  13. 13 Archive 1
  14. 14 retention: 86400
  15. 15 secondsPerPoint: 60
  16. 16 points: 1440
  17. 17 size: 17280
  18. 18 offset: 25972
  19. 19
  20. 20 Archive 2
  21. 21 retention: 604800
  22. 22 secondsPerPoint: 600
  23. 23 points: 1008
  24. 24 size: 12096
  25. 25 offset: 43252
View Code

说明:每个Archive对应一个存储区。

 

十、聚合方式

1、聚合

当数据从一个较高精度的存储区移动到一个较低精度的存储区时,聚合开始发挥作用。让我们以前一个示例中的存储区A和存储区B为例:

  • 存储区A:分辨率为10秒,保留时间6小时的数据点(较高精度)
  • 存储区B:分辨率为60秒,保留时间1天的数据点(较低精度)

我们可能有一个每10秒钟发布一个数据点的应用程序。在存储区A中可以找到6小时之内发布的任何数据点。不过,如果我开始查询6小时之前发布的数据点,就可以在存储区B中找到它们。

注意:查询是从高精度到低精度去依次查找。

聚合方式实际上,最开始carbon以每10秒一次的速度记录应用和业务指标项。这种10秒一次的数据会保存6小时。6小时后,这些数据将被聚合为1分钟数据并保存1天。最后,1天之后,这些数据将被聚合为10分钟数据并再保存7天。

 

2、数据点如何从高精度的存储区A移动到存储区B

2.1、获取聚合点数

用高精度值除以低精度值,以确定需要聚合的数据点的数量。

60秒(存储区B)/10秒(存储区A)= 6个数据点需要聚合

注:Whisper需要较高精度的值能够整除较低精度的值(也就是说,相除的结果必须是整数)。否则聚合的结果可能会不准确。

2.2、聚合函数选择

聚合数据时,Whisper从存储区A中读取6个10秒数据点,然后将函数应用于这些数据点上,得出一个将被存储在存储区B中的60秒数据点。有5个聚合函数选项:average,sum,max,min和last聚合函数的选择取决于需要处理的数据点。例如,第95百分位的值可能应该用max函数聚合。另一方面,对于计数器来说,sum函数可能更合适。

2.3、xFilesFactor

在聚合数据点时,Whisper还处理了xFilesFactor的概念。xFilesFactor表示为了保证聚合准确,一个存储区必须包含的数据点比率。在我们之前的示例中,Whisper确定了它需要聚合6个10秒数据点。由于网络问题,应用重启等原因,可能只有4个数据点有数据而其他2个数据点是空值。

如果我们的Whisper文件的xFilesFactor是0.5,这意味着只有存在至少50%的数据点时,Whisper才会聚合数据。如果超过50%的数据点为空时,Whisper会创建一个空值聚合。在我们的例子中,即6个数据点中的4个——也就是66%。聚合函数会被应用在非空数据点上,创建聚合值。

你可以将xFilesFactor设置为0到1之间的任意值。值0表示即使只有一个有效数据点,就会执行聚合。值1则表示只有全部的数据点都有效,才会执行聚合。

 

3、默认聚合规则配置(storage-aggregation.conf)

  1. 1 # Aggregation methods for whisper files. Entries are scanned in order,
  2. 2 # and first match wins. This file is scanned for changes every 60 seconds
  3. 3 #
  4. 4 # [name]
  5. 5 # pattern = <regex>
  6. 6 # xFilesFactor = <float between 0 and 1>
  7. 7 # aggregationMethod = <average|sum|last|max|min>
  8. 8 #
  9. 9 # name: Arbitrary unique name for the rule
  10. 10 # pattern: Regex pattern to match against the metric name
  11. 11 # xFilesFactor: Ratio of valid data points required for aggregation to the next retention to occur
  12. 12 # aggregationMethod: function to apply to data points for aggregation
  13. 13 #
  14. 14 [min]
  15. 15 pattern = \.min$
  16. 16 xFilesFactor = 0.1
  17. 17 aggregationMethod = min
  18. 18
  19. 19 [max]
  20. 20 pattern = \.max$
  21. 21 xFilesFactor = 0.1
  22. 22 aggregationMethod = max
  23. 23
  24. 24 [sum]
  25. 25 pattern = \.count$
  26. 26 xFilesFactor = 0
  27. 27 aggregationMethod = sum
  28. 28
  29. 29 [default_average]
  30. 30 pattern = .*
  31. 31 xFilesFactor = 0.5
  32. 32 aggregationMethod = average
View Code

说明:4个条目

  • 以.min结尾的指标项
    • 使用min聚合函数
    • 至少有10%数据点才可以聚合
  • 以.max结尾的指标项
    • 使用max聚合函数
    • 至少有10%数据点才可以聚合
  • 以.count结尾的指标项
    • 使用sum聚合函数
    • 聚合的前提是至少要有一个数据点
  • 其他指标项
    • 使用average聚合函数
    • 至少有50%数据点才可以聚合

注意:

  • 匹配由上到下,上边的已经匹配了,就不会再去匹配下边的了
  • storage-aggregation.conf文件每隔60s会被扫描一次,所以修改了该文件不必重启服务器,60s后自动生效(老的文件不变--即使是再写入新的metrics,原因是"当Whisper文件被创建时,将拥有一个固定的文件尺寸,这个尺寸永远不会再改变",新的文件采用新的规则)。
  • 很重要的一点,storage-aggregation.conf中的pattern匹配的是metric的name。例如gc.ps_scavenge.count: 2353,测试一下,执行

    echo "1002.carbon.zjg.metrics4.count 101014 `date +%s`" | nc localhost 2003(metric name是1002.carbon.zjg.metrics4.count)之后,执行

    whisper-info.py /opt/graphite/storage/whisper/1002/carbon/zjg/metrics4/count.wsp

  1. 1 maxRetention: 604800
  2. 2 xFilesFactor: 0.0
  3. 3 aggregationMethod: sum
  4. 4 fileSize: 55348
  5. 5
  6. 6 Archive 0
  7. 7 retention: 21600
  8. 8 secondsPerPoint: 10
  9. 9 points: 2160
  10. 10 size: 25920
  11. 11 offset: 52
  12. 12
  13. 13 Archive 1
  14. 14 retention: 86400
  15. 15 secondsPerPoint: 60
  16. 16 points: 1440
  17. 17 size: 17280
  18. 18 offset: 25972
  19. 19
  20. 20 Archive 2
  21. 21 retention: 604800
  22. 22 secondsPerPoint: 600
  23. 23 points: 1008
  24. 24 size: 12096
  25. 25 offset: 43252
View Code

aggregationMethod是sum,xFilesFactor是0。

  • 每一个metric name就是一个wsp文件

 

十一、graphite-web

配置文件读取

graphite-web启动的时候会读取local_settings.py和settings.py(注意,local_settings.py的配置会覆盖settings.py的)

 

十二、安装并集成StatsD

1、下载

  • git clone https://github.com/etsy/statsd.git

2、移动

  • mv statsd /opt(将下载好的statsd文件夹移动到/opt下)

3、编写配置文件

  • cd /opt/statsd

  • cp exampleConfig.js config.js

  • vi config.js

  1. 1 {
  2. 2 port: 8125,
  3. 3
  4. 4 graphitePort: 2003,
  5. 5 graphiteHost: "127.0.0.1",
  6. 6 flushInterval: 10000,
  7. 7
  8. 8 backends: [ "./backends/graphite" ],
  9. 9 graphite: {
  10. 10 legacyNamespace: false
  11. 11 }
  12. 12 }
View Code

4、启动

  • node /opt/statsd/stats.js /opt/statsd/config.js

5、发包测试

  • echo "foo:1|c" | nc -u -w0 127.0.0.1 8125
  • 查看whisper下数据、log下文件以及graphite-web的图

 

十三、安装并集成grafana

1、安装

  • yum install https://grafanarel.s3.amazonaws.com/builds/grafana-3.1.1-1470047149.x86_64.rpm

安装后的路径:

  • Installs binary to /usr/sbin/grafana-server
  • Copies init.d script to /etc/init.d/grafana-server
  • Installs default file (environment vars) to /etc/sysconfig/grafana-server
  • Copies configuration file to /etc/grafana/grafana.ini
  • Installs systemd service (if systemd is available) name grafana-server.service
  • The default configuration uses a log file at /var/log/grafana/grafana.log
  • The default configuration specifies an sqlite3 database at /var/lib/grafana/grafana.db

2、修改配置文件

  • vi /etc/grafana/grafana.ini 
    • 修改grafana最高权限管理员:admin_user,admin_password(因为这两个值只能在grafana第一次启动之前设置一次,以后不能在设置了)

3、启动

  • service /usr/sbin/grafana-server start

4、浏览器访问ip:3000并登陆

5、配置graphite

5.1、添加数据源datasource

5.2、创建一个dashboard(这里直接引入,可以自己创建)

5.3、点击该dashboard查看数据

至此,statsd+graphite+grafana集成完毕!!!

 

参考:http://www.infoq.com/cn/articles/graphite-intro

转载于:https://my.oschina.net/abcijkxyz/blog/814390

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/768402
推荐阅读
相关标签
  

闽ICP备14008679号