0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于 Elasticsearch 的日志系統(tǒng)架構(gòu)如何面臨挑戰(zhàn)

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 2023-08-08 10:21 ? 次閱讀

實操 Demo 展示 日志數(shù)據(jù)蘊含了豐富的信息價值,可幫助企業(yè)更好了解系統(tǒng)及業(yè)務(wù)運行情況,保障系統(tǒng)安全穩(wěn)定運行。為更好滿足日志場景的需求,Apache Doris 在 2.0 版本中引入了多項功能優(yōu)化:例如增加了倒排索引,支持原生的半結(jié)構(gòu)數(shù)據(jù)類型,優(yōu)化了 Text 匹配速度和文本算法等,最終實現(xiàn)相較 Elasticsearch 最高 10 倍的性價比提升。 為了讓大家快速使用 Doris 搭建新一代日志分析平臺,我們?yōu)榇蠹覍嵅僬故玖?Doris 和 Elasticsearch 性能對比,并演示了基于 Doris 搭建新一代日志分析平臺的關(guān)鍵步驟,點擊下方視頻即可觀看。 日志數(shù)據(jù)是企業(yè)大數(shù)據(jù)體系中重要的組成部分之一,這些數(shù)據(jù)記錄了網(wǎng)絡(luò)設(shè)備、操作系統(tǒng)以及應(yīng)用程序的詳細(xì)歷史行為,蘊含了豐富的信息價值,在可觀測性、網(wǎng)絡(luò)安全、業(yè)務(wù)分析等關(guān)鍵業(yè)務(wù)領(lǐng)域發(fā)揮著重要作用,可幫助企業(yè)更好了解系統(tǒng)及業(yè)務(wù)運行情況,及時發(fā)現(xiàn)及解決問題,以保障系統(tǒng)安全穩(wěn)定運行。具體而言,日志數(shù)據(jù)可以通過以下方式為企業(yè)帶來價值:

可觀測性:日志是可觀測性的三大基石(Logging,Metrics,Tracing)之一,其數(shù)據(jù)規(guī)模占比最高,常用于監(jiān)控告警、故障排查時快速檢索、Trace 關(guān)聯(lián)等,可保證系統(tǒng)穩(wěn)定運行、提升運維效率;

網(wǎng)絡(luò)安全:日志記錄了網(wǎng)絡(luò)和主機上發(fā)生的每一個事件和行為,用于安全分析、調(diào)查取證、安全檢測等,是提升系統(tǒng)安全性、降低被攻擊風(fēng)險的重要手段;

業(yè)務(wù)分析:在常見的業(yè)務(wù)分析中,比如在用戶行為分析和用戶畫像等場景中,通常需要對用戶行為日志進(jìn)行復(fù)雜分析,幫助企業(yè)了解用戶的喜好和行為軌跡,進(jìn)一步提高用戶滿意度、促進(jìn)留存和轉(zhuǎn)化。因此日志不僅用于運維和安全保障,對于業(yè)務(wù)增長也發(fā)揮著不可或缺的作用。

日志數(shù)據(jù)本質(zhì)是一系列系統(tǒng)事件的有序記錄,其生成方式和使用場景決定了具備以下幾個特點:

Schema Free:日志數(shù)據(jù)最初始的表現(xiàn)形態(tài)為非結(jié)構(gòu)化原始日志,以 Free Text 的形式存在,然而非結(jié)構(gòu)化數(shù)據(jù)是不便于進(jìn)行聚合統(tǒng)計等分析操作的。如果想對這些數(shù)據(jù)進(jìn)行存儲分析,就需要先通過 ETL 將非結(jié)構(gòu)化數(shù)據(jù)加工為結(jié)構(gòu)化表格,再在數(shù)據(jù)庫/數(shù)據(jù)倉庫中進(jìn)行分析。而在這個過程中,當(dāng)日志結(jié)構(gòu)發(fā)生變化時,還需要對 ETL 和結(jié)構(gòu)化表格進(jìn)行相應(yīng)的調(diào)整,這就需要研發(fā)和 DBA 團(tuán)隊的協(xié)助,流程復(fù)雜、耗費時間長且執(zhí)行難度高。在此之后進(jìn)一步誕生了以 JSON 為主的半結(jié)構(gòu)化日志,日志生成者可以自主增減字段,日志存儲系統(tǒng)根據(jù)數(shù)據(jù)調(diào)整存儲結(jié)構(gòu)。

