点击上方“朱小厮的博客”,选择“设为星标”

回复”666“获取新整理的1000+GB资料

在微服务架构下,我们对服务进行了拆分,所以用户的每次请求不再是由某一个服务独立完成了,而是变成了多个服务一起配合完成。这种情况下,一旦请求出现异常,我们必须得知道是在哪个服务环节出了故障,就需要对每一个服务,以及各个指标都进行全面的监控。

一、什么是「 监控系统 」?

在微服务架构中,监控系统按照原理和作用大致可以分为三类(并非严格分类,仅从日常使用角度来看):

  • 日志类(Log);

  • 调用链类(Tracing);

  • 度量类(Metrics)。

下面来分别对这三种常见的监控模式进行说明。

1、日志类

日志类比较常见,我们的框架代码、系统环境,以及业务逻辑中一般都会产出一些日志,这些日志我们通常把它记录后统一收集起来,方便在需要的时候进行查询。

日志类记录的信息一般是一些事件、非结构化的一些文本内容。日志的输出和处理的解决方案比较多,大家熟知的有ELK Stack方案(Elasticseach + Logstash + Kibana),如图:

使用Beats(可选)在每台服务器上安装后,作为日志客户端收集器,然后通过Logstash进行统一的日志收集、解析、过滤等处理,再将数据发送给Elasticsearch中进行存储分析,最后使用Kibana来进行数据的展示。

当然还可以升级方案为:

这些方案都比较成熟,搭建起来也比较简单,除了用作监控系统以外,还可以作为日志查询系统使用,非常适用于做分析、以及问题调试使用。

2、调用链类(Tracing)

调用链类监控主要是指记录一个请求的全部流程。一个请求从开始进入,在微服务中调用不同的服务节点后,再返回给客户端,在这个过程中通过调用链参数来追寻全链路行为。通过这个方式可以很方便的知道请求在哪个环节出了故障,系统的瓶颈在哪儿。

这一类的监控一般采用CAT工具 来完成,一般在大中型项目较多用到,因为搭建起来有一定的成本。后面会有单独文章来讲解这个调用链监控系统。

这也是简单的容错方式。就是指在服务之间调用时,设置一个主动超时时间,超过了这个时间阈值后,如果“被依赖的服务”还没有返回数据的话,“调用者”就主动放弃,防止因“被依赖的服务”的故障所影响。

3、度量类(Metrics)

度量类主要采用时序数据库的解决方案。它是以事件发生时间以及当前数值的角度来记录的监控信息,是可以聚合运算的,用于查看一些指标数据和指标趋势。所以这类监控主要不是用来查问题的,主要是用来看趋势的。

Metrics一般有5种基本的度量类型:

  • Gauges(度量);

  • Counters(计数器);

  • Histograms(直方图);

  • Meters(TPS计算器);

  • Timers(计时器)。

基于时间序列数据库的监控系统是非常适合做监控告警使用的,所以现在也比较流行这个方案,如果我们要搭建一套新的监控系统,我也建议参考这类方案进行。

因此本文接下来也会重点以时间序列数据库的监控系统为主角来描述。

二、「 监控系统 」关注的对象和指标都是什么?

一般我们做「监控系统」都是需要做分层式监控的,也就是说将我们要监控的对象进行分层,一般主要分为:

  • 系统层:系统层主要是指CPU、磁盘、内存、网络等服务器层面的监控,这些一般也是运维同学比较关注的对象;

  • 应用层:应用层指的是服务角度的监控,比如接口、框架、某个服务的健康状态等,一般是服务开发或框架开发人员关注的对象;

  • 用户层:这一层主要是与用户、与业务相关的一些监控,属于功能层面的,大多数是项目经理或产品经理会比较关注的对象。

知道了监控的分层后,我们再来看一下监控的指标一般有哪些:

  • 延迟时间:主要是响应一个请求所消耗的延迟,比如某接口的HTTP请求平均响应时间为100ms;

  • 请求量:是指系统的容量吞吐能力,例如每秒处理多少次请求(QPS)作为指标;

  • 错误率:主要是用来监控错误发生的比例,比如将某接口一段时间内调用时失败的比例作为指标。

三、基于时序数据库的「 监控系统 」有哪些?

下面介绍几款目前业内比较流行的基于时间序列数据库的开源监控方案。

1、Prometheus

Prometheus是一款2012年开源的监控框架,其本质是时间序列数据库,由Google前员工所开发。

Prometheus采用拉的模式(Pull)从应用中拉取数据,并还支持Alert模块可以实现监控预警。它的性能非常强劲,单机可以消费百万级时间序列。

架构如下:

从看图的左下角可以看到,Prometheus可以通过在应用里进行埋点后Pull到Prometheus Server里,如果应用不支持埋点,也可以采用exporter方式进行数据采集。

从图的左上角可以看到,对于一些定时任务模块,因为是周期性运行的,所以采用拉的方式无法获取数据,那么Prometheus也提供了一种推数据的方式,但是并不是推送到Prometheus Server中,而是中间搭建一个Pushgateway,定时任务模块将metrics信息推送到这个Pushgateway中,然后Prometheus Server再依然采用拉的方式从Pushgateway中获取数据。

需要拉取的数据既可以采用静态方式配置在Prometheus Server中,也可以采用服务发现的方式(即图的中上方Service discovery所示)。

PromQL:是Prometheus自带的查询语法,通过编写PromQL语句可以查询Prometheus里面的数据。

Alertmanager:是用于数据的预警模块,支持通过多种方式去发送预警。

WebUI:是用来展示数据和图形的,但是一般大多数是与Grafana结合,采用Grafana来展示。

2、OpenTSDB

