监控系统开篇

2023-11-19 02:28:40 浏览数 (3)

监控系统简介

监控系统是运维工作中不可或缺的一部分,它可以帮助我们监控系统的健康状况、运行状态和性能指标等,及时发现和解决问题,确保系统的可靠性和稳定性。SRE对监控系统最基本的需求就是:监控是SRE的第三只眼,使得可以在系统出问题时我们能及时感知到。

    不过随着互联网的发展,监控系统除了最基本已知问题监控之外,还涉及了更多的方面,比如:

告警预测:通过分析历史监控数据趋势,来感知系统在未来的某个时刻可能出的问题,这就是目前比较火的AIOPS的领域

容量模型评估:结合监控与业务趋势,自动化计算业务的容量模型,为服务扩缩容提供数据支撑

分布式跟踪:用于跟踪分布式系统中各个组件的调用关系和性能指标,以便快速定位和解决问题。

日志分析:通过收集、聚合和分析应用程序和系统的日志,帮助识别潜在的问题和优化机会,以提高系统的可靠性和性能。

    为此,Google SRE团队提出的一组监控指标和协议:服务水平目标(SLI)、服务水平指标(SLO)、服务水平协议(SLA)和错误预算。通过这四个指标的定义和监控,我们可以更好地了解系统的状态,预测可能出现的问题,并采取适当的措施来防止和修复问题。

服务水平目标(SLI)

    服务水平目标是指服务的某个特定方面的度量,例如服务的可用性、延迟、吞吐量或错误率。它通常是以百分比的形式表示的,比如服务可用性的目标是99.9%。SLI通常基于监控数据计算得出。

服务水平指标(SLO)

是对SLI的具体目标值,服务水平指标是指团队为了满足业务需求而设定的服务水平目标。SLO通常定义了一段时间内服务水平目标的最小要求,例如在某个季度内服务的可用性要达到99.9%。SLO旨在提供一种可衡量的方式来评估服务的质量,以便团队可以持续改进。

服务水平协议(SLA)

是一个服务提供商与客户之间的合同协议,其中规定了服务提供商应该遵守的SLO和惩罚措施,如果SLO未达到的情况下。SLA通常包括服务提供商的责任、服务级别协议、可用性和故障报告等方面的内容,以确保服务提供商能够满足客户的需求和期望。

错误预算(Error Budget)

是一个可以用于SLA的指标,它是指系统在一段时间内允许的故障次数或错误率。例如,如果一个系统的SLA是99.9%的可用性,那么它的错误预算就是0.1%。如果系统的SLI超过了SLO,那么它就有了一定的错误预算,可以用于实施新功能或进行更新等操作,而不影响系统的可靠性和稳定性。

监控系统的设计

最基本的监控系统设计,需要考虑以下几个方面:

(1)数据收集

    数据收集是监控系统的基础,我们需要选择合适的数据收集方式和工具,收集系统的运行数据,如日志、指标数据、事件等,同时还需要考虑数据的存储和管理方式。

可参考开源工具:

Prometheus

代码语言:javascript复制
优点:具有高可用性、灵活的数据模型、支持多种数据源和API,可以方便地对接各种应用程序和系统。
缺点:对于大规模数据和高吞吐量的场景,需要进行额外的优化和配置。

Filebeat:

Filebeat是一个开源的轻量级日志数据采集器,可以收集并转发多种格式的日志文件,如系统日志、应用程序日志等,并提供了多种输出和过滤功能。其优点包括:

代码语言:javascript复制
简单易用:Filebeat提供了易于使用的配置和管理界面,使其易于部署和集成。
轻量级:Filebeat非常轻量,可以在资源受限的系统上运行,并提供了多种输出方式,如Elasticsearch、Logstash等。

其缺点包括:

代码语言:javascript复制
不适合高负载环境:由于Filebeat采用的是轮询模式,因此在高负载环境下可能会导致性能问题。
不支持持久连接:由于Filebeat是一个轻量级采集器,它不支持持久连接和复杂的过滤器,因此在复杂的采集需求下可能不够灵活。
(2)数据处理