數(shù)據(jù)量大:日志數(shù)據(jù)規(guī)模通常非常龐大并生產(chǎn)周期不間斷,特別是在大型企業(yè)或典型的日志應(yīng)用中,每天產(chǎn)生的日志數(shù)據(jù)可達(dá)十 TB 或百 TB級別。同時為了滿足業(yè)務(wù)需求或符合監(jiān)管要求,日志數(shù)據(jù)往往需要存儲半年甚至更長時間,存儲總量經(jīng)常達(dá)到 PB 級別,為各企業(yè)帶來高昂的存儲成本。而隨著時間的推移,日志數(shù)據(jù)的價值也在逐漸下降,因此對于日志系統(tǒng)來說,存儲成本也變得更加敏感。

實時寫入與檢索:日志數(shù)據(jù)常用于故障排查、安全追蹤等時效要求較高的場景,因此如果數(shù)據(jù)寫入延遲過高,就無法及時獲取最新發(fā)生的事件;如果關(guān)鍵字檢索響應(yīng)慢則無法滿足工程師、分析師的交互式分析需求。因此對于日志系統(tǒng)而言,要求在高吞吐寫入的前提下保證秒級以下的查詢響應(yīng)時間,并能夠提供全文檢索的能力以及秒級響應(yīng)的交互式查詢能力。

為了應(yīng)對以上需求、發(fā)揮出日志數(shù)據(jù)的更高價值,業(yè)界對于日志場景有不少解決方案,而以 Elasticsearch 為核心的 ELK 體系則是其中典型代表。在此我們以 Elasticsearch 為例,來分享基于 Elasticsearch 的日志系統(tǒng)架構(gòu)是如何面臨挑戰(zhàn)。

基于 Elasticsearch 的日志系統(tǒng)典型架構(gòu)如上圖所示,整個系統(tǒng)分為下面幾個模塊:

日志收集:通過 Filebeat 采集本地的日志文件,寫入到 Kafka 消息隊列;

日志傳輸:使用 Kafka 消息隊列集中和緩存日志;

日志轉(zhuǎn)換:LogStash 消費 Kafka 中的日志,進(jìn)行數(shù)據(jù)過濾、格式轉(zhuǎn)換等操作;

日志存儲:LogStash 將日志以 JSON 格式寫入 ES 存儲中;

日志查詢:通過 Kibana 可視化查詢 ES 中的日志,或者通過 ES DSL API 發(fā)起查詢請求;

基于 Elasticsearch 的日志系統(tǒng)架構(gòu)具有較好的實時日志檢索能力,然而該系統(tǒng)在實際應(yīng)用中也存在一些痛點,如寫入吞吐低、存儲成本高、不支持復(fù)雜查詢等問題。

Schema Free 支持不夠

Elasticsearch 的 Index Mapping 定義了數(shù)據(jù)的 Schema,包括字段的名字、數(shù)據(jù)類型、是否建索引等。

65ff1b0a-3514-11ee-9e74-dac502259ad0.png

Elasticsearch 的 Dynamic Mapping 可以根據(jù)寫入的 JSON 數(shù)據(jù)自動增加 Mapping 中的字段,對日志數(shù)據(jù)的 Schema Free 提供了一定程度的支持,但是也存在明顯不足:

Dynamic Mapping 性能差:當(dāng)遇到臟數(shù)據(jù)時容易出現(xiàn)大量字段,嚴(yán)重影響系統(tǒng)性能和穩(wěn)定性。

字段類型固定:當(dāng)業(yè)務(wù)類型變更時無法進(jìn)行修改,為了滿足不同的業(yè)務(wù)需求,用戶常常使用 text 類型來兼容,但是 text 類型的查詢性能是遠(yuǎn)不如 integer 等二進(jìn)制類型的查詢性能。

字段的索引固定:無法根據(jù)需求自行增加或刪除某個字段的索引,靈活性較差。因此用戶為了保證查詢過濾的速度,通常會在所有字段上都創(chuàng)建索引。而在所有字段上創(chuàng)建索引又會帶來寫入速度變慢、存儲空間增加等新的問題。

分析能力弱

Elasticsearch 開發(fā)的 ES DSL(Domain Specific Language,特定領(lǐng)域語言)與大多數(shù)工程師、數(shù)據(jù)分析師熟悉的技術(shù)棧差異比較大,這為用戶設(shè)置了較高的學(xué)習(xí)和使用門檻,并需要學(xué)習(xí)大量的多新的概念和語法,即使學(xué)會之后還需要經(jīng)常查閱手冊才能寫出正確的 DSL 語句。同時,Elasticsearch 生態(tài)自成體系、比較封閉,與其他系統(tǒng)如 BI 工具等打通比較困難。更重要的是, Elasticsearch 分析能力較弱,只支持簡單的單表分析,不支持多表 JOIN、子查詢、視圖等復(fù)雜分析,無法滿足企業(yè)日志分析需求。

663b8770-3514-11ee-9e74-dac502259ad0.png

成本高,性價比低

基于 Elasticsearch 的日志系統(tǒng)使用成本較高也是一個被用戶長期詬病的問題,成本主要來源于兩個方面:

寫入的計算成本:Elasticsearch 在寫入時要構(gòu)建倒排索引,會進(jìn)行分詞、倒排表排序等計算密集型操作,CPU 資源占用較大,單核寫入性能在 2MB/s 左右。當(dāng)一個 Elasticsearch 集群的大多數(shù) CPU 資源都被寫入消耗時,在遇到寫入流量高峰時極易觸發(fā)寫入 Reject,從而導(dǎo)致數(shù)據(jù)延遲變長、查詢速度變慢。

數(shù)據(jù)的存儲成本:為加速檢索和分析的速度,Elasticsearch 存儲了原始數(shù)據(jù)正排、倒排索引、Docvalue 列存等多份數(shù)據(jù),因此造成存儲成本大幅增高,且單副本存儲的壓縮率整體被限制在 1.5 倍左右,遠(yuǎn)低于日志數(shù)據(jù)常見的 5 倍壓縮比。

而隨著數(shù)據(jù)和集群規(guī)模增長, Elasticsearch 集群還面臨一些穩(wěn)定性問題:

寫入不穩(wěn)定:當(dāng)遇到寫入高峰時,將造成集群負(fù)載高的問題,從而影響寫入的穩(wěn)定性。

查詢不穩(wěn)定:由于查詢都在內(nèi)存中處理,大查詢?nèi)菀子|發(fā) JVM OOM,進(jìn)而影響整個集群的寫入和查詢的穩(wěn)定性。

故障恢復(fù)慢:Elasticsearch 集群在故障后恢復(fù)時需要進(jìn)行 Index 加載等資源占用較大的操作,因此故障恢復(fù)時間經(jīng)常需要數(shù)十分鐘,對服務(wù)可用性和 SLA 提出了很大的挑戰(zhàn)。

從以上方案對可知,基于 Elasticsearch 的日志系統(tǒng)架構(gòu)在應(yīng)用中無法同時兼顧高吞吐、低存儲成本和實時高性能的要求,且不支持復(fù)雜查詢。那么是否有其他方案可以較好的平衡成本與性能,且能提供更好的分析能力呢?答案是有的。

立志于通過一個系統(tǒng)解決多個場景的數(shù)據(jù)分析問題、降低復(fù)雜技術(shù)帶來的運維和使用成本,為了更加契合日志數(shù)據(jù)分析的場景需求,Apache Doris 在 2.0 版本中引入了多項功能優(yōu)化:例如支持原生的半結(jié)構(gòu)數(shù)據(jù)類型,優(yōu)化了 Text 匹配速度和文本算法,從而提升了日志數(shù)據(jù)導(dǎo)入和查詢的性能;增加了倒排索引、以滿足字符串類型的全文檢索和普通數(shù)值/日期等類型的等值、范圍檢索。最終通過 Benchmark 測試和實際應(yīng)用驗證表明, 基于 Apache Doris 構(gòu)建的新一代日志分析系統(tǒng)相較于 Elasticsearch 具有最高 10 倍的性價比提升。

基于 Apache Doris 的日志系統(tǒng)典型架構(gòu)如下圖所示,相較于 Elasticsearch 整個系統(tǒng)架構(gòu)更加開放:

6674f262-3514-11ee-9e74-dac502259ad0.png

更多日志接入方式:Doris 提供了多種日志數(shù)據(jù)的導(dǎo)入方式。例如支持 LogStash 通過 HTTP Output 將日志推送到 Doris、支持使用 Flink 對日志進(jìn)行加工后再寫入 Doris,支持 Routine Load 和 S3 Load 導(dǎo)入存儲在 Kafka 或者對象存儲中的日志數(shù)據(jù)。

統(tǒng)一存儲消除數(shù)據(jù)孤島:日志數(shù)據(jù)可以統(tǒng)一存儲到 Doris 中,并可以和數(shù)倉中其他數(shù)據(jù)進(jìn)行關(guān)聯(lián)分析,不再是獨立存在的數(shù)據(jù)孤島。

開放生態(tài),更強分析能力:Doris 兼容 MySQL 協(xié)議,各類數(shù)據(jù)分析工具或者客戶端可以通過 MySQL 連接到 Doris ,包括可觀測性系統(tǒng) Grafana、常見的 BI 分析工具 Tableau 等。應(yīng)用程序也可以通過 JDBC、ODBC 等標(biāo)準(zhǔn) API 來連接 Doris ,以進(jìn)行業(yè)務(wù)特定的查詢分析。后續(xù)我們還將完成類似于 Kibana 的可視化日志探索分析系統(tǒng),進(jìn)一步提升日志分析的體驗。

除此之外,基于 Apache Doris 的日志系統(tǒng)還具備以下幾個重要的優(yōu)勢:

