• 關於 Milvus
  • 開始使用
  • 概念
  • 使用者指南
  • 資料匯入
  • AI 工具
  • 管理指南
  • 工具
  • 整合
  • 教學
  • 常見問題
  • API Reference

配置 Grafana Loki

本指南說明如何設定 Loki 以收集日誌,以及設定 Grafana 以查詢和顯示 Milvus 叢集的日誌。

在本指南中,您將學習如何

  • 使用 Helm 在 Milvus 叢集上部署LokiAlloy
  • 為 Loki 配置物件儲存。
  • 使用 Grafana 查詢日誌。

作為參考,Promtail將會被淘汰,因此我們引進 Alloy,它已被 Grafana Labs 正式建議為收集 Kubernetes 日誌並將其轉送至 Loki 的新代理程式。

先決條件

部署 Loki

Loki 是受 Prometheus 啟發的日誌聚合系統。使用 Helm 部署 Loki,從您的 Milvus 叢集收集日誌。

1.新增 Grafana 的 Helm 圖表儲存庫

將 Grafana 的圖表儲存庫加入 Helm 並更新:

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

2.為 Loki 設定物件儲存

選擇下列其中一個儲存選項,並建立loki.yaml 配置檔案:

  • 選項 1:使用 MinIO 儲存

    loki:
      commonConfig:
        replication_factor: 1
      auth_enabled: false
    
    minio:
      enabled: true
    
  • 選項 2:使用 AWS S3 儲存

    在以下範例中,請將<accessKey><keyId> 替換為您自己的 S3 存取金鑰和 ID,s3.endpoint 替換為 S3 端點,s3.region 替換為 S3 區域。

    loki:
      commonConfig:
        replication_factor: 1
      auth_enabled: false
      storage:
        bucketNames:
          chunks: loki-chunks
          ruler: loki-ruler
          admin: loki-admin
        type: 's3'
        s3:
          endpoint: s3.us-west-2.amazonaws.com
          region: us-west-2
          secretAccessKey: <accessKey>
          accessKeyId: <keyId>
    

3.安裝 Loki

執行下列指令來安裝 Loki:

kubectl create ns loki
helm install --values loki.yaml loki grafana/loki -n loki

部署 Alloy

我們將向您展示 Alloy配置

1.建立 Alloy 組態

我們將使用下列alloy.yaml 收集所有 Kubernetes pod 的日誌,並透過 loki-gateway 傳送至 Loki:

alloy:
  enableReporting: false
  resources: {}
  configMap:
    create: true
    content: |-
      loki.write "default" {
        endpoint {
          url = "http://loki-gateway/loki/api/v1/push"
        }
      }

      discovery.kubernetes "pod" {
        role = "pod"
      }

      loki.source.kubernetes "pod_logs" {
        targets    = discovery.relabel.pod_logs.output
        forward_to = [loki.write.default.receiver]
      }

      // Rewrite the label set to make log query easier
      discovery.relabel "pod_logs" {
        targets = discovery.kubernetes.pod.targets
        rule {
          source_labels = ["__meta_kubernetes_namespace"]
          action = "replace"
          target_label = "namespace"
        }

        // "pod" <- "__meta_kubernetes_pod_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_name"]
          action = "replace"
          target_label = "pod"
        }

        // "container" <- "__meta_kubernetes_pod_container_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_container_name"]
          action = "replace"
          target_label = "container"
        }

        // "app" <- "__meta_kubernetes_pod_label_app_kubernetes_io_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name"]
          action = "replace"
          target_label = "app"
        }

        // "job" <- "__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"
        rule {
          source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"]
          action = "replace"
          target_label = "job"
          separator = "/"
          replacement = "$1"
        }

        // L"__path__" <- "__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
          action = "replace"
          target_label = "__path__"
          separator = "/"
          replacement = "/var/log/pods/*$1/*.log"
        }

        // "container_runtime" <- "__meta_kubernetes_pod_container_id"
        rule {
          source_labels = ["__meta_kubernetes_pod_container_id"]
          action = "replace"
          target_label = "container_runtime"
          regex = "^(\\S+):\\/\\/.+$"
          replacement = "$1"
        }
      }

2.安裝 Alloy

helm install --values alloy.yaml alloy grafana/alloy -n loki

使用 Grafana 查詢日誌

部署 Grafana 並將其設定為連線至 Loki 以查詢日誌。

1.部署 Grafana

使用下列指令安裝 Grafana:

kubectl create ns monitoring
helm install my-grafana grafana/grafana --namespace monitoring

在存取 Grafana 之前,您需要擷取admin 密碼:

kubectl get secret --namespace monitoring my-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

然後,將 Grafana 連接埠轉送至您的本機:

export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=my-grafana" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace monitoring port-forward $POD_NAME 3000

2.在 Grafana 中將 Loki 新增為資料來源

一旦 Grafana 運行,您需要將 Loki 添加為查詢日誌的資料來源。

  1. 打開 Web 瀏覽器並導航至127.0.0.1:3000 。使用之前獲得的用戶名admin 和密碼登錄。
  2. 在左側功能表中,選擇連線>新增連線
  3. 在出現的頁面中,選擇Loki作為資料來源類型。您可以在搜尋列中輸入loki來尋找資料來源。
  4. 在 Loki 資料來源設定中,指定名稱URL,然後按一下儲存與測試

DataSource 資料來源

3.查詢 Milvus 日誌

將 Loki 新增為資料來源後,在 Grafana 中查詢 Milvus 日誌:

  1. 在左側功能表中,按一下探索
  2. 在頁面左上角,選擇 loki 資料來源。
  3. 使用標籤瀏覽器選擇標籤並查詢日誌。

Query 查詢