大家好,我是不才陈某~

这篇文章,我将对监控体系的基础知识、原理和架构做一次系统性整顿,同时还会对几款最罕用的开源监控产品做下介绍,以便大家选型时参考。内容包含3局部:

  • 必知必会的监控基础知识
  • 支流监控零碎介绍
  • 监控零碎的选型倡议
关注公众号:码猿技术专栏,回复关键词:1111 获取阿里外部Java性能调优手册

必知必会的监控基础知识

咱们能够了解监控零碎就像咱们现代打战的哨兵一样,哨兵的角色十分重要,敌人来了,哨兵会第一工夫收回预警(吹笛、打鼓、放烟),让守城的兵士可能最快的工夫解决,应答。

那对于咱们利用零碎而言,监控零碎就像咱们第三只眼,如果有利用零碎呈现问题,咱们能够通过监控零碎看是哪里呈现问题,是redis挂了,还是说服务器内存满了,有监控零碎咱们能够很轻松、疾速的定位问题。

甚至咱们能够设置预警,对一些将要呈现的问题进行提前预防解决,及时防止问题的产生。

1、监控零碎的作用

  • 帮忙定位故障: 在产生故障时,咱们能够通过查看监控零碎的各项指标数据,辅助故障剖析和定位。
  • 预警缩小故障率: 对于行将可能产生的故障可能及时收回预警信息,做好提前预防解决。
  • 辅助容量布局: 为服务器、中间件以及利用集群的容量布局提供数据撑持。
  • 辅助性能调优: JVM垃圾回收次数、接口响应工夫、慢SQL等等都能够监控优化。

2、常见的监控对象和指标都有哪些?

  • 服务器监控: CPU使用率、内存使用率、磁盘使用率、磁盘读写的吞吐量、网络出入流量等等。
  • MySQL监控: TPS、QPS、数据库连接数、慢SQL、InnoDB缓冲池命中率等等。
  • Redis监控: 内存使用率、缓存命中率、key值总数、Redis响应申请工夫、客户端连接数、持久性指标等等。
  • MQ监控: 连接数、队列数、生产速率、生产速率、音讯沉积量等等。
  • 利用监控:
    • HTTP接口:URL存活、申请量、耗时、异样量
    • JVM :GC次数、GC耗时、各个内存区域的大小、以后线程数、死锁线程数
    • 线程池:沉闷线程数、工作队列大小、工作执行耗时、回绝工作数

3、监控零碎的根本流程

  • 数据采集:采集的形式有很多种,包含日志埋点进行采集,JMX标准接口输入监控指标,被监控对象提供REST API进行数据采集(如Hadoop、ES),系统命令行,对立的SDK进行侵入式的埋点和上报等。
  • 数据传输:将采集的数据以TCP、UDP或者HTTP协定的模式上报给监控零碎,有被动Push模式,也有被动Pull模式。
  • 数据存储:有应用MySQL、Oracle等关系数据库存储的,也有应用时序数据库RRDTool、OpentTSDB、InfluxDB存储的,还有应用HBase存储的。
  • 数据展现:数据指标的图形化展现。
  • 监控告警:灵便的告警设置,以及反对邮件、短信、IM等多种告诉通道。

市面上的一些常见监控零碎比拟

上面再来意识下支流的开源监控零碎,因为篇幅无限,我筛选了3款应用最宽泛的监控零碎:ZabbixOpen-FalconPrometheus,会对它们的架构进行介绍,同时总结下各自的优劣势。

1、Zabbix介绍

Zabbix 1998年诞生,外围组件采纳C语言开发,Web端采纳PHP开发。它属于老牌监控零碎中的优良代表,监控性能很全面,应用也很宽泛,差不多有70%左右的互联网公司都曾应用过 Zabbix 作为监控解决方案。

先来理解下Zabbix的架构设计:

  • Zabbix Server:外围组件,C语言编写,负责接管Agent、Proxy发送的监控数据。同时,它还负责数据的汇总存储以及告警触发等。
  • Zabbix Proxy:可选组件,对于被监控机器较多的状况下,可应用Proxy进行分布式监控,它能代理Server收集局部监控数据,以加重Server的压力。
  • Zabbix Agentd:部署在被监控主机上,用于采集本机的数据并发送给Proxy或者Server。数据收集形式同时反对被动Push和被动Pull 两种模式。
  • Database:用于存储配置信息以及采集到的数据,反对MySQL、Oracle等关系型数据库。同时,最新版本的Zabbix曾经开始反对时序数据库,不过成熟度还不高。
  • Web Server:Zabbix的GUI组件,PHP编写,提供监控数据的展示和告警配置。

Zabbix的劣势

  • 产品成熟:因为诞生工夫长且应用宽泛,领有丰盛的文档资料以及各种开源的数据采集插件,能笼罩绝大部分监控场景。
  • 采集形式丰盛:反对Agent、SNMP、JMX、SSH等多种采集形式,以及被动和被动的数据传输方式。

