如何为DOKS集群安装Prometheus监控栈

介紹

越來越多的組織採用Kubernetes來管理其容器,需要一個解決方案來監控其分佈式系統的健康狀況。因此,您將進入Prometheus – 一個強大的開源工具,用於監控K8s空間中的容器化應用程式。

在本教程中,您將學習如何安裝和配置Prometheus堆棧,以監控您的DOKS集群中的所有Pod,以及Kubernetes集群狀態指標。然後,您將連接Prometheus與Grafana,以可視化所有指標並使用PromQL語言執行查詢。最後,您將為您的Prometheus實例配置持久性存儲,以持久保存所有DOKS集群和應用程式指標數據。

目錄

先決條件

完成本教程,您將需要:

  1. A Git client to clone the Starter Kit repository.
  2. Helm 用於管理 Prometheus 堆棧的發布和升級。
  3. Kubectl 用於 Kubernetes 交互。
  4. Curl 用於測試示例(後端應用程式)。
  5. 在叢集中部署 Emojivoto 示例應用程式。

請確保 kubectl 上下文已配置為指向您的 Kubernetes 叢集。請參考 DOKS 設置教程中的 步驟 3 – 創建 DOKS 叢集

步驟 1 – 安裝 Prometheus 堆疊

在此步驟中,您將安裝 kube-prometheus 堆疊,這是針對 Kubernetes 的一個具有見解的完整監控堆疊。它包括 Prometheus Operator、kube-state-metrics、預先構建的清單、節點導出器、指標 API、Alerts Manager 和 Grafana。

您將使用 Helm 套件管理器來完成此任務。Helm 圖表可在此處查看。

首先,複製 Starter Kit 存儲庫並將目錄更改為您的本地副本。

接下來,添加 Helm 存儲庫並列出可用的圖表:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm repo update prometheus-community

helm search repo prometheus-community

輸出類似於以下內容:

NAME                                                    CHART VERSION   APP VERSION     DESCRIPTION
prometheus-community/alertmanager                       0.18.1          v0.23.0         The Alertmanager handles alerts sent by client ...
prometheus-community/kube-prometheus-stack              35.5.1          0.56.3          kube-prometheus-stack collects Kubernetes manif...
...

感興趣的圖表是 prometheus-community/kube-prometheus-stack,它將在叢集上安裝 Prometheus、Promtail、Alertmanager 和 Grafana。請訪問kube-prometheus-stack頁面以獲取有關此圖表的更多詳細信息。

然後,使用您喜歡的編輯器(最好支持 YAML 驗證)打開並檢查提供在 Starter Kit 存儲庫中的04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml文件。默認情況下,kubeSchedetcd指標已禁用 – 這些組件由DOKS管理,且對Prometheus不可訪問。請注意,存儲設置為emptyDir。這意味著如果 Prometheus pod 重新啟動,存儲將會丟失(您稍後將在配置 Prometheus 的持久存儲部分中修復此問題)。

[選擇性] 如果您遵循了“設置 DigitalOcean 管理的 Kubernetes 集群”指南中的第 4 步 – 添加用於可觀察性的專用節點,則需要編輯提供在 Starter Kit 存儲庫中的04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml文件,並取消註釋 Grafana 和 Prometheus 的affinity部分。

prometheusSpec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: preferred
                operator: In
                values:
                  - observability
grafana:
  enabled: true
  adminPassword: prom-operator
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
              - key: preferred
                operator: In
                values:
                  - observability

上述配置的解釋:

  • preferredDuringSchedulingIgnoredDuringExecution – 調度器嘗試找到符合規則的節點。如果找不到匹配的節點,調度器仍然會調度 Pod。
  • preference.matchExpressions – 根据特定标准匹配特定节点的选择器。上述示例告诉调度器将工作负载(例如 Pod)放置在带有键 – preferred 和值 – observability 的节点上。

最后,使用 Helm 安装 kube-prometheus-stack

HELM_CHART_VERSION="35.5.1"

helm install kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  --create-namespace \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

A specific version of the Helm chart is used. In this case 35.5.1 was picked, which maps to the 0.56.3 version of the application (see output from Step 2.). It’s a good practice to lock on a specific version. This helps to have predictable results and allows versioning control via Git.