原生的半結(jié)構(gòu)化數(shù)據(jù)支持

為了更好的適應(yīng) Text、JSON 格式日志 Schema Free 的特點,Apache Doris 在這兩個方面進(jìn)行了增強:

提供豐富的數(shù)據(jù)類型:優(yōu)化已有 Text 的數(shù)據(jù)類型,通過向量化技術(shù)提升字符串查找、正則匹配的性能,通過這些優(yōu)化實現(xiàn)性能提升 2-10倍;增加 JSON 數(shù)據(jù)類型,在數(shù)據(jù)寫入對 JSON字符串進(jìn)行解析并存儲成緊湊高效的二進(jìn)制格式,可使得查詢性能提升 4 倍;增加 Array Map 復(fù)雜數(shù)據(jù)類型,將原本使用字符串拼接的復(fù)雜類型結(jié)構(gòu)化,進(jìn)一步提升了存儲壓縮率和查詢性能。

支持 Schema Evolution:與 Elasticsearch 不同的是,Apache Doris 支持根據(jù)業(yè)務(wù)需要對 Schema 進(jìn)行調(diào)整,包括按需在線增減字段、增減索引、更改字段數(shù)據(jù)類型等。

Apache Doris 推出的 Light Schema Change 功能可以根據(jù)數(shù)據(jù)變化進(jìn)行毫秒級增減字段:

--增加列,毫秒級返回,立即生效
ALTERTABLElineitemADDCOLUMNl_new_columnINT;

通過 Light Schema Change 還可以按需增加倒排索引,無需為所有字段創(chuàng)建索引,避免不必要的寫入和存儲開銷。Doris 在增加索引時,默認(rèn)對新寫入數(shù)據(jù)生成索引,并可以對歷史數(shù)據(jù)選擇對哪些分區(qū)生成索引,用戶可靈活控制。

--增加倒排索引,毫秒級返回,新寫入數(shù)據(jù)自動生成索引
ALTERTABLEtable_nameADDINDEXindex_name(column_name)USINGINVERTED;

--歷史partition可以按需BUILDINDEX,后臺增量生成索引
BUILDINDEXindex_nameONtable_namePARTITIONS(partition_name1,partition_name2);

基于 SQL 的分析引擎

Apache Doris 支持標(biāo)準(zhǔn) SQL、兼容 MySQL 協(xié)議和語法,因此基于 Doris 的日志系統(tǒng)能夠使用 SQL 進(jìn)行日志分析,這使得日志系統(tǒng)具備以下優(yōu)勢:

簡單易用:工程師和數(shù)據(jù)分析師對于 SQL 非常熟悉,經(jīng)驗可以復(fù)用,不需要學(xué)習(xí)新的技術(shù)棧即可快速上手。

生態(tài)豐富:MySQL 生態(tài)是數(shù)據(jù)庫領(lǐng)域使用最廣泛的語言,因此可以與 MySQL 生態(tài)的集成和應(yīng)用無縫銜接。Doris 可以利用 MySQL 命令行與各種 GUI 工具、BI 工具等大數(shù)據(jù)生態(tài)結(jié)合,實現(xiàn)更復(fù)雜及多樣化的數(shù)據(jù)處理分析需求。

分析能力強:SQL 語言已經(jīng)成為數(shù)據(jù)庫和大數(shù)據(jù)分析的事實標(biāo)準(zhǔn),它具有強大的表達(dá)能力和功能,支持檢索、聚合、多表 JOIN、子查詢、UDF、邏輯視圖、物化視圖等多種數(shù)據(jù)分析能力。

經(jīng)過 Benchmark 測試及生產(chǎn)驗證,基于 Apache Doris 高性能基礎(chǔ)引擎針對日志場景進(jìn)行優(yōu)化后,日志系統(tǒng)性價比相對于 Elasticsearch 具有 5-10 倍的提升。

寫入吞吐提升:Elasticsearch 寫入的性能瓶頸在于解析數(shù)據(jù)和構(gòu)建倒排索引的 CPU 消耗。相比之下,Doris 進(jìn)行了兩方面的寫入優(yōu)化:一方面利用 SIMD 等 CPU 向量化指令提升了 JSON 數(shù)據(jù)解析速度和索引構(gòu)建性能;另一方面針對日志場景簡化了倒排索引結(jié)構(gòu),去掉日志場景不需要的正排等數(shù)據(jù)結(jié)構(gòu),有效降低了索引構(gòu)建的復(fù)雜度。

