成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解碼eBPF可觀測性:eBPF如何改變我們所知的觀測性

開發(fā)
讓我們來看看eBPF——這項技術到底是什么,它如何影響觀測性,它與現(xiàn)有的觀測性實踐有什么區(qū)別,未來可能會發(fā)生什么變化?

在過去的兩年里,云原生社區(qū)一直在熱烈討論eBPF。eBPF曾是KubeCon、eBPF Days和eBPF Summit的主題,并且越來越受歡迎。像Google和Netflix這樣的公司多年來一直在使用eBPF,新的用例也不斷涌現(xiàn)。特別是在觀測性方面,eBPF被認為將是一個重大改變。

所以讓我們來看看eBPF——這項技術到底是什么,它如何影響觀測性,它與現(xiàn)有的觀測性實踐有什么區(qū)別,未來可能會發(fā)生什么變化?

什么是eBPF?

eBPF是一種編程框架,允許我們在Linux內核中安全地運行沙盒化的程序,而無需更改內核代碼。

它最初是為Linux開發(fā)的(而且直到今天,這項技術在Linux上最成熟),但微軟正在迅速發(fā)展eBPF在Windows上的實現(xiàn)[1]。

eBPF程序從設計上來說非常高效和安全——內核會對其進行驗證,以確保它們不會危及操作系統(tǒng)的穩(wěn)定性或安全性。

為什么eBPF如此重要?

要理解這一點,我們需要了解用戶空間和內核空間。

用戶空間是所有應用程序運行的地方。內核空間位于用戶空間和物理硬件之間。用戶空間中的應用程序無法直接訪問硬件。相反,它們通過系統(tǒng)調用與內核通信,然后內核再訪問硬件。

所有內存訪問、文件讀寫和網(wǎng)絡流量都經(jīng)過內核。內核還管理并發(fā)進程。

基本上,所有操作都通過內核進行(見下圖)。

而eBPF提供了一種安全的、高效的擴展內核功能的方式。

用戶空間和內核空間

從歷史上看,出于顯而易見的原因,更改內核源代碼或操作系統(tǒng)層的任何內容一直都非常困難。

Linux內核有3000萬行代碼[2],任何更改要從一個想法變成廣泛可用的東西需要數(shù)年時間。首先,Linux社區(qū)必須同意它。然后,它必須成為官方Linux發(fā)布的一部分。然后,在幾個月后,它會被Red Hat和Ubuntu等發(fā)行版采用,然后傳播到更廣泛的用戶。

從技術上講,一個人可以將內核模塊加載到內核中,直接進行更改,但這是非常高風險的,涉及復雜的內核級編程,因此幾乎普遍不建議這樣做。

eBPF出現(xiàn)并解決了這個問題,提供了一種在內核中附加和運行程序的安全和高效機制。

讓我們看看eBPF如何確保安全性和性能。

高度安全

  • 嚴格的驗證 — 在任何eBPF程序加載到內核之前,它都會由eBPF驗證器進行驗證,以確保代碼絕對安全——例如,沒有硬循環(huán)、無效的內存訪問、不安全的操作。
  • 沙盒化 — eBPF程序在內核內部的內存隔離沙盒中運行,與其他內核組件分開。這可以防止未經(jīng)授權的訪問內核內存、數(shù)據(jù)結構和內核源代碼。
  • 有限的操作 — eBPF程序通常必須使用C語言的一個小子集來編寫,即受限指令集。這限制了eBPF程序可以執(zhí)行的操作,降低了安全漏洞的風險。

高性能 / 輕量級

  • 以本機機器碼運行 — eBPF程序在CPU上以本機機器指令的形式運行。這導致更快的執(zhí)行和更好的性能。?沒有上下文切換 — 常規(guī)應用程序會在用戶空間和內核空間之間定期切換上下文,這會消耗資源。eBPF程序,因為它們在內核層運行,可以直接訪問內核數(shù)據(jù)結構和資源。
  • 事件驅動 — eBPF程序通常僅在特定內核事件發(fā)生時運行,而不是一直運行。這最小化了開銷。
  • 針對硬件進行優(yōu)化 — eBPF程序在執(zhí)行之前由內核的即時編譯器(JIT)編譯為機器代碼,因此代碼針對特定的硬件進行了優(yōu)化。

