系统出问题我们能及时感知。随时代发展,对监控系统提出更多诉求:
目前监控系统越来越重要,同时也越来越完备。不但能很好地解决上面这几点诉求,还沉淀很多监控系统中的稳定性相关的知识。当然,这得益于对监控体系的持续运营,特别是一些资深工程师的持续运营的成果。
监控系统,其实只是指标监控,通常使用折线图形态呈现在图表上,如某机器的CPU利用率、某个数据库实例的流量或者网站的在线人数,都可体现为随着时间而变化的趋势图。
指标监控 只能处理数字,但它的历史数据存储成本较低,实时性好,生态庞大,是可观测性领域里最重要的一根支柱。聚焦在指标监控领域的开源产品有Zabbix、Open-Falcon、Prometheus、Nightingale等。
除了指标监控,另一个重要的可观测性支柱是 日志。从日志中可以得到很多信息,对于了解软件的运行情况、业务的运营情况都很关键。比如操作系统的日志、接入层的日志、服务运行日志,都是重要的数据源。
从操作系统的日志中,可以得知很多系统级事件的发生;从接入层的日志中,可以得知有哪些域名、IP、URL 收到了访问,是否成功以及延迟情况等;从服务日志中可以查到 Exception 的信息,调用堆栈等,对于排查问题来说非常关键。但是日志数据通常量比较大,不够结构化,存储成本较高。
处理日志这个场景,也有很多专门的系统,比如开源产品ELK和Loki,商业产品Splunk和Datadog,下面是在 Kibana 中查询日志的一个页面。
可观测性最后一大支柱 链路追踪。微服务一个问题具体是哪个模块导致的,排查非常困难。
以请求串联上下游模块,为每个请求生成一个随机字符串作为请求ID。服务之间互相调用时,把该ID逐层往下传递,每层分别耗费多久,是否正常处理,都可收集附到该请求ID。后面追查问题时,拿着请求ID就可将串联的所有信息提取。链路追踪这个领域也有很多产品,如 Skywalking、Jaeger、Zipkin都是翘楚。
虽把可观测性领域划分3大支柱,但它们之间有很强关联关系。如经常会从日志提取指标,转存到指标监控系统,或者从日志中提取链路信息来做分析,业界都有实践。
本专栏聚焦指标监控领域,把这领域讲透,助你在工作中快速落地实践。
了解业界方案优缺点,对选型有大助。这里主要评价开源方案。
企业级开源解决方案,擅长设备、网络、中间件监控。因为前几年使用监控系统主要就是用来监控设备和中间件,所以Zabbix在国内应用非常广泛。
Zabbix Server与可选组件Zabbix Agent。Zabbix Server可通过SNMP、Zabbix Agent、JMX、IPMI等多种方式采集数据,它可以运行在Linux、Solaris、HP-UX、AIX、Free BSD、Open BSD、OS X等平台。
配套组件,Zabbix Proxy、Zabbix Java Gateway、Zabbix Get、Zabbix WEB等,共同组成Zabbix整体架构:
Open-Falcon在Zabbix后,开发初衷就是解决Zabbix容量问题。Open-Falcon最初来自小米,14年开源,当时小米有3套Zabbix,1套业务性能监控系统perfcounter。Open-Falcon初衷想做大一统方案,来解决这乱局。Open-Falcon架构图:
Open-Falcon基于RRDtool做了一个分布式时序存储组件Graph。这可将多台机器组成一个集群,大幅提升海量数据处理能力。前面负责转发的组件是Transfer,Transfer对监控数据求取一个唯一ID,再对ID做哈希,就可生成监控数据和Graph实例的对应关系,这就是Open-Falcon架构中最核心的分片逻辑。
告警部分用Judge模块,发送告警事件Alarm模块,采集数据Agent,心跳模块HBS,聚合监控数据的模块是Aggregator,负责处理数据缺失的模块是Nodata。和用户交互的Portal/Dashboard模块。
Open-Falcon把组件拆散,组件较多,部署较麻烦。不过每个组件的职能单一,二次开发较容易,很多互联网公司都是基于Open-Falcon二开,如美团、快网、360、金山云、新浪微博、爱奇艺、京东、SEA等。
优点
缺点
Prometheus设计思路来自Google的Borgmon,师出名门,就像Borgmon为Borg而生,Prometheus就是为Kubernetes而生。它针对Kubernetes直接支持,提供多种服务发现机制,大幅简化Kubernetes的监控。
在Kubernetes环境下,Pod创建和销毁非常频繁,监控指标生命周期大幅缩短,导致类似Zabbix这种面向资产的监控系统力不从心,而且云原生环境下大都是微服务设计,服务数量变多,指标量也呈爆炸态势,对时序数据存储提出高要求。
Prometheus 1.0设计较差,但2.0重新设计时序库,性能、可靠性都大幅提升,社区涌现越来越多的Exporter采集器,非常繁荣。
Prometheus架构图:
Prometheus优点:
Nightingale 可看做 Open-Falcon 的一个延续,因为开发人员是一拨人,不过两个软件的定位截然不同,Open-Falcon 类似 Zabbix,更多的是面向机器设备,而Nightingale 不止解决设备和中间件的监控,也希望能一并解决云原生环境下的监控问题。
但 Kubernetes 环境下,Prometheus 已大行其道,再重复造轮意义不大,所以 Nightingale 是和 Prometheus 做良好的整合,打造更完备方案。当下的架构,主要是把 Prometheus 当成一个时序库,作为 Nightingale 的一个数据源。如果不使用 Prometheus 也没问题,如用 VictoriaMetrics 时序库。
如主要需求是监控设备,推荐Zabbix;如主要需求是监控Kubernetes,可选Prometheus+Grafana;如既兼顾传统设备、中间件监控场景,又兼顾Kubernetes做成公司级方案,推荐Nightingale。
监控产品的需求来源,即监控问题域,从及时感知系统出现的问题,到现在希望预知问题,并可洞察业务经营数据,越来越多诉求让我们意识到监控重要性。
指标监控是可观测性三大支柱产品之一,日志监控和链路追踪三者联系紧密,共同辅助我们衡量系统内外部健康状况。指标监控因历史数据存储成本较低,实时性好,生态庞大,是可观测性领域里最重要的一根支柱,也是我们关注的重点。
最后对指标监控领域的多个开源解决方案横评对比,助技术方案选型。针对指标监控的几个开源方案的优缺点比较思维导图:
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都国企技术专家兼架构,多家大厂后台研发和架构经验,负责复杂度极高业务系统的模块化、服务化、平台化研发工作。具有丰富带团队经验,深厚人才识别和培养的积累。
参考: