监控系统是运维工作中不可或缺的一部分,它可以帮助我们监控系统的健康状况、运行状态和性能指标等,及时发现和解决问题,确保系统的可靠性和稳定性。SRE对监控系统最基本的需求就是:监控是SRE的第三只眼,使得可以在系统出问题时我们能及时感知到。
不过随着互联网的发展,监控系统除了最基本已知问题监控之外,还涉及了更多的方面,比如:
告警预测:通过分析历史监控数据趋势,来感知系统在未来的某个时刻可能出的问题,这就是目前比较火的AIOPS的领域
容量模型评估:结合监控与业务趋势,自动化计算业务的容量模型,为服务扩缩容提供数据支撑
分布式跟踪:用于跟踪分布式系统中各个组件的调用关系和性能指标,以便快速定位和解决问题。
日志分析:通过收集、聚合和分析应用程序和系统的日志,帮助识别潜在的问题和优化机会,以提高系统的可靠性和性能。
为此,Google SRE团队提出的一组监控指标和协议:服务水平目标(SLI)、服务水平指标(SLO)、服务水平协议(SLA)和错误预算。通过这四个指标的定义和监控,我们可以更好地了解系统的状态,预测可能出现的问题,并采取适当的措施来防止和修复问题。
服务水平目标是指服务的某个特定方面的度量,例如服务的可用性、延迟、吞吐量或错误率。它通常是以百分比的形式表示的,比如服务可用性的目标是99.9%。SLI通常基于监控数据计算得出。
是对SLI的具体目标值,服务水平指标是指团队为了满足业务需求而设定的服务水平目标。SLO通常定义了一段时间内服务水平目标的最小要求,例如在某个季度内服务的可用性要达到99.9%。SLO旨在提供一种可衡量的方式来评估服务的质量,以便团队可以持续改进。
是一个服务提供商与客户之间的合同协议,其中规定了服务提供商应该遵守的SLO和惩罚措施,如果SLO未达到的情况下。SLA通常包括服务提供商的责任、服务级别协议、可用性和故障报告等方面的内容,以确保服务提供商能够满足客户的需求和期望。
是一个可以用于SLA的指标,它是指系统在一段时间内允许的故障次数或错误率。例如,如果一个系统的SLA是99.9%的可用性,那么它的错误预算就是0.1%。如果系统的SLI超过了SLO,那么它就有了一定的错误预算,可以用于实施新功能或进行更新等操作,而不影响系统的可靠性和稳定性。
最基本的监控系统设计,需要考虑以下几个方面:
数据收集是监控系统的基础,我们需要选择合适的数据收集方式和工具,收集系统的运行数据,如日志、指标数据、事件等,同时还需要考虑数据的存储和管理方式。
可参考开源工具:
Prometheus
优点:具有高可用性、灵活的数据模型、支持多种数据源和API,可以方便地对接各种应用程序和系统。
缺点:对于大规模数据和高吞吐量的场景,需要进行额外的优化和配置。
Filebeat:
Filebeat是一个开源的轻量级日志数据采集器,可以收集并转发多种格式的日志文件,如系统日志、应用程序日志等,并提供了多种输出和过滤功能。其优点包括:
简单易用:Filebeat提供了易于使用的配置和管理界面,使其易于部署和集成。
轻量级:Filebeat非常轻量,可以在资源受限的系统上运行,并提供了多种输出方式,如Elasticsearch、Logstash等。
其缺点包括:
不适合高负载环境:由于Filebeat采用的是轮询模式,因此在高负载环境下可能会导致性能问题。
不支持持久连接:由于Filebeat是一个轻量级采集器,它不支持持久连接和复杂的过滤器,因此在复杂的采集需求下可能不够灵活。
数据处理是将收集的数据进行分析和加工的过程,我们需要选择合适的分析工具和技术,将数据转化为有用的信息,如图表、报警等。
可参考开源工具:
InfluxDB:
一个高性能、分布式的时序数据库,可用于存储和查询指标数据。优点是适合处理大量的时间序列数据,具有高吞吐量和低延迟,易于使用,支持 SQL 查询语言。缺点是不适合存储非时序数据,不支持事务处理。
Elasticsearch:
一个开源的全文搜索和分析引擎,可以用于存储和查询日志和指标数据。优点是具有出色的搜索和分析能力,可用于处理非结构化数据,支持实时查询和聚合操作,易于集成到其他系统中。缺点是相比于InfluxDB,存储和查询时序数据的性能较低。
数据可视化是将处理后的数据以可视化的方式呈现出来,以帮助我们更好地了解系统的运行状态和趋势,我们可以选择一些开源的可视化工具,如Grafana等。
可参考开源工具:
Grafana:
一个开源的数据可视化和监控平台,可以与多种数据源集成,包括InfluxDB和Elasticsearch。优点是易于使用,具有丰富的可视化选项和面板模板,支持警报功能和多用户权限控制。缺点是在处理大数据量时,需要注意性能和资源的使用。
Kibana:
一个开源的数据分析和可视化平台,专为Elasticsearch而设计,可用于搜索、分析和可视化大量的结构化和非结构化数据。优点是具有出色的搜索和分析能力,易于使用和定制,支持实时查询和聚合操作。缺点是相对于Grafana,更侧重于日志分析和搜索,对于时序数据的处理能力有限。
警报机制是当系统出现问题时,能够及时发现并采取相应的措施的关键,我们需要定义合适的警报规则,并选择合适的警报方式,如邮件、短信、微信等。
可参考开源工具:
Alertmanager:
一个开源的警报管理器,可用于处理和路由警报通知。优点是易于集成到多个监控系统中,支持多种警报方式,如电子邮件、PagerDuty、Slack等,支持分组和静默规则。缺点是需要额外的配置和定制,不具备独立的监控能力。
Zabbix:
一个开源的网络监控系统,可用于监控各种设备和服务。优点是具有强大的监控和报警功能,支持多种监控方式和警报方式,如SNMP、JMX、SMTP等,具有灵活的配置选项和多种报表和图表。缺点是安装和配置较为复杂,需要额外的资源和维护成本。
Zabbix 是一款功能强大的开源监控系统,支持多种监控方式,包括主动采集、被动采集、SNMP、JMX、IPMI 等,擅长设备、网络、中间件的监控。它提供丰富的监控指标、报表和告警功能,并支持分布式部署和高可用性。
工作原理是,客户端安装 Zabbix Agent 并将监控数据发送到 Zabbix Server,Zabbix Server 再将这些数据存储到数据库中,并通过 Web 界面展示给用户。在微服务与云原生兴起之前,使用的监控系统主要就是用来监控设备和中间件,所以当时在国内应用还是非常广泛的。
Zabbix 核心由两部分构成,Zabbix Server 与可选组件 Zabbix Agent。Zabbix Server 可以通过 SNMP、Zabbix Agent、JMX、IPMI 等多种方式采集数据。
优点:
缺点:
Nagios 是一款经典的网络监控软件,具有广泛的应用场景,可以监控网络设备、服务器、应用程序等。Nagios 的工作原理是,通过插件收集监控数据,将数据存储在文件中,并通过 Web 界面展示给用户。
优点:
缺点:
Open-Falcon是国内知名的开源监控系统,由小米运维团队开发并开源。其架构包括Agent、Transfer、Judge、Alarm、Portal等组件。其中,Agent负责采集各种数据指标,Transfer负责将数据传输给Judge,Judge则是Open-Falcon的核心组件,负责实时计算、聚合和存储监控数据。Alarm用于告警,Portal用于展示监控数据。
优点:
缺点:
Prometheus是由SoundCloud开发的开源监控系统,被CNCF(云原生计算基金会)收购。其核心组件包括Prometheus Server、Client Library、Exporter和Alertmanager等。其中,Prometheus Server负责存储和查询监控数据,Client Library用于采集数据,Exporter用于采集第三方应用程序的指标数据,Alertmanager用于告警。
优点:
缺点:
Nightingale是由美团点评开发并开源的一款全栈监控系统,包括了数据采集、存储、分析和展示等功能。Nightingale主要面向云原生和容器化的环境,支持自动发现和自动化管理。它采用了Golang开发,并使用InfluxDB和Elasticsearch作为存储引擎,Grafana作为可视化组件。
Nightingale的工作流程如下:首先,它通过自动化的方式进行数据采集,并将数据发送到InfluxDB和Elasticsearch等存储引擎。其次,它使用PromQL(Prometheus Query Language)语言对数据进行查询和聚合,并提供了一些内置函数和操作符来处理数据。最后,它使用Grafana进行数据可视化和展示。
优点:
缺点:
这个是关于监控系统的敲门砖,每个目前开源的系统都有其独特的特点和适用场景。在选择监控系统时,我们需要根据自己的需求和实际情况来选择最合适的系统。我们后续将以prometheus为例子入手,将深入介绍Prometheus,并探讨其内部的工作原理、数据模型、查询语言和可视化工具等方面的细节。
可以查看原文:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。