阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

主流监控系统工具选型及落地场景参考

64次阅读
没有评论

共计 5328 个字符,预计需要花费 14 分钟才能阅读完成。

导读 对于我们应用系统而言,监控系统就像我们第三只眼,如果有应用系统出现问题,我们可以通过监控系统看是哪里出现问题。

主流监控系统工具选型及落地场景参考

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

  • 必知必会的监控基础知识
  • 主流监控系统介绍
  • 监控系统的选型建议
  • 一、必知必会的监控基础知识

    我们可以理解监控系统就像我们古代打战的哨兵一样,哨兵的角色非常重要,敌人来了,哨兵会第一时间发出预警 (吹笛、打鼓、放烟),让守城的战士能够最快的时间处理,应对。

    那对于我们应用系统而言,监控系统就像我们第三只眼,如果有应用系统出现问题,我们可以通过监控系统看是哪里出现问题,是 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 款使用最广泛的监控系统:Zabbix、Open-Falcon、Prometheus,会对它们的架构进行介绍,同时总结下各自的优劣势。

    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 必须是可达的,需要合理规划网络的安全配置。
    指标众多,需进行适当裁剪。

    三、选型建议

    通过上面的介绍,大家对主流的监控系统应该有了一定的认识。面对选型问题,我的建议是:

  • 先明确清楚你的监控需求:要监控的对象有哪些?机器数量和监控指标有多少?需要具备什么样的告警功能?
  • 监控是一项长期建设的事情,一开始就想做一个 All In One 的监控解决方案,我觉得没有必要。从成本角度考虑,在初期直接使用开源的监控方案即可,先解决有无问题。
  • 从系统成熟度上看,Zabbix 属于老牌的监控系统,资料多,功能全面且稳定,如果机器数量在几百台以内,不用太担心性能问题,另外,采用数据库分区、SSD 硬盘、Proxy 架构、Push 采集模式都可以提高监控性能。
  • Zabbix 在服务器监控方面占绝对优势,可以满足 90% 以上的监控场景,但是应用层的监控似乎并不擅长,比如要监控线程池的状态、某个内部接口的执行时间等,这种通常都要做侵入式埋点。相反,新一代的监控系统 Open-Falcon 和 Prometheus 在这一点做得很好。
  • 从整体表现上来看,新一代监控系统也有明显的优势,比如:灵活的数据模型、更成熟的时序数据库、强大的告警功能,如果之前对 zabbix 这种传统监控没有技术积累,建议使用 Open-Falcon 或者 Prometheus.
  • Open-Falcon 的核心优势在于数据分片功能,能支撑更多的机器和监控项;Prometheus 则是容器监控方面的标配,有 Google 和 k8s 加持。
  • Zabbix、Open-Falcon 和 Prometheus 都支持和 Grafana 做快速集成,想要美观且强大的可视化体验,可以和 Grafana 进行组合。
  • 用合适的监控系统解决相应的问题即可,可以多套监控同时使用,这种在企业初期很常见。
  • 到中后期,随着机器数据增加和个性化需求增多(比如希望统一监控平台、打通公司的 CMDB 和组织架构关系),往往需要二次开发或者通过监控系统提供的 API 做集成,从这点来看,Open-Falcon 或者 Prometheus 更合适。
  • 如果非要自研,可以多研究下主流监控系统的架构方案,借鉴它们的优势。
  • 阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥说事-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计5328字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中