<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何構建APISIX基于DeepFlow的統一可觀測性能力呢?

Linux閱碼場 ? 來源:DeepFlow ? 2024-01-18 10:11 ? 次閱讀

隨著應用組件的可觀測性逐漸受到重視,Apache APISIX 引入插件機制豐富了可觀測數據源。然而,這些數據分散在多個平臺,形成了數據孤島。本文旨在闡述如何利用 DeepFlow 基于 eBPF 的零侵擾特性構建 APISIX 可觀測性解決方案,在此基礎上統一集成 APISIX 插件已有的豐富數據源,消除孤島、構建統一的可觀測性平臺,以全面監控和分析 APISIX 網關。通過 DeepFlow,APISIX 可以實現從流量監控、追蹤分析、到性能優化的全面可觀測性,消除數據分散并提供中心化的監控視圖,加速故障排查和性能調優,讓 DevOps 和 SRE 團隊的工作更加高效。本文將重點梳理 APISIX 的追蹤數據、指標數據、訪日日志及性能剖析數據如何對接 DeepFlow。

e11bcfd6-b5a2-11ee-8b88-92fbcf53809c.png

基于 DeepFlow 構建 APISIX 的統一可觀測性能力

01

安裝 APISIX 和 DeepFlow

基于 DeepFlow 建構 APISIX 的統一可觀測性能力,需要先將 DeepFlow 及 APISIX 都部署起來。本文為了方便,將 DeepFlow 和 APISIX 都以 K8s 服務的形式部署在一個 All-in-One 的 K8s 集群中,整個部署過程大概 5 分鐘左右完成。詳細的部署過程,參考 DeepFlow 官方部署文檔[1]及 APISIX 官方部署文檔[2]。

注意:為了發揮 DeepFlow 基于 eBPF 的可觀測性能力,請確保服務器 Linux 操作系統內核在 4.14 之上。

02

分布式追蹤

使用 DeepFlow 實現 APISIX 及后端服務的分布式追蹤能力有兩種方案:利用 eBPF,DeepFlow 可以在不修改 APISIX 及后端服務配置及代碼的前提下實現開箱即用的 RPC 粒度分布式追蹤;而當后端服務已具備 APM(Application Performance Monitoring) 能力 —— 比如已經使用了 OpenTelemetry 或者 SkyWalking 等工具時,可結合 APISIX 的 Tracers 插件,將所有追蹤數據統一集成到 DeepFlow,實現全鏈路的應用函數粒度的分布式追蹤。

e12f610e-b5a2-11ee-8b88-92fbcf53809c.png

DeepFlow 中 APISIX 及后端服務實現分布式追蹤的兩種方式

方式一:DeepFlow eBPF AutoTracing

DeepFlow 的分布式追蹤(AutoTracing)能力是開箱即用的,無需 APISIX 開啟任何插件,僅需要將 deepflow-agent 部署在 APSIX 所在的服務器即可。在 Grafana 中找到 DeepFlow 提供的 Distributed Tracing Dashboard,即可對某一個調用點擊發起追蹤,并看到這個調用在 APISIX 及其后端服務中的全鏈路追蹤過程。如下圖所示:

①:通過 nodeport 的形式訪問到 APISIX 網關服務所在 K8s Node 的端口

②:進入到 APISIX 網關服務所對應的 POD 的網卡

③:進入到 APISIX 網關服務中的 OpenResty 進程

④:完成業務處理,經由 OpenResty 進程將請求轉發給后端服務

⑤:經由 APISIX 網關服務所對應的 POD 網卡轉發

⑥/⑦:將請求轉發給后端服務

e13970a4-b5a2-11ee-8b88-92fbcf53809c.png

DeepFlow eBPF AutoTracing

方式二:DeepFlow eBPF + OpenTelemetry