存儲成本降低:Elasticsearch 存儲瓶頸在于正排、倒排、Docvalue 列存多份存儲和通用壓縮算法壓縮率較低。相比之下,Doris 在存儲上進(jìn)行了以下優(yōu)化:去掉正排,縮減了 30% 的索引數(shù)據(jù)量;采用列式存儲和 ZSTD 壓縮算法,壓縮比可達(dá)到 5-10 倍,遠(yuǎn)高于 Elasticsearch 的 1.5 倍;日志數(shù)據(jù)中冷數(shù)據(jù)訪問頻率很低,Doris 冷熱分層功能可以將超過定義時間段的日志自動存儲到更低的對象存儲中,冷數(shù)據(jù)的存儲成本可降低 70% 以上。

我們在 Elasticsearch 提供的官方性能 Benchmark Rally 的 HTTP Logs 測試集上進(jìn)行了對比測試。如下圖可知,Doris 寫入速度是 Elasticsearch 的 5 倍,存儲空間減少了 80%,達(dá)到 550 MB/s,寫入后的數(shù)據(jù)壓縮比接近 1:10、存儲空間節(jié)省超 80% ,查詢耗時下降 57%、查詢性能是 Elasticsearch 的 2.3 倍。加上冷熱數(shù)據(jù)分離降低冷數(shù)據(jù)存儲成本,整體相較 Elasticsearch 實現(xiàn) 10 倍以上的性價比提升。

在用戶實際場景的驗證中,Doris 也表現(xiàn)出了超出預(yù)期的性價比優(yōu)勢。例如,某游戲公司最初使用的是 Elasticsearch,通過標(biāo)準(zhǔn)的 ELK 進(jìn)行日志分析,使用成本非常高。由于存儲成本過高,使得該公司在日志數(shù)據(jù)的合理存儲和高效分析受到了很大的限制,無法滿足業(yè)務(wù)需求。而在使用 Doris 搭建日志系統(tǒng)后,所需存儲空間僅是 Elasticsearch 的 1/6,極大地降低了存儲成本。同時 Doris 的高性能和優(yōu)秀的分析能力,也使得該公司能夠更高效靈活地處理日志數(shù)據(jù),并提供更好的業(yè)務(wù)支持。此外,某安全公司利用 Doris 提供的倒排索引構(gòu)建了日志分析系統(tǒng),僅使用原來 1/5 的服務(wù)器,承載了 30 萬每秒的寫入流量,導(dǎo)入及查詢速度更快。Doris 的引入,不僅降低了該公司運營成本,也極大地提升了分析的效率及系統(tǒng)穩(wěn)定性,為業(yè)務(wù)提供了強有力的支持。

下面為大家介紹基于 Apache Doris 構(gòu)建新一代日志系統(tǒng)的實踐步驟。

首先需要在 Apache Doris 官網(wǎng)下載 2.0 及以上版本:https://doris.apache.org/zh-CN/download,下載完成后參考部署文檔進(jìn)行集群部署:https://doris.apache.org/zh-CN/docs/dev/install/standard-deployment

第一步建表

參考下面的例子建表,關(guān)鍵點如下:

使用 DATETIMEV2 類型的時間字段作為 Key,在查詢最新 N 條日志時有明顯加速

對經(jīng)常查詢的字段創(chuàng)建索引,對需要全文檢索的字段指定分詞器 Parser 參數(shù)

分區(qū)使用時間字段上的 RANGE 分區(qū),開啟動態(tài) Partiiton 可按天自動管理分區(qū)

分桶使用 RANDOM 隨機分桶,使用 AUTO 可讓系統(tǒng)根據(jù)集群規(guī)模和數(shù)據(jù)量自動計算分桶數(shù)量

使用冷熱分離配置 log_s3 對象存儲和 log_policy_1day 超過 1 天轉(zhuǎn)存 s3 策略

CREATEDATABASElog_db;
USElog_db;

CREATERESOURCE"log_s3"
PROPERTIES
(
"type"="s3",
"s3.endpoint"="your_endpoint_url",
"s3.region"="your_region",
"s3.bucket"="your_bucket",
"s3.root.path"="your_path",
"s3.access_key"="your_ak",
"s3.secret_key"="your_sk"
);

CREATESTORAGEPOLICYlog_policy_1day
PROPERTIES(
"storage_resource"="log_s3",
"cooldown_ttl"="86400"
);

CREATETABLElog_table
(
`ts`DATETIMEV2,
`clientip`VARCHAR(20),
`request`TEXT,
`status`INT,
`size`INT,
INDEXidx_size(`size`)USINGINVERTED,
INDEXidx_status(`status`)USINGINVERTED,
INDEXidx_clientip(`clientip`)USINGINVERTED,
INDEXidx_request(`request`)USINGINVERTEDPROPERTIES("parser"="english")
)
ENGINE=OLAP
DUPLICATEKEY(`ts`)
PARTITIONBYRANGE(`ts`)()
DISTRIBUTEDBYRANDOMBUCKETSAUTO
PROPERTIES(
"replication_num"="1",
"storage_policy"="log_policy_1day",
"deprecated_dynamic_schema"="true",
"dynamic_partition.enable"="true",
"dynamic_partition.time_unit"="DAY",
"dynamic_partition.start"="-3",
"dynamic_partition.end"="7",
"dynamic_partition.prefix"="p",
"dynamic_partition.buckets"="AUTO",
"dynamic_partition.replication_num"="1"
);

