46.5kデモを予約するログイン無料で始める

GrafanaとLokiでMilvusを監視する

Apr 12, 20242 min read

Grafana & LokiによるMilvusのモニタリング入門

この投稿では、Milvusのデプロイメントを効果的に監視するためのGrafanaとLokiのセットアップについてご案内します。

Milvusは、大量の埋め込みベクトルを保存、インデックス、管理することを目的とした分散ベクトルデータベースです。何兆ものベクトルを効率的にインデックス化し、検索することができるため、MilvusはAIや機械学習のワークロードに最適です。

一方、Grafanaはモニタリングと観測のためのオープンソースのプラットフォームで、メトリクス、ログ、トレースの可視化に最適だ。システムの健全性とパフォーマンスを監視するためのダッシュボードを作成することができます。Lokiは、Prometheusからヒントを得て、ログ集約システムとしてGrafanaとペアになっています。効率的かつコスト効率よくログを管理します。GrafanaとLokiを組み合わせることで、Milvusとその先の観測可能性を高める、強固なモニタリングのセットアップを提供します。

前提条件

  • Docker** - Dockerがシステムにインストールされていることを確認してください。

  • Kubernetes** - Kubernetesクラスタを用意してください。ローカル開発には minikube または k3d を、本番環境にはクラウドプロバイダの Kubernetes サービスを利用できる。

  • Kubernetes アプリケーションを管理するために、Kubernetes 用のパッケージ・マネージャである Helm をインストールしてください。

  • Kubectl** - アプリケーションのデプロイ、クラスタリソースの検査と管理、ログの表示を行うために、Kubernetesクラスタと対話するためのコマンドラインツールであるkubectlをインストールする。

K8sのセットアップ

K8s クラスタの実行に必要なものをすべてインストールした後、minikube を使用した場合は、次のコマンドでクラスタを起動する:

minikube start

でK8sクラスタの状態を確認する:

kubectl cluster-info

⚠️K8sにMilvusをデプロイする必要があります。その方法については、 スタートガイド を参照してください。

Grafanaのデプロイ

Grafanaは、私たちが使用する分析およびインタラクティブな可視化プラットフォームです。豊富な種類のチャート、グラフ、アラートを提供します。メトリックスがどこに保存されているかに関係なく、クエリ、可視化、アラートの作成が可能です。

インストールには Helm を使用します。

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

helm install grafana grafana/grafana --namespace grafana --create-namespace

を実行することで、すべてが正しく実行されていることを確認できます。

 ❯ kubectl get all -n grafana
名前 ready status restarts age
pod/grafana-987d4c5c6-sb8t9 1/1 実行中 1 (58m 前) 47h

名前 タイプ cluster-ip external-ip port(s) age
service/grafana ClusterIP 10.43.114.168 <none> 80/TCP 47h

名前 準備完了 最新 利用可能 年齢
deployment.apps/grafana 1/1 1 1 47h

名前 希望する現在の準備完了年齢
replicaset.apps/grafana-987d4c5c6 1 1 47h

ロキとプロムテイルのデプロイ

LokiはPrometheusにインスパイアされたログ集計システムです。効率的かつコスト効率よくログを管理します。LokiはPromtailを使用してログを集約します。Promtailはログ収集エージェントで、ログの収集、ラベル付け、Lokiへの送信を行います。それは明示的にロキのために作られています。各KubernetesノードでPromtailのインスタンスが実行されていることがわかります。

Lokiのログのインデックス化のアプローチはユニークです。それはログの実際のテキストをインデックス化しません。その代わりに、ログエントリはインテリジェントにストリームにグループ化され、ラベルでインデックス化される。この方法によって、コストと、ログの取り込みからクエリで利用可能になるまでの時間が大幅に削減され、リソース管理に安心感がもたらされる。

Lokiは様々な方法で導入することができます:

1.モノリシックモード:このモードは簡単です、Loki のすべてのコンポーネントは、単一のプロセス内で実行されます。これは、小規模なセットアップまたは多くの複雑さなしで Loki を知るために適しています。

2.スケーラブル モード:このモードでは、Loki のコンポーネントは、ディストリビューター、ingesters、クエリ、および他のような別のサービスに分割されます。 この設定は、高可用性とスケーラビリティのために設計され、大規模な展開によくフィットします。ログデータを保存するには、AWS S3、Google Cloud Storage、またはMinIOのようなセルフホストソリューションであるS3互換のオブジェクトストレージが必要です。

**ロキをインストールするには

helm upgrade --install loki grafana/loki-distributed -n grafana-loki --create-namespace

これは loki を grafana-loki 名前空間内にインストールします。名前空間が存在しない場合は、Helmが作成してくれます。

以下を実行して、すべてが正しく動作することを確認してください:

❯ kubectl get all -n grafana-loki
名前 ready status restarts age
pod/loki-loki-distributed-distributor-6b75796c6b-qvdbc 1/1 実行中 1 (68m ago) 28h
pod/loki-loki-distributed-querier-0 1/1 稼働中 1 (68m ago) 28h
pod/loki-loki-distributed-query-frontend-55574bdd64-5hhvl 1/1 実行中 1 (68m ago) 28h
pod/loki-loki-distributed-ingester-0 1/1 稼動中 1 (68m 前) 28h
pod/loki-loki-distributed-gateway-c6ccc655b-mkg5j 1/1 ランニング 0 67m

