日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Dapr可觀測(cè)性之分布式追蹤

Dapr 可觀測(cè)性之分布式追蹤

作者:k8s技術(shù)圈 2022-09-25 22:19:24

云計(jì)算

云原生 Dapr 可觀測(cè)性構(gòu)件將可觀測(cè)性與應(yīng)用解耦,它自動(dòng)捕捉由構(gòu)成 Dapr 控制平面的 Dapr sidecar 和 Dapr 系統(tǒng)服務(wù)產(chǎn)生的流量。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出開原免費(fèi)做網(wǎng)站回饋大家。

在構(gòu)建應(yīng)用程序時(shí),了解系統(tǒng)的行為方式是運(yùn)維它的重要部分——這包括能夠觀察應(yīng)用程序的內(nèi)部調(diào)用、衡量其性能并在問(wèn)題發(fā)生時(shí)能夠立即找到問(wèn)題。這對(duì)任何系統(tǒng)來(lái)說(shuō)都是具有挑戰(zhàn)性的,對(duì)于由多個(gè)微服務(wù)組成的分布式系統(tǒng)更是如此,其中由多個(gè)調(diào)用組成的流可能在一個(gè)微服務(wù)中開始,但在另一個(gè)微服務(wù)中繼續(xù)調(diào)用??捎^測(cè)性在生產(chǎn)環(huán)境中至關(guān)重要,在開發(fā)過(guò)程中對(duì)于了解瓶頸、提高性能和跨微服務(wù)執(zhí)行基本調(diào)試也很有用。

雖然可以從底層基礎(chǔ)架構(gòu)中收集有關(guān)應(yīng)用程序的一些數(shù)據(jù)(例如內(nèi)存消耗、CPU 使用情況),但必須從應(yīng)用程序感知層收集其他有意義的信息——該層可以顯示如何執(zhí)行一系列重要的調(diào)用跨微服務(wù)。這通常意味著開發(fā)人員必須為此添加一些代碼來(lái)檢測(cè)應(yīng)用程序。通常,檢測(cè)代碼只是將收集到的數(shù)據(jù)(例如追蹤和指標(biāo))發(fā)送到外部監(jiān)控工具或服務(wù),以幫助存儲(chǔ)、可視化和分析這些信息。

由于這部分代碼并不是應(yīng)用程序的核心邏輯,所以這自然成為了開發(fā)人員的另一個(gè)負(fù)擔(dān),有時(shí)需要了解監(jiān)控工具的 API,使用額外的 SDK 等。這種工具也可能會(huì)增加應(yīng)用程序的可移植性挑戰(zhàn)。應(yīng)用程序可能需要不同的工具,具體取決于應(yīng)用程序的部署環(huán)境。例如,不同的云提供商提供不同的監(jiān)控解決方案,本地部署可能需要本地解決方案。

用于獲得可觀測(cè)性的系統(tǒng)信息被稱為 telemetry(遙測(cè)),它可以分為四大類。

  1. Distributed tracing(分布式追蹤) 提供了對(duì)參與分布式業(yè)務(wù)通信的服務(wù)之間流量的洞察力。
  2. Metrics(指標(biāo)) 提供了對(duì)服務(wù)性能及其資源消耗的洞察力。
  3. Logging(日志) 提供了對(duì)代碼如何執(zhí)行以及是否發(fā)生錯(cuò)誤的洞察力。
  4. Health(健康)端點(diǎn)提供了對(duì)服務(wù)可用性的洞察力。

Dapr 可觀測(cè)性構(gòu)件將可觀測(cè)性與應(yīng)用解耦,它自動(dòng)捕捉由構(gòu)成 Dapr 控制平面的 Dapr sidecar 和 Dapr 系統(tǒng)服務(wù)產(chǎn)生的流量。該模塊將跨越多個(gè)服務(wù)的單個(gè)操作的流量進(jìn)行關(guān)聯(lián)。它還暴露了性能指標(biāo)、資源利用率和系統(tǒng)的健康狀況。遙測(cè)數(shù)據(jù)以開放標(biāo)準(zhǔn)的格式發(fā)布,使信息能夠被輸入你選擇的監(jiān)控后端。在那里,這些信息可以被可視化、查詢和分析。

由于 Dapr 進(jìn)行了抽象,所以應(yīng)用程序不知道可觀測(cè)性是如何實(shí)現(xiàn)的。不需要開發(fā)者關(guān)心如何去實(shí)現(xiàn)這部分與核心業(yè)務(wù)邏輯無(wú)關(guān)的代碼,Dapr 允許開發(fā)者專注于構(gòu)建業(yè)務(wù)邏輯,而不是觀察能力的建設(shè)。觀察力是在 Dapr 系統(tǒng)層面上配置的,并且在不同的服務(wù)中是一致的,即使是由不同的團(tuán)隊(duì)創(chuàng)建,并使用不同的技術(shù)棧構(gòu)建。

如何工作

Dapr 的 sidecar 架構(gòu)實(shí)現(xiàn)了內(nèi)置的可觀測(cè)性功能,當(dāng)服務(wù)進(jìn)行通信時(shí),Dapr sidecars 攔截流量并提取追蹤、指標(biāo)和日志信息,遙測(cè)數(shù)據(jù)以開放標(biāo)準(zhǔn)格式進(jìn)行發(fā)布,默認(rèn) Dapr 支持 OpenTelemetry 和 Zipkin。

Dapr 提供 collectors 收集器,可以將遙測(cè)數(shù)據(jù)發(fā)布到不同的后端監(jiān)控工具,這些工具將 Dapr 遙測(cè)數(shù)據(jù)呈現(xiàn)出來(lái),用于分析和查詢。圖 10-1 顯示了 Dapr 的可觀察性架構(gòu)。

dapr observability 架構(gòu)

  • 服務(wù) A 調(diào)用服務(wù) B 的一個(gè)操作,該調(diào)用從服務(wù) A 的 Dapr sidecar 被路由到服務(wù) B 的 sidecar。
  • 當(dāng)服務(wù) B 完成操作時(shí),響應(yīng)會(huì)通過(guò) Dapr sidecar 被送回服務(wù) A。它們收集并發(fā)布每個(gè)請(qǐng)求和響應(yīng)的所有可用遙測(cè)數(shù)據(jù)。
  • 配置的收集器攝取遙測(cè)數(shù)據(jù)并將其發(fā)送到監(jiān)控后端。

不過(guò)需要注意的是添加可觀測(cè)性的支持不同于配置其他 Dapr 構(gòu)建塊,比如前面我們介紹的發(fā)布訂閱或者狀態(tài)管理這些組件,我們不需要引用構(gòu)建塊了,而是添加收集器和監(jiān)控后端,上圖顯示我們可以配置多個(gè)與不同監(jiān)控后端集成的收集器。

下面我們來(lái)分別對(duì)可觀測(cè)性的幾個(gè)遙測(cè)類型進(jìn)行說(shuō)明。

分布式追蹤

分布式追蹤提供了對(duì)分布式應(yīng)用中跨服務(wù)流動(dòng)流量的洞察力。交換的請(qǐng)求和響應(yīng)信息的日志是排除問(wèn)題的重要信息來(lái)源,比較困難的是把屬于同一業(yè)務(wù)事務(wù)的消息整合起來(lái)。

Dapr 使用 W3C Trace Context 這個(gè)統(tǒng)一的標(biāo)準(zhǔn)來(lái)關(guān)聯(lián)相關(guān)信息,它將相同的上下文信息注入到一次完整的請(qǐng)求和響應(yīng)中。

W3C Trace Context 示例

上圖顯示了一個(gè) W3C Trace Context 標(biāo)準(zhǔn)的示例:

  • 服務(wù) A 調(diào)用服務(wù) B 上的操作。當(dāng)服務(wù) A 開始調(diào)用時(shí),Dapr 創(chuàng)建一個(gè)唯一的trace context 并將其注入到請(qǐng)求中。
  • 服務(wù) B 接收請(qǐng)求并調(diào)用服務(wù) C 上的操作。Dapr 檢測(cè)到傳入請(qǐng)求包含trace context 并通過(guò)將其注入到服務(wù) C 的傳出請(qǐng)求中來(lái)傳播它。
  • 服務(wù) C 接收請(qǐng)求并處理它。Dapr 檢測(cè)到傳入的請(qǐng)求包含trace context,并通過(guò)將其注入到傳出響應(yīng)中返回給服務(wù) B 來(lái)傳播它。
  • 服務(wù) B 接收響應(yīng)并處理它。然后它創(chuàng)建一個(gè)新的響應(yīng)并通過(guò)將其注入到傳出響應(yīng)中來(lái)傳播trace context 并返回到服務(wù) A。

