<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基于 eBPF 的 Kubernetes 可觀測(cè)實(shí)踐

          共 4627字,需瀏覽 10分鐘

           ·

          2022-08-01 08:24


          可觀測(cè)是為了解決問(wèn)題,所以在聊可觀測(cè)之前,應(yīng)先對(duì)問(wèn)題排查的普適原則進(jìn)行了解。


          背景介紹

          Cloud Native

          問(wèn)題排查的原則


          以排查系統(tǒng)問(wèn)題為例,要理解系統(tǒng),要先關(guān)注基礎(chǔ)知識(shí),理解編程語(yǔ)言基本的計(jì)算機(jī)科學(xué)知識(shí),關(guān)注系統(tǒng)大圖比如架構(gòu)部署和重大流程,要關(guān)注運(yùn)行細(xì)節(jié),要對(duì)核心功能的算法和數(shù)據(jù)結(jié)構(gòu)了然于心,還要關(guān)注系統(tǒng)的運(yùn)維工具,能夠了解發(fā)布、回滾和監(jiān)控。
          在理解的基礎(chǔ)上,還要能夠復(fù)現(xiàn)問(wèn)題,主要關(guān)注問(wèn)題發(fā)生的觸發(fā)條件以及問(wèn)題發(fā)生時(shí)數(shù)據(jù)現(xiàn)場(chǎng)的保留,包含指標(biāo)、鏈路、日志、事件等。
          有了現(xiàn)場(chǎng)再加之對(duì)于系統(tǒng)的,才可以定位問(wèn)題。通過(guò)現(xiàn)場(chǎng)保留的數(shù)據(jù),進(jìn)行關(guān)聯(lián)分析;基于理解,可以快速用二分定位到根因。在定位的過(guò)程中,尤其要關(guān)注變更,因?yàn)橛写罅康南到y(tǒng)問(wèn)題是由變更導(dǎo)致的。
          確定根因后再進(jìn)行修復(fù),既要治標(biāo)也要治本,并且要充分驗(yàn)證,確保不引入新的問(wèn)題。
          以上為問(wèn)題排查的普適原則,它不僅適用于系統(tǒng)問(wèn)題的排查,也可以應(yīng)用到生活的方方面面。
          而可觀測(cè)使得問(wèn)題排查的過(guò)程更加高效、穩(wěn)定、低成本。它能夠幫助我們理解系統(tǒng),出現(xiàn)問(wèn)題的時(shí)候能夠留下足夠多的現(xiàn)場(chǎng),能夠使數(shù)據(jù)之間很方便地進(jìn)行關(guān)聯(lián),幫助我們做二分的關(guān)聯(lián)分析,最終還可以驗(yàn)證修復(fù)是否正確。

          Kubernetes 可觀測(cè)挑戰(zhàn)


          復(fù)雜度是恒定的,它不會(huì)消失,只會(huì)轉(zhuǎn)移。我們構(gòu)建的編程語(yǔ)言、編程框架、容器操作系統(tǒng)都只是將復(fù)雜度關(guān)在合適的地方。如果一切運(yùn)行正常,皆大歡喜;而一旦出現(xiàn)問(wèn)題,就是災(zāi)難。復(fù)雜度不斷下沉的趨勢(shì)使得可觀測(cè)面臨了很大的壓力。Kubernetes 的流行使得微服務(wù)架構(gòu)十分普及,多語(yǔ)言、多通信協(xié)議成為常態(tài),這也在另一方面帶來(lái)了挑戰(zhàn)。

          挑戰(zhàn) 1:端到端觀測(cè)復(fù)雜度上升,埋點(diǎn)成本居高不下。然而這只是冰山一角,有大量能力下沉到 Kubernetes 管控層、容器運(yùn)行層、網(wǎng)絡(luò)和操作系統(tǒng)層面,這些基礎(chǔ)設(shè)施能力的下沉帶來(lái)了很大挑戰(zhàn)。
          挑戰(zhàn) 2:由于關(guān)注點(diǎn)的分離,使得應(yīng)用問(wèn)題與底層問(wèn)題無(wú)法自頂向下形成關(guān)聯(lián)。
          挑戰(zhàn) 3:雖然有很多工具,但是上下文缺失、數(shù)據(jù)散落,導(dǎo)致無(wú)法通過(guò)這些數(shù)據(jù)很好地理解應(yīng)用,因?yàn)楝F(xiàn)場(chǎng)的缺失無(wú)法關(guān)聯(lián),而使問(wèn)題排查效率低下。
          可觀測(cè)需要有統(tǒng)一的技術(shù)來(lái)解決自身的復(fù)雜度。


          基于 eBPF 的可觀測(cè)實(shí)踐分享

          Cloud Native

          eBPF 介紹


          從一開(kāi)始,內(nèi)核就是可觀測(cè)的絕佳位置,然而由于效率和安全問(wèn)題一直無(wú)法實(shí)現(xiàn)。經(jīng)過(guò)多年發(fā)展,eBPF 技術(shù)為可觀測(cè)打開(kāi)了新的大門。
          eBPF 是一項(xiàng)可以安全地在內(nèi)核中運(yùn)行沙盒程序的技術(shù),無(wú)需修改代碼即可在內(nèi)核用戶態(tài)程序事件發(fā)生時(shí)運(yùn)行。它具備以下特性:
          無(wú)侵入特性:觀測(cè)成本極低,應(yīng)用無(wú)需修改任何代碼,也無(wú)需重啟進(jìn)程。
          動(dòng)態(tài)可編程性:無(wú)需重啟探針,動(dòng)態(tài)下發(fā) eBPF 腳本即可修改探針側(cè)的邏輯。
          高性能:自帶 JIT 編譯,使探針能夠獲得內(nèi)核本地運(yùn)行的效率。
          安全:verifier 機(jī)制限制了 eBPF 腳本能夠訪問(wèn)的內(nèi)核函數(shù),保證內(nèi)核運(yùn)行的穩(wěn)定。
          除了這些令人振奮的特性外,eBPF 的使用流程也非常方便。以監(jiān)控、應(yīng)用、性能為例,只需要加載編譯 eBPF 程序監(jiān)聽(tīng)網(wǎng)絡(luò)的內(nèi)核事件,解析網(wǎng)絡(luò)協(xié)議,然后聚合成指標(biāo),輸出 Trace 即可。
          eBPF 得到了很多大公司的支持,發(fā)展十分迅猛。過(guò)去一年,阿里云可觀測(cè)團(tuán)隊(duì)基于 eBPF 技術(shù)構(gòu)建了統(tǒng)一可觀測(cè)平臺(tái)。其架構(gòu)如下圖:

           基于 eBPF 的統(tǒng)一可觀測(cè)平臺(tái)架構(gòu)
          最底層是數(shù)據(jù)采集層,主要采用 Tracepoints、Kprobre、eBPF 函數(shù)抓取相關(guān)系統(tǒng)調(diào)用,關(guān)聯(lián)進(jìn)程容器信息,形成原始事件,并通過(guò) eBPF 和 sysdig 的結(jié)合支持多內(nèi)核版本。同時(shí)為了解決事件爆炸的問(wèn)題,引入了事件過(guò)濾和高性能事件傳輸機(jī)制。
          往上是數(shù)據(jù)處理層。用戶態(tài)獲取到原始事件后,首先進(jìn)行協(xié)議的解析,生成指標(biāo)、鏈路、日志等數(shù)據(jù),過(guò)程中也會(huì)對(duì)信息做收斂。然后填充元信息,比如 K8s 信息填充或自定義應(yīng)用信息填充,最后監(jiān)控?cái)?shù)據(jù)會(huì)通過(guò) OpenTelemetry Collector 輸出。引入 OpenTelemetry Collector 主要為了支持多種數(shù)據(jù)類型以及多數(shù)據(jù)傳輸通道,支持將監(jiān)控?cái)?shù)據(jù)寫入用戶指定的存儲(chǔ)。
          再往上是數(shù)據(jù)存儲(chǔ)層,默認(rèn)情況下,指標(biāo)會(huì)使用 influxDB 存儲(chǔ)在 Prometheus,鏈路和日志使用 SLS 存儲(chǔ)在 Trace。
          最上是數(shù)據(jù)服務(wù)層,通過(guò) ARMS 的前端以及 Grafana 最終呈現(xiàn)給用戶多種多樣的可觀測(cè)服務(wù)。

          如何進(jìn)行無(wú)侵入式多語(yǔ)言的協(xié)議解析


          ARMS 可觀測(cè)團(tuán)隊(duì)關(guān)注 eBPF 在應(yīng)用層的應(yīng)用,通過(guò)監(jiān)聽(tīng)網(wǎng)絡(luò)內(nèi)核調(diào)用,構(gòu)建連接跟蹤,將傳輸?shù)木W(wǎng)絡(luò)包進(jìn)行協(xié)議分析,得到應(yīng)用層面的請(qǐng)求響應(yīng),最終得以無(wú)侵入式地支持多語(yǔ)言場(chǎng)景下請(qǐng)求數(shù)、響應(yīng)時(shí)間、錯(cuò)誤數(shù)、黃金指標(biāo)的監(jiān)控。
          目前我們支持 HTTP、 Redis 、DNS、Kafka、MySQL、gRPC 、http2 等協(xié)議,支持的協(xié)議列表也在不斷擴(kuò)充中。

          線上問(wèn)題與解決方法

          經(jīng)過(guò)一年多的生產(chǎn)實(shí)踐,遇到最多的問(wèn)題主要有以下四個(gè):
          第一,內(nèi)核版本適配問(wèn)題。eBPF 在內(nèi)核版本 4.14 以上才有較為成熟的支持。但是線上依然存在很多老的內(nèi)核版本,這部分需要使用 sysdig 進(jìn)行支持。高版本在 core 不成熟的情況下,使用動(dòng)態(tài)下載內(nèi)核圖文件以及動(dòng)態(tài)編譯的方式進(jìn)行支持。
          第二,內(nèi)核事件爆炸。傳統(tǒng)的監(jiān)聽(tīng) Tracepoints、Kprobre 會(huì)產(chǎn)生巨大的事件,給探針的性能造成巨大壓力。為了解決這個(gè)問(wèn)題,我們引入了事件過(guò)濾機(jī)制,只處理網(wǎng)絡(luò)調(diào)用事件,同時(shí)優(yōu)化事件傳輸序列化,達(dá)到高性能事件傳輸?shù)哪康摹?/span>
          第三,在事件的消費(fèi)側(cè),協(xié)議解析效率低下。為此我們優(yōu)化了高性能解析算法,比如可以減少分析的字節(jié)數(shù),優(yōu)化更多的匹配算法提升解析的效率。同時(shí)還使用了多線程內(nèi)存復(fù)用等工程手段提升協(xié)議解析效率。
          第四,指標(biāo)時(shí)間線爆炸。所有事件最終都會(huì)聚合為指標(biāo)、鏈路和日志,其中指標(biāo)方面由于個(gè)別維度發(fā)散,會(huì)對(duì)存儲(chǔ)的穩(wěn)定性造成極大的影響。因此,我們支持在寫指標(biāo)的時(shí)候進(jìn)行維度收斂,比如每個(gè)維度的基數(shù)不得超過(guò) 100,超過(guò)后將收斂成星號(hào),代表通用的收斂標(biāo)記。此外,還在查詢側(cè)進(jìn)行了優(yōu)化,主要做了精度的降級(jí)。


          統(tǒng)一可觀測(cè)交互界面

          Cloud Native

          統(tǒng)一告警


          eBPF 技術(shù)的無(wú)侵入性以及多語(yǔ)言支持的特性使得開(kāi)箱即用成為了可能。基于此,阿里云可觀測(cè)團(tuán)隊(duì)開(kāi)始構(gòu)建統(tǒng)一可觀測(cè)界面。

          首先是統(tǒng)一告警。接入阿里云 eBPF 監(jiān)控,我們?cè)O(shè)計(jì)了一套默認(rèn)的告警模板,涵蓋了應(yīng)用層、 K8s 管控層、基礎(chǔ)設(shè)施層和云服務(wù)層,提供了開(kāi)箱即用的幫助用戶發(fā)現(xiàn)問(wèn)題的能力。

          統(tǒng)一的關(guān)聯(lián)分析邏輯


          有了 eBPF 保存現(xiàn)場(chǎng)數(shù)據(jù),加上告警系統(tǒng)告知存在問(wèn)題,后續(xù)應(yīng)如何統(tǒng)一進(jìn)行關(guān)聯(lián)分析,找到根因?
          我們認(rèn)為需要有一個(gè)界面來(lái)承載關(guān)聯(lián)分析邏輯。它應(yīng)當(dāng)目標(biāo)明確,比如要解決容量規(guī)劃問(wèn)題、成本消耗問(wèn)題還是應(yīng)用性能問(wèn)題;它應(yīng)當(dāng)內(nèi)容豐富,包含解決問(wèn)題需要的所有內(nèi)容,比如指標(biāo)、鏈路、日志、事件、問(wèn)題的影響面、關(guān)聯(lián)關(guān)系等;它應(yīng)當(dāng)具備非常清晰的使用路徑,能夠回答當(dāng)前是否有問(wèn)題,未來(lái)是否有問(wèn)題、問(wèn)題的影響是什么、問(wèn)題的根因是什么、用戶能做什么等,以此一步步引導(dǎo)用戶解決問(wèn)題。

          統(tǒng)一 Grafana 大盤


          基于以上設(shè)想,我們推出了統(tǒng)一的 Grafana 大盤。它符合關(guān)聯(lián)分析邏輯,無(wú)論是全局還是特定實(shí)體都有總覽,能夠發(fā)現(xiàn)問(wèn)題細(xì)節(jié),能夠排查問(wèn)題;它包含日志、事件、指標(biāo)等多數(shù)據(jù)源,以告警異常閾值為驅(qū)動(dòng),整個(gè)大盤可以交互、點(diǎn)擊跳轉(zhuǎn),可以定位根因,涵蓋了 K8s 集群最核心的資源類型。

          統(tǒng)一拓?fù)鋱D


          我們也推出了統(tǒng)一的拓?fù)浯髨D,它具備拓?fù)涓兄?、依賴分析、流量監(jiān)控、上下文關(guān)聯(lián)等特性,可以按維度篩選節(jié)點(diǎn)和邊,構(gòu)建業(yè)務(wù)語(yǔ)義化的視圖。

          Demo 演示:基于 eBPF 的統(tǒng)一交互頁(yè)面

          在容器服務(wù) ACK 進(jìn)入一個(gè)集群后,點(diǎn)擊運(yùn)維管理,進(jìn)入集群拓?fù)涔δ茼?yè)面。如果沒(méi)有安裝 eBPF 探針則會(huì)提示安裝,安裝完成后開(kāi)箱即用,可以獲得整個(gè)集群的流量拓?fù)洹?/span>

          頁(yè)面包含了 deployment、deamonset、和 statfulset 之間的流量關(guān)系。點(diǎn)擊節(jié)點(diǎn)可以看到它對(duì)外提供的應(yīng)用性能,也可以查看節(jié)點(diǎn)的上下游。通過(guò)上下游的查看,可以快速檢查它是否按照預(yù)定的架構(gòu)運(yùn)行。
          此外,也可以點(diǎn)擊邊進(jìn)行查看,比如可以看到 MySQL 的 QPS 以及響應(yīng)時(shí)間等。
          除了查看指標(biāo),還可以查看詳情,比如查看 SQL 語(yǔ)句以及網(wǎng)絡(luò)耗時(shí),比如請(qǐng)求發(fā)到對(duì)端用了多久、對(duì)端處理用了多久、響應(yīng)的內(nèi)容下載耗時(shí)多久等,可以快速定位問(wèn)題所在。同時(shí)還提供了節(jié)點(diǎn)過(guò)濾的能力,可以快速過(guò)濾出用戶感興趣的節(jié)點(diǎn),同時(shí)也可以搜索對(duì)應(yīng)的節(jié)點(diǎn)。
          Grafana 統(tǒng)一的大盤為 1+N 的模式。1是指集群的全局大盤提供了整個(gè)集群最核心的資源總覽,包含事件,可以快速查看各類事件的個(gè)數(shù)及詳情,可以查看節(jié)點(diǎn)是否健康、無(wú)狀態(tài)應(yīng)用 deployment 是否健康以及有狀態(tài)應(yīng)用、deamonset 等。
          每一個(gè)特定資源總覽的結(jié)構(gòu)也是一致的,包含“總”和“分”。“總”是對(duì)整個(gè)集群進(jìn)行概括的總結(jié),可以快速通過(guò)閾值確認(rèn)是否有問(wèn)題,有問(wèn)題的閾值會(huì)用鮮艷的顏色標(biāo)出。比如上圖可以看出有 1 個(gè)節(jié)點(diǎn)的 CPU 請(qǐng)求率過(guò)高,而具體哪一個(gè)節(jié)點(diǎn)的請(qǐng)求率過(guò)高,則由“分”負(fù)責(zé)查找,通過(guò)請(qǐng)求率排序,快速找到問(wèn)題節(jié)點(diǎn)。
          上圖顯示集群級(jí)別有兩個(gè) Pod 不是 ready 狀態(tài)。通過(guò)對(duì) phase 進(jìn)行排序快速獲取兩個(gè)處于 pending 狀態(tài)的 Pod。也可以看到有 15 個(gè) Pod 在過(guò)去 24 小時(shí)存在重啟行為,進(jìn)行排序后即可快速找到這些 Pod。
          可以點(diǎn)擊具體節(jié)點(diǎn),查看其 CPU 請(qǐng)求率的 top 10 ,點(diǎn)擊查看詳情后可在系統(tǒng)資源里進(jìn)行查看,以判斷請(qǐng)求量是否合理,并進(jìn)行修正。
          由此可見(jiàn),Grafana 大盤具備很強(qiáng)的交互能力和邏輯。
          前端應(yīng)用的每一個(gè) deployment 或資源詳情頁(yè)也具備排查邏輯。概覽中展示了管控層、CPU、網(wǎng)絡(luò)、內(nèi)存等情況,一眼便能知曉系統(tǒng)是否存在問(wèn)題,可以快速查看問(wèn)題所在。
          與此同時(shí),大盤還集成了日志以及 7 層的應(yīng)用性。
          以上能力全部是基于 eBPF 的無(wú)侵入性提供的開(kāi)箱即用的能力。


          總結(jié)與展望

          Cloud Native

          總結(jié)


          阿里云可觀測(cè)團(tuán)隊(duì)構(gòu)建了 kubernetes 統(tǒng)一監(jiān)控,無(wú)侵入式地提供多語(yǔ)言、應(yīng)用性能黃金指標(biāo),支持多種協(xié)議,結(jié)合 Kubernetes 管控層與網(wǎng)絡(luò)系統(tǒng)層監(jiān)控,提供全棧一體式的可觀測(cè)體驗(yàn)。通過(guò)流量拓?fù)洹㈡溌?、資源的關(guān)系,可進(jìn)行關(guān)聯(lián)分析,進(jìn)一步提升在 Kubernetes 環(huán)境下排查問(wèn)題的效率。

          展望


          未來(lái),阿里云可觀測(cè)團(tuán)隊(duì)將進(jìn)一步挖掘 eBPF 全覆蓋、無(wú)侵入、可編程的特性,在以下三個(gè)方面持續(xù)發(fā)力:

          第一,可擴(kuò)展 APM,簡(jiǎn)稱 eAPM。圍繞 APM 不斷擴(kuò)展邊界,解決其侵入每種語(yǔ)言都需要單獨(dú)埋點(diǎn)的問(wèn)題,解決在應(yīng)用層面看不到的底層黑盒問(wèn)題,包括以下幾個(gè)方面:
          1. 無(wú)侵入式的多語(yǔ)言性能監(jiān)控。
          2. 無(wú)侵入式的分布式鏈路追蹤。
          3. 應(yīng)用請(qǐng)求粒度的系統(tǒng)與網(wǎng)絡(luò)分析。
          第二,提供工具,針對(duì)包括 tracing、profiling、動(dòng)態(tài)網(wǎng)絡(luò)包跟蹤以及內(nèi)核事件在用戶態(tài)進(jìn)行處理的開(kāi)發(fā)框架進(jìn)行優(yōu)化。
          第三, 實(shí)現(xiàn) eBPF 增強(qiáng)的內(nèi)置指標(biāo)、鏈路和日志,主要包括對(duì)應(yīng)用協(xié)議更多的支持以及高階的系統(tǒng)指標(biāo)和網(wǎng)絡(luò)指標(biāo)。
          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  爆操熟妇在线视频 | 蜜桃传媒一区二区亚洲AV | 中文字幕日本欧美 | 成人看片网站 | 色欲av伊人网在线 |