一、需求描述
在上一篇《利用Vector和鴻鵠搭建微服務(wù)應(yīng)用的可觀測(cè)性平臺(tái)》中,闡述了微服務(wù)的基本概念、優(yōu)點(diǎn)及如何利用鴻鵠來處理分布式應(yīng)用的日志。本文將進(jìn)一步討論微服務(wù)架構(gòu)面臨的問題、服務(wù)網(wǎng)格及鴻鵠處理Istio Gateway的獨(dú)特優(yōu)勢(shì)。
1.1 微服務(wù)架構(gòu)面臨的挑戰(zhàn)
1.1.1 云基礎(chǔ)設(shè)施并不總是可靠
無論是公有云還是私有云,都由成千上萬的硬件和軟件構(gòu)成。理論上,或多或少存在不可用的組件。而我們的微服務(wù)一般會(huì)部署在云上,工程師在構(gòu)建微服務(wù)時(shí),一般都會(huì)假設(shè)基礎(chǔ)設(shè)施是非永久的且部分基礎(chǔ)設(shè)施甚至是不可用狀態(tài)。所以在架構(gòu)中,必須前瞻性地考慮云基礎(chǔ)設(shè)施的非永久性特征。
1.1.2 必須確保服務(wù)之間通信的彈性
因?yàn)樵苹A(chǔ)設(shè)施的不可靠性,在設(shè)計(jì)微服務(wù)系統(tǒng)的時(shí)候,需要考慮服務(wù)本身的彈性,確保部分基礎(chǔ)設(shè)施不可用的情況下,還能持續(xù)對(duì)外提供服務(wù)。業(yè)界目前一般有如下的解決方案:
-
客戶端負(fù)載均衡: 提供多個(gè)服務(wù)端點(diǎn),由客戶端決定如何調(diào)用
-
服務(wù)發(fā)現(xiàn)機(jī)制:定期的更新健康的服務(wù)端點(diǎn)
-
短路:對(duì)于非正常的服務(wù),實(shí)施一定時(shí)間的隔離
-
限制措施:對(duì)連接數(shù)、線程數(shù)、會(huì)話數(shù)等進(jìn)行限制
-
超時(shí):對(duì)API請(qǐng)求的時(shí)長(zhǎng),設(shè)置超時(shí)機(jī)制
-
重試及重試控制:失敗重試及限制最大重試次數(shù)或一定時(shí)間范圍內(nèi)的重試次數(shù)
-
請(qǐng)求有效期限:如果請(qǐng)求返還超時(shí),則丟棄,不做進(jìn)一步處理
1.1.3 實(shí)時(shí)了解系統(tǒng)狀態(tài)
我們需要實(shí)時(shí)的知道服務(wù)之間的調(diào)用關(guān)系、某個(gè)典型服務(wù)當(dāng)前的負(fù)載、失敗是否在預(yù)期之內(nèi)、如果服務(wù)掛了系統(tǒng)如何表現(xiàn)等??偟膩碚f,運(yùn)營(yíng)一個(gè)微服務(wù)平臺(tái),除了微服務(wù)本身,利用指標(biāo)類數(shù)據(jù)、日志、追蹤來把握整個(gè)系統(tǒng)的全局是必不可少的一環(huán)。
1.2 傳統(tǒng)的解決方案:應(yīng)用程序庫(kù)
早期的時(shí)候,為了解決如上的問題,業(yè)界一般采用應(yīng)用程序庫(kù)(如下),以方便開發(fā)人員快速地開發(fā)和實(shí)現(xiàn)非功能性的需求,但帶來的壞處是應(yīng)用程序必須和某個(gè)語言綁定。
-
Hystrix:用于短路及限流
-
Ribbon:用于客戶端負(fù)載均衡
-
Eureka:服務(wù)注冊(cè)和發(fā)現(xiàn)
-
Zuul:動(dòng)態(tài)服務(wù)代理
1.3 現(xiàn)代的解決方案:服務(wù)網(wǎng)格
服務(wù)網(wǎng)格是一種透明的、獨(dú)立于程序之外的、用于處理網(wǎng)絡(luò)通信的分布式基礎(chǔ)設(shè)施,它由數(shù)據(jù)平面和控制平面所組成,如下圖所示:
微服務(wù)架構(gòu)集成服務(wù)網(wǎng)格后,對(duì)日志收集和監(jiān)控也帶來了進(jìn)一步要求;分析上述拓?fù)鋱D,我們需要收集對(duì)應(yīng)的Istio Proxy日志及進(jìn)一步做關(guān)聯(lián)分析,經(jīng)過了解,這也是鴻鵠平臺(tái)所擅長(zhǎng)的。
二、解決方案
2.1 系統(tǒng)架構(gòu)
相比于上一篇《利用Vector和鴻鵠搭建微服務(wù)應(yīng)用的可觀測(cè)性平臺(tái)》, 此方案引入了Istio服務(wù)網(wǎng)格的概念,除了采集應(yīng)用程序本身的日志之外,需要采集Istio Ingress Gateway和Istio Proxy的日志,以得到對(duì)全局服務(wù)網(wǎng)格的洞察性。
2.2 數(shù)據(jù)接入
鴻鵠具備多種數(shù)據(jù)接入功能,內(nèi)置的Vector和Kafka數(shù)據(jù)接入功能,大大方便了企業(yè)收集數(shù)據(jù),導(dǎo)入鴻鵠分析平臺(tái)進(jìn)一步挖掘數(shù)據(jù)價(jià)值的便利性?;谝陨系牟杉到y(tǒng),具體操作步驟如下:
2.2.1 啟用鴻鵠數(shù)據(jù)收集接口
2.2.1.1 進(jìn)入:鴻鵠 -> 數(shù)據(jù)導(dǎo)入 -> 從外部數(shù)據(jù)源導(dǎo)入
2.2.1.2 配置Vector接口,選擇數(shù)據(jù)集范圍
2.2.1.3 選擇數(shù)據(jù)集和數(shù)據(jù)源類型,生成和下載Vector配置模版,以備后續(xù)配置Vector使用
2.2.2 配置及安裝Vector
按照Vector的設(shè)計(jì)(如上圖),Data Pipeline分為三個(gè)階段:確定數(shù)據(jù)源、對(duì)數(shù)據(jù)做轉(zhuǎn)換和數(shù)據(jù)匯集。以下是實(shí)際運(yùn)行的配置文件(考慮到信息安全性,對(duì)部分做了脫敏處理)。
這個(gè)配置主要包含了確定采集的數(shù)據(jù)源、數(shù)據(jù)如何被加工轉(zhuǎn)換(多行處理、如何進(jìn)一步解析和抽取數(shù)據(jù)、豐富數(shù)據(jù)以滿足鴻鵠的需求)和數(shù)據(jù)最終匯集到鴻鵠,相信大家不難理解。
有了Vector的配置文件,就可以安裝Vector了。本文的方案需要采集運(yùn)行在Kubernetes上的微服務(wù)的日志,Vector將會(huì)用Helm命令來安裝,具體命令如下:
如果需要詳細(xì)了解Vector Helm chart,可參考 Vector Helm Chart(https://github.com/vectordotdev/helm-charts/tree/develop/charts/vector)
2.3 數(shù)據(jù)加工
2.3.1 創(chuàng)建數(shù)據(jù)源
鴻鵠系統(tǒng)提供了常用的數(shù)據(jù)源類型,比如json、csv、nginx、syslog等,以方便用戶開箱即用地接入數(shù)據(jù)。本文提到的Istio Ingress Gateway網(wǎng)關(guān)本身是基于Envoy實(shí)現(xiàn)的,為了更好的說明后續(xù)步驟,讓我們首先來介紹下Istio Gateway日志的格式。
根據(jù)文檔 Envoy Access Log(https://istio.io/latest/docs/tasks/observability/logs/access-log/),默認(rèn)格式如下:
根據(jù)如上的信息,Envoy的日志包含了豐富的信息,為了后續(xù)方便分析和處理,需要單獨(dú)創(chuàng)建數(shù)據(jù)源,如下圖。
2.3.2 字段加工
字段加工是鴻鵠的核心功能,也就是在讀時(shí)模式下,對(duì)字段進(jìn)行進(jìn)一步抽取和豐富,以滿足各種業(yè)務(wù)部門對(duì)同一數(shù)據(jù)以不同視角分析的需要。那接下去以Envoy Access Log為例,看看鴻鵠是怎么做的。
2.3.2.1 打開高級(jí)搜索窗口
從搜索窗口可以看到,此數(shù)據(jù)包含266279條數(shù)據(jù),因?yàn)闆]有對(duì)數(shù)據(jù)進(jìn)行讀時(shí)抽取,共用0.9s時(shí)間。
2.3.2.2 點(diǎn)擊 “抽取新字段”,進(jìn)入字段抽取向?qū)ы撁?/strong>
2.3.2.3 編輯正則表達(dá)式,抽取所需的字段
選擇抽取規(guī)則為正則抽取,正則表達(dá)式如下圖所示
按向?qū)П4娉槿∫?guī)則,即可看到數(shù)據(jù)源類型增加了一條讀時(shí)抽取規(guī)則。
2.3.2.4 支持多重可持續(xù)抽取
鴻鵠系統(tǒng)支持多重可持續(xù)性抽取,也就是基于新字段的基礎(chǔ)上,可以再抽取再產(chǎn)生字段,比如拿UserAgent字段來說,可以再抽取,獲取user_agent_os、user_agent_os_version、user_agent_name、user_agent_version等新字段。能夠在讀時(shí)支持字段多重可持續(xù)抽取,鴻鵠在這塊應(yīng)該是屬于一枝獨(dú)秀的。
2.3.2.5 驗(yàn)證讀時(shí)抽取規(guī)則
打開高級(jí)搜索, 我們可以看到同樣的數(shù)據(jù)規(guī)模,搜索時(shí)間有一定的增加,但期望的字段已經(jīng)成功抽取,可以進(jìn)一步分析和形成所需儀表盤。
2.4 數(shù)據(jù)展示
2.4.1 查詢加速
前面數(shù)據(jù)加工部分,我們講述了如何利用鴻鵠的讀時(shí)建模機(jī)制來動(dòng)態(tài)抽取字段。在數(shù)據(jù)展示環(huán)節(jié),大概率會(huì)對(duì)同一數(shù)據(jù)源做搜索,這樣就會(huì)大概率降低頁面展現(xiàn)的效果。鴻鵠系統(tǒng)充分地考慮這一點(diǎn),提供了幾種機(jī)制來提高搜索加速。本文會(huì)比較細(xì)致的講述預(yù)存查詢功能。
創(chuàng)建預(yù)存查詢
進(jìn)入高級(jí)查詢 ?--> 查詢 --> 點(diǎn)擊“另存為” --> 選擇預(yù)存查詢, 注意紅框部分
從預(yù)存查詢中搜索
進(jìn)入高級(jí)查詢 ?--> 利用saved_search表函數(shù)從預(yù)存查詢中進(jìn)行查詢。
從結(jié)果來看,利用預(yù)存查詢,性能提高了4-5倍。
2.4.2 展示效果
三、鴻鵠價(jià)值
鴻鵠平臺(tái)提供了一整套從數(shù)據(jù)導(dǎo)入、二次加工及儀表盤快速生成的一整套解決方案,方便用戶能快速構(gòu)建監(jiān)控平臺(tái)。本文著重提到的幾個(gè)核心功能,圍繞數(shù)據(jù)工程師的日常工作,對(duì)數(shù)據(jù)收集、收據(jù)探索、數(shù)據(jù)展示做了高度封裝和抽象,減少了使用者的門檻。
3.1 技術(shù)優(yōu)勢(shì)
自建數(shù)據(jù)源類型:在大數(shù)據(jù)領(lǐng)域,存在各種半結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù),每一個(gè)數(shù)據(jù)源類型,對(duì)應(yīng)的處理邏輯不盡相同。鴻鵠允許用戶非常方便地定義特有的數(shù)據(jù)源類型,且對(duì)每個(gè)類型可以靈活定義ingest time和search time的抽取規(guī)則。
讀時(shí)模式:滿足了基于同一數(shù)據(jù)源,不同視角審視的需求。大大地減輕了數(shù)據(jù)采集端的復(fù)雜度。功能上,鴻鵠可滿足不同機(jī)制的抽取規(guī)則,從簡(jiǎn)單的JSON規(guī)則、鍵值對(duì)規(guī)則到復(fù)雜的正則抽取規(guī)則。
查詢加速:在數(shù)據(jù)展示階段,考慮到用戶大概率會(huì)對(duì)同一數(shù)據(jù)同時(shí)做查詢,必然會(huì)犧牲性能的前提下,鴻鵠提供了一系列加速查詢的方案,以提高頁面展示的效果。
3.2 應(yīng)用價(jià)值
精確定位問題,提高開發(fā)效率:比如本次使用中,我們對(duì)瀏覽器類型做了分析,發(fā)現(xiàn)某一個(gè)瀏覽器類型名字有錯(cuò)誤,匯報(bào)給開發(fā)人員后,結(jié)合鴻鵠的日志,開發(fā)人員很快定位了問題,及時(shí)修復(fù)了客戶端類型名字錯(cuò)誤。
即時(shí)監(jiān)控Envoy網(wǎng)關(guān), DevOps團(tuán)隊(duì)能精確的掌握進(jìn)出站的相關(guān)流量指標(biāo)和訪問異常信息。
四、期待的改善
本文體驗(yàn)了鴻鵠幾個(gè)高級(jí)核心功能,能夠非常方便地滿足業(yè)務(wù)的需求。從個(gè)人角度來看,以下幾個(gè)部分覺得可以改善以提高用戶的友好性:
-
數(shù)據(jù)抽取正則規(guī)則:自動(dòng)劃取字段和手工輸入,這兩個(gè)功能可以合并在一個(gè)功能頁面上,減少用戶切換操作頁面。
-
數(shù)據(jù)抽取正則表達(dá)式性能:鴻鵠社區(qū)中提供了高效正則表達(dá)式匹配文檔來指導(dǎo)用戶更高效地使用正則來做數(shù)據(jù)加工,避免正則性能陷阱。對(duì)于用戶,我們期待的更多。非常期望,在將來的版本中,鴻鵠本身就可以對(duì)正則進(jìn)行分析,以輔助用戶修正性能不高的表達(dá)式,從而提供使用的友好性。文章來源:http://www.zghlxwxcb.cn/news/detail-622710.html
-
更多的案例支撐加速查詢的最佳實(shí)踐:物化試圖和預(yù)存查詢是鴻鵠系統(tǒng)提供兩個(gè)加速查詢的高級(jí)功能,在初次使用過程中,比較難以取舍該用哪個(gè)方案來加速查詢。相信隨著社區(qū)的發(fā)展,會(huì)有越來越多的實(shí)際案例來指導(dǎo)用戶在這個(gè)環(huán)節(jié)的最佳實(shí)踐。文章來源地址http://www.zghlxwxcb.cn/news/detail-622710.html
到了這里,關(guān)于利用鴻鵠可觀測(cè)性監(jiān)控Istio Ingress網(wǎng)關(guān)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!