此方式為 APISIX 利用 OpenTelemetry 插件生成 Trace 數據,后端服務也具備 APM 能力并且可將生成的 Trace 數據轉化為 OpenTelemetry 格式。當 APISIX 與后端服務都將 Trace 數據發送給 DeepFlow 時,DeepFlow 能夠生成包含APM 應用 SPAN、eBPF 系統 SPAN、cBPF 網絡 SPAN 的無盲點全棧調用鏈追蹤火焰圖。

當我們希望得到應用進程內部函數粒度的分布式追蹤鏈路,或者后端服務在處理一個調用時使用了線程池(會導致 DeepFlow AutoTracing 斷鏈)時,可以采用這種方式。

1. 部署具備 APM 能力的后端服務

為了展示完整的追蹤效果,我們首先在 APISIX 網關后面部署了一個支持 OpenTelemetry 能力的 Demo 應用。Demo 應用的部署可參考:DeepFlow Demo - 一鍵部署基于 Spring Boot 編寫的五個微服務組成的 WebShop 應用[3]。在 APISIX 上創建訪問后端服務的路由,訪問域名為 apisix.deepflow.demo。

apiVersion:apisix.apache.org/v2
kind:ApisixRoute
metadata:
name:deepflow-apisix-demo
namespace:deepflow-otel-spring-demo
spec:
http:
-name:deepflow-apisix-demo
match:
hosts:
-apisix.deepflow.demo
paths:
-"/*"
backends:
-serviceName:web-shop
servicePort:18090

2. 在 APSIX 中開啟 OpenTelemetry 插件

在 APISIX 配置中添加 opentelemetry plugins:

##vim./apisix/.values.yaml
plugins:
-opentelemetry
#...
pluginAttrs:
opentelemetry:
resource:
service.name:APISIX
collector:
##將數據傳給deepflow-agent
##當然,這里也可以發給otel-collector進行處理后,再由otel-collectorf發送至deepflow-agent
address:deepflow-agent.deepflow.svc.cluster.local/api/v1/otel/trace
request_timeout:3

##添加后更新helmupgrade--install-napisixapisix./apisix

針對指定路由開啟 OpenTelemetry 功能:

##查看路由ID
##找到對應域名的路由ID
curl-shttp://10.109.77.186:9180/apisix/admin/routes-H'X-API-KEY:此處為apisix-admintoken'|jq
##針對具體路由開啟otel功能
curlhttp://10.109.77.186:9180/apisix/admin/routes/此處為路由ID-H'X-API-KEY:此處為apisix-admintoken'-XPUT-d'
{
"name":"deepflow-apisix-demo",##給這個路由配置個名字
"methods":["GET"],
"uris":["/*"],
"plugins":{
"opentelemetry":{
"sampler":{
"name":"always_on"
},
"additional_attributes":[##可通過additional_attributes自定義Span標簽
"deepflow=demo"
]
}
},
"upstream":{
"type":"roundrobin",##RR輪詢
"nodes":{##上游地址
"10.1.23.200:18090":1##服務訪問地址:上游編號
}
}
}'

3. 使用 DeepFlow 集成 OpenTelemetry 追蹤數據

通過 DeepFlow Agent 集成 OpenTelemetry 的 Span 數據,功能默認開啟,無需額外配置。

##查看deepflow-agent默認配置
##deepflow-ctlagent-group-configexample

##這個參數控制是否啟接收外部數據源,包括 Prometheus Telegraf OpenTelemetry 和 SkyWalking
##DataIntegrationSocket
##Default:1.Options:0(disabled),1(enabled).
##Note:WhethertoenablereceivingexternaldatasourcessuchasPrometheus,
##Telegraf,OpenTelemetry,andSkyWalking.
#external_agent_http_proxy_enabled:1

4. OpenTelemetry 集成效果展示

我們在客戶端發起一條訪問 WebShop 服務的命令:

curl-H"Host:apisix.deepflow.demo"10.1.23.200:44640/shop/full-test
##此處IP為k8s集群節點IP,44640端口為APISIX9180暴露的NodePort

