本教程将介绍如何设置 Grafana 和 Loki 来有效监控您的 Milvus 实例。
Milvus 是一款分布式向量数据库,可高效存储、索引和管理万亿级 Embedding 向量,是搭建 AI 和 ML 应用的首选向量数据库系统。
Grafana 是一个开源的指标监控平台,提供可视化的指标和日志界面,允许用户自定义创建仪表板以监控系统状态和性能。本教程中将 Loki 与 Grafana 配合使用形成日志聚合系统的灵感来源于 Prometheus——以高效且低成本地方式管理日志。Grafana 和 Loki 共同构成了可靠的监控设置。
01.、前提条件
02.、设置K8s
运行 K8s 集群:
minikube start
检查 K8s 集群状态:
kubectl cluster-info
注意:您需要在 K8s 上部署 Milvus。详情请参考指南。
https://milvus.io/blog/getting-started-with-milvus-cluster-and-k8s.md
03.、部署Grafana
Grafana 是一个可视化的指标分析和交互平台,提供了丰富多样的图表、图形和告警,允许用户查询指标、生成可视化指标视图、创建告警。
使用 Helm 安装 Grafana:
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
NAME READY STATUS RESTARTS AGE
pod/grafana-987d4c5c6-sb8t9 1/1 Running 1 (58m ago) 47h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/grafana ClusterIP 10.43.114.168 <none 80/TCP 47h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/grafana 1/1 1 1 47h
NAME DESIRED CURRENT READY AGE
replicaset.apps/grafana-987d4c5c6 1 1 1 47h
04.、部署Loki和Promtail
Loki 是一个日志聚合系统,用于高效管理日志。Loki 使用 Promtail 来聚合日志。Promtail 是一个日志收集代理,专为 Loki 设计,负责收集、标记并将日志发送到 Loki。您会看到每个 Kubernetes 节点上都运行着一个 Promtail 实例。
Loki 有着一套独特的日志索引方式。Loki 不会对日志的实际文本进行索引。相反,日志被智能地分组到日志流中,然后用标签进行索引。这种方法显著降低了成本,并缩短了日志获取到查询可用之间的时间,实现高效资源管理。
Loki 支持不同的方式部署:
安装 Loki:
helm upgrade --install loki grafana/loki-distributed -n grafana-loki --create-namespace
上述命令将会在grafana-loki namespace 中安装 Loki. 如指定 namespace 不存在,Helm 将会自动为您创建一个该名称的 namespace。
查看运行状态:
❯ kubectl get all -n grafana-loki
NAME READY STATUS RESTARTS AGE
pod/loki-loki-distributed-distributor-6b75796c6b-qvdbc 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-querier-0 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-query-frontend-55574bdd64-5hhvl 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-ingester-0 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-gateway-c6ccc655b-mkg5j 1/1 Running 0 67m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/loki-loki-distributed-memberlist ClusterIP None <none> 7946/TCP 47h
service/loki-loki-distributed-ingester-headless ClusterIP None <none> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-query-frontend-headless ClusterIP None <none> 3100/TCP,9095/TCP,9096/TCP 47h
service/loki-loki-distributed-ingester ClusterIP 10.43.13.160 <none> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-querier-headless ClusterIP None <none> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-distributor ClusterIP 10.43.201.9 <none> 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
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/loki-loki-distributed-distributor 1/1 1 1 47h
deployment.apps/loki-loki-distributed-query-frontend 1/1 1 1 47h
deployment.apps/loki-loki-distributed-gateway 1/1 1 1 47h
NAME DESIRED CURRENT READY AGE
replicaset.apps/loki-loki-distributed-distributor-6b75796c6b 1 1 1 47h
replicaset.apps/loki-loki-distributed-query-frontend-55574bdd64 1 1 1 47h
replicaset.apps/loki-loki-distributed-gateway-c6ccc655b 1 1 1 47h
NAME READY AGE
statefulset.apps/loki-loki-distributed-querier 1/1 47h
statefulset.apps/loki-loki-distributed-ingester 1/1 47h
安装 Promtail:
安装前需要先进行配置,以便实现 Promtail 与 Loki 间的交互。具体而言,需要编辑配置文件,输入 Loki service URL:
1.获取默认 Promtail 配置:
#!pip install langchain openai pymilvus ragas
上述命令将默认 Promtail 配置写入一个名为 promtail-overrides.yaml 的文件。后续,您可以按需修改此配置文件。
2.编辑默认 Promtail 配置:
编辑 promtail-overrides.yaml 文件,将clients.url 的值修改为正确的 Loki service endpoint。您可以使用 Loki 的 DNS 名称作为 service endpoint。本示例中使用 loki-loki-distributed-gateway.grafana-loki.svc.cluster.local。
注意:如果您将 Loki 部署在其他的 namespace 中,请同步修改 URL。详情请参考 K8s 文档。
3.使用修改后的配置文件部署 Promtail :
helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki
上述命令根据您的配置使用 Helm 在 grafana-loki namespace 中安装 Promtail。设置完成后,Promtail 就能够将日志发送至 Loki,实现日志聚合功能。
同样,检查运行状态:
❯ kubectl get all -n grafana-loki | grep promtail pod/promtail-qgl4t 1/1 Running 1 (77m ago) 28h
daemonset.apps/promtail 1 1 1 1 1 <none> 2d
05.、配置Grafana数据源和面板
安装设置完 Loki 和 Promtail 后,需要将 Loki 作为数据源集成到 Grafana 中,从而实现日志可视化和查询功能。
1.连接至 Grafana:首先,需要先连接至 Grafana 实例。如果在您的 K8s 集群中运行 Grafana,请使用 port forwarding 将你的本地机器连接至 Grafana。
kubectl port-forward service/grafana 8080:80 -n grafana
2.登录 Grafana:默认 Grafana 用户名为 admin. 请使用下方命令获取安装时自动生成的密码。
kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
3.前往 Data Sources 页面:成功登录后,点击侧边栏中的 Connection 标志,选择 Data Source。
4.添加 Loki:点击 "Add data source" 按钮,搜索并选中 Loki。您将自动跳转至 Loki 数据源设置页面。
5.设置 Loki 数据源:输入 Loki service URL。本例中使用默认配置:http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local
6.保存并测试配置:点击"Save & Test"按钮。Grafana 会确认是否成功连接至 Loki 数据源。
查看日志
现在我们可以查看日志啦!我们可以添加过滤条件,过滤app 名称,筛选出 milvus 相关日志,用于检查 Milvus 是否正常运行。
如果日志结果和以上截图相似,那么恭喜您!您已成功使用 Grafana 和 Loki 搭建了一个 Milvus 监控系统!