服務監測

分散式服務效能指標,鏈路追蹤,執行狀況,日誌記錄都很重要,我們日常開發中為了實現這些功能需要整合很多功能,替換監控元件時成本也很高。

Dapr 可觀測性模組將服務監測與應用程式分離。它自動捕獲由 Dapr sidecar 和 Dapr 服務生成的流量。它還公開效能指標、資源利用率和系統的執行狀況。 遙測以開放標準格式釋出,使資訊能夠饋入到選擇的監視後端。當 Dapr 獲取監控資料時,應用程式不知道如何實現可觀測性。 無需引用庫或實現自定義檢測程式碼。 Dapr可以使開發人員專注於構建業務邏輯,而不是監測管道。

工作原理

Dapr的Sidecar支援監測功能。 當服務間通訊時,Dapr sidecar 會截獲流量並提取跟蹤、指標和日誌記錄資訊。 監測以開放標準格式釋出。 預設情況下,Dapr 支援 OpenTelemetry 和 Zipkin

Dapr收集器可以將遙測資料釋出到不同的後端監視工具。 這些工具可以查詢分析 Dapr 遙測資料。

Zipkin服務跟蹤

Zipkin 是一種開源分散式跟蹤系統。 它可以將遙測資料進行儲存和視覺化。 Dapr 提供對 Zipkin 的預設支援。我們可以檢視Dapr預設配置C:\Users\username\.dapr\config.yaml,指定了zipkin的配置資訊

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

這個Zipkin服務是在初始化dapr的時候,啟動的一個docker容器

我們可以訪問一下 http://localhost:9411/zipkin/檢視UI

現在執行backend和frontend

dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend dotnet  .\BackEnd\bin\Debug\net5.0\BackEnd.dll

dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net5.0\FrontEnd.dll

通過postman訪問

檢視zipkin ui中的呼叫記錄,點選SHOW可以檢視呼叫詳情

檢視zipkin ui中的服務依賴關係

效能指標收集

Dapr sidecar 會公開指標終結點預設是9090,可以通過--metrics-port 9090修改埠,可以檢視控制檯日誌

time="2021-09-28T15:58:56.0700006+08:00" level=info msg="metrics server started on :22869/" app_id=backend instance=chesterchen-lap scope=dapr.metrics type=log ver=1.4.0

Dapr使用Prometheus作為標準,Prometheus會呼叫Sidecar終結點,收集指標

下面我們執行frontend指定其--metrics-port 9091,執行backend指定其埠9090

dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend dotnet  .\BackEnd\bin\Debug\net5.0\BackEnd.dll --metrics-port 9090

dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net5.0\FrontEnd.dll --metrics-port 9091

在dapr預設目錄下建立prometheus配置檔案prometheus.yml

global:
scrape_interval: 15s # By default, scrape targets every 15 seconds. # A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: 'dapr' # Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s static_configs:
- targets: ['192.168.43.94:9090','192.168.43.94:9091'] # Replace with Dapr metrics port if not default

通過docker執行prometheus

C:\Users\chesterychen\.dapr>docker run   -p 8081:8081 --name prometheus  -v C:/Users/chesterychen/.dapr/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml  --web.listen-address=:8081

訪問prometheus UI:http://localhost:8081/,並查詢指標

Dapr儀表盤

Dapr 提供一個儀表板,用於顯示有關 Dapr 應用程式、元件和配置的狀態資訊。 使用 Dapr CLI 將儀表板在埠8080上啟動:

dapr dashboard