在 Grafana 中打開 DeepFlow 提供的 Distributed Tracing Dashboard,找到對應的調用點擊發起追蹤,能看到 APISIX 與后端服務都能追蹤出來,且 APM 生成的應用 SPAN 與 DeepFlow 生成的網絡 SPAN 及系統 SPAN 都完整的關聯在一張火焰圖上:

注:火焰圖中的 A 表示 APM 生成的應用 SPAN,N 和 S 表示 DeepFLow 生成的網絡 SPAN 及系統 SPAN。

e15622b2-b5a2-11ee-8b88-92fbcf53809c.png

DeepFlow eBPF + OTel

03

性能指標

對于性能指標,在 DeepFlow 中同樣能開箱即用查看 Endpoint 粒度的 RED(吞吐、時延、異常)性能指標,以及豐富的 TCP 網絡性能指標(吞吐、重傳、零窗、建連異常等)。同樣,APISIX 的 Metrics 類的插件 —— 比如 Prometheus、node-status 等插件獲取到的實例、路由粒度的 HTTP 狀態碼、帶寬、連接數、時延等指標數據,可集成到 DeepFlow 中,并在 APISIX 提供的 Grafana Dashboard 中查看。

e15ad17c-b5a2-11ee-8b88-92fbcf53809c.png

使用 DeepFlow 采集 APISIX 性能指標

1. 開箱即用的 eBPF 性能指標

在 APISIX 所在的服務器上部署 deepflow-agent 后,可自動采集應用及網絡層面非常細粒度的指標量,例如精細到某個客戶端、某個 Endpoint 的請求速率、響應時延、異常狀態;某一次 TCP 建連時延,建連異常等等。詳細的指標量可參考 DeepFlow 官網關于指標量的介紹[4]。在 Grafana 中打開 DeepFlow 提供的 Applicaiton - xxx Ingress Dashboard,可查看 APISIX 相關的應用層性能指標,在 Network xxx Dashboard 中可查看網絡相關的指標。

e1738a78-b5a2-11ee-8b88-92fbcf53809c.png

DeepFlow eBPF 性能指標(應用)

e15622b2-b5a2-11ee-8b88-92fbcf53809c.png

DeepFlow eBPF 性能指標(網絡)

2. 在 APISIX 中開啟 Prometheus 插件

在 APISIX 配置中添加 Prometheus 插件:

##vim./apisix/.values.yaml
plugins:
-prometheus
#...
pluginAttrs:
prometheus:
export_uri:/metrics##默認uri為/apisix/prometheus/metrics
export_addr:
ip:0.0.0.0##抓取地址
port:9091##默認端口9091
metrics:
http_status:##具體作用在apisix_http_status指標中
extra_labels:##添加額外內容
-upstream_addr:$upstream_addr##例如此處添加一個上游服務器地址(此處的變量是NGINX變量)
-upstream_status:$upstream_status##例如此處添加一個上游服務器狀態(此處的變量是NGINX變量)
## APISIX 自帶變量:https://apisix.apache.org/docs/apisix/3.2/apisix-variable/
## NGINX 自帶變量:https://nginx.org/en/docs/varindex.html

啟用 Prometheus 插件:

##注:上面啟用了 otel 功能,所以此處要在啟用 otel 的基礎上開啟 prometheus

curlhttp://10.109.77.186:9180/apisix/admin/routes/此處為路由ID-H'X-API-KEY:此處為apisix-admintoken'-XPUT-d'
{
"name":"deepflow-apisix-demo",##給這個路由配置個名字
"methods":["GET"],
"uris":["/*"],
"plugins":{
"prometheus":{##啟用prometheus
"prefer_name":true##為"true"時,Prometheus指標中,打印路由/服務名稱而不是ID
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"10.1.23.200:18090":1
}
}
}'

3. 使用 Prometheus 拉取 APISIX 指標數據

Prometheus 采集 APISIX metrics(此處以 Prometheus CRD 部署方式舉例):