OpenTSDB是在2010年开源的一款分布式时序数据库,当然其主要用于监控方案中。

OpenTSDB采用的是HBase的分布式存储,它获取数据的模式与Prometheus不同,采用的是推模式(Push)。

在展示层,OpenTSDB自带有WebUI视图,也可以与Grafana很好的集成,提供丰富的展示界面。

但OpenTSDB并没有自带预警模块,需要自己去开发或者与第三方组件结合使用。

可以通过下图来了解一下OpenTSDB的架构:

3、InfluxDB

InfluxDB是在2013年开源的一款时序数据库,在这里我们主要还是用于做监控系统方案。它收集数据也是采用推模式(Push)。在展示层,InfluxDB也是自带WebUI,也可以与Grafana集成。

以上,就是我对微服务架构中「 监控系统」的一些思考。

想知道更多?描下面的二维码关注我


加技术群入口(备注:Tech):

免费星球入口:

朕已阅 

基于时序数据库做监控,这里有超流行的开源方案相关推荐

  1. java时序图工具_基于时序数据库,实现百亿级话单实时全景监控分析

    背景 随着流量业务的高速发展以及已经到来的5G时代,业务支撑系统的规模不断增大.服务不断增多,业务.应用和系统运行性能指标数据持续以指数级的速度增长,每日计费话单量已突破百亿.系统监控的实时性.准确性 ...

  2. sql server 2008安装_性能不够?基于时序数据库的Zabbix 5.2安装指南

    我们往往在谈论zabbix的优缺点的时候,提到最多的依然还是数据库(默认采用关系型数据库),由于关系型数据库所有的读写都是采用sql语句解析,一但并发过大或者数据量过大,处理能力就显得捉襟见肘,这也是 ...

  3. Promethus===》普罗米修斯简介、时序数据库、监控系统的基本使用

    一.Promethus(普罗米修斯)监控系统 能够安装prometheus服务器 能够通过安装node_exporter监控远程linux 能够通过安装mysqld_exporter监控远程mysql ...

  4. 腾讯唯一时序数据库:CTSDB 解密

    参考文章:腾讯唯一时序数据库:CTSDB 解密 什么是时序数据库 1. 时序数据 1.1 什么是时序数据? 在引入时序数据库之前,先要了解"时序数据"的概念:按照时间顺序记录系统. ...

  5. MYSQL有时序数据库的用法_时序数据库介绍和使用

    时序数据库介绍和使用 发布时间:2018-06-10 18:17, 浏览次数:655 <>1.基础 <>1.1 时序数据的定义 什么是时间序列数据(Time Series Da ...

  6. mysql 时序数据库_时序数据库介绍和使用(转)

    1.基础 1.1 时序数据的定义 什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据.用描述性的语言来解释什么是时序数据,简单的说, ...

  7. 时序数据库与传统数据库的优势

    传统关系型数据库存储时序数据的问题 有了时序数据后,该存储在哪里呢?首先我们看下传统的关系型数据库解决方案在存储时序数据时会遇到什么问题. 很多人可能认为在传统关系型数据库上加上时间戳一列就能作为时序 ...

  8. 基于 mysql时序_几个时序数据库

    ================================ 可用作时序的数据库: ================================ [时序]TimescaleDB, 基于 Pos ...

  9. field list什么意思_时序数据库有什么不一样?

    前言 如今在万物互联(IoT)兴起的推动下,时间序列数据(衡量事物随时间变化的数据)应用和场景激增,是增长最快的数据类型之一,比如监控指标数据,传感器数据,日志,财务分析等等:时间序列数据具有特定的特 ...

最新文章

  1. 理解矩阵的掩码操作 使用opencv锐化图片
  2. ACM_贪心法_queue_Fence Repair
  3. Linux permission denied解决方法
  4. 集众家之所长,你工作中遇到的可视化问题,如何在 Tableau 官网提交 Case?
  5. 转盘在转动的同时ajax异步加载,用jQuery旋转插件jqueryrotate制作转盘抽奖.pdf
  6. 索尼机器狗Aibo将在美国开售,智能撒娇是最甜的 |每只性格都不同
  7. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)
  8. rust能捏人不_不跟风出游的五一假期,武汉人到底能去哪
  9. Web 应用程序渗透测试清单
  10. mysql查询结果数量_sql语句统计查询结果数量怎么写?
  11. VC++6.0 Win32应用程序 如何添加窗体 ------阿冬专栏
  12. Android 手机灭屏流程分析详解
  13. 流程图的制作技巧分享,手把手教你如何绘制流程图
  14. PowerPoint 录制屏幕+解决找不到免费录制屏幕软件
  15. 140个绝对绝对值得收藏的电脑技巧
  16. 斐讯音响突然走红,原来它的秘密是这个!
  17. Introduction To AMBA 简单理解
  18. 跟曹操学做事之道和接纳人才,视关羽为当世之英才
  19. Android屏幕锁定详解(一)
  20. codeforces7D Palindrome Degree(manacherdp或Hshdp)

热门文章

  1. 不同服务器怎么响应ajax,如何从服务器获得响应而无需刷新和使用JQuery/AJAX?
  2. ad软件侵权律师函_Aspen Plus 9 软件安装教程
  3. log4j2.xml 的标签 loggers 中 root 的属性 level 指的是什么
  4. J-LINK不能烧写(错误:JLink Warning: RESET (pin 15) high, but should be low. Please check target)
  5. mongo数据库单节点搭建
  6. vue生命周期探究(一)
  7. 永乐XIANDAI 08
  8. MySQL取字段注释
  9. CodeForces - 628D Magic Numbers(数位dp)
  10. HDU - 6356 Glad You Came(线段树)