第二步:日志導(dǎo)入

Apache Doris 支持多種數(shù)據(jù)導(dǎo)入方式,對于實時日志數(shù)據(jù),推薦 3 種導(dǎo)入方式:

如果日志數(shù)據(jù)在 Kafka 消息隊列中,配置 Doris Routine Load 可從 kafka 中實時拉取數(shù)據(jù)。

如果之前使用了 Logstash 等工具將日志寫入 Elasticsearch,可以選擇配置 Logstash 通過 HTTP 接口將日志寫入到 Doris 中。

如果是自定義的寫入程序,也可以通過 HTTP 接口將日志寫入到 Doris 中。

Kafka 導(dǎo)入

將 JSON 格式的日志寫入 Kafka 消息隊列,創(chuàng)建 Kafka Routine Load,讓 Doris 從 Kafka 中主動拉取數(shù)據(jù)。示例如下,其中property.*配置是非必須的:

--準(zhǔn)備好kafka集群和topiclog_topic

--創(chuàng)建routineload,從kafkalog_topic將數(shù)據(jù)導(dǎo)入log_table表
CREATEROUTINELOADload_log_kafkaONlog_db.log_table
COLUMNS(ts,clientip,request,status,size)
PROPERTIES(
"max_batch_interval"="10",
"max_batch_rows"="1000000",
"max_batch_size"="109715200",
"strict_mode"="false",
"format"="json"
)
FROMKAFKA(
"kafka_broker_list"="host:port",
"kafka_topic"="log_topic",
"property.group.id"="your_group_id",
"property.security.protocol"="SASL_PLAINTEXT",
"property.sasl.mechanism"="GSSAPI",
"property.sasl.kerberos.service.name"="kafka",
"property.sasl.kerberos.keytab"="/path/to/xxx.keytab",
"property.sasl.kerberos.principal"="xxx@yyy.com"
);


創(chuàng)建好 Routine Load 后,可以通過SHOW ROUTINE LOAD查看運行狀態(tài)。更多使用說明請參考 https://doris.apache.org/zh-CN/docs/dev/data-operate/import/import-way/routine-load-manual。

Logstash 導(dǎo)入

在營收信貸業(yè)務(wù)過程中,我們會對潛在客戶進(jìn)行廣告投放,通過自動獲取用戶行為日志數(shù)據(jù),分析信貸需求來加強營銷活動、提升獲客效果,達(dá)到精準(zhǔn)投放的目的。我們借助 Stream Load 自定義的日志采集工具收集用戶在小程序或者 App 中的訪問日志

配置 Logstash 的 HTTP Output,將數(shù)據(jù)通過 HTTP Stream Load 發(fā)送到 Doris。

1.logstash.yml配置 Batch 攢批條數(shù)和時間,用于提升數(shù)據(jù)寫入性能

pipeline.batch.size: 100000
pipeline.batch.delay: 10000

2.testlog.conf日志采集配置文件中增加一個 HTTP Output、URL 配置Doris 的 Stream Load 地址。

目前因為 Logstash 不支持 HTTP 跳轉(zhuǎn),需要配置 BE 地址,不能用 FE 地址。

Headers 中 Authorization 是http basic auth,用命令echo -n 'username:password' | base64來計算。

Headers 中l(wèi)oad_to_single_tablet參數(shù)能夠減少導(dǎo)入的小文件。

output {
    http {
       follow_redirects => true
       keepalive => false
       http_method => "put"
       url => "http://172.21.0.5:8640/api/logdb/logtable/_stream_load"
       headers => [
           "format", "json",
           "strip_outer_array", "true",
           "load_to_single_tablet", "true",
           "Authorization", "Basic cm9vdDo=",
           "Expect", "100-continue"
       ]
       format => "json_batch"
    }
}

自定義程序?qū)?/strong>

參考下面的方式通過 Http Stream Load 接口導(dǎo)入數(shù)據(jù)到 Doris,關(guān)鍵點如下:

使用basic auth進(jìn)行 HTTP 鑒權(quán),用命令echo -n 'username:password' | base64來計算

設(shè)置http header "format:json",指定數(shù)據(jù)格式為 JSON

設(shè)置http header "read_json_by_line:true",指定每行一個 JSON

設(shè)置http header "load_to_single_tablet:true",指定一次寫入一個分桶