##ServiceMonitor方式采集(Prometheus以CRD形式部署在k8s中)
##APISIXvalues.yaml文件中提供了對應模塊
serviceMonitor:
##是否啟用
enabled:true
##創建在哪個命名空間
namespace:"apisix"
##servicemonitor名稱,默認為fullname
name:""
##抓取間隔
interval:15s
##metrics暴露的uri
path:/metrics
##給抓取到的指標添加前綴
metricPrefix:apisix_
##抓取端口
containerPort:9091
##添加labels
labels:
##此次使用項目為kube-prometheus,使用此標簽使kube-prometheus識別servicemonitor
app.kubernetes.io/part-of:kube-prometheus
annotations:{}

此時需要一個 Prometheus 后端服務用于采集 APISIX 插件生成的指標,所以需要先部署一個 prometheus-server。但實際上由于不依賴 prometheus-server 存儲這些指標,因此可以部署一個 Agent Mode 的 prometheus-server,或者使用更加輕量級的 grafana-agent 替代 prometheus-server。假設已經部署了 prometheus-server,開啟 RemoteWrite 可將指標數據發送給 DeepFlow:

##https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
##https://deepflow.io/docs/zh/integration/input/metrics/prometheus/#配置-remote-write

##kube-prometheus方式發送至DeepFlow(yaml清單中添加遠程寫入)
apiVersion:monitoring.coreos.com/v1
kind:Prometheus
metadata:
labels:
...
name:k8s
namespace:monitoring
spec:
enableRemoteWriteReceiver:true
remoteWrite:
##注:此處為 deepflow-agent svc 地址,要按實際位置寫
-url:"http://deepflow-agent.deepflow.svc.cluster.local/api/v1/prometheus"

4. 使用 DeepFlow 集成 Prometheus 指標數據

通過 DeepFlow Agent 集成 Prometheus 指標數據,功能默認開啟,無需額外配置。

##查看deepflow-agent默認配置
##deepflow-ctlagent-group-configexample

##這個參數控制是否啟接收外部數據源,包括 Prometheus Telegraf OpenTelemetry 和 SkyWalking
##DataIntegrationSocket
##Default:1.Options:0(disabled),1(enabled).
##Note:WhethertoenablereceivingexternaldatasourcessuchasPrometheus,
##Telegraf,OpenTelemetry,andSkyWalking.
#external_agent_http_proxy_enabled:1

5. Prometheus 集成效果展示

由于 DeepFlow 支持 PromQL,只需要將 Grafana 中 APISIX 提供的 Grafana Dashboard[5] 的數據源改為 DeepFlow,即可查看 APISIX 原生的豐富性能指標了,指標的使用說明參考官方文檔中關于 Prometheus 插件的說明[6]。

e1a89600-b5a2-11ee-8b88-92fbcf53809c.png

通過 DeepFlow 數據源展示 APISIX Dashboard

04

訪問日志和持續剖析

e1ad3980-b5a2-11ee-8b88-92fbcf53809c.png

使用 DeepFlow 采集 APISIX 的訪問日志和剖析數據

對于訪問日志,此時無需 APISIX 做什么修改,僅需要將 deepflow-agent 部署在 APSIX 所在的服務器即可,在 Grafana 中打開 DeepFlow 提供的 Application - Request Log Dashboard 即可查看訪問日志,包含了 Request 及 Response 中 header 信息,并可分析每一次請求的響應時延和錯誤碼。

e1bd27c8-b5a2-11ee-8b88-92fbcf53809c.png

DeepFlow 提供的訪問日志 Dashboard

DeepFlow 還通過 eBPF 獲取應用程序的函數調用??煺眨ㄆ髽I版功能),可繪制 APISIX 進程的 On-CPU Profile,函數調用棧中除了包含業務函數以外,還可展現動態鏈接庫、內核系統調用函數的耗時情況。

e1d85692-b5a2-11ee-8b88-92fbcf53809c.png

DeepFlow 企業版中的持續剖析功能

05

