IoT(Internet of Things)正在高速增長,越來越多設備開始逐步走進日常生活,例如智能路由器、各種電視棒、天貓精靈、掃地機器人等,讓我們體驗到智能領域的便利。傳統軟件領域的嵌入式開發模式在IoT設備領域的應用遇到了很多挑戰,IoT設備數目多、分布廣,難以調試且硬件受限,傳統的設備日志解決方案無法完美滿足需求。
日志服務團隊結合IoT設備的特點,為IoT設備量身定制一套日志數據采集方案:C Producer。
嵌入式開發需求
作為IoT/嵌入式工程師,除了需要深厚的開發功底外,面對海量的設備,如何有能力管理、監控、診斷黑盒設備至關重要。嵌入式開發需求主要有以下幾點:
數據采集:如何實時采集分散在全球各地的百萬/千萬級設備上的數據?
調試:如何使用一套方案既滿足線上數據采集又滿足開發時的實時調試?
線上診斷:某個線上設備出現錯誤,如何快速定位設備,查看引起該設備出錯的上下文是什么?
監控:當前有多少個設備在線?工作狀態分布如何?地理位置分布如何?出錯設備如何實時告警?
數據實時分析:設備產生數據如何與實時計算、大數據倉庫對接,構建用戶畫像?
IoT領域面臨的主要挑戰
思考以上問題的解決方案,我們發現在傳統軟件領域那一套手段面臨IoT領域基本全部失效,主要挑戰來自于IoT設備這些特點:
設備數目多:在傳統運維領域管理1萬臺服務器屬于一家大公司了,但10萬在線對于IoT設備而言只是一個小門檻。
分布廣:硬件一旦部署后,往往會部署在全國、甚至全球各地。
黑盒:難以登錄并調試,大部分情況屬于不可知狀態。
資源受限:出于成本考慮,IoT設備硬件較為受限(例如總共只有32MB內存),傳統PC領域手段往往失效。
C Producer
日志服務量身定制的日志數據采集解決方案。
日志服務客戶端Logtail在X86服務器上有百萬級部署,可以參見文章:Logtail技術分享:多租戶隔離技術+雙十一實戰效果,Polling+Inotify 組合下的日志保序采集方案。除此之外,日志服務提供多樣化的采集方案:
移動端SDK:Android/iOS平臺數據采集,一天已有千萬級DAU。
Web Tracking(JS):類似百度統計,Analytics輕量級采集方式,無需簽名。
日志服務團隊結合IoT設備的特點,為IoT設備量身定制一套日志數據采集方案:C Producer。
C Producer特點
C Producer Library繼承Logtail穩定、高性能、低資源消耗等特點,可以定位是一個輕量級Logtail,雖沒有Logtail實時配置管理機制,但具備除此之外70%功能,包括:
提供多租戶概念:可以對多種日志(例如Metric,DebugLog,ErrorLog)進行優先級分級處理,同時配置多個客戶端,每個客戶端可獨立配置采集優先級、目標Project和Logstore等。
支持上下文查詢:同一個客戶端產生的日志在同一上下文中,支持查看某條日志前后相關日志。
并發發送,斷點續傳:支持緩存上限可設置,超過上限后日志寫入失敗。
此外,C Producer還具備以下IoT設備專享功能,例如:
本地調試:支持將日志內容輸出到本地,并支持輪轉、日志數、輪轉大小設置。
細粒度資源控制:支持針對不同類型數據/日志設置不同的緩存上限、聚合方式。
日志壓縮緩存:支持將未發送成功的數據壓縮緩存,減少設備內存占用。
功能優勢
C Producer作為IoT設備的量身定制方案,在以下方面具備明顯優勢:
客戶端高并發寫入:可配置的發送線程池,支持每秒數十萬條日志寫入,詳情參見性能測試。
低資源消耗:每秒20萬日志寫入只消耗70%CPU;同時在低性能硬件(例如樹莓派)上,每秒產生100條日志對資源基本無影響。
客戶端日志不落盤:即數據產生后直接通過網絡發往服務端。
客戶端計算與I/O邏輯分離:日志異步輸出,不阻塞工作線程。
支持多優先級:不同客戶端可配置不同的優先級,保證高優先級日志最先發送。
本地調試:支持設置本地調試,便于您在網絡不通的情況下本地測試應用程序。
在以上場景中,C Producer Library簡化您程序開發的步驟。您無需關心日志采集細節實現、也不用擔心日志采集會影響您的業務正常運行,大大降低數據采集門檻。
C Producer方案與其他嵌入式采集方案對比如下:
類別 | C Producer | 其他方案 | |
編程 | 平臺 | 移動端+嵌入式 | 移動端為主 |
上下文 | 支持 | 不支持 | |
多日志 | 支持 | 不支持(一種日志) | |
自定義格式 | 支持 | 不支持(提供若干個有限字段) | |
優先級 | 支持 | 不支持 | |
環境參數 | 可配置 | 可配置 | |
穩定性 | 并發度 | 高 | 一般 |
壓縮算法 | LZ4(效率與性能平衡)+GZIP | 優化 | |
低資源消耗 | 優化 | 一般 | |
傳輸 | 斷電續傳 | 支持 | 默認不支持,需要二次開發 |
接入點 | 8(中國)+8(全球) | 杭州 | |
調試 | 本地日志 | 支持 | 手動支持 |
參數配置 | 支持 | 不支持 | |
實時性 | 服務端可見 | 1秒(99.9%),3秒(Max) | 1-2小時 |
自定義處理 | 15+對接方式 | 定制化實時+離線方案 |
C Producer+日志服務解決方案
C Producer結合阿里云日志服務產品配合使用,即可完成IoT設備日志全套解決方案。
規模大
支持億級別客戶端實時寫入。
支持PB/Day數據量。
速度快
采集快:寫入零延遲,寫入即可消費。
查詢快:一秒內,復雜查詢(5個條件)可處理10億級數據。
分析快:一秒內,復雜分析(5個維度聚合+GroupBy)可聚合億級別數據。
對接廣
與阿里云各類產品無縫打通。
各種開源格式存儲、計算、可視化系統完美兼容。
下載與使用
下載地址:Github
一個應用可創建多個Producer,每個Producer可包含多個Client,每個Client可單獨配置目的地址、日志級別、是否本地調試、緩存大小、自定義標識、topic等信息。
詳細安裝方式及操作步驟,請參見README。
性能測試
環境配置
高性能場景:傳統X86服務器。
低性能場景:樹莓派(低功耗環境)。
配置如下:
C Producer配置
ARM(樹莓派)
緩存:10 MB
聚合時間:3秒(聚合時間、聚合數據包大小、聚合日志數任一滿足即打包發送)
聚合數據包大小:1 MB
聚合日志數:1000
發送線程:1
自定義tag:5
X86
緩存:10MB
聚合時間:3秒(聚合時間、聚合數據包大小、聚合日志數任一滿足即打包發送)
聚合數據包大小:3 MB
聚合日志數:4096
發送線程:4
自定義tag:5
日志樣例(9個鍵值對,數據量約為350字節)
__source__: 192.0.2.1
__tag__:1: 2
__tag__:5: 6
__tag__:a: b
__tag__:c: d
__tag__:tag_key: tag_value
__topic__: topic_test
_file_: /disk1/workspace/tools/aliyun-log-c-sdk/sample/log_producer_sample.c
_function_: log_producer_post_logs
_level_: LOG_PRODUCER_LEVEL_WARN
_line_: 248
_thread_: 40978304
LogHub: Real-time log collection and consumption
Search/Analytics: Query and real-time analysis
Interconnection: Grafana and JDBC/SQL92
Visualized: dashboard and report functions
測試結果
X86平臺結果
C Producer可以輕松到達90 MB/s的發送速度,每秒上傳日志20萬,占用CPU只有70%,內存140 MB。
服務器在200條/s,發送數據對于CPU基本無影響(降低到0.01%以內)。
客戶線程發送一條數據(輸出一條日志)的平均耗時為1.2 us。
樹莓派平臺結果
在樹莓派的測試中,由于CPU的頻率只有600 MHz,性能差不多是服務器的1/10左右,每秒可發送最多2萬條日志。
樹莓派在20條/s的時候,發送數據對于CPU基本無影響(降低到0.01%以內)。
客戶線程發送一條數據(輸出一條日志)的平均耗時為:12 us左右(樹莓派通過USB連接到PC共享網絡)。
更多日志服務典型場景可以參見云棲論壇。