–create-namespace \

helm ls -n monitoring

现在,检查 Prometheus stack Helm 发布状态:

NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
kube-prom-stack monitoring      1               2022-06-07 09:52:53.795003 +0300 EEST   deployed        kube-prometheus-stack-35.5.1    0.56.3

输出看起来类似于以下内容。注意 STATUS 列的值 – 应该为 deployed

kubectl get all -n monitoring

查看 Prometheus 可用的 Kubernetes 资源:

NAME                                                         READY   STATUS    RESTARTS   AGE
pod/alertmanager-kube-prom-stack-kube-prome-alertmanager-0   2/2     Running   0          3m3s
pod/kube-prom-stack-grafana-8457cd64c4-ct5wn                 2/2     Running   0          3m5s
pod/kube-prom-stack-kube-prome-operator-6f8b64b6f-7hkn7      1/1     Running   0          3m5s
pod/kube-prom-stack-kube-state-metrics-5f46fffbc8-mdgfs      1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-gcb8s           1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-kc5wz           1/1     Running   0          3m5s
pod/kube-prom-stack-prometheus-node-exporter-qn92d           1/1     Running   0          3m5s
pod/prometheus-kube-prom-stack-kube-prome-prometheus-0       2/2     Running   0          3m3s

NAME                                               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/alertmanager-operated                      ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   3m3s
service/kube-prom-stack-grafana                    ClusterIP   10.245.147.83    <none>        80/TCP                       3m5s
service/kube-prom-stack-kube-prome-alertmanager    ClusterIP   10.245.187.117   <none>        9093/TCP                     3m5s
service/kube-prom-stack-kube-prome-operator        ClusterIP   10.245.79.95     <none>        443/TCP                      3m5s
service/kube-prom-stack-kube-prome-prometheus      ClusterIP   10.245.86.189    <none>        9090/TCP                     3m5s
service/kube-prom-stack-kube-state-metrics         ClusterIP   10.245.119.83    <none>        8080/TCP                     3m5s
service/kube-prom-stack-prometheus-node-exporter   ClusterIP   10.245.47.175    <none>        9100/TCP                     3m5s
service/prometheus-operated                        ClusterIP   None             <none>        9090/TCP                     3m3s

NAME                                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/kube-prom-stack-prometheus-node-exporter   3         3         3       3            3           <none>          3m5s

NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kube-prom-stack-grafana               1/1     1            1           3m5s
deployment.apps/kube-prom-stack-kube-prome-operator   1/1     1            1           3m5s
deployment.apps/kube-prom-stack-kube-state-metrics    1/1     1            1           3m5s

NAME                                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/kube-prom-stack-grafana-8457cd64c4              1         1         1       3m5s
replicaset.apps/kube-prom-stack-kube-prome-operator-6f8b64b6f   1         1         1       3m5s
replicaset.apps/kube-prom-stack-kube-state-metrics-5f46fffbc8   1         1         1       3m5s

NAME                                                                    READY   AGE
statefulset.apps/alertmanager-kube-prom-stack-kube-prome-alertmanager   1/1     3m3s
statefulset.apps/prometheus-kube-prom-stack-kube-prome-prometheus       1/1     3m3s

您应该已部署以下资源:prometheus-node-exporterkube-prome-operatorkube-prome-alertmanagerkube-prom-stack-grafanakube-state-metrics。输出类似于:

kubectl --namespace monitoring port-forward svc/kube-prom-stack-grafana 3000:80

然后,您可以通过端口转发到本地机器连接到 Grafana(使用默认凭据:admin/prom-operator – 请参阅 prom-stack-values-v35.5.1 文件):

您不应将 Grafana 暴露给公共网络(例如创建 Ingress 映射或 LB 服务)使用 默认登录/密码

Grafana安裝包含多個儀表板。在localhost:3000上打開網頁瀏覽器。一旦進入,您可以轉到儀表板 -> 瀏覽,並選擇不同的儀表板。

在下一部分,您將了解如何設置Prometheus來發現監控目標。作為示例,將使用Emojivoto示例應用程序。您還將了解ServiceMonitor是什麼。

步驟2 – 配置Prometheus和Grafana

