一、基本架构图

1、整个架构组件:

  • java客户端

    • dropwizard-metrics:springboot、hystrix的metric体层使用了这个,所以我们需要自己封装向statsd发包的方法,来发送这些metrics给statsd
    • java-statsd-client:直接进行计数并且非常方便的向statsd发送这些metrics(向statsd发包的方法已经封装好了)
  • statsd
  • graphite
    • carbon

      • carbon-relay
      • carbon-cache
    • whisper
    • graphite-web
  • grafana

2、总体流程:

2.1、metrics存储

  • 使用dropwizard-metrics和java-statsd-client进行metric,并每隔10s(consul KV)向statsd的8125端口发送这些metrics
  • statsd接收到数据后,每隔10s(config.js)向carbon-relay发送metrics(port:2013--平文本协议text,port:2014--pickle协议,可在statsd的config.js中进行配置)
  • carbon-relay将接收到的metrics通过一致性hash算法(根据metric name进行hash)将这些metrics分别发送给carbon-cache的a实例和b实例(2003/2013-text,2004/2014-pickle)
  • carbon-cache将这些数据按照指定的时间间隔(storage-schema.conf)存入whisper

2.2、metrics查询

  • 使用ip:3000访问grafana页面
  • grafana调用graphite-web的查询API进行数据查询
    • 所以,即使不用graphite-web进行页面展示,也需要启动graphite-web
  • graphite-web API从carbon-cache的query接口(7002/7102)+ whisper + graphite.db进行数据查询
    • 注意:graphite.db不存储metrics数据,只存储一些用户信息、图表信息。

二、配置文件

1、statsd

config.js

 {
   port: 8125,

   graphitePort: 2013,
   graphiteHost: "127.0.0.1",
   flushInterval: 10000,

   backends: [ "./backends/graphite" ],
   graphite: {
     legacyNamespace: false
   }
 }

说明:

2、carbon

2.1、carbon.conf

 [cache]
 MAX_CACHE_SIZE = inf
 MAX_UPDATES_PER_SECOND = 500
 MAX_CREATES_PER_MINUTE = 50
 LOCAL_DATA_DIR = /opt/graphite/storage/whisper
 USER=

 LINE_RECEIVER_INTERFACE = 127.0.0.1
 PICKLE_RECEIVER_INTERFACE = 127.0.0.1
 CACHE_QUERY_INTERFACE = 127.0.0.1

 [cache:a]
 LINE_RECEIVER_PORT = 2003
 PICKLE_RECEIVER_PORT = 2004
 CACHE_QUERY_PORT = 7002

 [cache:b]
 LINE_RECEIVER_PORT = 2103
 PICKLE_RECEIVER_PORT = 2104
 CACHE_QUERY_PORT = 7102

 [relay]
 LINE_RECEIVER_INTERFACE = 0.0.0.0
 LINE_RECEIVER_PORT = 2013
 PICKLE_RECEIVER_INTERFACE = 0.0.0.0
 PICKLE_RECEIVER_PORT = 2014

 RELAY_METHOD = consistent-hashing
 DESTINATIONS = 127.0.0.1:2004:a, 127.0.0.1:2104:b

 MAX_QUEUE_SIZE = 10000

说明:

  • [cache]模块定义了一个carbon-cache的基本配置:包括cache的最大数量、限制每秒钟对磁盘进行写入的数量、限制每分钟创建wsp文件的数量等
  • [cache:a]和[cache:b]继承了[cache]模块,分别定义了两个carbon-cache实例的接收metrics的协议和端口以及查询端口
  • [relay]模块定义了接收metrics的协议、监听的ip+port、路由方法、队列大小以及发送这些metrics的目的地(ip:port:instance)
    • 注意:监听的端口最好设成0.0.0.0,这样才能监听所有连接它的服务器,这里有statsd暴露在最前端,那么这个ip写成127.0.0.1也可。

2.2、storage-schema.conf(存储模式,实际上最前边的配置也是carbon-cache向whisper写入metrics的时间间隔)

 [statsd]
 pattern = ^stats\.
 retentions = 10s:6h,60s:1d,10m:7d

 [default_1min_for_1day]
 pattern = .*
 retentions = 60s:1d

2.3、storage-aggregation.conf(高精度向低精度聚合的聚合规则)

 [min]
 pattern = \.min$
 xFilesFactor = 0.1
 aggregationMethod = min

 [max]
 pattern = \.max$
 xFilesFactor = 0.1
 aggregationMethod = max

 [sum]
 pattern = \.count$
 xFilesFactor = 0
 aggregationMethod = sum

 [default_average]
 pattern = .*
 xFilesFactor = 0.5
 aggregationMethod = average

3、graphite-web

local_settings.py

 DATABASES = {
     'default': {
         'NAME': '/opt/graphite/storage/graphite.db',
         'ENGINE': 'django.db.backends.sqlite3',
         'USER': '',
         'PASSWORD': '',
         'HOST': '',
         'PORT': ''
     }
 }

 CARBONLINK_HOSTS = ["127.0.0.1:7002:a", "127.0.0.1:7102:b"]

注意:

  • 读取的是settings.py和local_settings.py(后者优先级高,会覆盖前者配置)
  • 单独使用graphite-web不适用grafana的话,需要将时区配置进行纠正(eg.Asia/Shanghai),如果与grafana一起使用的话,grafana会根据所在服务器时区进行纠正