一組屬于一起的請(qǐng)求和響應(yīng)就稱為 trace(追蹤),如下圖所示:

Traces 和 spans

注意查看上圖 trace 是如何代表一個(gè)發(fā)生在許多服務(wù)中的獨(dú)特應(yīng)用事務(wù)的。一個(gè) trace 是一系列 spans 集合組成的,每個(gè) span 代表一個(gè)單一的操作或在 trace 中完成的工作單位。Spans 是在實(shí)現(xiàn)單一事務(wù)的服務(wù)之間發(fā)送的請(qǐng)求和響應(yīng)。

接下來(lái)我們來(lái)討論如何通過(guò)將遙測(cè)數(shù)據(jù)發(fā)布到對(duì)應(yīng)的監(jiān)控后端。

使用 Zipkin

Zipkin 是一個(gè)開源的分布式追蹤系統(tǒng),它可以攝取和可視化遙測(cè)數(shù)據(jù)。Dapr 為 Zipkin 提供了默認(rèn)支持。

當(dāng) Dapr 在自托管模式下初始化 (dapr init) 時(shí),多個(gè)容器會(huì)部署到本地 Docker,可以運(yùn)行 docker ps 命令查看本地運(yùn)行的所有容器,確保 Zipkin 容器已啟動(dòng)并正在運(yùn)行,并記下它正在運(yùn)行的端口(默認(rèn)為 9411)。

zipkin 容器

如果沒有 Zipkin 容器服務(wù)運(yùn)行,可以使用下面的命令來(lái)進(jìn)行啟動(dòng):

  docker run --name dapr_zipkin -d -p 9411:9411 openzipkin/zipkin

此時(shí)其實(shí)我們即可在瀏覽器中通過(guò) http://localhost:9411 訪問(wèn)到 Zipkin 的 Web 頁(yè)面,在 Dashboard 中我們可以搜索查看已通過(guò) Dapr 可觀測(cè)性構(gòu)建塊記錄的遙測(cè)數(shù)據(jù)。

Zipkin Dashboard

在搜索結(jié)果中點(diǎn)擊 SHOW 按鈕即可查看詳細(xì)的遙測(cè)數(shù)據(jù)。

Zipkin Show

我們可以發(fā)現(xiàn)在本地自拓管模式下面并沒有做任何的關(guān)于 Zipkin 的配置,當(dāng)有服務(wù)請(qǐng)求經(jīng)過(guò)了 Dapr sidecar 過(guò)后,Zipkin 中就有了對(duì)應(yīng)的遙測(cè)數(shù)據(jù)了,這是因?yàn)樽酝毓苣J较旅婺J(rèn)就啟用了 Zipkin 來(lái)收集遙測(cè)數(shù)據(jù)。相關(guān)的配置位于 $HOME/.dapr/config.yaml,內(nèi)容如下所示:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: daprConfig
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: http://localhost:9411/api/v2/spans

所以如果是在 Kubernetes 模式下面要啟用 Zipkin 作為 tracing 后端,則需要單獨(dú)創(chuàng)建 Configuration 對(duì)象才行。

首先,必須使用 Dapr 配置文件為 Dapr 運(yùn)行時(shí)啟用 tracing。下面是一個(gè)名為 dapr-config.yaml 的配置文件示例,它啟用了 tracing:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans"

可以看到該配置文件和本地的配置幾乎一致,唯一不同的就是 zipkin.endpointAddress 的地址不同。其中的 samplingRate 屬性指定了用于發(fā)布追蹤的間隔時(shí)間,這個(gè)值必須在 0(禁止追蹤)和 1(每條追蹤都被發(fā)布)之間。例如,值為 0.5 時(shí),則表示每隔一段時(shí)間就發(fā)布一次 trace,這樣就大大減少了發(fā)布流量。我們這里的 zipkin.endpointAddress 指向 Kubernetes 集群中運(yùn)行的 Zipkin 服務(wù)器,Zipkin 的默認(rèn)端口是 9411。直接應(yīng)用該資源對(duì)象即可:

  kubectl apply -f dapr-config.yaml

當(dāng)然還需要手動(dòng)部署 Zipkin 服務(wù),對(duì)應(yīng)的資源清單文件如下所示:

kind: Deployment
apiVersion: apps/v1
metadata:
name: zipkin
namespace: default
labels:
service: zipkin
spec:
selector:
matchLabels:
service: zipkin
template:
metadata:
labels:
service: zipkin
spec:
containers:
- name: zipkin
image: openzipkin/zipkin-slim
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 9411
protocol: TCP
---
kind: Service
apiVersion: v1
metadata:
name: zipkin
namespace: default
labels:
service: zipkin
spec:
type: NodePort
ports:
- port: 9411
targetPort: 9411
nodePort: 32411
protocol: TCP
name: zipkin
selector:
service: zipkin

這里我們使用的 openzipkin/zipkin-slim 容器鏡像,Zipkin Service 暴露了 Zipkin Web 前端,可以通過(guò) 32411 端口來(lái)進(jìn)行訪問(wèn)。同樣直接應(yīng)用上面的資源清單:

  kubectl apply -f zipkin.yaml

部署完成后可以查看 Pod 狀態(tài)了解應(yīng)用是否部署成功:

  kubectl get pods -l service=zipkin
NAME READY STATUS RESTARTS AGE
zipkin-f5c696fb7-94mqz 1/1 Running 0 3m9s
kubectl get svc -l service=zipkin
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
zipkin NodePort 10.102.75.84 9411:32411/TCP 30s

部署成功后可以通過(guò) http::32411 來(lái)訪問(wèn) Zipkin Web 頁(yè)面。

Zipkin Web

接下來(lái)我們就可以發(fā)布遙測(cè)數(shù)據(jù)了,需要注意的是我們需要在每個(gè) Dapr sidecar 在啟動(dòng)時(shí)發(fā)出遙測(cè)數(shù)據(jù),為此需要為應(yīng)用添加一個(gè) dapr.io/config 注解。

同樣這里我們還是以 quickstarts 示例進(jìn)行說(shuō)明,定位到 tutorials/distributed-calculator 目錄下面:

  git clone [-b ] https://github.com/dapr/quickstarts.git
cd tutorials/distributed-calculator

該示例是一個(gè)分布式計(jì)算器,展示了 Dapr 的方法調(diào)用和狀態(tài)持久化功能,其中每個(gè)操作都由用不同語(yǔ)言/框架編寫的服務(wù)提供支持:

  • Addition: Go mux application
  • Multiplication: Python flask application
  • Division: Node Express application
  • Subtraction: .NET Core application

前端應(yīng)用由一個(gè)服務(wù)端和一個(gè)用 React 編寫的客戶端組成,源碼地址:React calculator 。

分布式計(jì)算器

上圖為該示例應(yīng)用各個(gè)組件的組成和服務(wù)架構(gòu)。

我們可以隨便查看一個(gè)微服務(wù)的部署清單,位于 deploy/ 目錄下面,比如 go-adder.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: addapp
labels:
app: add
spec:
replicas: 1
selector:
matchLabels:
app: add
template:
metadata:
labels:
app: add
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "addapp"
dapr.io/app-port: "6000"
dapr.io/config: "appconfig"
spec:
containers:
- name: add
image: ghcr.io/dapr/samples/distributed-calculator-go:latest
env:
- name: APP_PORT
value: "6000"
ports:
- containerPort: 6000
imagePullPolicy: Always

上面的資源清單中我們通過(guò) dapr.io/config 注解指定了使用 appconfig 這個(gè)配置文件,該配置文件中使用了 Zipkin 服務(wù)來(lái)獲取遙測(cè)數(shù)據(jù),其他微服務(wù)中也使用了該注解,所以當(dāng)應(yīng)用部署完成后,Zipkin 就能獲取到相應(yīng)的遙測(cè)數(shù)據(jù)。

需要注意 dapr.io/config 后面指定的 Configuration 對(duì)象需要和當(dāng)前應(yīng)用位于同一個(gè)命名空間之下。

直接部署該示例應(yīng)用:

  kubectl apply -f deploy/

部署完成后我們可以通過(guò) dapr configurations 命令查看當(dāng)前集群中的所有配置信息:

  dapr configurations -k -A
NAMESPACE NAME TRACING-ENABLED METRICS-ENABLED AGE CREATED
default appconfig true true 1m 2022-09-20 17:01.21

同樣在 Dashboard 中也可以看到該配置信息:

dapr configuration

應(yīng)用部署完成后查看 Pod 的狀態(tài):

  kubectl get pods