因此,eBPF為內核編程提供了一種安全且高效的鉤子。考慮到一切都通過內核,這為我們帶來了以前無法實現(xiàn)的新可能性。

為什么現(xiàn)在才如此重要?

eBPF周圍的技術在很長一段時間內得以發(fā)展,已經(jīng)有大約30年了。

在過去的7-8年中,eBPF已被一些大型公司大規(guī)模使用,現(xiàn)在我們正在進入一個使用eBPF變得更加主

流的時代。請參閱eBPF的共同創(chuàng)作者之一、Linux的共同維護者Alexei Starovoitov的這個視頻[3],了解eBPF的發(fā)展歷程。

eBPF — 簡要歷史

  • 1993年-來自勞倫斯伯克利國家實驗室的一篇論文[4]探討了使用內核代理進行數(shù)據(jù)包過濾。這就是BPF(“伯克利數(shù)據(jù)包過濾器”)這個名字的由來。
  • 1997年 — BPF正式作為Linux內核的一部分引入(版本2.1.75)。
  • 1997–2014年 — 添加了一些功能,以改進、穩(wěn)定和擴展BPF的功能。
  • 2014年 — 引入了重要的更新,稱為“擴展伯克利數(shù)據(jù)包過濾器”(eBPF)。這個版本對BPF技術進行了重大改進,使其更廣泛可用,因此稱之為“擴展”。

之所以說這個發(fā)布很重要,是因為它使得擴展內核功能變得容易。

程序員可以更多或更少地像編寫常規(guī)應用程序一樣編寫代碼,而周圍的eBPF基礎設施會處理低級驗證、安全性和效率問題。

eBPF的周圍支持生態(tài)系統(tǒng)和腳手架使這成為可能(見下圖)。

來源:https://ebpf.io/what-is-ebpf/

更好的是,eBPF程序可以在不重新啟動的情況下加載到內核中,并且可以隨時卸載。

所有這些突然使得廣泛采用和應用成為可能。

在生產系統(tǒng)中的廣泛應用

eBPF的受歡迎程度在過去的7-8年中迅速增長,許多大型公司在規(guī)模生產系統(tǒng)中使用它。

  • 到2016年,Netflix廣泛使用eBPF進行跟蹤。Brendan Gregg[5]實現(xiàn)了它,他在基礎設施和運維領域被廣泛認為是eBPF的權威人士。
  • 2017年 — Facebook開源了他們基于eBPF的負載均衡器Katran[6]。自2017年以來,每個訪問Facebook.com[7]的數(shù)據(jù)包都經(jīng)過了eBPF。
  • 2020年- Google將eBPF納入其Kubernetes提供的一部分。eBPF現(xiàn)在驅動著GKE的網(wǎng)絡、安全和可觀測性層[8]。到目前為止,企業(yè)中也有廣泛的采用,如Capital One[9]和Adobe[10]。
  • 2021年 — Facebook、Google、Netflix、Microsoft和Isovalent聯(lián)合宣布創(chuàng)建eBPF基金會[11]來管理eBPF技術的增長。

現(xiàn)在有成千上萬家公司使用eBPF,并且每年涌現(xiàn)出數(shù)百個eBPF項目,探索不同的用例。

eBPF現(xiàn)在是Linux內核中的一個獨立子系統(tǒng),并擁有廣泛的社區(qū)支持。這項技術本身也在不斷擴展,有了幾個新的添加。

那么,我們可以用eBPF做什么?

eBPF的最常見用途可以分為三個領域:

  • 網(wǎng)絡
  • 安全
  • 可觀測性

安全和網(wǎng)絡已經(jīng)看到了更廣泛的采用和應用,其中包括像Cilum[12]這樣的項目。相比之下,基于eBPF的可觀測性方案在其演進過程中還處于早期階段。

讓我們首先看看安全和網(wǎng)絡的用例。