您已經將Prometheus和Grafana部署到集群中。在此步驟中,您將了解如何使用ServiceMonitor。 ServiceMonitor是告訴Prometheus如何發現新監控目標的首選方法之一。

前提條件部分的第5步中創建的Emojivoto部署默認在端口8801上通過Kubernetes服務提供了/metrics端點。

kubectl get svc -n emojivoto

接下來,您將發現負責為Prometheus公開指標數據的Emojivoto服務。所涉及的服務分別稱為emoji-svcvoting-svc(請注意,它使用的是emojivoto命名空間):

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
emoji-svc    ClusterIP   10.245.135.93    <none>        8080/TCP,8801/TCP   22h
voting-svc   ClusterIP   10.245.164.222   <none>        8080/TCP,8801/TCP   22h
web-svc      ClusterIP   10.245.61.229    <none>        80/TCP              22h

輸出類似於以下內容:

kubectl port-forward svc/emoji-svc 8801:8801 -n emojivoto

接下來,執行port-forward以檢查指標:

curl -s http://localhost:8801/metrics

暴露的指標可以通過在網頁瀏覽器中導航至localhost或通過curl:

輸出看起來類似以下內容:
go_gc_duration_seconds{quantile="0"} 5.317e-05
go_gc_duration_seconds{quantile="0.25"} 0.000105305
go_gc_duration_seconds{quantile="0.5"} 0.000138168
go_gc_duration_seconds{quantile="0.75"} 0.000225651
go_gc_duration_seconds{quantile="1"} 0.016986437
go_gc_duration_seconds_sum 0.607979843
go_gc_duration_seconds_count 2097

# TYPE go_gc_duration_seconds summary

要檢查voting-svc服務的指標,請停止emoji-svc的端口轉發,然後對第二個服務執行相同的步驟。

  • 接下來,將Prometheus連接到Emojivoto指標服務。有幾種方法可以做到這一點:
  • <static_config> – 允許指定目標列表和它們的共同標籤集。
  • <kubernetes_sd_config> – 允許從Kubernetes的REST API檢索採集目標並始終與集群狀態同步。

Prometheus Operator – 通過CRDs簡化Kubernetes集群內的Prometheus監控。

接下來,您將使用Prometheus Operator公開的ServiceMonitorCRD來定義新的監控目標。

cd Kubernetes-Starter-Kit-Developers

首先,更改目錄(如果尚未這樣做)到Starter Kit Git存儲庫已克隆的位置:

additionalServiceMonitors:
  - name: emojivoto-monitor
    selector:
      matchExpressions:
        - key: app
          operator: In
          values:
            - emoji-svc
            - voting-svc
    namespaceSelector:
      matchNames:
        - emojivoto
    endpoints:
      - port: prom

接下來,使用您選擇的文本編輯器(最好支持YAML lint)打開Starter Kit存儲庫中提供的04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml文件。請刪除周圍關於additionalServiceMonitors部分的註釋。輸出看起來類似於:

  • 上述配置的解釋:
  • selector -> matchExpressions – 告訴ServiceMonitor要監控哪個服務。它將針對所有具有標籤鍵app和值emoji-svcvoting-svc的服務。這些標籤可以通過運行以下命令獲取:kubectl get svc --show-labels -n emojivoto
  • namespaceSelector – 在這裡,您希望匹配部署了Emojivoto的命名空間。

endpoints -> port – 引用要監控的服務的端口。

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

最後,使用Helm應用更改:

kubectl port-forward svc/kube-prom-stack-kube-prome-prometheus 9090:9090 -n monitoring

接下來,請檢查是否將Emojivoto目標添加到Prometheus進行抓取。為Prometheus創建一個端口轉發,端口為9090

localhost:9090上打開一個Web瀏覽器。然後,轉到Status -> Targets頁面,並檢查結果(請注意serviceMonitor/monitoring/emojivoto-monitor/0路徑):

發現的目標中有2個條目,因為Emojivoto部署包含2個公開度量端點的服務。

在接下来的步骤中,您将了解Prometheus查询语言(PromQL)以及一些简单示例,以帮助您入门并了解这种语言。

步骤 3 – PromQL(Prometheus查询语言)

在这一步中,您将学习Prometheus查询语言(PromQL)的基础知识。PromQL可帮助您对来自DOKS集群中所有Pod和应用程序的各种指标执行查询。

