沃卡惠移动端logo

沃卡惠  行业资讯

资讯详情

扩展物联网监控和可观察性解决方案

2024-06-19 09:57:194636

本文讨论了物联网中监控和可观察性的要点。主要介绍了如何利用日志、指标、跟踪和结构化事件来增强物联网系统的可观察性。操作数以万计的物联网设备也不例外。扩展物联网可观察性解决方案可能很快导致可观察性基础设施的性能不足和难以承受的成本。因此,本文将侧重于处理大规模。

将讨论一些技术,这些技术可以帮助您平衡物联网扩展带来的权衡:

物联网

选择高性能数据库

知道要收集什么数据,现在将所有数据转储到MySQL中,就可以开始观察。不要这么快,这可能不是最好的主意,有几个原因。将查看对数据库的需求,然后建议一种能够更好地满足对物联网扩展需求的存储。

首先,让修改存储物联网可观察性数据的几个特征:

查询速度很重要。在处理生产中断时,最不希望的就是等待几分钟,直到调试查询完成。

将处理多维度和高基数。大量的维度来自于捕获操作的许多属性以应对未知条件的想法。此外,还有一些重要的列具有高基数(列中唯一值的数量),例如设备Id。

需要有效地跨所有维度进行查询。在调试特定问题时,不知道哪些属性是重要的。

通常会对来自有限时间范围的数据感兴趣。时间范围通常对应于您观察到系统服务降级的时间段。

通用SQL数据库可能不够

可能都熟悉SQL数据库,因此很自然地将其视为存储可观察性数据的地方。然而,几个技术方面使得SQL数据库不适合存储大规模的可观察性数据。

传统的面向行数据库,如MySQL或PostgreSQL,在只需要列的子集时,很难有效地处理对多维表的查询。

高维的另一个问题是难以实现有效的索引。不能事先为列子集创建数据库索引,因为不知道在故障排除过程中哪些维度是重要的。因此,要么需要索引所有列(这将非常昂贵),要么在基于未索引列进行过滤时查询将很慢。

此外,如果没有明确的基于时间的数据分区,通常就没有有效的方法来丢弃旧数据。时间分区允许在数据过时时有效地删除大块数据。

如果出于合理的动机使用传统的SQL数据库来处理可观察性数据,您可能需要考虑Timescale。它是一个PostgreSQL扩展,在使用基于行的SQL模型的同时,通过时间分区和更好的压缩解决了上面提到的一些挑战。

用于物联网扩展的信号特定存储

将可观测信号分类为度量、日志和轨迹导致了针对每种信号类型定制的专用存储的发展。例如,Mimir用于度量,Loki用于日志,Tempo/Jaeger用于跟踪。这些存储中的每一个都是用特定的信号类型创建的,这使得它们能够有效地监视特定信号中的用例。但是,跨这些存储查询数据可能比较麻烦。

此外,某些存储有一些特定的限制。例如,传统的时间序列数据库(tsdb,如Mimir)不能处理高基数的数据。tsdb为每个唯一的属性集存储单独的时间序列。这种方法在维数有限和基数较低的情况下非常有效,因为在单个时间序列中编写和查询非常高效。

但是,对于高基数,数据库需要经常创建新系列,因为它经常遇到唯一的属性组合。因此,在检索聚合值时,数据库需要遍历每个时间序列,从而使操作效率低下。这个问题在物联网领域尤为严重。

使用面向列的分时存储以获得最佳可扩展性

随着对与类似的分析工作负载的需求不断增加(如上所述),新的数据库浪潮出现了。它们采用列式存储,这使得读取操作更高效,因为它们只接触特定查询所需的列。由于采用了时间分区,数据库可以将读取操作限制在有限的数据范围内,从而使查询更加高效。

这些设计选择的组合也使压缩工作更快,因为算法在受时间范围限制的单列上操作。这类存储的典型例子包括InfluxDB、QuestDB和ClickHouse。

数据采样

在一定规模上,收集和存储设备产生的每个可观察信号变得难以忍受。值得庆幸的是,这通常是不必要的,因为您只需使用一小部分可观察性数据就可以成功地调试问题。

例如,描述成功场景的事件通常不如描述失败的事件重要。这就是为什么可以抛弃大多数这些事件,只存储少数具有足够代表性的例子来重建特定的历史情况。

存在各种采样策略,以确保只收集有限数量的事件,同时仍然保留足够的细节。选择符合你具体需求的抽样方法是很重要的。工具库,如OpenTelemetrysdk,通常提供这种采样策略的实现。这使得取样成为降低储存和处理成本的一种相对简单的方法。

在跟踪的背景下,根据采样决策的位置区分了物联网扩展的两种采样:头采样和尾采样。头部采样决定是否在设备上对跨度/轨迹进行采样,而尾部采样则在收集到特定轨迹的所有跨度后做出此决定。

头部采样的主要优点是简单和成本效益。它减少了在物联网环境中可能受到限制的网络流量,并避免在可观察的后端存储和处理未采样数据。

但是,如果您希望基于整个跟踪做出抽样决策,则尾部抽样是必要的。如果您希望对错误的跟踪进行采样,而不是对成功的跟踪进行采样,那么这种方法非常有用。

建立保留策略

可观察性数据往往会随着时间的推移而迅速失去价值。今天收到的遥测数据通常比去年的数据更有价值。这为提供了另一种显著削减存储成本的方法。

保留策略允许在指定时间范围内自动删除数据。基于时间的分区简化了保留策略的实现,这就是许多现代数据库开箱即用的原因。

另一种策略是利用分层存储。也就是说,将旧数据存储在低成本的对象存储(如AmazonS3或AzureBlobStorage)中。尽管从这些存储进行查询可能比本地磁盘具有更高的延迟,但它允许您保留更长的数据,同时仍然降低存储成本。

最后,可以进一步降低历史数据的分辨率。一种方法是对旧数据进行二次降采样。另一种方法是显式创建历史数据的聚合,同时丢弃原始的原始记录。

总结:选择有效的存储,只保留重要的数据

在建立物联网可观察性堆栈时,必须决定在哪里存储数据并选择合适的可观察性后端。在本文中,描述了在做出优化成本效率和物联网扩展决策时需要考虑的各个方面。要记住的要点如下:

优化存储选择:评估可观察性存储的访问模式,并根据需求定制数据库。只有在确信通用数据库足够时才选择通用数据库。否则,请使用经过实战测试的可观察性数据库,以获得更好的可扩展性。

设置数据采样:采用数据采样技术来节省存储成本,而不会影响关键的见解。

微调保留策略:配置保留策略以丢弃过时的数据,确保存储保持精益,从而节省更多的存储成本。