IoT日志利器:嵌入式日志客户端(C Producer)发布
摘要: 2017年12月19日至20日,2017云棲大會·北京峰會在國家會議中心召開,飛天智能是貫穿云棲大會不變的主題,云計算、大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等熱門話題備受各方關(guān)注。其中阿里云日志服務(wù)發(fā)布的嵌入式日志采集客戶端(C Producer Library) 就是其中解決物聯(lián)網(wǎng)日志采集、分析難的利器。
2017年12月19日至20日,2017云棲大會·北京峰會在國家會議中心召開,飛天智能是貫穿云棲大會不變的主題,云計算、大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等熱門話題備受各方關(guān)注。其中阿里云日志服務(wù)發(fā)布的嵌入式日志采集客戶端(C Producer Library) 就是其中解決物聯(lián)網(wǎng)日志采集、分析難的利器。
背景
IoT(Internet of Things)正在高速增長,越來越多設(shè)備開始逐步走進(jìn)日常生活(例如智能路由器、各種電視棒、天貓精靈、掃地機(jī)器人),讓我們體驗(yàn)到智能領(lǐng)域的便利。距Gartner預(yù)測,到2020年末預(yù)計會有200億智能設(shè)備,可見該領(lǐng)域的巨大市場。
作為IoT/嵌入式工程師,除了需要深厚的開發(fā)功底外,面對海量的設(shè)備,如何有能力管理、監(jiān)控、診斷這些“黑盒”設(shè)備至關(guān)重要。我們總結(jié)了嵌入式開發(fā)需求,主要有以下幾點(diǎn):
數(shù)據(jù)采集:如何實(shí)時采集分散在全球各地的百萬/千萬級設(shè)備上的數(shù)據(jù)?
調(diào)試:如何使用一套方案既滿足線上數(shù)據(jù)采集以及開發(fā)時的實(shí)時調(diào)試?
線上診斷:某個線上設(shè)備出現(xiàn)錯誤,如何快速定位設(shè)備,查看引起該設(shè)備出錯的上下文是什么?
監(jiān)控:當(dāng)前有多少個設(shè)備在線?工作狀態(tài)分布如何?地理位置分布如何?出錯設(shè)備如何實(shí)時告警?
數(shù)據(jù)實(shí)時分析:設(shè)備產(chǎn)生數(shù)據(jù)如何與實(shí)時計算、大數(shù)據(jù)倉庫對接,構(gòu)建用戶畫像?
思考以上問題的解決方案,我們發(fā)現(xiàn)在傳統(tǒng)軟件領(lǐng)域那一套手段面臨IoT領(lǐng)域基本全部失效,主要挑戰(zhàn)來自于IoT設(shè)備這些特點(diǎn):
數(shù)目多:在傳統(tǒng)運(yùn)維領(lǐng)域管理1W臺服務(wù)器屬于一家大公司了,但10W在線對于IoT設(shè)備而言只是一個小門檻
分布廣:硬件一旦部署后,往往會部署在全國、甚至全球各地
黑盒:難以登陸并調(diào)試,大部分情況屬于不可知狀態(tài)
資源受限:出于成本考慮,IoT設(shè)備硬件較為受限(例如總共只有32MB內(nèi)存),傳統(tǒng)PC領(lǐng)域手段往往失效
針對不同端的數(shù)據(jù)采集
日志服務(wù)(原SLS) 客戶端Logtail在X86服務(wù)器上有百萬級部署,可以參見文章:Logtail技術(shù)分享 : 多租戶隔離技術(shù)+雙十一實(shí)戰(zhàn)效果,Polling + Inotify 組合下的日志保序采集方案。除此之外我們還有以下幾種方式:
移動端SDK:Android/IOS平臺數(shù)據(jù)采集,一天已有千萬級DAU
Web Tracking(JS):類似百度統(tǒng)計,Google Analytics 輕量級采集方式,無需簽名
在IoT領(lǐng)域,我們從多年Logtail的開發(fā)經(jīng)驗(yàn)中,汲取其中精華的部分,并結(jié)合IoT設(shè)備針對CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)、應(yīng)用方式等特點(diǎn),開發(fā)出一套專為IoT定制的日志數(shù)據(jù)采集方案:C Producer
C Producer特點(diǎn)
C Producer Library 繼承Logtail穩(wěn)定、邊界特點(diǎn),可以定位是一個“輕量級Logtail”,雖沒有Logtail實(shí)時配置管理機(jī)制,但具備除此之外70%功能,包括:
提供多租戶概念:可以對多種日志(例如Metric,DebugLog,ErrorLog)進(jìn)行優(yōu)先級分級處理,同時配置多個客戶端,每個客戶端可獨(dú)立配置采集優(yōu)先級、目的project/logstore等
支持上下文查詢:同一個客戶端產(chǎn)生的日志在同一上下文中,支持查看某條日志前后相關(guān)日志
并發(fā)發(fā)送,斷點(diǎn)續(xù)傳:支持緩存上線可設(shè)置,超過上限后日志寫入失敗
還有一些專門為IoT準(zhǔn)備功能,例如:
本地調(diào)試:支持將日志內(nèi)容輸出到本地,并支持輪轉(zhuǎn)、日志數(shù)、輪轉(zhuǎn)大小設(shè)置
細(xì)粒度資源控制:支持針對不同類型數(shù)據(jù)/日志設(shè)置不同的緩存上線、聚合方式
日志壓縮緩存:支持將未發(fā)送成功的數(shù)據(jù)壓縮緩存,減少設(shè)備內(nèi)存占用
功能優(yōu)勢
C-Producer是量身為IoT定制的方案,因此會有一些特定考慮:
客戶端高并發(fā)寫入:可配置的發(fā)送線程池,支持每秒數(shù)十萬條日志寫入,詳情參見性能測試
低資源消耗:每秒20W日志寫入只消耗70% CPU;同時在低性能硬件(例如樹莓派)上,每秒產(chǎn)生100條日志對資源基本無影響
客戶端日志不落盤:既數(shù)據(jù)產(chǎn)生后直接通過網(wǎng)絡(luò)發(fā)往服務(wù)端
客戶端計算與 I/O 邏輯分離:日志異步輸出,不阻塞工作線程
支持多優(yōu)先級:不通客戶端可配置不同的優(yōu)先級,保證高優(yōu)先級日志最先發(fā)送。
本地調(diào)試:支持設(shè)置本地調(diào)試,便于您在網(wǎng)絡(luò)不通的情況下本地測試應(yīng)用程序。
在以上場景中,C Producer Library 會簡化您程序開發(fā)的步驟,您無需關(guān)心日志采集細(xì)節(jié)實(shí)現(xiàn)、也不用擔(dān)心日志采集會影響您的業(yè)務(wù)正常運(yùn)行,大大降低數(shù)據(jù)采集門檻。
為了有一個感性認(rèn)識,我們對C-Producer 方案與其他嵌入式采集方案做了一個對比,如下:
整體解決方案
C-Producer + 日志服務(wù)可以給IoT帶來什么?答案是:IoT日志解決方案:
規(guī)模大
支持億級別客戶端實(shí)時寫入
支持 PB/Day 數(shù)據(jù)量
速度快
采集快:0延遲:寫入0延遲,寫入即可消費(fèi)
查詢快:一秒內(nèi),復(fù)雜查詢(5個條件)可處理10億級數(shù)據(jù)
分析快:一秒內(nèi),復(fù)雜分析(5個維度聚合+GroupBy)可聚合億級別數(shù)據(jù)
對接廣
與阿里云各類產(chǎn)品無縫打通
各種開源格式存儲、計算、可視化系統(tǒng)完美兼容
如何使用
一個應(yīng)用可創(chuàng)建多個producer,每個producer可包含多個client,每個client可單獨(dú)配置目的地址、日志level、是否本地調(diào)試、緩存大小、自定義標(biāo)識、topic等信息。
參見github地址
性能測試
環(huán)境配置:傳統(tǒng)X86服務(wù)器,樹莓派(低功耗環(huán)境),配置分別如下:
C-Producer配置
ARM(樹莓派)
緩存:10MB
聚合時間:3秒 (聚合時間、聚合數(shù)據(jù)包大小、聚合日志數(shù)任一滿足即打包發(fā)送)
聚合數(shù)據(jù)包大小:1MB
聚合日志數(shù):1000
發(fā)送線程:1
自定義tag : 5
X86
緩存:10MB
聚合時間:3秒 (聚合時間、聚合數(shù)據(jù)包大小、聚合日志數(shù)任一滿足即打包發(fā)送)
聚合數(shù)據(jù)包大小:3MB
聚合日志數(shù):4096
發(fā)送線程:4
自定義tag : 5
?
日志樣例
10個鍵值對,總數(shù)據(jù)量約為600字節(jié)
9個鍵值對,數(shù)據(jù)量約為350字節(jié)
測試結(jié)果
X86平臺結(jié)果
C Producer可以輕松到達(dá)90M/s的發(fā)送速度,每秒上傳日志20W,占用CPU只有70%,內(nèi)存140M
服務(wù)器在200條/s,發(fā)送數(shù)據(jù)對于cpu基本無影響(降低到0.01%以內(nèi))
客戶線程發(fā)送一條數(shù)據(jù)(輸出一條log)的平均耗時為:1.2us
樹莓派平臺結(jié)果
在樹莓派的測試中,由于CPU的頻率只有600MHz,性能差不多是服務(wù)器的1/10左右,最高每秒可發(fā)送2W條日志
樹莓派在20條/s的時候,發(fā)送數(shù)據(jù)對于cpu基本無影響(降低到0.01%以內(nèi))
客戶線程發(fā)送一條數(shù)據(jù)(輸出一條log)的平均耗時為:12us左右(樹莓派通過USB連接到PC共享網(wǎng)絡(luò))
一些典型場景可以參見云棲論壇 和最佳實(shí)踐。
總結(jié)
以上是生活随笔為你收集整理的IoT日志利器:嵌入式日志客户端(C Producer)发布的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指云原生数据库 2.0,阿里云发布全新
- 下一篇: 火山引擎进军云市场,计划未来三年服务十万