883
汽車大全
自建ELK vs 日誌服務(SLS)全方位對比
簡介
提到日誌實時分析,很多人都會想到很火的ELK Stack(Elastic/Logstash/Kibana)來搭建。ELK方案開源,在社區中有大量的內容和使用案例。
阿裏雲日誌服務產品在新版中增強查詢分析功能(LogSearch/Analytics),支持對日誌數據實時索引與查詢分析,並且對查詢性能和計算數據量做了大量優化。在這裏我們做一個全方位的比較,對於用戶關心的點,我們依次展開分析:
- 易用:上手及使用過程中的代價
- 功能(重點):主要針對查詢與分析兩塊
- 性能(重點):對於單位大小數據量查詢與分析需求,延時如何
- 規模(重點):能夠承擔的數據量,擴展性等
- 成本(重點):同樣功能和性能,使用分別花多少錢
易用
對日誌分析係統而言,有如下使用過程:
- 采集:將數據穩定寫入
- 配置:如何配置數據源
- 擴容:接入更多數據源,更多機器,對存儲空間,機器進行擴容
- 使用:這部分在功能這一節介紹
- 導出:數據能否方便導出到其他係統,例如做流計算、放到對象存儲中進行備份
- 多租戶:如何將數據能否分享給他人使用,使用是否安全等
以下是比較結果:
項目 | 小項 | 自建ELK | Log Analytics |
---|---|---|---|
采集 | 協議 | Restful API | Restful API |
Agent | Logstash/Beats/FluentD,生態十分豐富 | Logtail(為主)+其他(例如Logstash) | |
配置 | 單元 | 提供Index概念用以區分不同日誌 | Project + Logstore。提供兩層概念,Project相當於命名空間,可以在Project下建立多個Logstore |
屬性 | API + Kibana | API + SDK + 控製台 | |
擴容 | 存儲 | 增加機器,購買雲盤 | 無需操作 |
機器 | 新增機器 | 無需操作 | |
配置 | 配置Logstash並通過配管係統應用機器 | 控製台/API 操作,無需配管係統 | |
采集點 | 通過配管係統控製,將配置和Logstash安裝到機器組 | 控製台/API 操作,無需配管係統 | |
導出 | 方式 | API/SDK | API/SDK + 各流計算引擎(Spark,Storm,Flink,StreamCompute,CloudMonitor,ARMS) + 存儲(OSS + MaxCompute) |
多租戶 | 安全 | 無(非商業版) | https + 傳輸簽名 + 多租戶隔離 + 訪問控製 |
使用 | 同一賬號 | 子賬號,角色,產品,臨時授權等 |
總體而言:
ELK 有非常多的生態和寫入工具,使用中的安裝、配置等都有較多工具可以參考。LogSearch/Anlaytics是一個托管服務,從接入、配置、使用上集成度非常高,普通用戶5分鍾就可以接入。並且過程中不需要擔心容量、並發等問題,按量計費,彈性伸縮。
功能(查詢+分析)
查詢主要將符合條件的日誌快速命中,分析功能是對數據進行統計與計算。
例如我們有如下需求:所有大於200讀請求,根據Ip統計次數和流量,這樣的分析請求就可以轉化為兩個操作:查詢到指定結果,對結果進行統計分析。在一些情況下我們也可以不進行查詢,直接對所有日誌進行分析。
1: Status in (200,500] and Method:Get*
2: select count(1) as c, sum(inflow) as sum_inflow, ip group by Ip
查詢能力對比
類型 | 小項 | 自建ELK | Log-Search/Analytics |
---|---|---|---|
文本 | 索引查詢 | 支持 | 支持 |
分詞 | 支持 | 支持 | |
中文分詞 | 支持 | (計劃支持) | |
前綴 | 支持 | 支持 | |
後綴 | 支持 | ||
模煳 | 支持 | 支持 | |
Wildcast | 支持 | (計劃支持) | |
數值 | long | 支持 | 支持 |
double | 支持 | 支持 | |
Nested | Json查詢 | 支持 | |
Geo | Geo查詢 | 支持 | 不直接支持,但可以通過區間查詢代替 |
Ip | Ip查詢 | 支持 | 不直接支持,通過字符串支持 |
上下文 | 上下文查詢 | 支持 | |
上下文過濾 | 支持 |
ElasticSearch 支持的數據類型,以及查詢方式上要更強。Log-Search/Analytics 支持大部分常用查詢,也有一些特色(例如程序日誌上下文查詢與展開)。
分析能力對比
類型 | 小項 | 自建ELK | Log-Search/Analytics |
---|---|---|---|
接口 | 方式 | API/SDK | API/SDK + SQL92 |
其他協議 | JDBC | ||
Agg | Bucketing | 支持 | 支持 |
Metric | 支持 | 支持 | |
Matrix | 支持 | 支持 | |
Pipline | 有限支持 | 完整支持 | |
運算 | 數值 | 支持 | |
字符串 | 支持 | ||
估算 | 支持 | ||
數理統計 | 支持 | ||
日期轉換 | 支持 | ||
GroupBy | Agg | 支持 | 支持 |
Having條件 | 支持 | ||
排序 | 排序 | 支持 | |
Join | 多表Join | 支持 |
從結果看Log-Search/Analytics 提供的功能是ES 超集,完整支持SQL 92 語義,隻要會寫SQL 都能直接使用。
性能
接下來我們測試針對相同數據集,分別對比寫入數據及查詢,和聚合計算能力。
實驗環境
1、 測試配置
| | 自建ELK | LogSearch/LogAnalytics |
| ----- | -------------------------- | ---------------------- |
| 環境 | ECS 4核16GB * 4台 + 高效雲盤 SSD | |
| Shard | 10 | 10 |
| 拷貝數 | 2 | 3 (默認配置,對用戶不可見) |
2、測試數據
* 5列double
* 5列long
* 5列text,字典大小分別是256,512,768,1024,1280
-
以上字段完全隨機,如下為一條測試日誌樣例:
timestamp:August 27th 2017, 21:50:19.000 long_1:756,444 double_1:0 text_1:value_136 long_2:-3,839,872,295 double_2:-11.13 text_2:value_475 long_3:-73,775,372,011,896 double_3:-70,220.163 text_3:value_3 long_4:173,468,492,344,196 double_4:35,123.978 text_4:value_124 long_5:389,467,512,234,496 double_5:-20,10.312 text_5:value_1125
3、 數據集大小
* 原始數據大小:50 GB
* 原始數據除去Key後內容大小:27 GB(LogSearch/Analytics 以該大小作為存儲計費單元)
* 日誌行數:162,640,232 (約為1.6億條)
寫入測試結果
ES采用bulk api批量寫入,LogSearch/Analytics 用PostLogstoreLogs API批量寫入,結果如下:
類型 | 項目 | 自建ELK | LogSearch/Analytics |
---|---|---|---|
延時 | 平均寫入延時 | 40 ms | 14 ms |
存儲 | 單拷貝數據量 | 86G | 58G |
膨脹率:數據量/原始數據大小 | 172% | 121% |
備注:LogSearch/Analytics 產生計費的存儲量包括壓縮的原始數據寫入量(23G)+索引流量(27G),共50G存儲費用。
從測試結果來看
LogSearch/Analytics寫入延時好於ES,40ms vs 14 ms
空間:原始數據50G,因測試數據比較隨機所以存儲空間會有膨脹(大部分真實場景下,存儲會因壓縮後會比原始數據小)。ES脹到86G,膨脹率為172%,在存儲空間超出LogSearch/Analytics 58%
讀取(查詢+分析)測試
測試場景
我們在此選取兩種比較常見的場景:日誌查詢和聚合計算。分別統計並發度為1,5,10時,兩種case的平均延時。
-
針對全量數據,對任意text列計算group by,計算5列數值的avg/min/max/sum/count,並按照count排序,取前1000個結果,例如:
select count(long_1) as pv,sum(long_2),min(long_3),max(long_4),sum(long_5) group by text_1 order by pv desc limit 1000
-
針對全量數據,隨機查詢日誌中的關鍵詞,例如查詢 "value_126",獲取命中的日誌數目與前100行,例如:
value_126
測試結果
類型 | 並發數 | ES延時(單位s) | LogSearch/Analytics延時(單位s) |
---|---|---|---|
case1:分析類 | 1 | 3.76 | 3.4 |
5 | 3.9 | 4.7 | |
10 | 6.6 | 7.2 | |
case2:查詢類 | 1 | 0.097 | 0.086 |
5 | 0.171 | 0.083 | |
10 | 0.2 | 0.082 |
結果分析
- 從結果看,對於1.5億數據量這個規模,兩者都達到了秒級查詢與分析能力
- 針對統計類場景(case 1), ES和日誌服務延時處同一量級。ES采用SSD硬盤,在讀取大量數據時IO優勢比較高
- 針對查詢類場景(case 2), LogAnalytics在延時明顯優於ES。隨著並發的增加,ELK延時對應增加,而LogAnalytics延時保持穩定甚至略有下降
規模
LogSearch/Analytics 一天可以索引PB級數據,一次查詢可以在秒級過幾十TB規模數據,在數據規模上可以做到彈性伸縮與水平擴展
-
ES比較適合服務場景為:寫入GB-TB/Day、存儲在TB級。主要受限於2個原因:
- 單集群規模:比較理想為20台左右,業界比較大的為100節點一個集群
- 寫入擴容:shard創建後便不可再修改,當吞吐率增加時,需要動態擴容節點,最多可使用的節點數便是shard的個數
- 存儲擴容:主shard達到磁盤的上線時,要麼遷移到更大的一塊磁盤上,要麼隻能分配更多的shard。一般做法是創建一個新的索引,指定更多shard,並且rebuild舊的數據
LogSearch/Analytics 則沒有擴展性方麵的問題,每個shard都是分布式存儲。並且當吞吐率增加時,可以動態分裂shard,達到處理能力水平擴展。
成本
以上述測試數據為例,一天寫入50GB數據(其中27GB 為實際的內容),保存90天,平均一個月的耗費。
1、 日誌服務(LogSearch/LogAnalytics)計費規則參考文檔,包括讀寫流量、索引流量、存儲空間等計費項,查詢功能免費。
| 計費項目 | 值 | 單價 | 費用(元) |
| ----------- | ----------------- | -------------- | ----- |
| 讀寫流量 | 23G * 30 | 0.2 元/GB | 138 |
| 存儲空間(保存90天) | 50G * 90 | 0.3 元/GB*Month | 1350 |
| 索引流量 | 27G * 30 | 0.35 元/GB | 283 |
| 總計 | | | 1771 |
2、 ES費用包括機器費用,及存儲數據SSD雲盤費用
* 雲盤一般可以提供高可靠性,因此我們這裏不計費副本存儲量
* 存儲盤一般需要預留15%剩餘空間,以防空間寫滿,因此乘以一個1.15係數
| 計費項目 | 值 | 單價 | 費用(元) |
| ---- | ---------------------------- | ------------------ | ----------- |
| 服務器 | 4台4核16G(三個月)(ecs.mn4.xlarge) | 包年包月費用:675 元/Month | 2021 |
| 存儲 | 86 * 1.15 * 90 (這裏隻計算一個副本) | SSD:1 元/GB*M | 8901 |
| | | SATA:0.35 元/GB*M | 3115 |
| 總計 | | | 12943 (SSD) |
| | | | 5135 (SATA) |
同樣性能,使用LogSearch/Analytics與ELK(SSD)費用比為 13.6%。在測試過程中,我們也嚐試把SSD換成SATA以節省費用(LogAnalytics與SATA版費用比為 34%),但測試發現延時會從40ms上升至150ms,在長時間讀寫下,查詢和讀寫延時變得很高,無法正常工作了。
總結
LogSearch/Analytics在提供同樣查詢速度、更高吞吐量、更強分析能力背後,隻需要開源方案13%成本(集團用戶默認7折,計算後隻有10%成本),並且按量付費免運維,讓你把精力放在業務分析上。
日誌服務除了LogSearch/Analytics外,還提供LogHub、LogShipper功能,支持實時采集數據、與流計算係統(Spark、Storm、Flink、StreamCompute)、離線分析係統(MaxCompute、E-MapReduce、Presto、Hive等)打通,提供一站式實時數據解決方案。
線上數據演示
一天20億條數據量進行查詢與分析(2分鍾):
Dashboard功能演示視頻(4分鍾):
除此之外,我們提供了三組測試數據供嚐試:
以下5個子帳號供試用,請隨機選擇一個登錄,若登錄不成功請換一個子帳號嚐試:
登錄地址 | 用戶名 | 密碼 |
---|---|---|
鏈接 | sls_reader1@1654218965343050 | pnX-32m-MHH-xbm |
鏈接 | sls_reader2@1654218965343050 | pnX-32m-MHH-xbm |
鏈接 | sls_reader3@1654218965343050 | pnX-32m-MHH-xbm |
鏈接 | sls_reader4@1654218965343050 | pnX-32m-MHH-xbm |
鏈接 | sls_reader5@1654218965343050 | pnX-32m-MHH-xbm |
最後更新:2017-09-21 10:03:31