NAME READY STATUS RESTARTS AGE
addapp-84c9764fdb-72mxf 2/2 Running 0 74m
calculator-front-end-59cbb6658c-rbctf 2/2 Running 0 74m
divideapp-8476b7fbb6-kr8dr 2/2 Running 0 74m
multiplyapp-7c45fbbf99-hrmff 2/2 Running 0 74m
subtractapp-58645db87-25tg9 2/2 Running 0 62m
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
addapp-dapr ClusterIP None 80/TCP,50001/TCP,50002/TCP,9090/TCP 8m29s
calculator-front-end LoadBalancer 10.110.177.32 192.168.0.54 80:31701/TCP 8m29s
calculator-front-end-dapr ClusterIP None 80/TCP,50001/TCP,50002/TCP,9090/TCP 8m29s
divideapp-dapr ClusterIP None 80/TCP,50001/TCP,50002/TCP,9090/TCP 8m29s
multiplyapp-dapr ClusterIP None 80/TCP,50001/TCP,50002/TCP,9090/TCP 8m29s
subtractapp-dapr ClusterIP None 80/TCP,50001/TCP,50002/TCP,9090/TCP 8m29s
zipkin NodePort 10.108.46.223 9411:32411/TCP 16m

部署完成后我們可以通過(guò) calculator-front-end 這個(gè) LoadBalancer 類型的 Service 去訪問(wèn)計(jì)算器的前端應(yīng)用,我們這里分配的 EXTERNAL-IP 地址為 192.168.0.54。

計(jì)算器

打開瀏覽器的控制臺(tái)窗口(使用 F12 鍵) ,查看在使用計(jì)算器時(shí)生成的日志。請(qǐng)注意,每次單擊按鈕時(shí),都會(huì)看到表示狀態(tài)持久性的日志:

Rehydrating State:
{total: "21", next: "2", operation: "x"}

還要注意,每次輸入一個(gè)完整的方程式(例如 126 ÷ 3 =) ,日志都會(huì)指示對(duì)服務(wù)的調(diào)用:

Calling divide service

客戶端代碼調(diào)用 Express 服務(wù)器,后者將調(diào)用通過(guò) Dapr 路由到后端服務(wù)。在這種情況下,在 nodejs 應(yīng)用程序上調(diào)用 ??divide?? 端點(diǎn)。

當(dāng)我們操作應(yīng)用的時(shí)候,后面就有網(wǎng)絡(luò)請(qǐng)求產(chǎn)生,也就有了微服務(wù)之間的調(diào)用,所以此時(shí)就會(huì)參數(shù)對(duì)應(yīng)的 trace 遙測(cè)數(shù)據(jù),我們可以前往 Zipkin 查詢下數(shù)據(jù)。

Zipkin Dashboard

點(diǎn)擊 SHOW 就可以看到詳細(xì)的遙測(cè)數(shù)據(jù)。

Zipkin SHOW

同樣的除了 Zipkin,其他監(jiān)視后端軟件也可引入 Zipkin 格式的遙測(cè),比如 Jaeger,Jaeger 是由 Uber 創(chuàng)建的開源追蹤系統(tǒng)。它用于跟蹤分布式服務(wù)之間的事務(wù),并對(duì)復(fù)雜的微服務(wù)環(huán)境進(jìn)行故障排除,又比如 New Relic 是一個(gè)全堆??捎^測(cè)性平臺(tái),它可以鏈接來(lái)自分散應(yīng)用程序的相關(guān)數(shù)據(jù),以提供系統(tǒng)的完整圖片 要試用它們,只需要在 Dapr 配置文件中指定一個(gè)指向 Jaeger 或 New Relic 服務(wù)器的 endpointAddress 即可。下面是配置 Dapr 以將遙測(cè)發(fā)送到 Jaeger 服務(wù)器的配置文件示例。Jaeger 的 URL 與 Zipkin 的 URL 相同。唯一的區(qū)別是服務(wù)器運(yùn)行的端口號(hào):

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: dapr-config
namespace: default
spec:
tracing:
samplingRate: "1"
zipkin:
endpointAddress: "http://localhost:9415/api/v2/spans"

同樣如果要使用 New Relic,則需要將 endpointAddress 指定為 New Relic API 的地址。


標(biāo)題名稱:Dapr可觀測(cè)性之分布式追蹤
瀏覽路徑:http://www.dlmjj.cn/article/djcghjd.html