目前建議寫入客戶端一個 Batch 100MB~1GB,后續(xù)版本會通過服務(wù)端 Group Commit 降低客戶端 Batch 大小

curl
--location-trusted
-uusername:password
-H"format:json"
-H"read_json_by_line:true"
-H"load_to_single_tablet:true"
-Tlogfile.json
http://fe_host:fe_http_port/api/log_db/log_table/_stream_load

第三步:查詢

Doris 支持標(biāo)準(zhǔn) SQL,可以通過 MySQL客 戶端或者通過 JDBC 等方式連接到集群,然后執(zhí)行 SQL 進(jìn)行查詢。

mysql-hfe_host-Pfe_mysql_port-uroot-Dlog_db

下面是日志分析場景中,常見的幾種查詢。

查看最新的 10 條數(shù)據(jù)

SELECT*FROMlog_tableORDERBYtsDESCLIMIT10;

查詢 clientip 為 '8.8.8.8'的最新 10 條數(shù)據(jù)

SELECT*FROMlog_tableWHEREclientip='8.8.8.8'ORDERBYtsDESCLIMIT10;

檢索 request 字段中有 error 或者 404 的最新 10 條數(shù)據(jù),MATCH_ANY 是 Doris 全文檢索的 SQL 語法關(guān)鍵字,匹配參數(shù)中任意一個關(guān)鍵字

SELECT*FROMlog_tableWHERErequestMATCH_ANY'error404'ORDERBYtsDESCLIMIT10;

檢索 request 字段中有 image 和 faq 的最新 10 條數(shù)據(jù),MATCH_ALL 是 Doris 全文檢索的 SQL 語法關(guān)鍵字,匹配參數(shù)中所有的關(guān)鍵字

SELECT*FROMlog_tableWHERErequestMATCH_ALL'imagefaq'ORDERBYtsDESCLIMIT10;

Apache Doris 針對日志場景進(jìn)行了多項優(yōu)化,最終達(dá)到存儲空間節(jié)省超 80% 、寫入速度是 Elasticsearch 的 5 倍、查詢性能是 Elasticsearch 的 2.3 倍。在冷熱數(shù)據(jù)分層功能加持下,整體相較 Elasticsearch 實現(xiàn) 10 倍以上的性價比提升。這些都表明,Apache Doris 已經(jīng)足夠支撐各企業(yè)構(gòu)建新一代日志系統(tǒng)。

后續(xù)倒排索引還會增加對 JSON、Map 等復(fù)雜數(shù)據(jù)類型的支持。而 BKD 索引可以支持多維度類型的索引,為未來 Doris 增加 GEO 地理位置數(shù)據(jù)類型和索引打下了基礎(chǔ)。與此同時 Apache Doris 在半結(jié)構(gòu)化數(shù)據(jù)分析方面還有更多能力擴展,比如豐富的復(fù)雜數(shù)據(jù)類型(Array、Map、Struct、JSON)以及高性能字符串匹配算法等,這些將滿足更加豐富的日志應(yīng)用場景。