(1) 安全

安全是eBPF的一個非常流行的用例。使用eBPF,程序可以觀察內核級別的一切情況,以高速處理事件以檢查意外行為,并比以前更快地發(fā)出警報。

例如 -

  • Google[13]使用eBPF進行大規(guī)模入侵檢測
  • Shopify[14]使用eBPF來實現(xiàn)容器安全

一些第三方安全產品[15]現(xiàn)在使用eBPF進行數(shù)據(jù)收集和監(jiān)視。

(2) 網(wǎng)絡

網(wǎng)絡是另一個廣泛應用的用例。位于eBPF層的位置允許全面監(jiān)測網(wǎng)絡可觀測性,例如完整網(wǎng)絡路徑的可見性,包括所有跳數(shù),以及源IP和目標IP。使用eBPF程序,可以處理高速網(wǎng)絡事件并在內核內直接操作網(wǎng)絡數(shù)據(jù)包,而開銷非常低。

這允許各種網(wǎng)絡用例,如負載平衡、DDoS防護、流量整形和服務質量(QoS)。

  • Cloudflare[16]使用eBPF檢測并防止DDoS攻擊,每秒處理1000萬個數(shù)據(jù)包[17]而不影響網(wǎng)絡性能。
  • Meta的基于eBPF的Katran[18]為Facebook的所有負載均衡進行處理

(3) 可觀測性

到目前為止,通過內核觀察一切并且eBPF提供了一種高性能和安全的方式來觀察一切,這使得eBPF在可觀察性方面非常有用。

讓我們更深入地探討可觀測性,看看這項技術的影響。

eBPF如何確切影響可觀測性?

為了探討這一點,讓我們離開eBPF的世界,進入可觀測性的世界,看看構成我們標準可觀測性解決方案的內容。

任何可觀測性解決方案都有四個主要組件:

1.數(shù)據(jù)收集 — 從應用程序和基礎設施獲取遙測數(shù)據(jù)2.數(shù)據(jù)處理 — 對收集的數(shù)據(jù)進行過濾、索引和計算3.數(shù)據(jù)存儲 — 數(shù)據(jù)的短期和長期存儲4.用戶體驗層 — 確定用戶如何使用數(shù)據(jù)

在這些組件中,eBPF影響的是(截至今天)僅僅是數(shù)據(jù)收集層 — 使用eBPF直接從內核收集遙測數(shù)據(jù)的簡便機制。

0*8zMD7h66uFLgBIJH.png

eBPF — 對可觀測性的影響

所以當我們說“eBPF可觀測性”時,我們實際上是指使用eBPF作為收集遙測數(shù)據(jù)的工具,而不是使用其他方法來進行儀器化。可觀測性解決方案的其他組件保持不變。

eBPF可觀測性的工作原理

為了充分理解eBPF可觀測性背后的機制,我們需要了解掛鉤(hooks)的概念。

正如我們前面所看到的,eBPF程序主要是事件驅動的,即每次發(fā)生特定事件時都會觸發(fā)它們。例如,每次進行函數(shù)調用時,都可以調用一個eBPF程序來捕獲一些用于可觀測性目的的數(shù)據(jù)。

  • 首先,這些掛鉤可以在內核空間或用戶空間。因此,eBPF可以用于監(jiān)視用戶空間應用程序以及內核級事件。
  • 其次,這些掛鉤可以是預定義的/靜態(tài)的,也可以在運行中動態(tài)插入到系統(tǒng)中(無需重新啟動!)

這四種不同的eBPF機制允許每一種(見下圖)

1*_e2Q4FEhTJhkK2nVYkiICw.png

用戶空間和內核空間的靜態(tài)和動態(tài)eBPF掛鉤:

  • 內核跟蹤點 — 用于掛接到由內核開發(fā)人員預定義的事件(使用TRACE_EVENT宏)
  • USDT — 用于掛接到應用程序代碼中由開發(fā)人員預定義的跟蹤點
  • Kprobes(內核探針) — 用于在運行時動態(tài)掛接到內核代碼的任何部分
  • Uprobes(用戶探針) — 用于在運行時動態(tài)掛接到用戶空間應用程序的任何部分

