Seren,智行資深研發(fā)經(jīng)理,負責業(yè)務(wù)系統(tǒng)架構(gòu)升級和優(yōu)化,跟蹤行業(yè)趨勢和技術(shù)發(fā)展方向,
Phoenix,智行資深后端開發(fā)工程師,專注系統(tǒng)性能優(yōu)化與業(yè)務(wù)數(shù)據(jù)治理挖掘,持續(xù)推動業(yè)務(wù)發(fā)展。
日志,作為系統(tǒng)運行的忠實記錄者,不僅是問題追蹤的利器,更是性能調(diào)優(yōu)的指南針。通過深入分析日志,我們可以洞悉系統(tǒng)運行的每一個細節(jié),從而快速定位問題、優(yōu)化性能。同時,日志也可以作為數(shù)據(jù)分析和決策的重要依據(jù)。研發(fā)流程中,如何使用好日志,還是存在著以下難點。
針對以上問題,本文提出一個日志治理挖掘方案。該方案旨在通過對系統(tǒng)日志進行標準化、規(guī)范化、統(tǒng)一化處理,進一步挖掘系統(tǒng)日志的潛在價值。
我們整理了日志的使用場景,大致分為四個方向:指標監(jiān)控,Trace定位排障,性能分析,數(shù)據(jù)分析與報表(實時/離線)。
指標監(jiān)控:指標監(jiān)控是系統(tǒng)穩(wěn)定運行的重要保障,它通過對核心業(yè)務(wù)邏輯、第三方接口響應(yīng)、數(shù)據(jù)有效性等關(guān)鍵指標進行實時追蹤與分析,確保系統(tǒng)性能始終處于最佳狀態(tài)。
Trace定位排障:在復雜的業(yè)務(wù)場景中,當遇到請求處理異常、系統(tǒng)響應(yīng)錯誤、業(yè)務(wù)展示邏輯核對等問題時,定位排障成為了關(guān)鍵的一環(huán)。當我們已經(jīng)通過上游定位、CDataportal查詢或日常開發(fā)調(diào)試等手段,確定了具體的問題請求,接下來的任務(wù)就是通過日志精準鎖定問題所在,并迅速解決故障。
場景問題定位:場景問題定位是一種針對具體場景,通過深入分析、精細排查,以快速找到問題根源的方法。我們會利用日志分析、監(jiān)控數(shù)據(jù)、用戶反饋等多種手段,對問題場景進行深入剖析。通過對比正常場景與問題場景的差異,我們可以進一步縮小問題范圍,確定可能的問題源頭。
數(shù)據(jù)分析與報表:通過日志記錄數(shù)據(jù)分析與報表編制流程,我們能夠?qū)崟r捕捉系統(tǒng)潛在問題,進而實現(xiàn)問題的迅速定位與解決。同時,這一做法也有助于我們更加精準地向團隊成員、決策者及BI等相關(guān)方展示分析成果與深刻洞察,確保各方能夠基于充分的信息作出合理決策。
3.1 分布式系統(tǒng)日志的整合與串聯(lián)
分布式系統(tǒng)日志的串聯(lián)是確保在復雜的分布式環(huán)境中能夠準確追蹤和關(guān)聯(lián)各個組件產(chǎn)生的日志記錄,從而實現(xiàn)對整個系統(tǒng)行為的全面理解。以下是關(guān)于分布式系統(tǒng)日志串聯(lián)實現(xiàn)中的關(guān)鍵步驟:
1)唯一標識生成:在每個業(yè)務(wù)任務(wù)請求開始時,生成一個全局唯一的標識。這個標識將貫穿整個請求的生命周期,用于標識和串聯(lián)與該請求相關(guān)的所有日志記錄。
2)標識傳遞:在分布式系統(tǒng)中,請求會經(jīng)過多個系統(tǒng)或組件。為了確保日志的準確串聯(lián),這個唯一標識需要在請求傳遞過程中被正確攜帶。
我們通過在請求入口生成全局traceid,并存放在線程安全的context 中。每個組件、線程中,當記錄日志時,從線程 `context` 中獲取 `traceId`,并將其作為日志記錄的一部分。通過這種方式,我們實現(xiàn)了服務(wù)內(nèi)的日志串聯(lián)。
在調(diào)用下一級服務(wù)時,將當次請求的`traceId` 作為自定義頭的一部分添加到請求頭中。這樣,下一級服務(wù)或組件就能夠從請求頭中提取 `traceId`,并將其存放到自己的線程 `context` 中,通過這種方式,我們實現(xiàn)了系統(tǒng)間日志的關(guān)聯(lián)。
3.2 前后端日志信息的整合與貫通解決方案
前后端日志串聯(lián)打通方案主要涉及前端和后端產(chǎn)生的日志能夠按照特定的規(guī)則進行關(guān)聯(lián)和整合,以便能夠追蹤和分析用戶操作的生命周期。以下是前后端日志串聯(lián)打通方案的關(guān)鍵步驟:
1)生成唯一標識:在請求的入口點(如API網(wǎng)關(guān)或負載均衡器),為每個請求生成一個全局唯一的標識,如`traceId`。這個標識作為用戶上一次操作的traceid將用于串聯(lián)前后端的日志記錄。
2)傳遞`traceId`到前端:當后端響應(yīng)前端請求時,將生成的`traceId`包含在響應(yīng)頭中返回給前端。前端接收到響應(yīng)后,提取`traceId`,并將其存儲在合適位置。
3)前端回傳`traceId`:前端在發(fā)起下一次請求時,將存儲的`traceId`作為請求的一部分傳遞給服務(wù)端。這樣,當次請求就可以與上一次請求實現(xiàn)串聯(lián)。
3.3 統(tǒng)一標準日志管理與模塊化解決方案
統(tǒng)一標準日志管理與模塊化解決方案旨在構(gòu)建一個統(tǒng)一、可維護且可擴展的日志記錄、查詢體系,以提升系統(tǒng)的可觀察性、問題追蹤能力,為系統(tǒng)的穩(wěn)定運行和持續(xù)優(yōu)化提供有力支持。以下是關(guān)于日志標準化與組件化的關(guān)鍵步驟:
1)同一日志分層標準:根據(jù)系統(tǒng)的不同功能和組件,將日志劃分為不同的層級,如應(yīng)用層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層、外部接口層等。每個層級應(yīng)記錄與該層級相關(guān)的關(guān)鍵信息和事件,以便于問題定位和性能分析。
2)統(tǒng)一日志格式:定義一套標準的日志字段,包括但不限于時間戳、traceId、日志級別、日志來源、請求信息(如請求方法、URL、參數(shù)等)、響應(yīng)信息(如狀態(tài)碼、返回數(shù)據(jù)等)、異常堆棧等。確保所有系統(tǒng)和組件產(chǎn)生的日志都包含這些標準字段,以便于日志的聚合和查詢。
3)統(tǒng)一接入方式:制定日志接入的統(tǒng)一規(guī)范,包括日志的收集、傳輸、存儲等流程。明確日志數(shù)據(jù)的數(shù)據(jù)格式(如JSON、XML等)、傳輸方式等。
4)日志分析工具:開發(fā)日志分析工具,對收集到的日志數(shù)據(jù)進行加工處理,統(tǒng)計分析、可視化展示和異常檢測等功能。
5)安全與性能優(yōu)化:對敏感數(shù)據(jù)進行加密處理,確保存儲過程中的機密性。對日志數(shù)據(jù)進行壓縮處理,減少存儲空間的占用和網(wǎng)絡(luò)傳輸?shù)拈_銷。
3.4 大報文日志的精細化管理與處理方案
大報文日志的處理過程中,確保日志的完整性和可讀性,同時保證不影響服務(wù)性能,是至關(guān)重要的。以下是處理過程的關(guān)鍵步驟:
1)大報文日志的判斷
根據(jù)系統(tǒng)的內(nèi)存限制、日志的生成頻率以及業(yè)務(wù)需求,設(shè)定一個合理的內(nèi)存占用閾值。對指定日志報文對象做內(nèi)存空間占用分析,如果超過閾值,則視為大對象。
2)異步壓縮、發(fā)送
使用線程池,創(chuàng)建專門負責壓縮和發(fā)送日志的后臺任務(wù)。當有大報文日志產(chǎn)生時,將其傳遞給后臺任務(wù)隊列,由后臺任務(wù)異步處理,確保主服務(wù)能夠繼續(xù)處理請求。
3)選擇合適的壓縮算法
使用如Gzip、ZSTD等高效的壓縮算法,這些算法能夠在壓縮率和解壓縮速度之間取得良好的平衡。確保所選的壓縮算法能夠處理大報文,并且不會導致內(nèi)存溢出或其他問題。
通過以上關(guān)鍵步驟的實施和監(jiān)控,可以確保大報文日志在處理過程中的完整性和可讀性,同時盡可能減少對服務(wù)性能的影響。
3.5 高效日志清洗與多維度分析解決方案
日志清洗與分析方案,旨在實現(xiàn)日志的有效清洗與分析,通過提取有用信息、轉(zhuǎn)換結(jié)構(gòu)化數(shù)據(jù),為后續(xù)的分析、監(jiān)控和故障排查工作提供堅實基礎(chǔ)。方案主要包括日志處理、關(guān)鍵字段提取、維度聚合和可視化展示等步驟,以確保日志數(shù)據(jù)的準確性和分析的高效性。以下是該方案的主要步驟:
1)日志處理:從各個系統(tǒng)和應(yīng)用程序中收集原始日志數(shù)據(jù),對需要進行加密或壓縮處理的日志信息進行解密和解壓縮操作,還原出原始的日志內(nèi)容。根據(jù)業(yè)務(wù)需求,篩選出需要分析的日志數(shù)據(jù),排除無用或重復的日志信息。
2)提取關(guān)鍵字段:通過Aviator 引擎運行提取腳本,識別并提取出日志中的關(guān)鍵字段,如接口名、是否成功等。對提取出的字段進行格式化和標準化處理,確保字段的一致性和可比性。這些字段是后續(xù)分析的基礎(chǔ)。
3)維度聚合:根據(jù)業(yè)務(wù)需求和分析目標,定義合適的維度,如時間維度、事件類型維度等。按照定義的維度對日志數(shù)據(jù)進行聚合統(tǒng)計,計算出各個維度的統(tǒng)計指標,如計數(shù)、平均值、最大值等。將聚合后的結(jié)果存儲到clickhouse中,以便于后續(xù)的查詢和分析。
4)可視化:根據(jù)業(yè)務(wù)需求和分析目標,設(shè)計合適的看板,展示關(guān)鍵指標和統(tǒng)計結(jié)果。生成詳細的報表,包括各個維度的統(tǒng)計數(shù)據(jù)和趨勢分析,以供業(yè)務(wù)人員查閱和分析。在看板和報表中提供交互功能,如篩選、排序、鉆取等,方便用戶進行深入分析和探索。
組件化:通過組件化,我們可以為系統(tǒng)提供零入侵的接入方案。這意味著在接入日志治理系統(tǒng)時,無需對原有系統(tǒng)進行任何修改或侵入,只需將日志組件集成到系統(tǒng)中即可。這種零入侵的方式不僅保證了原有系統(tǒng)的穩(wěn)定性和安全性,還大大簡化了接入流程,提高了效率。
配置化:通過對關(guān)鍵流程接口進行擴展化處理,我們可以實現(xiàn)組件的靈活配置和定制。用戶可以根據(jù)實際需求,對日志組件進行個性化的配置,以滿足不同的業(yè)務(wù)場景和需求。
抽樣化:核心日志往往包含了大量的關(guān)鍵信息,但其數(shù)量也非常龐大,如果全部存儲,將帶來巨大的存儲成本。抽樣化技術(shù)可以解決這個問題。通過對核心日志進行抽樣輸出,我們可以只保留部分具有代表性的日志數(shù)據(jù),從而大大降低存儲成本。
降低資源消耗:通過自定義序列化方式,我們可以優(yōu)化日志數(shù)據(jù)的傳輸格式,減少數(shù)據(jù)傳輸量。其次,采用日志批量發(fā)送的方式,可以將多條日志合并成一次發(fā)送,減少發(fā)送次數(shù)和網(wǎng)絡(luò)開銷。
本文鏈接:http://www.tebozhan.com/showinfo-26-88916-0.html解鎖潛在價值,智行日志治理的實踐之路
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com