Zabbix的劣势

须要在被监控主机上安装Agent,所有的数据都存在数据库里,产生的数据很大,瓶颈次要在数据库。

2、Open-Falcon(小米出品,国内风行)

Open-falcon 是小米2015年开源的企业级监控工具,采纳Go和Python语言开发,这是一款灵便、高性能且易扩大的新一代监控计划,目前小米、美团、滴滴等超过200家公司在应用它。

小米初期也应用的Zabbix进行监控,然而机器量和业务量上来后,Zabbix就有些力不从心了。因而,起初自主研发了Open-Falcon,在架构设计上汲取了Zabbix的教训,同时很好地解决了Zabbix的诸多痛点。

架构看去比Zabbix简单多了,其实它也是基于Server---Agent的模式,只不过Server又给他划分了好几个组件,这个耦合性和扩展性都失去了明显提高。

  • Falcon-agent:数据采集器和收集器,Go开发,部署在被监控的机器上。就相当于Agent,用于采集机器负载监控指标数据如:CPU、内存、磁盘、IO、网络、端口等等大略有200多个这些都能够自定是否收集。
  • Transfer:数据散发组件,接管客户端发送的数据,别离发送给数据存储组件Graph和告警断定组件Judge,Graph和Judge均采纳一致性hash做数据分片,以进步横向扩大能力。同时Transfer还反对将数据散发到OpenTSDB,用于历史归档。
  • Graph:数据存储组件,底层应用RRDTool(时序数据库)做单个指标的存储,并通过缓存、分批写入磁盘等形式进行了优化。据说一个graph实例可能解决8W+每秒的写入速率。
  • Judge和Alarm:告警组件,Judge对Transfer组件上报的数据进行实时计算,判断是否要产生告警事件,Alarm组件对告警事件进行收敛解决后,将告警音讯推送给各个音讯通道。
  • API:面向终端用户,收到查问申请后会去Graph中查问指标数据,汇总后果后对立返回给用户,屏蔽了存储集群的分片细节。
Open-Falcon劣势
  • 主动采集能力:Falcon-agent 能主动采集服务器的200多个根底指标(比方CPU、内存等),无需在server上做任何配置,这一点能够秒杀Zabbix.
  • 弱小的存储能力:底层采纳RRDTool,并且通过一致性hash进行数据分片,构建了一个分布式的时序数据存储系统,可扩展性强。
  • 灵便的数据模型:借鉴OpenTSDB,数据模型中引入了tag,这样能反对多维度的聚合统计以及告警规定设置,大大提高了应用效率。
  • 插件对立治理:Open-Falcon的插件机制实现了对用户自定义脚本的统一化治理,可通过HeartBeat Server分发给agent,加重了使用者自主保护脚本的老本。
  • 个性化监控反对:基于Proxy-gateway,很容易通过自主埋点实现应用层的监控(比方监控接口的访问量和耗时)和其余个性化监控需要,集成不便。
Open-Falcon毛病
  • 监控类型较少: 不反对罕用应用服务器如tomcat、apache、jetty等的监控。
  • 整体倒退个别,社区活跃度低: 没有专门的运维反对,代码更新较少,没有一个较大的社区来保护,后续想要有什么新的能力根本只能指望本人扩大。

3、Prometheus(号称下一代监控零碎)

咱们晓得 zabbix 在监控界占有不可撼动的位置,功能强大。然而对容器监控显得力不从心。为解决监控容器的问题,引入了 Prometheus 技术。

Prometheus 是一套开源的系统监控报警框架。是由前google员工2015年正式公布的开源监控零碎,采纳Go语言开发。它不仅有一个很酷的名字,同时它有Google与k8s的强力反对,开源社区异样火爆。

先来理解下Prometheus的架构设计:

  • Exporter:次要用来采集数据,并通过 HTTP 服务的模式裸露给 Prometheus Server,Prometheus Server 通过拜访该 Exporter 提供的接口,即可获取到须要采集的监控数据。常见的Exporter有很多,例如node_exporter、mysqld_exporter、redis_exporter 等
  • Prometheus Server:外围组件,负责实现对监控数据的获取,存储以及查问。Prometheus Server 也是一个时序数据库,它将监控数据保留在本地磁盘中,并对外提供自定义的 PromQL 语言实现对数据的查问和剖析。
  • Push gateway:因为 Prometheus 数据采集采纳 pull 形式进行设置的, 内置必须保障 prometheus server 和对应的 exporter 必须通信,当网络状况无奈间接满足时,能够应用 pushgateway 来进行直达,能够通过 pushgateway 将外部网络数据被动 push 到 gateway 外面去,而 prometheus 采纳 pull形式拉取 pushgateway 中数据。
  • Alert Manager:当反对基于 PromQL 创立告警规定,如果满足定义的规定,则会产生一条告警信息,进入 AlertManager 进行解决。能够集成邮件,微信或者通过 webhook 自定义报警。
  • Web UI:Prometheus内置了一个简略的web控制台,能够查问配置信息和指标等,而理论利用中咱们通常会将Prometheus作为Grafana的数据源,创立仪表盘以及查看指标。
