在使用 Milvus 向量数据库时,我们经常需要监控数据库的一些关键信息如内存占用,访问量等等,本文讲述如何部署相应的可视化监控系统。

利用 Prometheus 监控数据库指标

指标是提供有关系统运行状态信息的指标。例如,通过指标,你可以了解 Milvus 中一个数据节点消耗了多少内存或 CPU 资源。了解 Milvus 集群中组件的性能和状态,可以让你充分了解情况,从而做出更好的决策,更及时地调整资源配置。

先决条件

本教程使用 kube-prometheus 为省去安装和手动配置每个监控告警组件的麻烦。

首先基于 Kubernetes 集群部署 Milvus 向量数据库,参见 Windos 环境下 Milvus 向量数据库的 k8s 集群部署

接下来需要使用 kube-prometheus/manifests 目录下的配置创建监控堆栈。

1
2
3
4
5
6
7
8
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus
kubectl apply --server-side -f manifests/setup
kubectl wait `
--for condition=Established `
--all CustomResourceDefinition `
--namespace=monitoring
kubectl apply -f manifests/

默认的 prometheus-k8s clusterrole 无法捕获 milvus 的指标,需要打补丁:

1
kubectl patch clusterrole prometheus-k8s --type=json -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": [""], "resources": ["pods", "services", "endpoints"], "verbs": ["get", "watch", "list"]}}]'

Note :该命令要用 bash 执行,若用 PowerShell 则会因为转义字符的原因报错。

要删除堆栈,请运行:

1
kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

在 Kubernetes 上部署监控服务

访问仪表盘

将 Prometheus 服务转发到端口 9090 ,将 Grafana 服务转发到端口 3000

1
2
kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/prometheus-k8s 9090
kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/grafana 3000

Note :这里要尽量新开两个终端执行命令,避免端口冲突,并且执行过后不要关闭终端。如果报错,请等待一段时间后新开终端执行命令。

启用 ServiceMonitor

Milvus Helm 默认未开启 ServiceMonitor。在 Kubernetes 集群中安装 Prometheus Operator 后,可以通过添加参数 metrics.serviceMontior.enabled=true 来启用它。

1
helm upgrade my-release milvus/milvus --set metrics.serviceMonitor.enabled=true --reuse-values

这里的 helm upgrade 命令同样可以用 Windos 环境下 Milvus 向量数据库的 k8s 集群部署helm install 报错后的本地安装方法的命令一样利用本地安装包更新,且两条命令使用的是同一个安装包。

安装完成后,检查 ServiceMonitor 资源。

1
kubectl get servicemonitor

返回:

1
2
NAME                           AGE
my-release-milvus 54s

在 Grafana 中可视化 Milvus 指标

打开 Grafana 可视化面板

在浏览器地址栏输入 http://localhost:3000 进入 Grafana 面板,键入 用户名:密码 admin:admin 登录。

检查 Prometheus 是端口是否连通

进入 Home > Connections > Datasources > prometheus 底部,点击 Test

Prometheus Test

如果像我一样报错就说明端口 9090 没有连通。

接下来添加一个新的 Prometheus 的数据源,尝试将 Connection 下的 Prometheus server URL 改为可以连通的地址,如果是用终端开启的端口,即用 Windows 终端执行的前文的端口转发命令,则尝试 URL: http://host.docker.internal:9090

Change URL

此时再测试,发现成功连接。

TestAgain

下载配置文件并导入仪表盘

从 JSON 文件下载并导入 Milvus Dashboard。

1
wget https://raw.githubusercontent.com/milvus-io/milvus/2.2.0/deployments/monitor/grafana/milvus-dashboard.json

通过命令获取困难的,可以采用本站提供的配置文件,该文件就是官方提供的配置文件。

Import

选择数据源

导入仪表盘后选择刚刚创建的数据源,就可以成功检测到向量数据库的各种指标了。

Done

本文参考

  • Deploying Monitoring Services on Kubernetes
  • Visualize Milvus Metrics in Grafana