可观测性(Observability)是指系统可以由其外部输出推断其其内部状态的程度。系统的可观察性和可控制性是数学上对偶的概念。
插图引用: https://mp.weixin.qq.com/s/nAF3lv-qZprLWvOdvSbYXg
在现代软件系统和云计算中,可观测性在确保应用和基础架构的可靠性、性能和安全性方面发挥着越来越重要的作用。随着软件系统的复杂程度不断增加、微服务的广泛采用以及对分布式架构的日益依赖,可观测性的重要性也越来凸显。
可观测性主要包括以下三个方面:
可观测性工具可以帮助系统管理员和开发人员收集和分析上述数据,从而提高对系统的理解和控制能力。
以下是可观测性的一些具体应用:
从单体应用时代到微服务时代,(指标,日志,链路)监控数据基数的维度发生了以下变化:
在单体应用时代,应用通常是一个整体,由一个工程打包部署到一个服务器上。因此,监控数据的基数通常是单一的,例如服务器的 CPU、内存、网络等指标。
在 SOA 时代,应用被拆分为多个独立的服务,每个服务可以独立开发、部署和管理。因此,监控数据的基数变得更加复杂,需要关注每个服务的资源使用情况、性能指标等。
在微服务时代,应用被拆分为更加细粒度的微服务,每个微服务通常只负责一个特定的业务功能。因此,监控数据的基数变得更加庞大,需要关注每个微服务的资源使用情况、性能指标、链路追踪等数据。
具体来说,指标、日志、链路追踪在不同时代的监控数据基数维度如下:
阶段 | 指标 | 日志 | 链路追踪 |
---|---|---|---|
单体应用时代 | 服务器资源使用率、性能指标等 | 应用运行日志 | 无 |
SOA时代 | 服务资源使用率、性能指标等 | 服务运行日志 | 服务间调用链路 |
微服务时代 | 微服务资源使用率、性能指标等 | 微服务运行日志 | 微服务间调用链路 |
随着应用架构的演进,监控数据基数的维度越来越庞大,对监控系统的设计和实现提出了更高的要求。监控系统需要能够采集、存储和分析来自不同来源、不同维度的监控数据,从而为应用的运行维护提供全面的支持。
传统面向资源的监控主要关注系统的运行状态,包括系统的整体健康状况、性能瓶颈等。传统面向资源的监控通常使用指标来衡量系统的运行状态,例如 CPU 使用率、内存使用率、网络流量等。
面向应用的可观测性则不仅关注系统的运行状态,还关注应用的业务逻辑和数据。面向应用的可观测性通常使用日志、链路追踪等技术来收集和分析应用运行时产生的数据。
维度 | 传统面向资源的监控 | 面向应用的可观测性 |
---|---|---|
关注点 | 系统运行状态 | 应用运行状态、业务逻辑、数据 |
数据来源 | 指标 | 日志、链路追踪 |
传统面向资源的监控是面向应用的可观测性的一部分。面向应用的可观测性需要收集和分析系统运行状态的指标,这些指标通常由传统面向资源的监控提供。
传统面向资源的监控的范围通常局限于系统层面,例如服务器、容器、数据库等。面向应用的可观测性则可以扩展到应用层面,例如应用的业务逻辑、数据等。
具体来说,传统面向资源的监控和面向应用的可观测性在以下几个方面存在区别:
具体来说,面向资源的监控和面向应用的可观测性在以下几个方面存在联系:
具体来说,传统面向资源的监控和面向应用的可观测性在以下几个方面存在范围差异:
面向资源的监控和面向应用的可观测性是两个相关但不同的概念。传统面向资源的监控是面向应用的可观测性的一部分,可以为面向应用的可观测性提供基础。而面向应用的可观测性则可以扩展到应用层面,为应用的业务逻辑和数据分析提供支持。
系统监控主要关注系统的运行状态,包括系统的整体健康状况、性能瓶颈等。系统监控通常使用指标来衡量系统的运行状态,例如 CPU 使用率、内存使用率、网络流量等。
应用可观测则不仅关注系统的运行状态,还关注应用的业务逻辑和数据。应用可观测通常使用日志、链路追踪等技术来收集和分析应用运行时产生的数据。
具体来说,系统监控和应用可观测的区别可以总结如下:
维度 | 系统监控 | 应用可观测 |
---|---|---|
分析目的 | 定位故障、优化性能 | 定位故障、优化性能、分析业务逻辑、理解数据 |
监控指标 | CPU、MEM、Used、Load | SLO、SLI、时间测量、事件测量、可用性 |
例如,SLO 是应用的服务级别目标,SLI 是衡量 SLO 的指标,时间测量和事件测量可以帮助分析应用的业务逻辑,可用性则可以帮助了解应用的数据情况。
以下是一些针对监控数据基数演变的建议:
采用分布式监控系统,将监控数据分布式存储和处理,以应对监控数据基数的增长。
采用数据分析技术,对监控数据进行分析处理,从中提取有价值的信息,以提高监控的效率和效果。
采用自动化工具,减少人工干预,提高监控的自动化程度。
随着应用架构的演进,监控数据的存储方式也不断变迁。在单体应用时代,文件存储可以满足监控数据的存储需求。在 SOA 和微服务时代,需要使用分布式数据库,例如 TSDB、NoSQL 数据库等。在未来,随着监控数据量的增长和分析需求的增加,图数据库等新兴数据库技术将在监控数据存储方面发挥越来越重要的作用。
存储方式 | 数据模型 | 存储效率 | 查询效率 | 适用数据类型 | 适用场景 | 局限性 |
---|---|---|---|---|---|---|
文件存储 | 非结构化 | 低 | 低 | 所有 | 简单数据存储 | 数据管理复杂、可扩展性差 |
SQLDB | 关系型 | 高 | 高 | 结构化 | 数据分析 | 不擅长存储非结构化数据、横向扩展能力差 |
TSDB | 时序 | 高 | 高 | 时序数据 | 监控指标 | 不擅长存储非结构化数据、支持的数据类型有限 |
NoSQL | 非关系型 | 高 | 低至高 | 所有 | 多样化数据存储 | 数据模型灵活、查询效率不如关系型数据库 |
行数据库 | 行 | 高 | 高 | 结构化 | 日志数据 | 数据模型灵活 |
列数据库 | 列 | 高 | 高 | 非结构化 | 链路追踪数据 | 数据模型灵活 |
图数据库 | 图 | 高 | 高 | 关系数据 | 应用拓扑 | 数据模型灵活 |
对比总结
监控系统 | 指标数据 | 日志数据 | 链路追踪数据 |
---|---|---|---|
Nagios | 文件存储 | 文件存储 | 不支持 |
Zabbix | SQLDB | SQLDB | 不支持 |
Prometheus | TSDB | TSDB | 不支持 |
可观测平台 | TSDB | NoSQL | NoSQL/图数据库 |
Nagios 和 Zabbix 通常使用本地文件存储,也可以使用第三方文件存储系统,例如 Elasticsearch。
Prometheus 通常使用 InfluxDB、Grafana 等 TSDB 和可视化工具。
可观测平台 通常使用 OpenTelemetry、Prometheus 等 TSDB,以及Elasticsearch, ClickHouse等 NoSQL 以及图数据库。
选择建议
2.5 列数据库和图数据库的优势
随着监控数据量的增长,对监控数据的存储效率和可扩展性提出了更高的要求。列数据库和图数据库具有以下优势,使它们成为监控数据存储的主流选择:
随着人工智能技术的不断发展,人工智能辅助监控 (AIGC) 成为了监控领域的热门趋势。AIGC 可以利用人工智能技术,自动化监控任务,提高监控效率和准确性。
在 AIGC 中,向量数据库可以发挥重要的辅助作用。向量数据库可以有效存储和分析非结构化数据,例如日志数据和链路追踪数据。这些数据通常具有以下特点:
数据量大,结构复杂。
需要对数据进行快速查询,例如查询指定时间段内的日志数据或链路追踪数据。
向量数据库的存储效率和查询效率可以满足这些需求。此外,向量数据库还支持人工智能技术,可以用于以下应用场景:
向量数据库可以为 AIGC 提供以下优势:有效存储和分析非结构化数据。支持人工智能技术,可以用于异常检测、故障诊断和性能优化等应用场景。
以下是一些具体的例子:
随着 AIGC 技术的不断发展,向量数据库在监控领域的应用将会越来越广泛。
将不同的软件组合在一起,根据实际的需要,构建一个满足特定需求的可观测平台。例如,可以将 Prometheus、Grafana 和 AlertManager 组合在一起,构建一个基本的可观测平台。也可以将 Prometheus、Grafana、AlertManager 和 DeepFlow 组合在一起,构建一个功能更强大的可观测平台
开源可观测平台软件选型组合主要包括以下几个方面:
其中:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。