
2025 年云原生运维实战文档 X 篇原创计划第 16 篇|Milvus 最佳实战「2025」系列第 2 篇
大家好,我是术哥,一名专注于云原生、AI技术的布道者。作为 KubeSphere Ambassador 和 Milvus 北辰使者,我很荣幸能在「运维有术」与大家分享经验。
上一篇文章,未来已来!基于 MCP 打造 Milvus 智能运维新范式,一文带你体验氛围运维(Vibe Ops)的效率革命! 发布后,引发了广泛关注和热烈讨论。许多朋友在后台留言,希望能更深入地了解 Milvus Standalone 版监控、告警、大屏展示一体化技术方案的完整实现细节。
为响应大家的期待,本文将详细阐述该方案的实现过程!
本文将手把手带你从零开始,搭建一套完整的 Milvus 监控体系。无论你是运维新手还是资深工程师,都能从中获得实用的技术干货。我不仅会讲解每个组件的部署细节,还会分享生产环境中的最佳实践和踩坑经验。
在开始我们的监控体系搭建之前,先来认识一下今天的主要"演员"们。就像组建一支专业的运维团队一样,每个组件都有自己独特的职责和价值。
Milvus v2.5.13 - 我们今天的绝对主角
你可能会疑惑:"为什么不选择最新的 v2.6.0 呢?" 这里有个重要的生产环境选型原则:稳定性永远比新特性更重要。v2.5.13 经过了大量生产环境的验证,在稳定性和兼容性方面表现出色,是当前最适合生产部署的版本。
Prometheus v3.4.1 - 我们的监控指挥中心
如果说 Milvus 是我们的"数据引擎",那么 Prometheus 就是无处不在的"健康卫士"。它不仅能实时收集各种指标数据,还具备强大的查询能力和灵活的告警规则配置。选择 v3.4.1 是因为这个版本在性能和功能上都有显著提升。
Grafana v11.6.3 - 数据可视化的艺术大师
Grafana 将枯燥的监控数据转化为直观美观的图表和仪表盘。v11.6.3 版本不仅界面更加现代化,还提供了更丰富的图表类型和更强大的数据处理能力。
Alertmanager v0.28.1 - 智能告警调度中心
Alertmanager 负责接收 Prometheus 发送的告警信息,并根据预设规则进行分组、抑制、静默和路由,最终通过邮件、微信、钉钉等方式通知相关人员。它就像一个智能的告警管家,确保重要问题能及时传达给正确的人。
在正式开始部署之前,我们需要做好充分的准备工作。安全性是生产环境的第一要务,因此本文将为所有 Prometheus 相关组件配置身份认证,这需要我们提前生成经过 bcrypt 加密的密码。
为了保障系统安全,我们需要生成 bcrypt 哈希密码。以下是三种常用的生成方法,各有优劣:
方案一:Python 脚本生成(推荐指数:⭐⭐⭐⭐)
优势:完全可控,安全性最高 劣势:需要安装 Python 依赖
首先安装 bcrypt 库:
apt install python3-bcryptpip install bcryptimport getpass
import bcrypt
password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
print(hashed_password.decode())
保存脚本为gen-pass.py 然后运行:
$ python3 gen-pass.py
按提示输入原始密码(admin),会生成加密后的密码。
password:
$2b$12$jajAqtz72Nwr4aCSmHBt3.bcQsaRHAXd2eeVH.hn7ViS87KVdDU7K
重要提醒:请妥善保存生成的哈希密码,后续配置中会多次使用!
方案二:在线加密工具(推荐指数:⭐⭐)
优势:操作简单,无需本地环境 劣势:存在安全风险,不建议生产环境使用
可以使用 Bcrypt Hash Generator 在线工具,但请注意这种方式存在密码泄露风险。
方案三:Docker 容器生成(推荐指数:⭐⭐⭐⭐⭐)
优势:简单便捷,安全可控,无需安装依赖 劣势:需要 Docker 环境
本文推荐使用这种方式!我们使用封装好的 Docker 镜像来生成演示密码 admin:
$ docker run --rm registry.gitlab.com/epicdocker/bcrypt:latest hash admin 12
> $2a$12$agZouh6t/ox4xZG8/SARbuEorguwoO0NjlLJ06woLk8HAsQg4wD5i
准备工作完成后,现在开始搭建我们监控体系的核心——Milvus 向量数据库!我们选择 Docker 方式部署 Standalone 版本,这不仅简化了部署流程,还便于后续的维护和升级。
为什么选择 Standalone 版本?
对于大多数应用场景,Standalone 版本已经能够满足需求,而且具有以下优势:
进阶提示:掌握了 Standalone 版本的监控方案后,集群版的监控配置只是在此基础上的扩展,核心原理完全一致。
第一步:创建工作目录
为 Milvus 创建专用的工作目录,这样便于后续的管理和维护:
mkdir -p /data/containers/milvus
第二步:下载官方配置文件
从 Milvus 官方 GitHub 仓库获取标准的 Docker Compose 配置文件:
cd /data/containers/milvus
wget https://github.com/milvus-io/milvus/releases/download/v2.5.13/milvus-standalone-docker-compose.yml -O docker-compose.yml
技术细节:这个配置文件包含了 Milvus Standalone 版本运行所需的所有组件,包括 etcd(元数据存储)、MinIO(对象存储)和 Milvus 主服务。
安全警告:官方默认配置没有启用身份认证,这在生产环境中是极其危险的!就像把银行金库的门敞开一样,任何人都可以随意访问你的数据。
为什么必须启用认证?
在生产环境中,未启用认证的 Milvus 实例面临以下风险:
认证配置说明
启用身份验证后,Milvus 会自动创建默认管理员账户:
rootMilvus生产环境最佳实践:
现在让我们为 Milvus 启用安全认证。编辑 docker-compose.yml 文件,在 Milvus 容器的环境变量中添加认证配置:
......
environment:
......
common.security.authorizationEnabled: true
配置完成后,现在可以启动 Milvus 服务了。Docker Compose 会自动拉取所需的镜像并启动所有相关组件:
docker compose up -d
启动命令执行后,我们需要逐一验证各个组件是否正常运行。这个验证过程至关重要,确保后续的监控配置能够正常工作。
第一步:检查容器运行状态
使用以下命令查看所有容器的运行状态:
$ docker compose ps
WARN[0000] /data/containers/milvus/docker-compose.yml: `version` is obsolete
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
milvus-etcd quay.io/coreos/etcd:v3.5.18 "etcd -advertise-cli…" etcd 11 seconds ago Up 9 seconds (health: starting) 2379-2380/tcp
milvus-minio minio/minio:RELEASE.2023-03-20T20-16-18Z "/usr/bin/docker-ent…" minio 11 seconds ago Up 9 seconds (health: starting) 0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp
milvus-standalone milvusdb/milvus:v2.5.13 "/tini -- milvus run…" standalone 11 seconds ago Up 9 seconds (health: starting) 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp, 0.0.0.0:19530->19530/tcp, :::19530->19530/tcp
第二步:Web UI 功能验证
从 Milvus v2.5.0 开始,官方提供了功能强大的 Web 管理界面,这是一个重大的用户体验提升。通过 Web UI,我们可以:
通过这个 Web UI,你可以:
赶紧打开浏览器,输入下面的地址来欣赏一下这个"美貌与智慧并存"的管理界面:
http://${MILVUS_IP}:9091/webui
在配置 Prometheus 监控之前,我们需要确认 Milvus 的监控指标接口是否正常工作。Milvus 内置了完整的 Prometheus 监控指标,这为后续的监控配置提供了数据基础。
命令行验证监控指标接口:
curl http://<your-server-ip>:9091/metrics
或者在浏览器中访问:
http://<your-server-ip>:9091/metrics
监控指标说明:
Milvus 提供了丰富的监控指标,包括:
技术优势:Standalone 版本将所有组件的监控指标统一到一个端点,大大简化了监控配置的复杂度。
Alertmanager 简介
Alertmanager 是 Prometheus 生态系统中的告警管理组件,负责处理由 Prometheus 服务器发送的告警。它具有以下核心功能:
第一步:创建工作目录
mkdir -p /data/containers/alertmanager
cd /data/containers/alertmanager
第二步:创建 Docker Compose 配置
创建 docker-compose.yml 文件:
name: 'alertmanager'
services:
alertmanager:
#restart: always
image:prom/alertmanager:v0.28.1
container_name:alertmanager
environment:
-TZ=Asia/Shanghai
command:
-'--config.file=/etc/alertmanager/alertmanager.yml'
-'--web.config.file=/etc/alertmanager/web.yml'
ports:
#- "127.0.0.1:9093:9093"
-"9093:9093"
volumes:
-./alertmanager.yml:/etc/alertmanager/alertmanager.yml
-./web.yml:/etc/alertmanager/web.yml
networks:
default:
name:alertmanager
第三步:创建 Alertmanager 主配置文件
创建 alertmanager.yml 配置文件(从官方镜像中复制的默认配置,未作任何修改,生产环境需要根据需求修改):
route:
group_by:['alertname']
group_wait:30s
group_interval:5m
repeat_interval:1h
receiver:'web.hook'
receivers:
-name:'web.hook'
webhook_configs:
-url:'http://127.0.0.1:5001/'
inhibit_rules:
-source_match:
severity:'critical'
target_match:
severity:'warning'
equal:['alertname','dev','instance']
配置参数说明:
group_by:告警分组字段,相同 alertname 的告警会被分组group_wait:分组等待时间,收到告警后等待 30 秒再发送group_interval:分组间隔时间,同一分组的后续告警间隔 5 分钟发送repeat_interval:重复发送间隔,1 小时后重复发送未解决的告警receivers:告警接收者配置,这里配置为 webhook 方式第四步:创建 Web 认证配置
创建 web.yml 文件,启用 HTTP Basic 认证:
basic_auth_users:
admin: $2a$12$agZouh6t/ox4xZG8/SARbuEorguwoO0NjlLJ06woLk8HAsQg4wD5i
安全提示:这里的密码使用准备阶段用工具生成的密码。
启动服务:
docker compose up -d
第一步:检查容器运行状态
docker compose ps
正常运行状态示例:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
alertmanager prom/alertmanager:v0.28.1 "/bin/alertmanager -…" alertmanager 3 seconds ago Up 2 seconds 0.0.0.0:9093->9093/tcp
第二步:Web 界面验证
在浏览器中访问 Alertmanager 管理界面:
http://<your-server-ip>:9093
登录验证:
adminadmin登录成功后,你将看到 Alertmanager 的主界面。此时还没有告警信息,这是正常的,因为我们还没有配置 Prometheus 的告警规则。
第一步:创建工作目录
# 创建 Prometheus 主目录
mkdir -p /data/containers/prometheus
cd /data/containers/prometheus
# 创建告警规则目录
mkdir -p rules
第二步:创建 Docker Compose 配置
创建 docker-compose.yml 文件:
name: 'prometheus'
services:
prometheus:
#restart: always
image:prom/prometheus:v3.4.1
container_name:prometheus
user:root
environment:
-TZ=Asia/Shanghai
command:
-'--config.file=/etc/prometheus/prometheus.yml'
-'--web.config.file=/etc/prometheus/web.yml'
ports:
-"9090:9090"
volumes:
-./prometheus-data:/prometheus
-./rules:/etc/prometheus/rules
-./prometheus.yml:/etc/prometheus/prometheus.yml
-./web.yml:/etc/prometheus/web.yml
networks:
default:
name:prom
第三步:创建 Prometheus 主配置文件
创建 prometheus.yml 配置文件:
# 全局配置
global:
scrape_interval:15s # 数据采集间隔
evaluation_interval:15s# 规则评估间隔
# Alertmanager 配置
alerting:
alertmanagers:
-static_configs:
-targets:["192.168.9.121:9093"]
## 增加认证配置
basic_auth:
username:"admin"
password:"OpsXLabs2025!"
scheme:http
# 告警规则文件配置
rule_files:
-"/etc/prometheus/rules/*.yml"
# 监控目标配置
scrape_configs:
# Prometheus 自监控
-job_name:"prometheus"
basic_auth:
username:admin
password:OpsXLabs2025!
static_configs:
-targets:["localhost:9090"]
labels:
app:"prometheus"
第四步:创建 Web 认证配置
创建 web.yml 文件:
basic_auth_users:
admin: $2a$12$agZouh6t/ox4xZG8/SARbuEorguwoO0NjlLJ06woLk8HAsQg4wD5i
启动服务:
docker compose up -d
第一步:检查容器运行状态
docker compose ps
正常运行状态示例:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
prometheus prom/prometheus:v3.4.1 "/bin/prometheus --c…" prometheus 5 seconds ago Up 4 seconds 0.0.0.0:9090->9090/tcp
第二步:Web 界面验证
在浏览器中访问 Prometheus 管理界面:
http://<your-server-ip>:9090
登录验证:
adminadmin登录成功后,你将看到 Prometheus 的主界面。在 「Status → Target Health」 页面可以查看当前的监控目标状态。
Node Exporter 简介
Node Exporter 是 Prometheus 生态系统中的系统监控组件,专门负责收集服务器硬件和操作系统的监控指标。它提供了完整的系统监控能力:
监控架构完整性
一个完整的监控系统需要多个维度的数据:
第一步:创建工作目录
mkdir -p /data/containers/node_exporter
cd /data/containers/node_exporter
第二步:创建 Docker Compose 配置
创建 docker-compose.yml 文件:
services:
node_exporter:
image:prom/node-exporter:v1.9.1
container_name:node_exporter
restart:unless-stopped
cap_add:
-SYS_TIME
environment:
-TZ=Asia/Shanghai
command:
-'--path.rootfs=/host'
network_mode:host
pid:host
volumes:
-'/:/host:ro,rslave'
启动服务:
docker compose up -d
第一步:检查容器运行状态
docker compose ps
正常运行状态示例:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
node_exporter prom/node-exporter:v1.9.1 "/bin/node_exporter …" node_exporter 4 seconds ago Up 2 seconds
第二步:Web 界面验证
在浏览器中访问 Node Exporter 状态页面:
http://<your-server-ip>:9100
第三步:监控指标验证
验证监控指标接口是否正常:
curl http://<your-server-ip>:9100/metrics
技术说明:Node Exporter 通过
/metrics端点暴露系统监控指标,Prometheus 会定期从这个端点拉取数据。
现在我们需要将 Milvus 和 Node Exporter 添加到 Prometheus 的监控目标列表中,让 Prometheus 能够定期从这些服务拉取监控数据。
配置原理说明
Prometheus 采用 Pull 模式进行数据采集:
scrape_configs 发现监控目标修改 Prometheus 配置
编辑 /data/containers/prometheus/prometheus.yml 文件,在 scrape_configs 部分添加以下监控目标:
scrape_configs:
.....(原有内容保留不变)
# 增加 Node 监控配置
-job_name:"node"
static_configs:
-targets:["192.168.9.121:9100"]
labels:
app:"node-exporter"
node:"milvus-node"
# 增加 Milvus 服务监控配置
-job_name:"milvus-standalone"
static_configs:
-targets:["192.168.9.121:9091"]
labels:
app:"milvus-standalone"
job:"milvus"
配置说明:
job_name:监控任务名称,用于在 Prometheus 中标识不同的监控目标targets:监控目标的地址和端口labels:自定义标签,用于在查询和告警中进行分组和过滤告警规则的重要性
告警规则是监控系统的核心组件,它能够:
创建告警规则文件(以 Milvus 服务状态监控为例)
在 /data/containers/prometheus/rules/ 目录下创建 milvus_alert_rules.yml 文件:
groups:
-name:alert_rules
rules:
# Alert for server down
-alert:MilvusServerDown
expr:up{job="milvus-standalone"}==
for:1m
labels:
severity:page
service:milvus
environment:production
annotations:
summary:"Milvus 实例 {{ $labels.instance }} 宕机"
description:"Milvus 服务不可用!"
告警规则说明:
expr:告警触发条件,使用 PromQL 查询语言for:持续时间,条件满足多长时间后触发告警labels:告警标签,用于分类和路由annotations:告警描述信息重启服务使配置生效:
cd /data/containers/prometheus
docker compose stop
docker compose start
第一步:验证监控目标
在 Prometheus Web 界面中,导航到 「Status → Target health」页面,确认新添加的监控目标状态:
第二步:验证告警规则
在 Prometheus Web 界面中,导航到 Alerts 页面,确认告警规则已正确加载,在 Alerts 页面可以查看当前的告警状态:
Grafana 简介
Grafana 是业界领先的开源可视化和监控平台,它能够:
为什么选择 Grafana?
第一步:创建工作目录
mkdir -p /data/containers/grafana
cd /data/containers/grafana
第二步:创建 Docker Compose 配置
创建 docker-compose.yml 文件:
services:
grafana:
image:grafana/grafana-enterprise:11.6.3-ubuntu
#image: grafana/grafana-enterprise
container_name:grafana
restart:unless-stopped
user:'0'
volumes:
-./data:/var/lib/grafana
ports:
-'3000:3000'
networks:
default:
name:grafana
启动服务:
docker compose up -d
第一步:检查容器运行状态
$ docker compose ps
正常运行状态示例:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
grafana grafana/grafana-enterprise:11.6.3-ubuntu "/run.sh" grafana 30 seconds ago Up 29 seconds 0.0.0.0:3000->3000/tcp
第二步:Web 界面验证
在浏览器中访问 Grafana Web 界面:
http://服务器IP:3000
登录信息:
adminadmin第三步:首次登录配置
首次登录后,建议:
数据源的重要性
Grafana 需要连接到 Prometheus 才能获取监控数据。数据源配置是构建监控仪表板的基础步骤。
第一步:进入数据源配置
在 Grafana 主界面中,导航到:
第二步:配置数据源参数
根据实际环境配置以下参数:
基本配置:
prometheus121(建议使用描述性名称)http://服务器IP:9090(替换为实际的 Prometheus 地址)认证配置:
adminadmin123(与 Prometheus web.yml 中配置的密码一致)高级配置:
第三步:测试数据源连接
点击页面底部的 Save & test 按钮,验证连接:
Node Exporter 仪表板选择
Grafana 社区提供了丰富的 Node Exporter 仪表板模板,我们可以直接导入使用。这些模板经过社区验证,功能完善且美观。
第一步:选择合适的仪表板
访问 Grafana Dashboards 官网,搜索 "Node Exporter":
推荐仪表板:
第二步:导入仪表板
在 Grafana 中导航到:Dashboards → New → Import
方式一:使用仪表板 ID
直接输入仪表板 ID(本文使用 16098):
方式二:上传 JSON 文件
从官网下载 JSON 文件后上传。
第三步:配置仪表板参数
导入时需要配置:
prometheus121第四步:验证仪表板效果
导入成功后,仪表板将显示系统监控数据:
仪表板功能说明:
Milvus 官方仪表板
Milvus 官方提供了专门的 Grafana 仪表板模板,针对 Milvus 的各个组件进行了优化,能够全面展示 Milvus 的运行状态和性能指标。
第一步:下载官方仪表板文件
根据 Milvus Standalone v2.5 版本下载对应的仪表板文件:
# 下载 Milvus Standalone v2.5 仪表板
wget https://raw.githubusercontent.com/milvus-io/web-content/refs/heads/master/v2.5.x/assets/standalone-monitoring/grafana/dashboards/milvus-standalone-dashboard.json
重要说明:
第二步:导入仪表板到 Grafana
在 Grafana 中导航到:Dashboards → New → Import
选择 Upload dashboard JSON file:
上传下载的 JSON 文件,然后点击 Import:
第三步:配置仪表板参数
导入时配置以下参数:
第四步:验证仪表板功能
导入成功后,可以看到仪表板概览:
Milvus 监控指标分类
Milvus 仪表板包含以下主要监控指标:
第五步:查看详细监控指标
Runtime 指标详情:
展示 Milvus 运行时的核心指标,包括:
Root Coordinator 指标详情:
展示根协调器的性能指标,包括:
监控数据说明:
告警实现方案对比
监控告警有两种主要实现方案:
方案 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
Grafana 告警 | 配置简单,界面友好 | 功能相对有限 | 小型项目,简单告警 |
Prometheus + Alertmanager | 功能强大,灵活性高 | 配置复杂 | 企业级项目,复杂告警 |
本文选择方案:Prometheus + Alertmanager
告警流程:
测试目标
验证之前配置的 Milvus 服务可用性告警规则是否正常工作。
第一步:模拟服务故障
停止 Milvus 服务来模拟服务故障:
# 进入 Milvus 部署目录
cd /data/containers/milvus
# 停止 Milvus 服务
docker compose stop
# 验证服务已停止
docker compose ps
第二步:观察告警状态变化
PENDING 状态(告警触发初期):
访问 Prometheus Web 界面(http://服务器IP:9090),导航到 Status → Rules 或 Alerts 页面。
服务刚停止时,告警状态为 PENDING(等待确认期):
FIRING 状态(告警正式触发):
等待 1 分钟后(根据告警规则中的 for: 1m 配置),告警状态变为 FIRING:
告警状态说明:
第三步:验证 Alertmanager 接收
访问 Alertmanager Web 界面(http://服务器IP:9093),查看告警接收情况:
Alertmanager 功能验证:
第四步:恢复服务验证
# 重新启动 Milvus 服务
cd /data/containers/milvus
docker compose start
# 等待几分钟后检查告警状态
# 告警应该自动解除
注意事项:
至此,我们已经成功搭建并验证了 Milvus Standalone 版本的监控、告警与可视化展示一体化解决方案。本文详细阐述了从环境准备、核心组件部署(Milvus、Prometheus、Alertmanager、Node Exporter)到 Grafana 可视化配置的全流程。通过本实践,您不仅掌握了各组件的部署细节,更理解了如何构建一个高效、可靠的 Milvus 监控体系。
受限于篇幅,本文在监控资源方面未深入探讨 etcd 和 Minio 的监控,告警通知方式也仅限于基础验证。未来,我们将以专题短文的形式,继续分享这些进阶内容,包括更丰富的告警通知集成(如邮件、钉钉、微信)、更细致的性能调优以及生产环境下的高可用实践。敬请持续关注,共同探索 Milvus 智能运维的更多可能性!
感谢大家的阅读和支持,期待下一次的"开盲盒"分享!
免责声明