• Milvusについて
  • スタート
  • コンセプト
  • ユーザーガイド
  • データインポート
  • AIツール
  • 管理ガイド
  • ツール
  • 統合
  • チュートリアル
  • よくあるご質問
  • API Reference

Grafana Lokiの設定

このガイドでは、Milvusクラスタのログを収集するLokiと、ログをクエリして表示するGrafanaの設定方法について説明します。

このガイドでは、以下の方法を学びます:

  • Helmを使用してMilvusクラスタにLokiと Alloyをデプロイする。
  • Lokiのオブジェクトストレージを設定する。
  • Grafanaを使用してログをクエリする。

参考までに、Promtailは非推奨となるため、Kubernetesのログを収集してLokiに転送する新しいエージェントとしてGrafana Labsが公式に提案しているAlloyを紹介します。

前提条件

Lokiのデプロイ

LokiはPrometheusにインスパイアされたログ集約システムです。Helmを使用してLokiをデプロイし、Milvusクラスタからログを収集します。

1.GrafanaのHelmチャートリポジトリを追加する

HelmにGrafanaのチャートリポジトリを追加し、更新します:

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ポッドのログを収集し、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. ウェブブラウザを開き、127.0.0.1:3000 に移動する。ユーザー名admin と、先ほど取得したパスワードを使用してログインする。
  2. 左側のメニューで、Connections>Add new connection を選択する。
  3. 表示されたページで、データソースのタイプとしてLokiを選択する。検索バーにlokiと入力すると、データ・ソースを検索できます。
  4. Lokiデータソースの設定で、Nameと URLを指定し、Save & testをクリックします。

DataSource データソース

3.Milvusログの照会

Lokiをデータソースとして追加したら、GrafanaでMilvusのログを照会する:

  1. 左側のメニューで、Exploreをクリックする。
  2. ページの左上隅で、loki データソースを選択する。
  3. Label browserを使用してラベルを選択し、ログをクエリする。

Query クエリ