什么是 APISIX

Apache APISIX 是一個動態、實時、高性能的開源 API 網關,提供負載均衡、動態上游、灰度發布、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。Apache APISIX 基于 NGINX 和 LuaJIT 構建,具有超高性能,單核 QPS 高達 23000,平均延遲僅為 0.2 毫秒。

Apache APISIX 的應用場景非常廣泛,可應用于 API 網關、Kubernetes Ingress 和服務網格等場景,幫助企業快速、安全地處理 API 和微服務流量。目前已獲得 Zoom、Airwallex、Lotus Cars、vivo、歐洲數字工廠等全球企業和組織的測試和高度認可。

Apache APISIX 于 2019 年開源并由 API7.ai 捐贈給 Apache 軟件基金會,目前是 GitHub 上最活躍的 API 網關項目,每天處理超萬億次的 API 調用,并且這一數字仍在增長。

06

什么是 DeepFlow

DeepFlow 是云杉網絡開發的一款可觀測性產品,旨在為復雜的云基礎設施及云原生應用提供深度可觀測性。DeepFlow 基于 eBPF 實現了應用性能指標、分布式追蹤、持續性能剖析等觀測信號的零侵擾(Zero Code)采集,并結合智能標簽(SmartEncoding)技術實現了所有觀測信號的全棧(Full Stack)關聯和高效存取。使用 DeepFlow,可以讓云原生應用自動具有深度可觀測性,從而消除開發者不斷插樁的沉重負擔,并為 DevOps/SRE 團隊提供從代碼到基礎設施的監控及診斷能力。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RPC
    RPC
    +關注

    關注

    0

    文章

    102

    瀏覽量

    11445
  • 線程池
    +關注

    關注

    0

    文章

    53

    瀏覽量

    6778
  • APM
    APM
    +關注

    關注

    0

    文章

    69

    瀏覽量

    12890
  • LINUX內核
    +關注

    關注

    1

    文章

    312

    瀏覽量

    21419