数据处理是将收集的数据进行分析和加工的过程,我们需要选择合适的分析工具和技术,将数据转化为有用的信息,如图表、报警等。

可参考开源工具:

InfluxDB:

    一个高性能、分布式的时序数据库,可用于存储和查询指标数据。优点是适合处理大量的时间序列数据,具有高吞吐量和低延迟,易于使用,支持 SQL 查询语言。缺点是不适合存储非时序数据,不支持事务处理。

Elasticsearch:

    一个开源的全文搜索和分析引擎,可以用于存储和查询日志和指标数据。优点是具有出色的搜索和分析能力,可用于处理非结构化数据,支持实时查询和聚合操作,易于集成到其他系统中。缺点是相比于InfluxDB,存储和查询时序数据的性能较低。

(3)数据可视化

数据可视化是将处理后的数据以可视化的方式呈现出来,以帮助我们更好地了解系统的运行状态和趋势,我们可以选择一些开源的可视化工具,如Grafana等。

可参考开源工具:

Grafana:

    一个开源的数据可视化和监控平台,可以与多种数据源集成,包括InfluxDB和Elasticsearch。优点是易于使用,具有丰富的可视化选项和面板模板,支持警报功能和多用户权限控制。缺点是在处理大数据量时,需要注意性能和资源的使用。

Kibana:

    一个开源的数据分析和可视化平台,专为Elasticsearch而设计,可用于搜索、分析和可视化大量的结构化和非结构化数据。优点是具有出色的搜索和分析能力,易于使用和定制,支持实时查询和聚合操作。缺点是相对于Grafana,更侧重于日志分析和搜索,对于时序数据的处理能力有限。

(4)警报机制

警报机制是当系统出现问题时,能够及时发现并采取相应的措施的关键,我们需要定义合适的警报规则,并选择合适的警报方式,如邮件、短信、微信等。

可参考开源工具:

Alertmanager:

     一个开源的警报管理器,可用于处理和路由警报通知。优点是易于集成到多个监控系统中,支持多种警报方式,如电子邮件、PagerDuty、Slack等,支持分组和静默规则。缺点是需要额外的配置和定制,不具备独立的监控能力。

Zabbix:

    一个开源的网络监控系统,可用于监控各种设备和服务。优点是具有强大的监控和报警功能,支持多种监控方式和警报方式,如SNMP、JMX、SMTP等,具有灵活的配置选项和多种报表和图表。缺点是安装和配置较为复杂,需要额外的资源和维护成本。

优秀的开源监控系统

zabbix

Zabbix 是一款功能强大的开源监控系统,支持多种监控方式,包括主动采集、被动采集、SNMP、JMX、IPMI 等,擅长设备、网络、中间件的监控。它提供丰富的监控指标、报表和告警功能,并支持分布式部署和高可用性。

    工作原理是,客户端安装 Zabbix Agent 并将监控数据发送到 Zabbix Server,Zabbix Server 再将这些数据存储到数据库中,并通过 Web 界面展示给用户。在微服务与云原生兴起之前,使用的监控系统主要就是用来监控设备和中间件,所以当时在国内应用还是非常广泛的。

Zabbix 核心由两部分构成,Zabbix Server 与可选组件 Zabbix Agent。Zabbix Server 可以通过 SNMP、Zabbix Agent、JMX、IPMI 等多种方式采集数据。

优点:

  • 功能丰富,支持多种监控方式。
  • 客户端 Agent 可以自定义监控项,可以灵活适应各种监控需求。
  • 开源且社区活跃,支持插件扩展。

缺点:

  • 安装和配置较为繁琐,需要一定的技术水平。
  • 监控数据存储在数据库中,大规模监控需要考虑数据库性能问题。

Nagios

Nagios 是一款经典的网络监控软件,具有广泛的应用场景,可以监控网络设备、服务器、应用程序等。Nagios 的工作原理是,通过插件收集监控数据,将数据存储在文件中,并通过 Web 界面展示给用户。

优点:

  • 社区活跃,拥有大量插件可供选择。
  • 界面简洁直观,易于使用。
  • 安装和配置较为简单。

