-
擴展物聯網監控和可觀察性解決方案發布日期:2024-06-20 11:00:17閱讀量:507
本文討論了物聯網中監控和可觀察性的要點。主要介紹了如何利用日志、指標、跟蹤和結構化事件來增強物聯網系統的可觀察性。操作數以萬計的物聯網設備也不例外。擴展物聯網可觀察性解決方案可能很快導致可觀察性基礎設施的性能不足和難以承受的成本。因此,本文將側重于處理大規模。
將討論一些技術,這些技術可以幫助您平衡物聯網擴展帶來的權衡:
選擇高性能數據庫
知道要收集什么數據,現在將所有數據轉儲到MySQL中,就可以開始觀察。不要這么快,這可能不是最好的主意,有幾個原因。將查看對數據庫的需求,然后建議一種能夠更好地滿足對物聯網擴展需求的存儲。
首先,讓修改存儲物聯網可觀察性數據的幾個特征:
查詢速度很重要。在處理生產中斷時,最不希望的就是等待幾分鐘,直到調試查詢完成。
將處理多維度和高基數。大量的維度來自于捕獲操作的許多屬性以應對未知條件的想法。此外,還有一些重要的列具有高基數(列中唯一值的數量),例如設備Id。
需要有效地跨所有維度進行查詢。在調試特定問題時,不知道哪些屬性是重要的。
通常會對來自有限時間范圍的數據感興趣。時間范圍通常對應于您觀察到系統服務降級的時間段。
通用SQL數據庫可能不夠
可能都熟悉SQL數據庫,因此很自然地將其視為存儲可觀察性數據的地方。然而,幾個技術方面使得SQL數據庫不適合存儲大規模的可觀察性數據。
傳統的面向行數據庫,如MySQL或PostgreSQL,在只需要列的子集時,很難有效地處理對多維表的查詢。
高維的另一個問題是難以實現有效的索引。不能事先為列子集創建數據庫索引,因為不知道在故障排除過程中哪些維度是重要的。因此,要么需要索引所有列(這將非常昂貴),要么在基于未索引列進行過濾時查詢將很慢。
此外,如果沒有明確的基于時間的數據分區,通常就沒有有效的方法來丟棄舊數據。時間分區允許在數據過時時有效地刪除大塊數據。
如果出于合理的動機使用傳統的SQL數據庫來處理可觀察性數據,您可能需要考慮Timescale。它是一個PostgreSQL擴展,在使用基于行的SQL模型的同時,通過時間分區和更好的壓縮解決了上面提到的一些挑戰。
用于物聯網擴展的信號特定存儲
將可觀測信號分類為度量、日志和軌跡導致了針對每種信號類型定制的專用存儲的發展。例如,Mimir用于度量,Loki用于日志,Tempo/Jaeger用于跟蹤。這些存儲中的每一個都是用特定的信號類型創建的,這使得它們能夠有效地監視特定信號中的用例。但是,跨這些存儲查詢數據可能比較麻煩。
此外,某些存儲有一些特定的限制。例如,傳統的時間序列數據庫(tsdb,如Mimir)不能處理高基數的數據。tsdb為每個唯一的屬性集存儲單獨的時間序列。這種方法在維數有限和基數較低的情況下非常有效,因為在單個時間序列中編寫和查詢非常高效。
但是,對于高基數,數據庫需要經常創建新系列,因為它經常遇到唯一的屬性組合。因此,在檢索聚合值時,數據庫需要遍歷每個時間序列,從而使操作效率低下。這個問題在物聯網領域尤為嚴重。
使用面向列的分時存儲以獲得最佳可擴展性
隨著對與類似的分析工作負載的需求不斷增加(如上所述),新的數據庫浪潮出現了。它們采用列式存儲,這使得讀取操作更高效,因為它們只接觸特定查詢所需的列。由于采用了時間分區,數據庫可以將讀取操作限制在有限的數據范圍內,從而使查詢更加高效。
這些設計選擇的組合也使壓縮工作更快,因為算法在受時間范圍限制的單列上操作。這類存儲的典型例子包括InfluxDB、QuestDB和ClickHouse。
數據采樣
在一定規模上,收集和存儲設備產生的每個可觀察信號變得難以忍受。值得慶幸的是,這通常是不必要的,因為您只需使用一小部分可觀察性數據就可以成功地調試問題。
例如,描述成功場景的事件通常不如描述失敗的事件重要。這就是為什么可以拋棄大多數這些事件,只存儲少數具有足夠代表性的例子來重建特定的歷史情況。
存在各種采樣策略,以確保只收集有限數量的事件,同時仍然保留足夠的細節。選擇符合你具體需求的抽樣方法是很重要的。工具庫,如OpenTelemetrysdk,通常提供這種采樣策略的實現。這使得取樣成為降低儲存和處理成本的一種相對簡單的方法。
在跟蹤的背景下,根據采樣決策的位置區分了物聯網擴展的兩種采樣:頭采樣和尾采樣。頭部采樣決定是否在設備上對跨度/軌跡進行采樣,而尾部采樣則在收集到特定軌跡的所有跨度后做出此決定。
頭部采樣的主要優點是簡單和成本效益。它減少了在物聯網環境中可能受到限制的網絡流量,并避免在可觀察的后端存儲和處理未采樣數據。
但是,如果您希望基于整個跟蹤做出抽樣決策,則尾部抽樣是必要的。如果您希望對錯誤的跟蹤進行采樣,而不是對成功的跟蹤進行采樣,那么這種方法非常有用。
建立保留策略
可觀察性數據往往會隨著時間的推移而迅速失去價值。今天收到的遙測數據通常比去年的數據更有價值。這為提供了另一種顯著削減存儲成本的方法。
保留策略允許在指定時間范圍內自動刪除數據。基于時間的分區簡化了保留策略的實現,這就是許多現代數據庫開箱即用的原因。
另一種策略是利用分層存儲。也就是說,將舊數據存儲在低成本的對象存儲(如AmazonS3或AzureBlobStorage)中。盡管從這些存儲進行查詢可能比本地磁盤具有更高的延遲,但它允許您保留更長的數據,同時仍然降低存儲成本。
最后,可以進一步降低歷史數據的分辨率。一種方法是對舊數據進行二次降采樣。另一種方法是顯式創建歷史數據的聚合,同時丟棄原始的原始記錄。
總結:選擇有效的存儲,只保留重要的數據
在建立物聯網可觀察性堆棧時,必須決定在哪里存儲數據并選擇合適的可觀察性后端。在本文中,描述了在做出優化成本效率和物聯網擴展決策時需要考慮的各個方面。要記住的要點如下:
優化存儲選擇:評估可觀察性存儲的訪問模式,并根據需求定制數據庫。只有在確信通用數據庫足夠時才選擇通用數據庫。否則,請使用經過實戰測試的可觀察性數據庫,以獲得更好的可擴展性。
設置數據采樣:采用數據采樣技術來節省存儲成本,而不會影響關鍵的見解。
微調保留策略:配置保留策略以丟棄過時的數據,確保存儲保持精益,從而節省更多的存儲成本。