iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
DevOps

新創視角下的 DevOps × AI 探索系列 第 25

Day 25. Logging & Monitoring:結合 Prometheus、Grafana、ELK/Loki

  • 分享至 

  • xImage
  •  

一、前言:為什麼 DevOps 離不開 Logging & Monitoring

服務在 Kubernetes 上運行時,若沒有完善的監控與日誌系統,一旦出現 記憶體不足、節點負載異常、API 延遲暴增 等問題,就很難快速定位與修復。

這也是為什麼在 DevOps 與 MLOps 的世界裡,Observability(可觀測性) 成為不可或缺的一環。它主要由三大支柱構成:

  • Metrics(度量):量化系統狀態,如 CPU 使用率、延遲、吞吐量。
  • Logs(日誌):事件與錯誤的詳細紀錄。
  • Traces(追蹤):跨服務請求的完整路徑。

本篇的目標是建立一套能監控 workload 的 Logging & Monitoring 架構,結合:

  • Prometheus + Grafana:監控與可視化
  • ELK / Loki:集中化日誌管理
    並為下一篇的 GPU 資源管理與調度 打好基礎。

二、觀測性系統的整體架構

🔧 架構組成

| 元件 | 功能 |
|------|------|
| **Prometheus** | 收集與儲存 Metrics |
| **Grafana** | 可視化與告警 |
| **Loki / ELK** | 集中管理與查詢 Log |
| **Alertmanager** | 告警與通知 |

🔍 系統架構圖

[Kubernetes Nodes]
├── Node Exporter  → 系統 Metrics
├── Application Logs → Loki / Fluent Bit
├── Pod Metrics (GPU/CPU) → Prometheus
└── NVIDIA GPU Operator → GPU Metrics
[Prometheus] ←→ [Alertmanager]
[Grafana] ← Prometheus + Loki

三、Metrics:使用 Prometheus 建立監控基礎

1. 安裝與設定

推薦使用 kube-prometheus-stack

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitor prometheus-community/kube-prometheus-stack

安裝完成後,會自動部署:

  • Prometheus Server
  • Node Exporter
  • kube-state-metrics
  • Grafana
  1. 收集 GPU 指標

若環境中有 GPU,可搭配 NVIDIA DCGM Exporter:

helm repo add nvidia https://nvidia.github.io/gpu-operator
helm install gpu-operator nvidia/gpu-operator

Prometheus 會自動發現 GPU Metrics,例如:

  • DCGM_FI_DEV_GPU_UTIL:GPU 使用率
  • DCGM_FI_DEV_MEM_COPY_UTIL:GPU 記憶體傳輸率
  1. 自訂 Metrics 實作範例

在 AI 推理服務中,加入自訂延遲監控:

from prometheus_client import start_http_server, Summary
import time, random

# 定義自訂 metrics
INFERENCE_LATENCY = Summary('inference_latency_seconds', 'Model inference latency')

@INFERENCE_LATENCY.time()
def infer():
    time.sleep(random.uniform(0.2, 0.8))

if __name__ == '__main__':
    start_http_server(8000)
    while True:
        infer()

部署後,Prometheus 就能自動抓取 /metrics。

四、Logging:集中管理與查詢容器日誌

  1. ELK vs Loki 比較
| 項目 | ELK Stack (Elasticsearch + Logstash + Kibana) | Loki + Grafana |
|------|-----------------------------------------------|----------------|
| 儲存 | 全文索引,資料量大 | Label 壓縮,輕量化 |
| 搜尋速度 | 高 | 時序最佳化 |
| 成本 | 高 | 低 |
| 安裝複雜度 | 高 | 簡單 |
| 適合場景 | 企業級 Log 分析 | K8s Log 監控與查詢 |

在 Kubernetes 環境中,Loki 通常是更輕量、實用的選擇。

  1. 安裝 Loki + Promtail
helm repo add grafana https://grafana.github.io/helm-charts
helm install loki-stack grafana/loki-stack
  1. Promtail 收集容器日誌設定範例
scrape_configs:
  - job_name: kubernetes-pods
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        target_label: app

Promtail 會將每個 Pod 的 log 傳送至 Loki 儲存,並加上標籤(如 app 名稱、namespace)。

五、Grafana:可視化與告警中心

  1. 整合資料來源

進入 Grafana → Data Source:

  • 新增 Prometheus
  • 新增 Loki
  1. 建立關鍵 Dashboard

可以在 Grafana 建立多層次的儀表板:
系統層級

  • 節點 CPU、GPU 使用率
  • Memory、Network I/O
  • Pod restart 次數
    AI 推理層級
  • 推理延遲分佈(取自自訂 metrics)
  • Error rate、QPS
  • 模型輸出量
  1. 設定告警

使用 Grafana Alert 或 Prometheus Alertmanager:

groups:
  - name: gpu-alert
    rules:
      - alert: GPUHighUsage
        expr: DCGM_FI_DEV_GPU_UTIL > 90
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "GPU 使用率超過 90%"

可設定通知至 Slack、Discord 或 Email。

六、實作案例:監控 AI 推理服務

  1. 目標

監控一個部署於 K8s 的 AI 模型服務,包括:

  • CPU、GPU 使用率
  • 推理延遲
  • Error log
  1. 部署範例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ai-inference
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: ai-model
          image: my-ai-inference:latest
          ports:
            - containerPort: 8000
          resources:
            limits:
              nvidia.com/gpu: 1
          env:
            - name: PROMETHEUS_PORT
              value: "8000"
  1. 架構示意
[AI Inference Pod]
   ├── /metrics → Prometheus
   ├── stdout logs → Loki
   └── Alerts → Grafana Alertmanager

七、實戰整合與最佳實踐

  1. Metrics + Logs + Alerts 三位一體
    • Grafana 可同時顯示 Metrics 與 Logs,實現從「指標 → 日誌 → 根因」的快速排錯。
  2. 自動伸縮整合
    • 結合前一篇的 HPA/VPA,根據 Prometheus 指標自動調整 Pod 數量。
  3. 長期數據與成本管理
    • Prometheus 以短期儲存為主,可透過 Remote Write 導出至 Thanos。
    • Loki 可設定保留期限(如 6 個月)節省空間。

八、結語:打造可觀測的 AI DevOps 環境

從 Day 24 的自動伸縮(HPA/VPA)到本篇的 Logging & Monitoring,我們已建立起一個能夠「自我監控、自我調整」的 DevOps 架構。

  • Prometheus + Grafana 提供可量化的 Metrics 與可視化儀表板。
  • Loki / ELK 提供可搜尋的 Logs。
  • 結合 Alertmanager,可實現自動告警與伸縮調整。

在下一篇,我們將進一步探討 GPU 資源管理與調度,讓 AI 工作負載的效能最大化、資源利用最優化。

延伸閱讀與進階主題

  • OpenTelemetry:整合 Trace 與 Log
  • Thanos:Prometheus 長期儲存方案
  • Loki 多租戶設定與隔離機制

上一篇
Day 24: 水平自動伸縮 (HPA) 與垂直伸縮 (VPA)
系列文
新創視角下的 DevOps × AI 探索25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言