使用 Grafana 和 Loki 搭建 Milvus 日志查询系统
本教程将介绍如何设置 Grafana 和 Loki 来有效监控您的 Milvus 实例。
Milvus 是一款分布式向量数据库,可高效存储、索引和管理万亿级 Embedding 向量,是搭建 AI 和 ML 应用的首选向量数据库系统。
Grafana 是一个开源的指标监控平台,提供可视化的指标和日志界面,允许用户自定义创建仪表板以监控系统状态和性能。本教程中将 Loki 与 Grafana 配合使用形成日志聚合系统的灵感来源于 Prometheus——以高效且低成本地方式管理日志。Grafana 和 Loki 共同构成了可靠的监控设置。
前提条件
- Docker:确保您已安装 Docker。
- Kubernetes:确保您已准备好 Kubernetes 集群。您可以在本地开发中使用
minikube
或k3d
,或者在生产环境中使用由云服务供应商提供的 Kubernetes 服务。 - Helm:确保您已安装 Helm 用于管理 Kubernetes 应用。您可以查看文档了解如何安装 Helm。
- Kubectl:确保您已安装
kubectl
,一款用于与 Kubernetes 集群进行交互的命令行工具。具体功能包含部署应用、检查和管理集群资源、查看日志等。
设置 K8s
运行 K8s 集群:
minikube start
检查 K8s 集群状态:
kubectl cluster-info
您需要在 K8s 上部署 Milvus。更多详情,请参考指南。
部署 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
部署 Loki 和 Promtail
Loki 是一个日志聚合系统,用于高效管理日志。Loki 使用 Promtail 来聚合日志。Promtail 是一个日志收集代理,专为 Loki 设计,负责收集、标记并将日志发送到 Loki。您会看到每个 Kubernetes 节点上都运行着一个 Promtail 实例。
Loki 有着一套独特的日志索引方式。Loki 不会对日志的实际文本进行索引。相反,日志被智能地分组到日志流中,然后用标签进行索引。这种方法显著降低了成本,并缩短了日志获取到查询可用之间的时间,实现高效资源管理。
Loki 支持不同的方式部署:
- 单体模式:这种模式中,Loki 的所有组件都在单个进程中运行。它适合较小且简单的应用规模。
- 可扩展模式:这种模式中,Loki 的组件被分解为独立的服务,如分发器、摄取器、查询器等。这种设置设计适用于高可用性和可扩展性应用,非常适合大规模部署。这种模式需要一个兼容 S3 的对象存储来存储日志数据,例如 AWS S3、Google Cloud Storage 或者自托管解决方案,如 MinIO。
安装 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:
- 获取默认 Promtail 配置:
helm show values grafana/promtail > promtail-overrides.yaml
上述命令将默认 Promtail 配置写入一个名为 promtail-overrides.yaml 的文件。后续,您可以按需修改此配置文件。
- 编辑默认 Promtail 配置:
编辑 promtail-overrides.yaml 文件,将clients.url 的值修改为正确的 Loki service endpoint。您可以使用 Loki 的 DNS 名称作为 service endpoint。 本示例中使用 loki-loki-distributed-gateway.grafana-loki.svc.cluster.local。
s1.png
注意:如果您将 Loki 部署在其他的 namespace 中,请同步修改 URL。更多详情,请参考 K8s 文档。
- 使用修改后的配置文件部署 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
配置 Grafana 数据源和面板
安装设置完 Loki 和 Promtail 后,需要将 Loki 作为数据源集成到 Grafana 中,从而实现日志可视化和查询功能。
连接至 Grafana:首先,需要先连接至 Grafana 实例。如果在您的 K8s 集群中运行 Grafana,请使用 port forwarding 将你的本地机器连接至 Grafana。
kubectl port-forward service/grafana 8080:80 -n grafana
- 登录 Grafana:默认 Grafana 用户名为 admin. 请使用下方命令获取安装时自动生成的密码。
kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
s2.png
前往 Data Sources 页面:成功登录后,点击侧边栏中的 Connection 标志,选择 Data Source。
添加 Loki:点击 "Add data source" 按钮,搜索并选中 Loki。 您将自动跳转至 Loki 数据源设置页面。 333.png
设置 Loki 数据源:输入 Loki service URL。本例中使用默认配置: http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local 444.png
保存并测试配置:点击"Save & Test"按钮。 Grafana 会确认是否成功连接至 Loki 数据源。 555.png
查看日志
现在我们可以查看日志啦!我们可以添加过滤条件,过滤app
名称,筛选出 milvus
相关日志,用于检查 Milvus 是否正常运行。
666.png
如果日志结果和以上截图相似,那么恭喜您!您已成功使用 Grafana 和 Loki 搭建了一个 Milvus 监控系统!
技术干货
开始使用LLMOps:构建更好的AI应用
在最近的非结构化数据 meetup 上,Union.ai的机器学习工程师Sage Elliott讨论了部署和管理LLMs的问题,提供了将这些模型集成到商业应用中所需的工具、策略和最佳实践的宝贵见解。他的演讲对AI开发人员和运维经理特别有帮助,重点关注确保生产环境中LLM应用的可靠性和可扩展性。
2024-11-29技术干货
探索构建高效检索增强生成(RAG)的三大关键策略
检索增强生成(RAG)是一种有用的技术,可让您在AI驱动的聊天机器人中使用自己的数据。在这篇博客文章中,我将向您介绍三种关键策略,以充分利用RAG:
2024-11-29技术干货
Elasticsearch vs 向量数据库:寻找最佳混合检索方案
如何实现语义检索?Embedding模型和向量数据库在其中的作用至关重要。前者主要完成原始信息的向量化,后者则提供对向量化信息的存储、检索等服务。目前,检索增强生成(RAG)与多模态搜索,是语义检索的核心应用场景之一。
2024-12-06