1. 程式人生 > >自建ELK vs 日誌服務(SLS)全方位對比

自建ELK vs 日誌服務(SLS)全方位對比

簡介

提到日誌實時分析,很多人都會想到很火的ELK Stack(Elastic/Logstash/Kibana)來搭建。ELK方案開源,在社群中有大量的內容和使用案例。

阿里雲日誌服務產品在新版中增強查詢分析功能(LogSearch/Analytics),支援對日誌資料實時索引與查詢分析,並且對查詢效能和計算資料量做了大量優化。在這裡我們做一個全方位的比較,對於使用者關心的點,我們依次展開分析:

  • 易用:上手及使用過程中的代價
  • 功能(重點):主要針對查詢與分析兩塊
  • 效能(重點):對於單位大小資料量查詢與分析需求,延時如何
  • 規模(重點):能夠承擔的資料量,擴充套件性等
  • 成本(重點):同樣功能和效能,使用分別花多少錢

易用

對日誌分析系統而言,有如下使用過程:

  1. 採集:將資料穩定寫入
  2. 配置:如何配置資料來源
  3. 擴容:接入更多資料來源,更多機器,對儲存空間,機器進行擴容
  4. 使用:這部分在功能這一節介紹
  5. 匯出:資料能否方便匯出到其他系統,例如做流計算、放到物件儲存中進行備份
  6. 多租戶:如何將資料能否分享給他人使用,使用是否安全等

以下是比較結果:

專案 小項 自建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%

image.png

image.png

備註:LogSearch/Analytics 產生計費的儲存量包括壓縮的原始資料寫入量(23G)+索引流量(27G),共50G儲存費用。

從測試結果來看

  • LogSearch/Analytics寫入延時好於ES,40ms vs 14 ms

  • 空間:原始資料50G,因測試資料比較隨機所以儲存空間會有膨脹(大部分真實場景下,儲存會因壓縮後會比原始資料小)。ES脹到86G,膨脹率為172%,在儲存空間超出LogSearch/Analytics 58%

讀取(查詢+分析)測試

測試場景

我們在此選取兩種比較常見的場景:日誌查詢和聚合計算。分別統計併發度為1,5,10時,兩種case的平均延時。

  1. 針對全量資料,對任意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
    
  2. 針對全量資料,隨機查詢日誌中的關鍵詞,例如查詢 "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延時保持穩定甚至略有下降

image.png
image.png

規模

  1. LogSearch/Analytics 一天可以索引PB級資料,一次查詢可以在秒級過幾十TB規模資料,在資料規模上可以做到彈性伸縮與水平擴充套件
  2. 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)

image.png

​ 同樣效能,使用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等)打通,提供一站式實時資料解決方案。

原文連結