在內核空間中有許多預定義的掛鉤,可以輕松將eBPF程序附加到其中(例如,系統(tǒng)調用、函數(shù)入口/出口、網(wǎng)絡事件、內核跟蹤點)。類似地,在用戶空間中,許多語言運行時、數(shù)據(jù)庫系統(tǒng)和軟件堆棧會暴露出Linux BCC工具的預定義掛鉤,eBPF程序可以連接到這些掛鉤。

但更有趣的是kprobes和uprobes。如果生產中出現(xiàn)問題,我沒有足夠的信息,并且我希望在運行時動態(tài)添加儀表化,該怎么辦?這就是kprobes和uprobes允許強大的可觀測性的地方。

0*4BZtZLhHeUsGWSc1.png

eBPF kprobes 和 uprobes:

例如,使用uprobes,可以在不修改應用程序代碼的情況下在運行時掛接到應用程序內的特定函數(shù)。每當執(zhí)行該函數(shù)時,都會觸發(fā)一個eBPF程序以捕獲所需的數(shù)據(jù)。這允許像實時[19]調試這樣的令人興奮的可能性。

現(xiàn)在我們知道了eBPF可觀測性是如何工作的,讓我們來看看用例。

eBPF可觀測性用例

eBPF可用于幾乎所有常見的現(xiàn)有可觀測性用例,并且還提供了新的可能性。

  • 系統(tǒng)和基礎設施監(jiān)控
  • 應用程序性能監(jiān)控(APM)
  • 安全監(jiān)控
  • 故障排除

(1) 系統(tǒng)和基礎設施監(jiān)控

在這個領域,eBPF最常用于監(jiān)控Linux主機的性能和資源使用情況。

  • CPU和內存使用率
  • 硬盤和網(wǎng)絡性能
  • 進程活動和調度
  • 文件系統(tǒng)活動

eBPF程序可以輕松地在這些事件的發(fā)生時捕獲數(shù)據(jù),并將其發(fā)送到存儲后端,以便稍后分析。

(2) 應用程序性能監(jiān)控(APM)

eBPF也用于應用程序內部的性能監(jiān)控。例如,在Go應用程序中,可以使用uprobes掛接到某個特定函數(shù),以捕獲函數(shù)參數(shù)、返回值和執(zhí)行時間。這對于詳細分析應用程序性能問題非常有用。

(3) 安全監(jiān)控

eBPF在安全監(jiān)控方面也非常有用。它可以用于檢測惡意行為、網(wǎng)絡攻擊和異常事件。eBPF程序可以在內核和應用程序級別捕獲事件,并將其傳遞給安全信息和事件管理系統(tǒng),以進行進一步的分析和響應。

(4) 故障排除

eBPF還可以用于故障排除。它可以用于跟蹤應用程序崩潰、性能下降或其他問題的根本原因。eBPF程序可以捕獲關鍵性能指標、事件和上下文信息,以幫助診斷問題并進行修復。

實際示例

以下是一些eBPF可觀測性用例的實際示例:

  • Tracing和Profiling — 使用eBPF捕獲應用程序的性能數(shù)據(jù),例如函數(shù)調用、系統(tǒng)調用和內存分配,以識別瓶頸和優(yōu)化性能。
  • 網(wǎng)絡可觀測性 — 使用eBPF來監(jiān)視網(wǎng)絡流量、分析網(wǎng)絡包,并實施防火墻策略和負載平衡。
  • 容器監(jiān)控 — 在Kubernetes集群中,使用eBPF來監(jiān)控容器內部的資源使用情況、性能和問題。
  • 安全監(jiān)控 — 使用eBPF來檢測潛在的安全威脅,例如異常網(wǎng)絡活動、不尋常的系統(tǒng)調用和入侵嘗試。
  • 分布式跟蹤 — 使用eBPF捕獲應用程序的分布式跟蹤數(shù)據(jù),以分析請求的流經(jīng)整個系統(tǒng)的路徑,幫助診斷和優(yōu)化性能問題。