名前 タイプ クラスタ IP 外部 IP ポート 年齢
service/loki-loki-distributed-memberlist ClusterIP なし <なし> 7946/TCP 47h
service/loki-loki-distributed-ingester-headless ClusterIP なし <なし> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-query-frontend-headless ClusterIP なし <なし> 3100/TCP,9095/TCP,9096/TCP 47h
service/loki-loki-distributed-ingester ClusterIP 10.43.13.160 <なし> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-querier-headless ClusterIP なし <なし> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-distributor ClusterIP 10.43.201.9 <なし> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-query-frontend ClusterIP 10.43.99.40 <none> 3100/TCP,9095/TCP,9096/TCP 47h
service/loki-loki-distributed-gateway ClusterIP 10.43.186.50 <none> 80/TCP 47h
service/loki-loki-distributed-querier ClusterIP 10.43.53.211 <none> 3100/TCP,9095/TCP 47h

名前 ready up-to-date available age
deployment.apps/loki-loki-distributed-distributor 1/1 1 47h
deployment.apps/loki-loki-distributed-query-frontend 1/1 1 1 47h
デプロイメント.apps/loki-loki-distributed-gateway 1/1 1 1 47h

希望する現在のレディエイジ
replicaset.apps/loki-loki-distributed-distributor-6b75796c6b 1 1 1 47h
replicaset.apps/loki-loki-distributed-query-frontend-55574bdd64 1 1 47h
replicaset.apps/loki-loki-distributed-gateway-c6ccc655b 1 1 47h

名前 READY AGE
statefulset.apps/loki-loki-distributed-querier 1/1 47h
statefulset.apps/loki-loki-distributed-ingester 1/1 47h

Promtailをインストールするには:。

Promtail をインストールする前に、Loki と通信するように設定する必要があります。これは、ロキのサービス URL を指定する設定ファイルの編集が含まれます:

1.**デフォルトの Promtail 設定を展開します。

helm show values grafana/promtail > promtail-overrides.yaml

このコマンドはデフォルトのPromtailの値をpromtail-overrides.yamlというファイルに書き込みます。

2.**デフォルトのPromtail設定を編集します。

promtail-overrides.yamlを編集して、clients.urlの値をLokiのサービスエンドポイントに設定する。Kubernetesでは、サービスはDNSレコード経由でアクセスできるので、LokiのサービスのDNS名:loki-loki-distributed-gateway.grafana-loki.svc.cluster.local` を使用します。

N.B.: もしLokiを別のネームスペースや別の名前でデプロイした場合は、それに応じてURLを調整してください。Kubernetes documentationを自由にチェックしてください。

3.**変更した設定ファイルでPromtailをデプロイします。

helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki

このコマンドは、カスタム設定を使用して、Promtailを grafana-loki ネームスペースにデプロイするようにHelmに指示します。これにより、PromtailがLokiにログを転送するように設定され、ログ集約の設定が完了します。

いつものように、実行することですべてが動作することを確認してください:

❯ kubectl get all -n grafana-loki | grep promtail pod/promtail-qgl4t 1/1 実行中 1 (77m ago) 28h
daemonset.apps/promtail 1 1 1 1 1 <なし> 2d

Grafana データソースとダッシュボードを設定する

LokiとPromtailがデプロイされたので、次のステップはGrafana内のデータソースとしてLokiを統合し、ログの可視化とクエリを可能にします。

1.Grafanaにアクセスします:まず、Grafanaインスタンスにアクセスする必要があります。GrafanaがKubernetesクラスタ内で実行されている場合、ポートフォワーディングを使用してローカルマシンからGrafana UIにアクセスすることができます:

kubectl port-forward service/grafana 8080:80 -n grafana

2.**Grafanaにログインする:Grafanaのデフォルトのユーザー名はadminです。パスワードは、Helm経由でインストールするとGrafanaがランダムなものを生成します。で取得できます:

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

3.データソースに移動する:ログインしたら、Grafanaのサイドバーで "Connections "のアイコンを見つけ、"Data Sources "を選択する。

4.ロキを追加する:データソースの追加」ボタンをクリックし、Lokiを検索して選択します。Lokiデータソースの設定ページに移動します。

5.GrafanaでLokiを設定する:LokiサービスのURLを入力します。デフォルトのセットアップを仮定すると、http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.localのようになります。このURLは、Kubernetesクラスタ内のLokiインスタンスをGrafanaに指し示します。

![](https://assets.zilliz.com/loki_ec0afc24d6.png

6.**保存とテストLokiサービスのURLを入力した後、"Save & Test "をクリックします。Grafana は Loki データソースに正常に接続できるかどうかを確認します。

ログを調べる

ログを調べ、すべてが正しく動作していることを確認し、Milvusのログを見ることができる。アプリ名で絞り込み、milvus`を使用する。

上のスクリーンショットのようなログが表示されたら、おめでとうございます!GrafanaとLokiのおかげで、Milvusクラスタの運用を監視し、洞察を提供できるようになりました!🚀

Milvus](https://github.com/milvus-io/milvus)やVisualizing Milvus Metrics in Grafanaのドキュメントをチェックし、Discordに参加してコミュニティと経験を共有してください。

Updated on Jul 09, 2026