最后,如果該文章所述符合您的使用場景,歡迎大家下載 Apache Doris 2.0 版本(https://doris.apache.org/download)進(jìn)行測試使用

責(zé)任編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • DSL
    DSL
    +關(guān)注

    關(guān)注

    2

    文章

    59

    瀏覽量

    38334
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7101

    瀏覽量

    89266
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4337

    瀏覽量

    85987
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1506

    瀏覽量

    62208
  • 日志系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    7013

原文標(biāo)題:如何基于Apache Doris構(gòu)建新一代日志分析平臺|解決方案

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    linux安裝配置ElasticSearch之源碼安裝

    /elasticsearch#日志格式bootstrap.memory_lock: true#鎖住es內(nèi)存,保證內(nèi)存不分配至交換分區(qū)network.host: 192.168.56.11#設(shè)置本機IP地址
    發(fā)表于 01-11 17:27

    移動電視射頻技術(shù)面臨什么挑戰(zhàn)

    隨著數(shù)字移動電視不斷向移動設(shè)備的應(yīng)用轉(zhuǎn)移,應(yīng)用和系統(tǒng)工程師正面臨著各種挑戰(zhàn),比如外形尺寸的小型化、更低的功耗以及信號完整性。對現(xiàn)有移動電視標(biāo)準(zhǔn)的研究重點將放在了DVB-H上。本文將從系統(tǒng)
    發(fā)表于 06-03 06:28

    軟件定義無線電架構(gòu)面臨哪些挑戰(zhàn)呢?

    等公司的努力,通過V CAST觀看足球錦標(biāo)賽和從Google Earth獲取本地信息正在變得越來越普通。無線通信在許多國家已超過陸地通信并且當(dāng)前的數(shù)據(jù)帶寬難以滿足無線通訊的需求,這也是為什么說軟件定義無線電架構(gòu)面臨著巨大的挑戰(zhàn)
    發(fā)表于 08-02 07:47

    電力系統(tǒng)設(shè)計面臨什么挑戰(zhàn)?

    電力系統(tǒng)設(shè)計工程師們正面臨著較之以往更大的挑戰(zhàn)。更加復(fù)雜的傳感算法、最新的能源效率挑戰(zhàn)和新一代高級傳感器的應(yīng)用,都意味著電力設(shè)計師們需要學(xué)習(xí)比以往更加廣泛的技能,同時不斷吸收新的設(shè)計思
    發(fā)表于 08-20 07:33

    在進(jìn)行電源管理設(shè)計時,電源架構(gòu)面臨的那些重要挑戰(zhàn)

    ,我們將重點介紹電源架構(gòu)面臨的一些重要挑戰(zhàn),重點是管理轉(zhuǎn)換器噪聲、生產(chǎn)和認(rèn)證挑戰(zhàn),以及進(jìn)一步縮小PCB尺寸的需求。引言
    發(fā)表于 07-26 08:30

    工業(yè)互聯(lián)網(wǎng)面臨挑戰(zhàn)

    工業(yè)互聯(lián)網(wǎng)面臨挑戰(zhàn)新一代工業(yè)控制網(wǎng)解決方案的重要性全光纖工業(yè)傳輸控制網(wǎng)的系統(tǒng)架構(gòu)
    發(fā)表于 02-22 09:17

    電子系統(tǒng)設(shè)計所面臨挑戰(zhàn)是什么

    電子系統(tǒng)設(shè)計所面臨挑戰(zhàn)是什么什么是高速電路?高速電路面臨的問題怎么解決?
    發(fā)表于 04-26 06:55

    使用空中鼠標(biāo)系統(tǒng)面臨哪些挑戰(zhàn)?如何去克服這些挑戰(zhàn)?

    使用空中鼠標(biāo)系統(tǒng)面臨哪些挑戰(zhàn)?如何去克服這些挑戰(zhàn)?
    發(fā)表于 05-10 07:26

    高速通信面臨挑戰(zhàn)是什么?

    高速通信面臨挑戰(zhàn)是什么?
    發(fā)表于 05-24 06:34

    多聲道音頻技術(shù)是什么?PC音頻子系統(tǒng)面臨哪些設(shè)計挑戰(zhàn)?

    多聲道音頻技術(shù)是什么?PC音頻子系統(tǒng)面臨哪些設(shè)計挑戰(zhàn)?
    發(fā)表于 06-04 07:02

    遠(yuǎn)程患者監(jiān)護(hù)系統(tǒng)面臨挑戰(zhàn)有哪些

    面臨五大常見的主要設(shè)計挑戰(zhàn):功耗(或電池壽命)、便攜性(或大?。?、患者安全、數(shù)據(jù)安全傳送和集成。圖1所示為可穿戴式患者監(jiān)護(hù)儀的高級框圖,重點介紹了電池管理、非隔離式DC/DC電源、隔離和無線接口等子系統(tǒng)
    發(fā)表于 11-04 06:01

    輕松搭建ELK日志分析系統(tǒng)

    Logstash是一個用來搜集、分析、過濾日志的工具。它支持幾乎任何類型的日志,包括系統(tǒng)日志、錯誤日志和自定義應(yīng)用程序
    的頭像 發(fā)表于 04-12 11:03 ?1.1w次閱讀
    輕松搭建ELK<b class='flag-5'>日志</b>分析<b class='flag-5'>系統(tǒng)</b>

    ElasticSearch是什么?應(yīng)用場景是什么?

    ElasticSearch是什么 ElasticSearch的功能 ElasticSearch的應(yīng)用場景 ElasticSearch的特點
    的頭像 發(fā)表于 10-09 18:38 ?2478次閱讀

    分布式實時日志分析解決方案ELK部署架構(gòu)

    ELK 已經(jīng)成為目前最流行的集中式日志解決方案,它主要是由 Beats、Logstash、Elasticsearch、Kibana 等組件組成,來共同完成實時日志的收集,存儲,展示等一站式的解決方案。本文將會介紹 ELK 常見的
    的頭像 發(fā)表于 01-29 11:55 ?911次閱讀

    統(tǒng)一日志數(shù)據(jù)流圖

    統(tǒng)一日志數(shù)據(jù)流圖 日志系統(tǒng)數(shù)據(jù)流圖 系統(tǒng)進(jìn)行日志收集的過程可以分為三個環(huán)節(jié): (1)日志收集和導(dǎo)
    的頭像 發(fā)表于 08-21 15:00 ?328次閱讀
    統(tǒng)一<b class='flag-5'>日志</b>數(shù)據(jù)流圖