eBPF和傳統(tǒng)觀測性的比較

現(xiàn)在讓我們來比較eBPF可觀測性和傳統(tǒng)觀測性方法。

(1) 傳統(tǒng)觀測性

傳統(tǒng)的可觀測性方法通常基于以下原則:

  • 代理和代理集成 — 在目標系統(tǒng)中安裝代理,代理負責收集和傳輸遙測數(shù)據(jù)。這通常需要在每個目標系統(tǒng)上部署代理,而且代理也需要進行版本控制和維護。
  • 度量指標集成 — 需要配置和管理度量和日志指標的集成。這通常涉及到手動配置和更新,以確保適當?shù)闹笜撕腿罩緮?shù)據(jù)被采集。
  • 額外的開銷 — 代理需要在目標系統(tǒng)上運行,這可能會引入額外的開銷,例如CPU和內存消耗。
  • 局限性 — 傳統(tǒng)的可觀測性方法可能會受到系統(tǒng)復雜性和性能問題的限制,因為它們可能無法實時捕獲足夠的數(shù)據(jù)。
  • 安全性 — 代理可能會引入潛在的安全風險,因為它們在目標系統(tǒng)上運行并訪問敏感數(shù)據(jù)。

(2) eBPF可觀測性

與傳統(tǒng)觀測性方法相比,eBPF可觀測性具有以下優(yōu)勢:

  • 內核級別的可觀測性 — eBPF程序在內核級別運行,可以觀察系統(tǒng)的內部狀態(tài)和事件,無需在目標系統(tǒng)上運行代理。
  • 輕量級 — eBPF程序通常對系統(tǒng)資源的開銷很小,因為它們在內核級別運行,無需獨立的代理。
  • 安全性 — eBPF程序受到內核驗證器的強制約束,以確保它們不會引入安全風險。
  • 靈活性 — eBPF程序可以在運行時動態(tài)附加到系統(tǒng)中,無需重新啟動目標系統(tǒng),從而提供了更大的靈活性和可伸縮性。
  • 性能 — eBPF程序通常以本機機器指令運行,因此性能很高,可以實時捕獲大量數(shù)據(jù)。

盡管eBPF可觀測性具有許多優(yōu)勢,但它也具有一些挑戰(zhàn)和限制。首先,eBPF編程需要一定的學習曲線,因為它涉及到特定的編程模型和語言。此外,某些高級用例可能需要更復雜的eBPF程序。

未來展望

eBPF可觀測性已經(jīng)取得了巨大的進展,但仍有很多潛在的未來發(fā)展方向。

  • 更多的工具和庫 — 隨著eBPF的流行,可以預期會有更多的工具和庫出現(xiàn),用于簡化eBPF程序的開發(fā)、調試和部署。
  • 標準化 — 隨著eBPF的廣泛應用,可以期待出現(xiàn)更多的標準和最佳實踐,以幫助開發(fā)人員更輕松地使用eBPF進行可觀測性。
  • 更廣泛的集成 — eBPF將繼續(xù)集成到各種云計算和容器平臺中,以幫助用戶監(jiān)控和調試分布式應用程序。
  • 更多的可觀測性用例 — 隨著eBPF技術的不斷發(fā)展,可以預期將出現(xiàn)更多的創(chuàng)新可觀測性用例,幫助用戶更好地了解和優(yōu)化其應用程序和基礎設施的性能。

總之,eBPF可觀測性是一個充滿潛力的領域,已經(jīng)取得了令人印象深刻的進展。它提供了一種強大而靈活的方式來觀察和監(jiān)視應用程序和基礎設施的行為,有望在未來繼續(xù)發(fā)展和成熟。對于那些希望更好地了解和控制其系統(tǒng)的用戶來說,eBPF可觀測性是一個令人興奮的選擇。

