1.3 监控系统的开源产品
前面介绍了通用的监控系统实现原理,下面看看已有的开源监控系统解决方案。
在监控软件中,开源的解决方案有流量监控(MRTG、Cacti、SmokePing等)、性能告警(Nagios、Zabbix、Zenoss Core、Ganglia、Netdata等)、基于时序数据库存储数据的监控(Graphite、OpenTSDB、InfluxDB、Prometheus、OpenFalcon等)、基于全文搜索引擎数据库存储数据的监控(如ELK套件)可供选择。上述各监控产品都有自己的特点和功能,其侧重点和目标不完全相同,在设计理念和实现方法上也各有差异,但都具有一些共同特征,例如采集数据、分析展示、告警以及简单的故障自动处理等,最终都能达到对IT系统服务可用性的完全展示。需要说明的是,当前的时序数据库侧重于监控数据的存储,其采集需要借助其他工具来实现。时序监控产品的设计理念较为先进,具有很多创新功能,随着其不断发展,将会极大地促进监控领域技术的发展。下面我们来分别介绍主流的监控开源产品。对于其他商业监控产品,本书不做介绍。
1.3.1 Cacti
Cacti(中文含义为“仙人掌”)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,如图1-7所示。其数据采集仅支持SNMP方式,通过snmpget命令来获取监控数据,使用RRDtool命令工具存储历史数据和绘图,并提供数据和用户管理功能,可以根据用户权限查看不同的树状结构、主机设备以及指定的监控数据图,支持与LDAP结合进行用户认证,同时也能自定义模板。对于网络设备的监控,其展示效果非常不错,在10年前,它是广受网络管理员喜欢的监控产品。
图1-7 Cacti的界面截图
Cacti官方网站地址:https://www.cacti.net/。
1.3.2 Nagios
Nagios是一个插件式的监控系统,可以监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等,如图1-8所示。
图1-8 Nagios的界面截图
Nagios对开源监控系统的影响非常深远,曾经风靡一时,占据开源监控市场的大部分份额,并基于Nagios产生了很多新的监控产品。近年来,随着其他开源监控软件的崛起,Nagios逐渐淡出了历史舞台,使用的人群相对减少,但目前仍有一些公司在使用。
Nagios支持客户端的数据采集,通过编写客户端插件,可以获取各种监控数据,并提供了Web管理界面进行数据查询。其产品的主要功能侧重于监控服务的可用性,根据设置的阈值进行告警,但大部分告警逻辑都是通过监控插件实现的。
Nagios官方网站地址:https://www.nagios.org/。
1.3.3 InfluxDB套件
InfluxDB并不是一个监控产品,而是一个开源的分布式时序、时间和指标数据库,使用Go语言开发。其功能是数据指标的存储,不提供告警分析功能和数据采集功能,仅仅是一个数据库,支持SQL语言查询,其语法和MySQL类似。随着InfluxDB时序数据库的功能不断完善,官方也推出了作为监控系统使用的相关套件,分别是Telegraf(采集数据的客户端)、InfluxDB(存储监控数据)、Kapacitor(告警分析)、Chronograf(监控数据可视化),其架构逻辑示意图如图1-9所示。
图1-9 InfluxDB套件的架构逻辑示意图
InfluxDB官方网站地址:https://www.influxdata.com/。
1.3.4 Prometheus
Prometheus是一套开源的系统监控报警框架,其架构示意图如图1-10所示。Prometheus最初的设计理念受Google的Borgmon监控系统所启发,由工作在SoundCloud的Google前员工于2012年创建,作为社区开源项目进行开发,2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation(CNCF)组织,2018年其成为继Kubernetes从CNCF毕业的第二个项目,其受欢迎程度仅次于Kubernetes。
图1-10 Prometheus架构示意图
Prometheus官方网站地址:https://prometheus.io。
Prometheus产品得到迅速发展,离不开天时、地利、人和,在2015年前后,微服务概念开始流行,软件架构从单体应用转换为微服务,此时,能够原生支持对容器Docker、Kubernetes监控的产品会被使用微服务的公司首先接受,而同期的其他监控产品均不直接提供对微服务的监控,故其在微服务领域取得先机。另外,该产品本身的设计较为合理,提供了灵活而强大的查询语句(PromQL)、灵活的告警策略,易于管理,方便扩展,其数据采集使用私有客户端,传输协议使用HTTP,数据存储使用私有数据库。更多的介绍,读者可以查看Prometheus官网或者地址:https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-prometheus-getting-started-and-practice/index.html。
1.3.5 OpenFalcon
OpenFalcon是一个企业级、高可用、可扩展的开源监控解决方案。它在GitHub上获得了数千个星(star)、数百次复刻(fork)、上百个代码提交(pull-request),社区用户超过6000人,超过200家公司都在不同程度地使用OpenFalcon。
OpenFalcon官方网站地址:https://book.open-falcon.org/。
OpenFalcon由多个组件构成,重要的组件有数据采集、数据传输、数据存储、告警分析、图形展示等,数据采集使用专用客户端,传输协议为私有的,数据存储支持OpenTSDB和RRD两种方式,其架构示意图如图1-11所示。
图1-11 OpenFalcon架构示意图
1.3.6 Netdata
Netdata是Linux系统实时性能监测工具,以Web可视化方式展示系统及应用程序的实时运行状态(包括CPU、内存、硬盘输入/输出、网络等Linux性能数据)。
Netdata官方网站地址:https://github.com/firehol/netdata。
Netdata数据采集为私有客户端,数据存储为私有格式,也支持多种时间序列后端服务,比如Graphite、OpenTSDB、Prometheus、JSON document DBs,并支持告警功能,在单机监控系统中具有其他监控系统所不具备的优势。其监控界面较为美观,如图1-12所示。
图1-12 Netdata的界面截图
1.3.7 ELK家族
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
ELK官方网站地址:https://www.elastic.co/。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能,是一套开放REST和Java API等结构,提供高效搜索功能,并可扩展的分布式系统。它构建在Apache Lucene搜索引擎库上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括syslog、消息传递(如RabbitMQ)和JMX。它能够以多种方式输出数据,包括电子邮件、WebSocket和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建自己数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
实际上,随着ELK家族的不断发展,其针对日志采集开发了专用的客户端Beats系列产品,包括Filebeat(日志文件)、Metricbeat(指标)、Packetbeat(网络数据)、Winlogbeat(Windows事件日志)、Auditbeat(审计数据)、Heartbeat(运行时间监控),如图1-13所示。
图1-13 Beats系列软件
1.3.8 Zabbix
Zabbix是企业级分布式监控系统,是一个开箱即用的成熟解决方案,具备完备的功能。综合其他监控产品来说,它是一个大而全、功能丰富且定制非常灵活的产品,具备其他监控产品的功能,同时提供了其他监控产品所不具备的功能,扩展非常灵活,是企业级监控系统比较合理的选择之一。
从功能上说,Zabbix支持多种采集方式和采集客户端,有专用的Agent(代理),也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库中,可以支持MySQL、Oracle、PostgreSQL、SQLite、Elasticsearch等数据库,然后对其进行分析整理,达到条件触发告警,并支持对告警数据的分析统计。Zabbix具有良好的管理界面,如图1-14和图1-15所示。
图1-14 Zabbix的首页截图
图1-15 Zabbix的拓扑图截图
Zabbix监控系统也是本书的主题所在,对于其具体功能将在后续章节中详细讲解。
从以上各种监控系统产品的对比来看,Zabbix都是具有优势的,其具有丰富的基本功能、可扩展的能力、二次开发的能力和简单易用的特点,读者只要稍加学习,即可构建自己的监控系统。