第三十四章 metrics(2)- 搭建metrics平台
一、基本架构图
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
- carbon
- 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 } }
说明:
- 使用了text协议,也可以指定为pickle协议。
- backends:使用了graphite,所有支持的backends:https://github.com/etsy/statsd/wiki/Backends
- 每隔10s(10000ms)向carbon-relay发送一次metrics
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平台的更多相关文章
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java第三十四章:可变参数列表
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 我的学习之路_第三十四章_jsp
jsp 在只有servlet时,输出页面内容比较麻烦(成本高,java代码中输出HTML标签),所以需要一种技术,主要是HTML页面的代码(HTML,css,js),可以嵌入java代码,来实现动态页 ...
- 【WPF学习】第三十四章 资源基础
WPF允许在代码中以及在标记中的各个位置定义资源(和特定的控件.窗口一起定义,或在整个应用程序中定义). 资源具有许多重要的优点,如下所述: 高效.可以通过资源定义对象,并在标记中的多个地方使用.这会 ...
- 第三十四章 Linux常规练习题(一)参考答案
一.练习题一 1.超级用户(管理员用户)提示符是___#_,普通用户提示符是___$_. 2.linux关机重启的命令有哪些 ? 关机命令 重启命令 shutdown -h now shutdown ...
- python3 第三十四章 - 聊聊File对象
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 实例 1 file.close() 关闭文件.关闭后文件不能再进行读写操作. 方法用于关闭一个已打 ...
- SpringBoot | 第三十四章:CXF构建WebService服务
前言 上一章节,讲解了如何使用Spring-WS构建WebService服务.其实,创建WebService的方式有很多的,今天来看看如何使用apache cxf来构建及调用WebService服务. ...
- 第三十四章 POSIX消息队列
POSIX消息队列相关函数 mq_open 功能: 用来创建和访问一个消息队列 原型: mqd_t mq_open(const char *name, int oflag); //只能用来打开消息队列 ...
随机推荐
- Android学习七:new Date使用
1.例子 学习时间函数,并实现了简单的多个按钮监听同一个事件的方法 2.代码 代码很简单,也很清晰 package com.example.datetime; import java.text.Sim ...
- C#中的async和await
其实这两个关键字的功效比之前的异步方法调用有一个好处,那就是异步阻塞的方法可以有返回值.之前都是通过回调函数实现,执行上下文会切换,不过和这个执行过程类似.可以对这两个关键字这么理解:遇到async的 ...
- weave
Docker的原生网络支持非常有限,且没有跨主机的集群网络方案.目前实现Docker网络的开源方案有Weave.Kubernetes.Flannel.Pipework以及SocketPlane等,其中 ...
- [转]N种内核注入DLL的思路及实现
内核注入,技术古老但很实用.现在部分RK趋向无进程,玩的是SYS+DLL,有的无文件,全部存在于内存中.可能有部分人会说:“都进内核了.什么不能干?”.是啊,要是内核中可以做包括R3上所有能做的事,软 ...
- 微信获取坐标的JS
wx.getLocation({ type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' succes ...
- help和dir函数
help()函数是查看函数或模块用途的详细说明,比如:help('re'),help('re.split') 而dir()函数是查看函数或模块内的操作方法都有什么,输出的是方法列表.
- Parquet文件结构笔记
Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,那么这里就总结下Parquet数据结构到底 ...
- [Tex学习]编号
\documentclass{ctexart}\usepackage{enumerate}\begin{document}\begin{enumerate}[{case}1]\item new\ite ...
- PHP上传大文件 分割文件上传
最近遇到这么个情况,需要将一些大的文件上传到服务器,我现在拥有的权限是只能在一个网页版的文件管理系统来进行操作,可以解压,可以压缩,当然也可以用它来在线编辑.php文件. 文件有40M左右,但是服务器 ...
- Socket的三个功能类TCPClient、TCPListener 和 UDPClient (转)
应用程序可以通过 TCPClient.TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务.这些协议类建立在 System.Net.So ...