引用鏈接

  • [1] eBPF在Windows上的實現(xiàn): https://github.com/microsoft/ebpf-for-windows
  • [2] 3000萬行代碼: https://www.phoronix.com/news/Linux-5.12-rc1-Code-Size
  • [3] 這個視頻: https://www.youtube.com/watch?v=DAvZH13725I
  • [4] 論文: https://www.tcpdump.org/papers/bpf-usenix93.pdf
  • [5] Brendan Gregg: https://www.brendangregg.com/
  • [6] Katran: https://engineering.fb.com/2018/05/22/open-source/open-sourcing-katran-a-scalable-network-load-balancer/
  • [7] Facebook.com: http://facebook.com/
  • [8] 網(wǎng)絡、安全和可觀測性層: https://cloud.google.com/blog/products/containers-kubernetes/bringing-ebpf-and-cilium-to-google-kubernetes-engine
  • [9] Capital One: https://www.youtube.com/watch?v=hwOpCKBaJ-w
  • [10] Adobe: https://www.youtube.com/watch?v=7UQ2CU6UEGY
  • [11] 創(chuàng)建eBPF基金會: https://isovalent.com/blog/post/2021-08-ebpf-foundation-announcement/
  • [12] Cilum: https://github.com/cilium/cilium
  • [13] Google: https://www.youtube.com/watch?v=l8jZ-8uLdVU
  • [14] Shopify: https://www.youtube.com/watch?v=6pVci31Mb6Q
  • [15] 第三方安全產品: https://www.traceable.ai/blog-post/ebpf-and-api-security-with-traceable
  • [16] Cloudflare: https://legacy.netdevconf.info/2.1/session.html?bertin=
  • [17] 1000萬個數(shù)據(jù)包: https://blog.cloudflare.com/how-to-drop-10-million-packets/
  • [18] Katran: https://engineering.fb.com/2018/05/22/open-source/open-sourcing-katran-a-scalable-network-load-balancer/
  • [19] 實時: https://www.cncf.io/blog/2021/11/17/debugging-with-ebpf-part-1-tracing-go-function-arguments-in-prod/
責任編輯:趙寧寧 來源: 小技術君
相關推薦

2021-06-23 10:00:46

eBPFKubernetesLinux

2023-12-21 18:52:39

2023-12-27 06:51:21

可觀測性系統(tǒng)數(shù)字體驗

2023-10-26 08:47:30

云原生數(shù)據(jù)采集

2023-05-18 22:44:09

2024-09-10 09:36:26

2023-11-01 06:55:05

人工智能可觀測性IT

2023-03-09 08:00:22

2023-09-20 16:11:32

云原生分布式系統(tǒng)

2023-08-21 09:37:57

MySQL工具MariaDB

2024-05-28 09:37:48

2022-08-16 07:49:48

云原生數(shù)據(jù)庫系統(tǒng)

2022-08-05 08:22:10

eBPFHTTP項目

2021-11-19 09:40:50

數(shù)據(jù)技術實踐

2023-03-30 16:30:08

可觀測云原生

2022-09-27 21:32:14

Dapr指標與日志

2024-01-15 05:55:33

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久夜视频 | 亚洲精品成人免费 | 成人h视频| 国产精品美女www | 欧洲国产精品视频 | 久久99国产精品 | 91免费电影 | 91 久久| 一级毛片视频 | 99久久久久| 日本中出视频 | 精品国产一区二区在线 | 成av人电影在线 | 91色视频在线观看 | 国产午夜精品一区二区三区嫩草 | 自拍视频在线观看 | 一级做a毛片 | 国产成人免费视频网站高清观看视频 | 亚洲永久在线 | 久久精品中文字幕 | 99热国产在线播放 | 亚洲va欧美va天堂v国产综合 | 精品一区在线免费观看 | 色综合久 | 男女在线网站 | 亚洲第1页| 成人一区二区在线 | 欧美一区二区三区在线播放 | 玖玖视频网 | 夜夜操操操 | 亚洲精品免费在线观看 | 亚洲一区亚洲二区 | 精品欧美黑人一区二区三区 | 天堂一区在线观看 | 成人午夜高清 | 日日操天天射 | www.久 | 99精品视频网 | 国产黄a一级 | 久久久久久免费精品一区二区三区 | 99精品99久久久久久宅男 |