原文標題:基于 DeepFlow 構建 APISIX 的統一可觀測性能力

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    求大神指導matlab設計觀測

    現在課題需要,要做個四階系統的狀態觀測器設計,基于matlab設計,四種(全維觀測器 降維觀測器 自適應觀測器 滑模
    發表于 04-16 10:13

    關于 eBPF 安全可觀測性,你需要知道的那些事兒

    某種對象或者對象屬性不受威脅的狀態。安全可觀測性:通過觀測整個系統,從低級別的內核可見性到跟蹤文件訪問、網絡活動或能力(capability)變化,直到應用層,涵蓋了諸如對易受攻擊的
    發表于 09-08 15:31

    基于拓撲分割的網絡可觀測性分析方法

    針對電力網絡可觀測性分析問題,對量測網絡建模、網絡拓撲可觀測性分析理論、不可觀測節點的影響范圍等方面進行了研究,提出了一種基于拓撲分割的網絡可觀測性分析方法,在某42節點系統上對該方法
    發表于 03-06 18:03 ?0次下載
    基于拓撲分割的網絡<b class='flag-5'>可觀測</b>性分析方法

    NASA開發可觀測宇宙形成和結構的新型探測器

    據麥姆斯咨詢報道,美國國家航空航天局正在開發一款可觀測宇宙形成和結構的新型探測器。宇宙中眾多輻射與機械相互作用,塑造了星系的星際介質并推動著星系演化。
    的頭像 發表于 09-26 16:52 ?3876次閱讀

    Apache APISIX云原生API網關

    ./oschina_soft/gitee-apisix.zip
    發表于 05-16 09:23 ?1次下載
    Apache <b class='flag-5'>APISIX</b>云原生API網關

    如何將可觀測性策略與APM工具結合起來

    獲悉IBM Instana被Gartner評選為2022年度應用性能監控(APM)和可觀測性(Observbility)魔力象限的領導者,我與我身邊同事們都與有榮焉。不僅Instana實現了其領先級企業可觀測性平臺的愿景,對我們
    的頭像 發表于 07-27 11:19 ?986次閱讀

    介紹eBPF針對可觀測場景的應用

    隨著eBPF推出,由于具有高性能、高擴展、安全性等優勢,目前已經在網絡、安全、可觀察等領域廣泛應用,同時也誕生了許多優秀的開源項目,如Cilium、Pixie等,而iLogtail 作為阿里內外千萬實例可觀測數據的采集器,eBP
    的頭像 發表于 08-11 09:10 ?1260次閱讀

    eBPF安全可觀測性的前景展望

    本次分享將從監控和可觀測性、eBPF安全可觀測性分析、內核安全可觀測性展望三個方面展開。
    的頭像 發表于 08-17 11:27 ?1319次閱讀

    API網關Apache APISIX 3.0版本正式發布!

    在 9 月底,Apache APISIX 發布了 3.0.0-beta 預覽版,為用戶們提前帶來了一些新的功能體驗。今天,APISIX 正式發布了 3.0.0 版本,將產品從體驗和功能角度,帶到了新一輪的進程中。
    的頭像 發表于 11-21 15:27 ?644次閱讀

    六大頂級、開源的數據可觀測性工具

    企業有很多商業數據可觀測性工具可供選擇。商業工具在可伸縮性、自動化和支持方面具有一些關鍵優勢。然而,數據可觀測性的開源工具允許團隊在沒有前期購買(獲得使用許可)成本的情況下試驗數據可觀察性功能
    的頭像 發表于 12-16 11:29 ?1661次閱讀

    華為云應用運維管理平臺獲評中國信通院可觀測性評估先進級

    近日,華為云應用運維管理平臺參與了中國信息通信研究院(以下簡稱“中國信通院”)主辦的“穩保行動”的可觀測性平臺能力評估。經過中國信通院的檢驗,華為云應用運維管理平臺滿足云上軟件系統穩定-可觀測性平臺
    的頭像 發表于 07-01 21:16 ?326次閱讀
    華為云應用運維管理平臺獲評中國信通院<b class='flag-5'>可觀測</b>性評估先進級

    喜訊!基調聽云可觀測性平臺獲評中國信通院根因分析評估先進級

    了2023年上半年度的可信云評估結果。 值得一提的是,在這次大會上,基調聽云可觀測性平臺憑借其穩定性和卓越的根因分析能力受到了廣泛關注?;{聽云可觀測性平臺在中國信通院舉辦的“穩保行動”中通過了根因分析
    的頭像 發表于 07-26 13:10 ?545次閱讀

    從技術到商業價值:基調聽云智能可觀測性平臺能力升級,持續滿足不斷變化的市場需求

    的運維服務,并不斷優化底層技術能力以加強客戶體驗。 其中,基調聽云智能可觀測性平臺的全局拓撲和疑似問題兩項核心技術能力再度升級獲得行業認可,充分證明了我們在技術創新方面的領先地位和不斷提升用戶體驗的努力! 下面為大家介
    的頭像 發表于 08-21 16:56 ?325次閱讀

    使用APM無法實現真正可觀測性的原因

    控制理論中的可觀測性是指:系統可以由其外部輸出確定其內部狀態的程度。在復雜 IT 系統中,具備可觀測性是為了讓系統能達到某個預定的穩定性、錯誤率目標。隨著微服務數量的急速膨脹和云原生基礎設施的快速演進,建設可觀測性已經成為了保障
    的頭像 發表于 09-18 10:23 ?530次閱讀
    使用APM無法實現真正<b class='flag-5'>可觀測</b>性的原因

    什么是多云? 為什么我們需要多云可觀測性 (Observability)?

    什么是多云? 為什么我們需要多云可觀測性 (Observability)?
    的頭像 發表于 10-12 17:12 ?376次閱讀
    什么是多云? 為什么我們需要多云<b class='flag-5'>可觀測</b>性 (Observability)?
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>