缺点:

  • 功能相对较少,不支持自定义监控项。
  • 监控数据存储在文件中,对大规模监控不太友好。

Open-Falcon

Open-Falcon是国内知名的开源监控系统,由小米运维团队开发并开源。其架构包括Agent、Transfer、Judge、Alarm、Portal等组件。其中,Agent负责采集各种数据指标,Transfer负责将数据传输给Judge,Judge则是Open-Falcon的核心组件,负责实时计算、聚合和存储监控数据。Alarm用于告警,Portal用于展示监控数据。

优点:

  • 支持海量监控数据采集和存储
  • 支持自定义数据指标和告警规则
  • 灵活的可扩展性,可根据需要扩展Agent和Judge组件
  • 社区活跃,有大量的第三方插件和应用

缺点:

  • 配置复杂度较高,需要花费一定的学习成本
  • 由于开发者主要来自小米运维团队,有一定的局限性,适用性不够广泛

Prometheus

Prometheus是由SoundCloud开发的开源监控系统,被CNCF(云原生计算基金会)收购。其核心组件包括Prometheus Server、Client Library、Exporter和Alertmanager等。其中,Prometheus Server负责存储和查询监控数据,Client Library用于采集数据,Exporter用于采集第三方应用程序的指标数据,Alertmanager用于告警。

优点:

  • 支持多维度的数据模型和查询语言
  • 内置的报警功能和钩子机制,支持自定义报警规则和处理逻辑
  • 支持多种数据采集方式,包括Pull和Push两种模式
  • 社区活跃,有大量的第三方Exporter和工具

缺点:

  • 对于大规模集群的监控,需要考虑数据存储和查询的性能问题
  • Alertmanager的配置比较复杂,需要一定的技术储备

Nightingale

Nightingale是由美团点评开发并开源的一款全栈监控系统,包括了数据采集、存储、分析和展示等功能。Nightingale主要面向云原生和容器化的环境,支持自动发现和自动化管理。它采用了Golang开发,并使用InfluxDB和Elasticsearch作为存储引擎,Grafana作为可视化组件。

Nightingale的工作流程如下:首先,它通过自动化的方式进行数据采集,并将数据发送到InfluxDB和Elasticsearch等存储引擎。其次,它使用PromQL(Prometheus Query Language)语言对数据进行查询和聚合,并提供了一些内置函数和操作符来处理数据。最后,它使用Grafana进行数据可视化和展示。

优点:

  • 高度自动化:Nightingale支持自动发现和自动化管理,可以自动化采集、存储、分析和展示监控数据,减轻了运维人员的工作负担。
  • 支持多种存储引擎:Nightingale支持InfluxDB和Elasticsearch等多种存储引擎,可以根据需求选择合适的存储引擎。
  • 支持PromQL语言:Nightingale支持PromQL语言,具有类似于Prometheus的查询和聚合功能。
  • 灵活的可视化:Nightingale使用Grafana进行数据可视化和展示,可以根据需求自定义展示方式。

缺点:

  • 社区相对较小:Nightingale是一个比较新的项目,相对于Prometheus和Open-Falcon等监控系统,其社区相对较小,缺乏成熟的生态系统和丰富的插件支持。
  • 文档和资料相对较少:由于Nightingale是一个比较新的项目,其文档和资料相对较少,对于初学者来说可能不够友好

这个是关于监控系统的敲门砖,每个目前开源的系统都有其独特的特点和适用场景。在选择监控系统时,我们需要根据自己的需求和实际情况来选择最合适的系统。我们后续将以prometheus为例子入手,将深入介绍Prometheus,并探讨其内部的工作原理、数据模型、查询语言和可视化工具等方面的细节。

可以查看原文:

https://mp.weixin.qq.com/s?__biz=MzA5NTgwNzY1NA==&mid=2247483994&idx=1&sn=e7c8d5818fdc8ea8b6971ad39494c922&chksm=90b8f393a7cf7a85840e88b841ea182b714921bf45fedd0c5db4ad0947b7b0727db14247f70b&token=2069274630&lang=zh_CN#rd

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