4、grafana

/etc/grafana/grafana.ini

说明:该文件暂时不做任何变动。(只是在第一次启动之前指定了admin_user和admin_password)

注意:读取的是default.ini和grafana.ini(后者优先级高,会覆盖前者配置)

三、启动

1、carbon

  • cd /opt/graphite/bin
  • ./carbon-cache.py --instance=a start(启动a实例)
  • ./carbon-cache.py --instance=b start(启动b实例)
  • ./carbon-relay.py start

2、graphite-web

  • /usr/bin/gunicorn_django -b0.0.0.0:8000 -w2 /opt/graphite/webapp/graphite/settings.py

3、statsd

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

4、grafana

  • cd /usr/sbin/
  • service ./grafana-server start

四、测试

1、单独测试两个carbon-cache

  • echo "1004.count 10112 `date +%s`" | nc localhost 2003
  • echo "1005.count 10112 `date +%s`" | nc localhost 2103
  • 在graphite-web或grafana查看结果

2、加入carbon-relay

  • echo "1006.count 10112 `date +%s`" | nc localhost 2013
  • 在graphite-web或grafana查看结果

3、加入statsd

  • echo "zjg:1|c" | nc -u -w0 127.0.0.1 8125
  • 在graphite-web或grafana查看结果

五、最后的一张图

第三十四章 metrics(2)- 搭建metrics平台的更多相关文章

  1. Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  2. “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. “全栈2019”Java第三十四章:可变参数列表

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. 我的学习之路_第三十四章_jsp

    jsp 在只有servlet时,输出页面内容比较麻烦(成本高,java代码中输出HTML标签),所以需要一种技术,主要是HTML页面的代码(HTML,css,js),可以嵌入java代码,来实现动态页 ...

  5. 【WPF学习】第三十四章 资源基础

    WPF允许在代码中以及在标记中的各个位置定义资源(和特定的控件.窗口一起定义,或在整个应用程序中定义). 资源具有许多重要的优点,如下所述: 高效.可以通过资源定义对象,并在标记中的多个地方使用.这会 ...

  6. 第三十四章 Linux常规练习题(一)参考答案

    一.练习题一 1.超级用户(管理员用户)提示符是___#_,普通用户提示符是___$_. 2.linux关机重启的命令有哪些 ? 关机命令 重启命令 shutdown -h now shutdown ...

  7. python3 第三十四章 - 聊聊File对象

    file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 实例  1 file.close() 关闭文件.关闭后文件不能再进行读写操作. 方法用于关闭一个已打 ...

  8. SpringBoot | 第三十四章:CXF构建WebService服务

    前言 上一章节,讲解了如何使用Spring-WS构建WebService服务.其实,创建WebService的方式有很多的,今天来看看如何使用apache cxf来构建及调用WebService服务. ...

  9. 第三十四章 POSIX消息队列

    POSIX消息队列相关函数 mq_open 功能: 用来创建和访问一个消息队列 原型: mqd_t mq_open(const char *name, int oflag); //只能用来打开消息队列 ...

随机推荐

  1. Razor基础语法简介

    http://blog.csdn.net/pasic/article/details/7072340 Razor的出现,使页面看起更加简洁,Razor的页面后缀为:.cshtml Razor基础语法: ...

  2. [转]配置mysql允许远程连接的方法

    配置mysql允许远程连接的方法 vim /etc/my.cnf注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1保存退出.mysq ...

  3. Mysql 自定义HASH索引带来的巨大性能提升----[真相篇]

    推倒重来 俗话说no zuo no die why you try,这时候我又忍不住zuo了,吭哧吭哧的把解决过程发上博客,向全世界宣布,哥又搞定个难题. 剧情的发展往往是看起来主角完全掌握了局势的情 ...

  4. [转载]强烈推荐学习的blog

    膜拜大牛 原文出处:http://hedengcheng.com/?p=676 ACM Queue (Architecting Tomorrow’s Computing) 网址:http://queu ...

  5. Android OpenCV 图像识别

    最近打算写一个android 平台opencv 的小程序,着手查找了一下资料.网络上的资料参差不齐,有一些都比较老旧,我参考了前面的方法找到了一个简单的搭建方法,分享给大家. 0,环境的搭建: jav ...

  6. Hadoop SequenceFile数据结构介绍及读写

    在一些应用中,我们需要一种特殊的数据结构来存储数据,并进行读取,这里就分析下为什么用SequenceFile格式文件. Hadoop SequenceFile Hadoop提供的SequenceFil ...

  7. eclipse下tomcat插件配置说明

  8. 炉石复盘 宇宙法vs复活牧 [20161130]

    选宇宙法完成使用50个法师职业牌的任务,遇到一个复活牧泰兰德. 前中期下怪,解场.虽然宇宙法偏娱乐,但牧师节奏也比较慢,因此血线一度降到10血以下,但仍然不惧怕牧师斩杀. 9费牧师拍下伊瑟拉,解不掉, ...

  9. silverlight 鼠标事件处理

    托管代码注册鼠标事件 不需要再.xaml中声明注册事件. .xaml <Ellipse Name=" Fill="Orange" Canvas.Top=" ...

  10. Distributed Transaction Coordinator 无法启动

    有时候我们需要进行COM应用程序的权限设置,控制面板-->管理工具-->组件服务-->然后依此展开:组件服务-->计算机-->我的电脑-->DCOM 配置,接下来找 ...