iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Cloud Native

K8s上的機器人沙盒系列 第 18

Day 18|Logging:Loki + Promtail,集中收集 Isaac 與 Selkies 日誌

  • 分享至 

  • xImage
  •  

承接 Day 17(DCGM Exporter + Prometheus + Grafana 監控),今天要把 日誌 Logging 建立起來,透過 Loki + Promtail 收集 Isaac / Selkies 容器的日誌,集中管理並能在 Grafana 中檢索與關鍵字搜尋。

A. 為什麼需要集中日誌?

  • Pod 是短暫的:Isaac 或 Selkies Pod CrashLoop 或重啟時,本地日誌會消失。
  • 多租戶與多節點:需要集中化檢索,才能知道誰在什麼時間遇到錯誤。
  • Grafana 整合:可在同一 UI 觀察 GPU 指標與應用日誌,快速定位問題。

B. Loki 與 Promtail 基礎

  • Loki:類似「日誌版的 Prometheus」,存儲結構化日誌,支援 Label 與 LogQL 查詢。
  • Promtail:日誌收集 Agent,跑在節點上,負責 tail /var/log/containers/*.log 並打 Label 後送到 Loki。
  • Grafana:提供 Explore / Dashboard 介面,能跨度量與日誌查詢。

C. 安裝 Loki Stack

使用 Helm Chart 安裝:

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

kubectl create ns logging || true

helm upgrade --install loki grafana/loki-stack \
  -n logging \
  --set grafana.enabled=false \
  --set prometheus.enabled=false \
  --set fluent-bit.enabled=false

預設會裝 Loki(單副本)+ Promtail DaemonSet。

D. Promtail 設定(Label 日誌來源)

Promtail 預設會讀取 /var/log/containers,並自動附上:

  • namespace
  • pod
  • container
  • node

為了讓 Isaac 與 Selkies 的日誌更容易區分,可以加上自訂 Label:

# promtail-additionalScrape.yaml
server:
  log_level: info
clients:
- url: http://loki.logging:3100/loki/api/v1/push
positions:
  filename: /tmp/positions.yaml
scrape_configs:
- job_name: kubernetes-pods
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace]
    target_label: namespace
  - source_labels: [__meta_kubernetes_pod_name]
    target_label: pod
  - source_labels: [__meta_kubernetes_container_name]
    target_label: container
  - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
    target_label: app

套用:

kubectl -n logging apply -f promtail-additionalScrape.yaml

E. Grafana 整合

  1. 若 Day 17 已有 Grafana,新增 Loki DataSource:

    • URL: http://loki.logging:3100
    • Access: Server
  2. 進入 Explore → DataSource: Loki。

    • 查詢 Isaac Pod 日誌:

      {namespace="robotics", container="isaac"}
      
    • 查詢 Selkies 日誌:

      {namespace="robotics", container="selkies"}
      
  3. 搭配 Prometheus 度量 → 在同一儀表板同時顯示 GPU 使用率 + 錯誤日誌。

F. 常見問題

  • Promtail 沒抓到日誌 → 檢查 DaemonSet 是否在所有節點 Running。
  • Loki 查詢不到 → 確認 DataSource URL 與 NetworkPolicy。
  • 日誌過多難找 → 善用 Label 與 LogQL 過濾(如 |= "error"|~ "WARN|ERROR")。
  • 效能問題 → 大規模需分散式 Loki(Loki microservices 模式)。

感想

面倒くさいな


上一篇
Day 17|Monitor:DCGM Exporter + Prometheus + Grafana
系列文
K8s上的機器人沙盒18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言