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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Dapr 可觀測性之指標(biāo)與日志

Dapr 可觀測性之指標(biāo)與日志

作者:k8s技術(shù)圈 2022-09-27 21:32:14

云計算

云原生 Dapr 使用 Prometheus 作為指標(biāo)標(biāo)準(zhǔn),Dapr 和系統(tǒng)服務(wù)在端口 9090 上暴露指標(biāo)數(shù)據(jù)。Prometheus scraper 以預(yù)定義的時間間隔調(diào)用該接口收集指標(biāo)數(shù)據(jù),scraper 將指標(biāo)值發(fā)送到監(jiān)控后端。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、洪洞ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的洪洞網(wǎng)站制作公司

本文我們將來介紹下指標(biāo)和日志這方面的支持。

指標(biāo)

指標(biāo)可讓你深入了解應(yīng)用性能和資源消耗情況,在后臺,Dapr 發(fā)出各種系統(tǒng)和運行時指標(biāo)的集合。Dapr 使用 Prometheus 作為指標(biāo)標(biāo)準(zhǔn),Dapr 和系統(tǒng)服務(wù)在端口 9090 上暴露指標(biāo)數(shù)據(jù)。Prometheus scraper 以預(yù)定義的時間間隔調(diào)用該接口收集指標(biāo)數(shù)據(jù),scraper 將指標(biāo)值發(fā)送到監(jiān)控后端,如下所示:

抓取 Prometheus 指標(biāo)

你可能想知道指標(biāo)抓取器如何知道在何處收集指標(biāo),Prometheus 可與內(nèi)置在目標(biāo)部署環(huán)境中的發(fā)現(xiàn)機(jī)制集成。例如在 Kubernetes 中運行時,Prometheus 可與 Kubernetes API 集成,以查找環(huán)境中運行的所有可用 Kubernetes 資源。

Dapr 為 Dapr 系統(tǒng)服務(wù)及其運行時生成了大量指標(biāo),如下表格所示:

Dapr 指標(biāo)

在運行時,可以通過在 Dapr 命令中包含 --enable-metrics=false 的參數(shù)來禁用指標(biāo)收集,也可使用 --metrics-port 9090 參數(shù)更改指標(biāo)端點的默認(rèn)端口。

你還可以通過為應(yīng)用程序部署設(shè)置 dapr.io/enable-metrics: "false" 注解來禁用特定應(yīng)用程序的指標(biāo)導(dǎo)出器,禁用指標(biāo)導(dǎo)出器后,daprd 將不會打開指標(biāo)監(jiān)聽端口。以下示例顯示使用指定為 9090 的端口顯式啟用指標(biāo)。

apiVersion: apps/v1
kind: Deployment
metadata:
name: nodeapp
spec:
selector:
matchLabels:
app: node
template:
metadata:
labels:
app: node
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "nodeapp"
dapr.io/app-port: "3000"
dapr.io/enable-metrics: "true"
dapr.io/metrics-port: "9090"
spec:
containers:
- name: node
image: dapriosamples/hello-k8s-node:latest
ports:
- containerPort: 3000
imagePullPolicy: Always

你也可以使用 Dapr 配置文件的方式啟用或禁用運行時指標(biāo)收集:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: dapr-config
spec:
tracing:
samplingRate: "1"
metric:
enabled: false

Prometheus 抓取器收集指標(biāo)并將其發(fā)布到監(jiān)視后端后,此時我們就可以使用 Grafana 來創(chuàng)建儀表盤,包括監(jiān)控 Dapr 系統(tǒng)服務(wù)和 sidecar,我們可以直接導(dǎo)入 Dapr 提供的儀表盤模板來監(jiān)控 Dapr,地址 https://github.com/dapr/dapr/tree/master/grafana,其中包含 3 個儀表盤。

  • Dapr 系統(tǒng)服務(wù)狀態(tài) - dapr-operator、dapr-sidecar-injector、dapr-sentry 和 dapr-placement
  • Dapr 邊車儀表板 - 顯示 Dapr sidecar 狀態(tài),包括 sidecar 運行狀況/資源、HTTP 和 gRPC 的吞吐量/延遲、Actor、mTLS 等。
  • Dapr Actor 儀表板 - 顯示 Dapr sidecar 狀態(tài),包括 actor 調(diào)用吞吐量/延遲、計時器/提醒觸發(fā)器和基于輪次的并發(fā)。

所以首先需要安裝 Prometheus 和 Grafana,并且要配置 Prometheus 基于 Kubernetes 的自動發(fā)現(xiàn)(基于 Endpoints 和 Pods 都需要配置),將 Prometheus 配置為 Grafana 的數(shù)據(jù)源,我們這里已經(jīng)部署了這兩個應(yīng)用:

$ kubectl get svc -n kube-mon
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana NodePort 10.99.209.245 3000:30403/TCP 39d
prometheus NodePort 10.100.236.253 9090:31561/TCP 81d
$ kubectl get pods -n kube-mon
NAME READY STATUS RESTARTS AGE
grafana-d877667d6-4vgnd 1/1 Running 25 (60m ago) 39d
node-exporter-49l4f 1/1 Running 48 (60m ago) 81d
node-exporter-khqls 1/1 Running 46 (60m ago) 81d
node-exporter-wjwtb 1/1 Running 47 (60m ago) 81d
prometheus-649968556c-szb9c 1/1 Running 11 (60m ago) 14d

由于 Prometheus 配置了自動發(fā)現(xiàn),所以正常默認(rèn)情況下會自動抓取到 Dapr 應(yīng)用的指標(biāo),可以在 Prometheus 的 Targets 列表中查找:

Prometheus Targets

然后我們可以在 Grafana 中分別導(dǎo)入 https://github.com/dapr/dapr/tree/master/grafana 提供的 3 個 Dashboard。

導(dǎo)入 Dashboard

不過直接導(dǎo)入后的 Dashboard 可能不會直接顯示,需要做一些修改,將數(shù)據(jù)源修改為實際配置的數(shù)據(jù)源。

修改模板

按照自己的系統(tǒng)配置后正常就可以看到儀表盤數(shù)據(jù)了。以下是顯示 Dapr 系統(tǒng)服務(wù)指標(biāo)的儀表板示例:

儀表盤

日志

日志可讓你深入了解服務(wù)在運行時發(fā)生的情況,運行應(yīng)用程序時,Dapr 將自動從 Dapr sidecar 和 Dapr 系統(tǒng)服務(wù)發(fā)出日志數(shù)據(jù),但是,在應(yīng)用程序代碼中檢測到的日志不會自動包含在內(nèi)。若要從應(yīng)用程序代碼發(fā)出日志記錄,可以導(dǎo)入特定的 SDK,例如 OpenTelemetry SDK。

Dapr 會發(fā)出結(jié)構(gòu)化日志,每個日志條目采用以下格式:

dapr 日志格式

在排查問題的時候,其中的 time 和 level 字段非常有用,time 字段將對日志條目進(jìn)行排序,這樣就可以準(zhǔn)確查找特定的時間段。在進(jìn)行故障排除時,debug 級別的日志條目會提供有關(guān)代碼行為的詳細(xì)信息。

此外默認(rèn)情況下,Dapr 以純文本格式發(fā)出結(jié)構(gòu)化日志數(shù)據(jù)。每個日志條目都被格式化為包含鍵/值對的字符串,下面是純文本格式的日志記錄示例:

time="2020-03-11T17:08:48.303776-07:00" level=info msg="starting Dapr Runtime -- version 0.5.0-rc.3 -- commit v0.3.0-rc.0-155-g5dfcf2e" instance=dapr-pod-xxxx scope=dapr.runtime type=log ver=0.5.0-rc.3
time="2020-03-11T17:08:48.303913-07:00" level=info msg="log level set to: info" instance=dapr-pod-xxxx scope=dapr.runtime type=log ver=0.5.0-rc.3

雖然這種格式很簡單,但很難解析,如果我們使用日志收集工具的話,使用 JSON 格式的日志則更容易解析。使用 JSON 條目時,日志工具可以索引和查詢各個字段。下面是 JSON 格式的相同日志條目:

{"instance":"dapr-pod-xxxx","level":"info","msg":"starting Dapr Runtime -- version 0.5.0-rc.3 -- commit v0.3.0-rc.0-155-g5dfcf2e","scope":"dapr.runtime","time":"2020-03-11T17:09:45.788005Z","type":"log","ver":"0.5.0-rc.3"}
{"instance":"dapr-pod-xxxx","level":"info","msg":"log level set to: info","scope":"dapr.runtime","time":"2020-03-11T17:09:45.788075Z","type":"log","ver":"0.5.0-rc.3"}

若要啟用 JSON 格式,需要配置每個 Dapr sidecar,在自托管模式下,可以在命令行上指定標(biāo)志 --log-as-json:

dapr run --app-id nodeapp --log-level info --log-as-json node app.js

在 Kubernetes 中,可以為應(yīng)用程序的每個部署添加一個 dapr.io/log-as-json 注解,如下所示:

annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "calculator-front-end"
dapr.io/app-port: "80"
dapr.io/config: "dapr-config"
dapr.io/log-as-json: "true"

當(dāng)使用 Helm 在 Kubernetes 群集中安裝 Dapr 時,可以為所有 Dapr 系統(tǒng)服務(wù)啟用 JSON 格式的日志記錄:

helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
kubectl create namespace dapr-system
helm install dapr dapr/dapr --namespace dapr-system --set global.logAsJson=true

由 Dapr 發(fā)出的日志可以輸入到監(jiān)控后端,以供分析。日志收集器是一個組件,用于從系統(tǒng)收集日志并將其發(fā)送到監(jiān)控后端,常用的日志收集器是 Fluentd,前面課程中我們已經(jīng)介紹過如何在 Kubernetes 中設(shè)置 Fluentd、Elastic search 和 Kibana 來收集日志,也可以直接參考官方文檔 https://docs.dapr.io/operations/monitoring/logging/fluentd/ 再次進(jìn)行了解。

運行狀況

服務(wù)的運行狀態(tài)提供對其可用性的見解,每個 Dapr sidecar 都會暴露一個運行狀況的 API,宿主環(huán)境可以使用該 API 來確定 sidecar 的運行狀況。

GET http://localhost:3501/v1.0/healthz

該操作返回兩個 HTTP 狀態(tài)代碼:

  • 204:sidecar 運行正常時。
  • 500:sidecar 運行狀況不正常。

在自拓管模式下運行時,不會自動調(diào)用運行狀況 API,不過,可以通過應(yīng)用程序代碼或運行狀態(tài)監(jiān)視工具調(diào)用 API。

在 Kubernetes 中運行時,Dapr sidecar-injector 會自動將 Kubernetes 配置為使用運行狀況 API 來執(zhí)行存活性探針和就緒探針。

Kubernetes 使用存活性探針來確定容器是否已啟動并正在運行,如果存活性探針返回失敗代碼,Kubernetes 將假定容器狀態(tài)為“死亡”并自動重啟該容器,此功能可提高應(yīng)用程序的整體可用性。

Kubernetes 使用就緒探針來確定容器是否已準(zhǔn)備好開始接受流量,當(dāng)某個 Pod 的所有容器都準(zhǔn)備就緒時,就視為它已經(jīng)準(zhǔn)備就緒了,就緒情況決定 Kubernetes 服務(wù)是否可以在負(fù)載均衡場景中將流量路由到 Pod,未就緒的 Pod 將自動從負(fù)載均衡器中刪除。

存活性探針和就緒探針具有多個可配置參數(shù),兩者都是在 Pod 清單文件的容器規(guī)范部分配置的。對于每個 sidecar 容器,Dapr 默認(rèn)使用以下配置:

livenessProbe:
httpGet:
path: v1.0/healthz
port: 3501
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: v1.0/healthz
port: 3501
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3

以下參數(shù)可用于探針:

  • path 指定 Dapr 運行狀況 API 端點。
  • port 指定 Dapr 運行狀況 API 端口。
  • initialDelaySeconds 指定 Kubernetes 在首次開始探針容器之前需等待的秒數(shù)。
  • periodSeconds 指定 Kubernetes 在兩次探針之間等待的秒數(shù)。
  • timeoutSeconds 指定 Kubernetes 在超時前等待 API 響應(yīng)所需的秒數(shù)。超時將被解釋為失敗。
  • failureThreshold 指定在考慮容器處于不活動狀態(tài)或未就緒之前,Kubernetes 將接受的失敗狀態(tài)代碼的數(shù)量。

對于在生產(chǎn)環(huán)境中運行分布式系統(tǒng),詳細(xì)的可觀測性至關(guān)重要。Dapr 提供不同類型的遙測,包括分布式追蹤、日志、指標(biāo)和運行狀況。

需要注意的是 Dapr 僅生成 Dapr 系統(tǒng)服務(wù)和 sidecar 的遙測數(shù)據(jù),應(yīng)用程序代碼中的遙測不會自動包括在內(nèi)。不過我們可以使用特定的 SDK 從應(yīng)用程序代碼中發(fā)出遙測數(shù)據(jù)。

Dapr 遙測是以基于開放標(biāo)準(zhǔn)的格式生成的,因此可以由大量可用的監(jiān)視工具引入。包括 Zipkin、Azure Application Insights、ELK Stack、New Relic 和 Grafana 等。此外 Dapr 還可以配置為發(fā)出結(jié)構(gòu)化日志記錄,建議使用 JSON 格式的結(jié)構(gòu)化日志數(shù)據(jù),因為后端監(jiān)控工具可以對其進(jìn)行索引,用戶通過索引日志可在搜索日志記錄時執(zhí)行豐富的查詢。同時 Dapr 也提供顯示 Dapr 服務(wù)和配置相關(guān)信息的儀表板。


本文名稱:Dapr 可觀測性之指標(biāo)與日志
網(wǎng)站URL:http://www.dlmjj.cn/article/dhdhhis.html