Prometheus长处
  • 社区活跃度高: github start超过40k,且始终在保护。
  • 基于时序数据库,存储效率高:Prometheus外围局部只有一个独自的二进制文件,不存在任何的第三方依赖(数据库,缓存等等)。惟一须要的就是 本地磁盘,因而不会有潜在级联故障的危险。
  • 很好地反对容器监控: 能主动发现容器,同时k8s和etcd等我的项目都提供了对Prometheus的原生反对,是目前容器监控最风行的计划。
  • 基于Pull模型的架构: Prometheus基于Pull模型的架构形式,能够在任何中央(本地电脑,开发环境,测试环境)搭建咱们的监控零碎。
Prometheus毛病
  • Prometheus 是基于 Metric 的监控,不适用于日志(Logs)、事件(Event)、调用链(Tracing)。
  • 因为Prometheus采纳的是Pull模型拉取数据,意味着所有被监控的endpoint必须是可达的,须要正当布局网络的平安配置。
  • 指标泛滥,需进行适当裁剪。

选型倡议

通过下面的介绍,大家对支流的监控零碎应该有了肯定的意识。面对选型问题,我的倡议是:

1、先明确分明你的监控需要:要监控的对象有哪些?机器数量和监控指标有多少?须要具备什么样的告警性能?

2、监控是一项长期建设的事件,一开始就想做一个 All In One 的监控解决方案,我感觉没有必要。从老本角度思考,在初期间接应用开源的监控计划即可,先解决有无问题。

3、从零碎成熟度上看,Zabbix属于老牌的监控零碎,材料多,性能全面且稳固,如果机器数量在几百台以内,不必太放心性能问题,另外,采纳数据库分区、SSD硬盘、Proxy架构、Push采集模式都能够进步监控性能。

4、Zabbix在服务器监控方面占绝对优势,能够满足90%以上的监控场景,然而应用层的监控仿佛并不善于,比方要监控线程池的状态、某个外部接口的执行工夫等,这种通常都要做侵入式埋点。相同,新一代的监控零碎Open-Falcon和Prometheus在这一点做得很好。

5、从整体体现上来看,新一代监控零碎也有显著的劣势,比方:灵便的数据模型、更成熟的时序数据库、弱小的告警性能,如果之前对zabbix这种传统监控没有技术积攒,倡议应用Open-Falcon或者Prometheus.

6、Open-Falcon的外围劣势在于数据分片性能,能撑持更多的机器和监控项;Prometheus则是容器监控方面的标配,有Google和k8s加持。

7、Zabbix、Open-Falcon和Prometheus都反对和Grafana做疾速集成,想要好看且弱小的可视化体验,能够和Grafana进行组合。

8、用适合的监控零碎解决相应的问题即可,能够多套监控同时应用,这种在企业初期很常见。

9、到中后期,随着机器数据减少和个性化需要增多(比方心愿对立监控平台、买通公司的CMDB和组织架构关系),往往须要二次开发或者通过监控零碎提供的API做集成,从这点来看,Open-Falcon或者Prometheus更适合。

10、如果非要自研,能够多钻研下支流监控零碎的架构计划,借鉴它们的劣势。


欢送退出陈某的常识星球,一起学习打卡,交换技术。退出形式,扫描下方二维码:

已在常识星球中更新如下几个专栏,详情戳链接理解):

  1. 《我要进大厂》:汇总了大厂面试考点系列、零碎架构设计、实战总结调优....
  2. 《亿级数据分库分表实战》文章+视频的模式分享亿级数据的分库分表实战
  3. 《精尽Spring Cloud Alibaba系列》:Spring Cloud Alibaba各个中间件的应用以及源码深究,残缺的案例源码分享,波及Spring Cloud 的各个组件源码介绍
  4. 《精尽Spring Boot 系列》:整顿了Spring Boot 入门到源码级别的文章
  5. 《精尽Spring系列》:迭代了47+篇文章,入门到源码级别的介绍,残缺的案例源码
  6. Java后端相干技术的源码解说、全栈学习路线图

最初说一句(别白嫖,求关注)

陈某每一篇文章都是精心输入,曾经写了3个专栏,整顿成PDF,获取形式如下:

  1. 《Spring Cloud 进阶》PDF:关注公众号:【码猿技术专栏】回复关键词 Spring Cloud 进阶 获取!
  2. 《Spring Boot 进阶》PDF:关注公众号:【码猿技术专栏】回复关键词 Spring Boot进阶 获取!
  3. 《Mybatis 进阶》PDF:关注公众号:【码猿技术专栏】回复关键词 Mybatis 进阶 获取!

如果这篇文章对你有所帮忙,或者有所启发的话,帮忙点赞在看转发珍藏,你的反对就是我坚持下去的最大能源!