簡介
觀測云采集器,是一款開源、一體式的資料采集 Agent,它提供全平臺作業系統支持,擁有全面資料采集能力,涵蓋基礎設施、指標、日志、應用性能、用戶訪問以及安全巡檢等各種場景,通過 eBPF 技術的引入,觀測云采集器實踐了網路傳輸層和應用層的部分協議的可觀測,
采集器架構
-
采集管理:配置加載模塊用于配置動態管理與采集插件的開啟關閉;監視器模塊用于查看采集器資源使用、采集插件開啟、資料處理器腳本作業狀況、采集器外部資料接入API 的回應與延遲資訊等
-
資料采集:采集器不僅可以通過內置插件進行資料采集,還能接入外部資料源,如云原生計算基金會下的可觀測專案 OTEL 的鏈路、指標資料等
-
資料清洗:在采集插件生成資料后和資料上傳之間的資料清洗層,用戶可以通過編程介入,如使用可編程資料處理器的語言撰寫腳本修改 Point ,使用內置函式分析提取網路資料中 IP 歸屬的城市、省份和國家到 Point 中;腳本支持動態加載和卸載
-
資料上傳:采集器對各種資料進行分類上傳,類別有日志、指標、鏈路、網路等,所有類別的資料均使用 Point 結構封裝,每一個 Point 代表一條資料,大致由四個部分:名字、 標簽字典、欄位字典以及時間戳構成 (其名字可以是指標名 cpu, 日志來源 nginx ,網路的 httpflow等)
-

eBPF 技術應用
觀測云采集器使用了三種型別的 eBPF 程式:socket filter、kprobe、uprobe,能夠抓取以太網幀、跟蹤與 socket 和 TCP/IP 協議堆疊相關的內核函式以及用戶共享庫函式,實作網路協議可觀測,下圖介紹觀測云采集器如何實踐 eBPF 技術進行主機上的網路觀測,
資料采集
觀測云采集器的 eBPF 網路觀測功能采集并生成了三個資料集,分別為 netflow, dnsflow 和 httpflow,其 tag 基本相同,以下是其 tag 名與描述,
Tag 名 描述 src_ip 源 IP dst_ip 目標 IP src_port 源埠 dst_port 目標埠 transport tcp 或 udp family IPv4 或 IPv6 direction 傳輸方向(incoming/outgoing) srciptype 源 IP 型別 (other/private/multicast) dstiptype 目標 IP 型別 (other/private/multicast) host 主機名 source 資料源(netflow,httpflow,dnsflow) pid 行程 id,僅 netflow dst_domain 僅 netflow,來自 dnsflow 抓包記錄 srck8snamespace 源 service 歸屬的 namespace srck8sdeployment_name 源 serivce 歸屬的 deployment srck8sservice_name 源 service srck8spod_name 源 pod dstk8snamespace 目標 service 歸屬的 namespace dstk8sdeployment_name 目標 serivce 歸屬的 deployment dstk8sservice_name 目標 service dstk8spod_name 目標 pod sub_source 子來源,默認 N/A,如若為 Kubernetes 流量則為 K8s 傳輸層網路觀測
-
采集器使用 kprobe 型別 eBPF 程式獲取部分內核函式的輸入與回傳值
-
通過 inetbind(6) 函式判斷 srcip + src_port 是否為服務端
-
通過協議堆疊 tcp\udp 以及 ip 相關的內核函式,獲取服務與客戶端之間的流量大小以及 TCP 協議的連接的建立與關閉次數、重傳和 RTT 資訊
Field 名 描述 bytes_read 接收位元組數 bytes_written 發送位元組數 retransmits 重傳次數 rtt rtt rtt_var rtt_var tcp_closed TCP 連接關閉次數 tcp_established TCP 連接建立次數 應用層網路觀測
-
采集器使用 AF_PACKET + BPF 在采集器上分析 DNS 請求,以支持 CentOS(RedHat)7.6 (其不支持 socket filter 型別 eBPF 程式),記錄請求資訊支持 netflow 進行域名反向決議;
-
對于 HTTP 請求使用 socket filter 和 uprobe 型別 eBPF 程式實作 HTTP(S) 請求分析,
下面的為采集 dns 協議生成的欄位 和 http 協議生成欄位,
Field 名(dns) 描述 count 一個采集周期內的請求總數 latency DNS 平均請求回應時間間隔 latency_max DNS 最大請求的回應時間間隔 rcode DNS 回應碼: 0 - NoError, 1 - FormErr, 2 - ServFail, 3 - NXDomain, 4 - NotImp, 5 - Refused, ... Field 名(http) 描述 count 一個采集周期內的請求總數 http_version 1.1 / 1.0 ... latency TTFB method GET/POST... path 請求路徑 status_code 狀態碼,如 200, 301, 404 ... truncated 請求路徑長度達到采集的(約 150)位元組上限,存在截斷可能 用戶地理分布及 TCP 時延
通過內置資料處理器撰寫腳本,來決議 ip 并獲取 ip 歸屬的省份、國家等資訊作為標簽追加到生成的 Point 上,并在觀測云前端創建儀表板,下圖通過世界地圖和中國地圖展示 netflow 中客戶端 ip 的地理分布和服務端之間的 tcp 時延,

主機間四層網路拓撲
下圖為當前作業空間內部署了觀測云采集器并開啟了 eBPF 網路采集器的主機間的網路拓撲圖,圖上我們可以看到主機間的資料發送與接受的位元組數和網路波動等資訊,

K8s Pod 間網路拓撲
當 eBPF 采集插件獲取到 K8S 的 ip 和埠資訊后將自動追加到生成的資料上,通過觀測云前端構建不同的網路拓撲圖,下圖是構建的 Pod 網路拓撲關系圖,

K8s Deployment 間網路拓撲
下圖是構建的 Deployment 網路拓撲關系圖,從圖中可以看到 nginx deployment 上的 HTTP 協議的每秒請求數和請求錯誤率,

-
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/535204.html
標籤:其他
上一篇:介面測驗的流程
下一篇:Tomcat的概述、部署、及優化