PromQL是一种专为Prometheus构建的特定领域语言(DSL),允许您查询指标。整体表达式定义了最终值,而嵌套表达式表示参数和操作数的值。有关更深入的解释,请访问官方的PromQL页面。

接下来,您将检查其中一个Emojivoto指标,即emojivoto_votes_total,它表示投票的总数。这是一个计数器值,每次对Emojivoto投票端点发出请求时都会增加。

kubectl port-forward svc/kube-prom-stack-kube-prome-prometheus 9090:9090 -n monitoring

首先,在端口9090上为Prometheus创建一个端口转发:

接下来,打开表达式浏览器

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 20
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 17
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":basketball_man:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beach_umbrella:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beer:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 11

在查询输入字段中粘贴emojivoto_votes_total,然后按回车键。输出看起来类似于:

導航到 Emojivoto 應用程式,從首頁點擊 100 表情符號以進行投票。

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 17
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 21
emojivoto_votes_total{container="voting-svc", emoji=":basketball_man:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beach_umbrella:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 10
emojivoto_votes_total{container="voting-svc", emoji=":beer:", endpoint="prom", instance="10.244.25.31:8801", job="voting-svc", namespace="emojivoto", pod="voting-74ff7f8b55-jl6qs", service="voting-svc"} 11

從第 3 步的查詢結果頁面導航並點擊 執行 按鈕。您應該會看到 100 表情符號的計數器增加了一個。輸出看起來類似於:

emojivoto_votes_total{service="voting-svc"}

PromQL 將類似的數據分組到所謂的向量中。如上所示,每個向量都有一組屬性,可以使其彼此區分。您可以基於感興趣的屬性將結果分組。例如,如果您只關心來自 voting-svc 服務的請求,那麼請在查詢字段中輸入以下內容:

emojivoto_votes_total{container="voting-svc", emoji=":100:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 492
emojivoto_votes_total{container="voting-svc", emoji=":bacon:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 532
emojivoto_votes_total{container="voting-svc", emoji=":balloon:", endpoint="prom", instance="10.244.6.91:8801", job="voting-svc", namespace="emojivoto", pod="voting-6548959dd7-hssh2", service="voting-svc"} 521

輸出看起來類似於(請注意,它僅選擇與您標準相匹配的結果):

以上結果顯示了從發出指標的 Emojivoto 部署中每個 Pod 的總請求數(由 2 個部分組成)。

這只是對 PromQL 是什麼及其能力的非常簡單的介紹。但它可以做得更多,比如計算指標數量,在預定間隔內計算速率等。請訪問官方的 PromQL 頁面以了解語言的更多功能。

在下一步中,您將學習如何使用 Grafana 來可視化 Emojivoto 樣本應用程式的指標。

步驟4 – 使用 Grafana 可視化指標

儘管 Prometheus 具有一些內置支持來可視化數據,但更好的方式是通過 Grafana 來完成,它是一個用於監控和觀測的開源平台,讓您可以可視化和探索集群的狀態。

官方網頁描述了它能夠:

查詢、可視化、警報和理解您的數據,無論它存儲在何處。

kubectl --namespace monitoring port-forward svc/kube-prom-stack-grafana 3000:80

安裝 Grafana 無需任何額外步驟,因為步驟1 – 安裝 Prometheus 堆疊已經為您安裝了 Grafana。您只需像下面這樣進行端口轉發,立即訪問儀表板(默認凭證:admin/prom-monitor):

要查看所有 Emojivoto 指標,您將使用 Grafana 中預安裝的默認儀表板之一。

轉到 Grafana 儀表板 部分。

接下來,搜索 General/Kubernetes/Compute Resources/Namespace(Pods) 儀表板並訪問它。

最後,選擇 Prometheus 數據源,添加 emojivoto 命名空間。

您可以在 Grafana 中玩弄並添加更多面板來可視化其他數據來源,並根據範圍將它們分組。此外,您可以從 Grafana kube-mixin 項目中探索可用的 Kubernetes 儀表板。

在下一步中,您將使用 DigitalOcean 块存儲配置 Prometheus 的持久存儲,以便在服務器重新啟動或集群失敗時保留您的 DOKS 和應用程序指標。

步驟 5 – 配置 Prometheus 的持久存儲

在此步驟中,您將學習如何啟用 Prometheus 的持久存儲,以便在服務器重新啟動或集群失敗時保留指標數據。

kubectl get storageclass

首先,您需要一個存儲類來進行操作。運行以下命令來檢查可用的存儲類。

NAME                         PROVISIONER                 RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
do-block-storage (default)   dobs.csi.digitalocean.com   Delete          Immediate           true                   4d2h

輸出應該類似於以下內容。請注意,您可以使用 DigitalOcean 块存儲。

cd Kubernetes-Starter-Kit-Developers

接下來,更改目錄(如果尚未更改)到已克隆的 Starter Kit Git 存儲庫所在位置:

prometheusSpec:
  storageSpec:
    volumeClaimTemplate:
      spec:
        storageClassName: do-block-storage
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 5Gi

然後,使用您選擇的文本編輯器(最好支援YAML lint)打開Starter Kit存儲庫中提供的04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml文件。搜索storageSpec行,並取消對Prometheus所需部分的註釋。 storageSpec定義應如下所示:

  • 上述配置的說明:
  • volumeClaimTemplate – 定義新的PVC。
  • storageClassName – 定義存儲類別(應與kubectl get storageclass命令輸出中的值相同)。

resources – 設置存儲請求值。 在這種情況下,為新卷請求了5 Gi的總容量。

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
  --namespace monitoring \
  -f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

最後,使用Helm應用設置:

kubectl get pvc -n monitoring

完成上述步驟後,檢查PVC狀態:

NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS         MODES              AGE
kube-prome-prometheus-0   Bound    pvc-768d85ff-17e7-4043-9aea-4929df6a35f4   5Gi        RWO            do-block-storage   4d2h

A new Volume should appear in the Volumes web page from your DigitalOcean account panel:

輸出看起來類似以下內容。STATUS列應顯示Bound

步驟6 – 為Grafana配置持久存儲

在這一步,您將學習如何啟用 Grafana 的持久性存儲,以便在服務器重新啟動時或集群故障時保留圖形。您將定義一個使用 DigitalOcean 块存儲的 5 Gi 持久性卷索取(PVC)。下一步與 第 5 步 – 配置 Prometheus 的持久性存儲 相同。

grafana:
  ...
  persistence:
    enabled: true
    storageClassName: do-block-storage
    accessModes: ["ReadWriteOnce"]
    size: 5Gi

首先,使用您選擇的文本編輯器(最好支持 YAML lint)打開提供的 Starter Kit 存儲庫中的 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml 文件。Grafana 的持久性存儲部分應該如下所示:

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
--namespace monitoring \
-f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

接下來,使用 Helm 應用設置:

kubectl get pvc -n monitoring

完成上述步驟後,檢查 PVC 狀態:

NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS         MODES              AGE
kube-prom-stack-grafana   Bound    pvc-768d85ff-17e7-4043-9aea-4929df6a35f4   5Gi        RWO            do-block-storage   4d2h

A new Volume should appear in the Volumes web page from your DigitalOcean account panel:

輸出看起來類似於以下內容。 STATUS 列應顯示 Bound

PV 大小調整的最佳做法

  • 根據您的需求計算卷的大小,請遵循官方文檔建議和公式:
  • Prometheus 每个样本平均只存储 1-2 个字节。因此,要计划 Prometheus 服务器的容量,您可以使用以下粗略公式:
    needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

要降低摄入样本的速率,您可以减少抓取的时间序列数量(减少目标或每个目标的序列数量),或者您可以增加抓取间隔。然而,减少时间序列的数量可能更有效,因为在一个时间序列中对样本进行了压缩。

请查看有关该主题的运行方面部分以获取更多详细信息。

结论

在本教程中,您学习了如何安装和配置 Prometheus 堆栈,然后使用 Grafana 安装新的仪表板并可视化 DOKS 集群应用程序指标。您还学习了如何使用 PromQL 执行度量查询。最后,您配置并启用了 Prometheus 的持久性存储以存储集群指标。

使用Helm和Prometheus Operator設置DOKS集群監控

Source:
https://www.digitalocean.com/community/developer-center/how-to-install-prometheus-monitoring-stack-for-doks-cluster