时空边际实验室

探索数字宇宙的无限可能

Milvus+Prometheus+Grafana部署

2025 年云原生运维实战文档 X 篇原创计划第 16 篇|Milvus 最佳实战「2025」系列第 2 篇

大家好,我是知黑守白,一名专注AI技术的布道者。

本文将手把手带你从零开始,搭建一套完整的 Milvus 监控体系。无论你是运维新手还是资深工程师,都能从中获得实用的技术干货。我不仅会讲解每个组件的部署细节,还会分享生产环境中的最佳实践和踩坑经验。

1. 技术架构全景图

在开始我们的监控体系搭建之前,先来认识一下今天的主要"演员"们。就像组建一支专业的运维团队一样,每个组件都有自己独特的职责和价值。![ab726efd5fd0b1c7e662d5d25c1ee311_640_wx_fmt=png&from=appmsg&watermark=1&tp=webp&wxfrom=5&wx_lazy=1](https://img2024.cnblogs.com/blog/3691081/202508/3691081-20250829104157372-778675831.webp)

milvus-monitoring-deployment-architecture

1.1 核心主角:向量数据库 Milvus

Milvus v2.5.13 - 我们今天的绝对主角

你可能会疑惑:"为什么不选择最新的 v2.6.0 呢?" 这里有个重要的生产环境选型原则:稳定性永远比新特性更重要。v2.5.13 经过了大量生产环境的验证,在稳定性和兼容性方面表现出色,是当前最适合生产部署的版本。

1.2 监控大脑:Prometheus

Prometheus v3.4.1 - 我们的监控指挥中心

如果说 Milvus 是我们的"数据引擎",那么 Prometheus 就是无处不在的"健康卫士"。它不仅能实时收集各种指标数据,还具备强大的查询能力和灵活的告警规则配置。选择 v3.4.1 是因为这个版本在性能和功能上都有显著提升。

1.3 可视化专家:Grafana

Grafana v11.6.3 - 数据可视化的艺术大师

Grafana 将枯燥的监控数据转化为直观美观的图表和仪表盘。v11.6.3 版本不仅界面更加现代化,还提供了更丰富的图表类型和更强大的数据处理能力。

1.4 告警管家:Alertmanager

Alertmanager v0.28.1 - 智能告警调度中心

Alertmanager 负责接收 Prometheus 发送的告警信息,并根据预设规则进行分组、抑制、静默和路由,最终通过邮件、微信、钉钉等方式通知相关人员。它就像一个智能的告警管家,确保重要问题能及时传达给正确的人。

2. 环境准备与安全配置

在正式开始部署之前,我们需要做好充分的准备工作。安全性是生产环境的第一要务,因此本文将为所有 Prometheus 相关组件配置身份认证,这需要我们提前生成经过 bcrypt 加密的密码。

2.1 密码加密方案选择

为了保障系统安全,我们需要生成 bcrypt 哈希密码。以下是三种常用的生成方法,各有优劣:

方案一:Python 脚本生成(推荐指数:⭐⭐⭐⭐)

优势:完全可控,安全性最高 劣势:需要安装 Python 依赖

首先安装 bcrypt 库:

  • Debian/Ubuntu 系统:apt install python3-bcrypt
  • 通用方式:pip install bcrypt
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import getpass
import bcrypt

password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())!
print(hashed_password.decode())

保存脚本gen-pass.py 然后运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3 gen-pass.py

按提示输入原始密码(admin),会生成加密后的密码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
password:
$2b$12$jajAqtz72Nwr4aCSmHBt3.bcQsaRHAXd2eeVH.hn7ViS87KVdDU7K

重要提醒:请妥善保存生成的哈希密码,后续配置中会多次使用!

方案二:在线加密工具(推荐指数:⭐⭐)

优势:操作简单,无需本地环境
劣势:存在安全风险,不建议生产环境使用

可以使用 Bcrypt Hash Generator 在线工具,但请注意这种方式存在密码泄露风险。

Bcrypt-Generator-Online-Hash-Generator-and-Checker
Bcrypt-Generator-Online-Hash-Generator-and-Checker

方案三:Docker 容器生成(推荐指数:⭐⭐⭐⭐⭐)

优势:简单便捷,安全可控,无需安装依赖
劣势:需要 Docker 环境

本文推荐使用这种方式!我们使用封装好的 Docker 镜像来生成演示密码 admin

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run --rm registry.gitlab.com/epicdocker/bcrypt:latest hash admin 12
> $2a$12$agZouh6t/ox4xZG8/SARbuEorguwoO0NjlLJ06woLk8HAsQg4wD5i

3. 部署核心组件 Milvus

准备工作完成后,现在开始搭建我们监控体系的核心——Milvus 向量数据库!我们选择 Docker 方式部署 Standalone 版本,这不仅简化了部署流程,还便于后续的维护和升级。

为什么选择 Standalone 版本?

对于大多数应用场景,Standalone 版本已经能够满足需求,而且具有以下优势:

  • 部署简单:一键启动,无需复杂的集群配置
  • 资源占用少:适合中小规模应用和学习环境
  • 维护成本低:单节点故障排查更直接
  • 扩展性好:后续可以平滑升级到集群版

进阶提示:掌握了 Standalone 版本的监控方案后,集群版的监控配置只是在此基础上的扩展,核心原理完全一致。

3.1 获取部署文件

第一步:创建工作目录

为 Milvus 创建专用的工作目录,这样便于后续的管理和维护:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/containers/milvus

第二步:下载官方配置文件

从 Milvus 官方 GitHub 仓库获取标准的 Docker Compose 配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 主服务。

3.2 安全配置优化

安全警告:官方默认配置没有启用身份认证,这在生产环境中是极其危险的!就像把银行金库的门敞开一样,任何人都可以随意访问你的数据。

为什么必须启用认证?

在生产环境中,未启用认证的 Milvus 实例面临以下风险:

  • 数据泄露:任何人都可以查询和下载向量数据
  • 恶意操作:攻击者可能删除或篡改重要数据
  • 合规问题:不符合企业安全规范和法规要求

认证配置说明

启用身份验证后,Milvus 会自动创建默认管理员账户:

  • 用户名root
  • 默认密码Milvus

生产环境最佳实践

  1. 启用认证后立即修改默认密码
  2. 创建具有最小权限的业务账户
  3. 定期轮换密码
  4. 启用访问日志审计

现在让我们为 Milvus 启用安全认证。编辑 docker-compose.yml 文件,在 Milvus 容器的环境变量中添加认证配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
......
environment:
  ......
  common.security.authorizationEnabled: true

3.3 启动 Milvus 服务

配置完成后,现在可以启动 Milvus 服务了。Docker Compose 会自动拉取所需的镜像并启动所有相关组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

3.4 服务状态验证

启动命令执行后,我们需要逐一验证各个组件是否正常运行。这个验证过程至关重要,确保后续的监控配置能够正常工作。

第一步:检查容器运行状态

使用以下命令查看所有容器的运行状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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,你可以:

  • 实时查看系统运行状态
  • 监控各组件的健康指标
  • 管理数据库和集合
  • 查看详细的系统配置

赶紧打开浏览器,输入下面的地址来欣赏一下这个"美貌与智慧并存"的管理界面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://${MILVUS_IP}:9091/webui
Milvus-Web-UI-v2513
Milvus-Web-UI-v2513

3.5 监控接口验证

在配置 Prometheus 监控之前,我们需要确认 Milvus 的监控指标接口是否正常工作。Milvus 内置了完整的 Prometheus 监控指标,这为后续的监控配置提供了数据基础。

命令行验证监控指标接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl http://<your-server-ip>:9091/metrics

或者在浏览器中访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://<your-server-ip>:9091/metrics

监控指标说明

Milvus 提供了丰富的监控指标,包括:

  • 系统指标:CPU、内存、磁盘使用情况
  • 业务指标:查询 QPS、响应时间、错误率
  • 存储指标:数据量、索引状态、分片信息
  • 网络指标:连接数、流量统计

技术优势:Standalone 版本将所有组件的监控指标统一到一个端点,大大简化了监控配置的复杂度。

Milvus-metrics-v2513
Milvus-metrics-v2513

4. 部署告警管理系统

4.1 Alertmanager 部署配置

Alertmanager 简介

Alertmanager 是 Prometheus 生态系统中的告警管理组件,负责处理由 Prometheus 服务器发送的告警。它具有以下核心功能:

  • 告警去重:避免重复告警造成的干扰
  • 告警分组:将相关告警合并处理
  • 告警路由:根据规则将告警发送给不同的接收者
  • 告警抑制:在特定条件下暂停某些告警

第一步:创建工作目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/containers/alertmanager
cd /data/containers/alertmanager

第二步:创建 Docker Compose 配置

创建 docker-compose.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 配置文件(从官方镜像中复制的默认配置,未作任何修改,生产环境需要根据需求修改):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 认证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
basic_auth_users:
admin: $2a$12$agZouh6t/ox4xZG8/SARbuEorguwoO0NjlLJ06woLk8HAsQg4wD5i

安全提示:这里的密码使用准备阶段用工具生成的密码。

4.2 启动 Alertmanager 服务

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

4.3 服务状态验证

第一步:检查容器运行状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose ps

正常运行状态示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 管理界面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://<your-server-ip>:9093

登录验证

  • 用户名:admin
  • 密码:admin
Prometheus-Alertmanager-login-v341
Prometheus-Alertmanager-login-v341

登录成功后,你将看到 Alertmanager 的主界面。此时还没有告警信息,这是正常的,因为我们还没有配置 Prometheus 的告警规则。

Alertmanager-home-v0281
Alertmanager-home-v0281

5. 部署监控核心组件

5.1 Prometheus 监控服务部署

第一步:创建工作目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建 Prometheus 主目录
mkdir -p /data/containers/prometheus
cd /data/containers/prometheus

创建告警规则目录

mkdir -p rules

第二步:创建 Docker Compose 配置

创建 docker-compose.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 全局配置
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 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
basic_auth_users:
admin: $2a$12$agZouh6t/ox4xZG8/SARbuEorguwoO0NjlLJ06woLk8HAsQg4wD5i

5.2 启动 Prometheus 服务

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

5.3 服务状态验证

第一步:检查容器运行状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose ps

正常运行状态示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 管理界面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://<your-server-ip>:9090

登录验证

  • 用户名:admin
  • 密码:admin
Prometheus-login-v341
Prometheus-login-v341

登录成功后,你将看到 Prometheus 的主界面。在 「Status → Target Health」 页面可以查看当前的监控目标状态。

Prometheus-targets-v341
Prometheus-targets-v341

6. 部署系统监控组件

6.1 Node Exporter 部署配置

Node Exporter 简介

Node Exporter 是 Prometheus 生态系统中的系统监控组件,专门负责收集服务器硬件和操作系统的监控指标。它提供了完整的系统监控能力:

  • 硬件监控:CPU 使用率、内存使用情况、磁盘 I/O 性能
  • 网络监控:网络接口流量、连接状态、错误统计
  • 系统监控:进程状态、文件系统使用率、系统负载
  • 性能监控:上下文切换、中断统计、系统调用

监控架构完整性

一个完整的监控系统需要多个维度的数据:

  • 应用层监控:Milvus 业务指标(查询性能、数据量等)
  • 系统层监控:服务器资源使用情况(CPU、内存、磁盘)
  • 网络层监控:网络连接和流量状态

第一步:创建工作目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/containers/node_exporter
cd /data/containers/node_exporter

第二步:创建 Docker Compose 配置

创建 docker-compose.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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'

6.2 启动 Node Exporter 服务

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

6.3 服务状态验证

第一步:检查容器运行状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose ps

正常运行状态示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 状态页面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://<your-server-ip>:9100
Prometheus-NodeExporter-v191
Prometheus-NodeExporter-v191

第三步:监控指标验证

验证监控指标接口是否正常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl http://<your-server-ip>:9100/metrics

技术说明:Node Exporter 通过 /metrics 端点暴露系统监控指标,Prometheus 会定期从这个端点拉取数据。

7. 配置监控目标集成

7.1 更新 Prometheus 监控配置

现在我们需要将 Milvus 和 Node Exporter 添加到 Prometheus 的监控目标列表中,让 Prometheus 能够定期从这些服务拉取监控数据。

配置原理说明

Prometheus 采用 Pull 模式进行数据采集:

  1. 服务发现:Prometheus 根据配置文件中的 scrape_configs 发现监控目标
  2. 数据拉取:按照设定的时间间隔(scrape_interval)主动拉取监控数据
  3. 数据存储:将拉取到的时序数据存储在本地时序数据库
  4. 规则评估:根据告警规则评估是否需要触发告警

修改 Prometheus 配置

编辑 /data/containers/prometheus/prometheus.yml 文件,在 scrape_configs 部分添加以下监控目标:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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:自定义标签,用于在查询和告警中进行分组和过滤

7.2 创建 Milvus 告警规则

告警规则的重要性

告警规则是监控系统的核心组件,它能够:

  • 主动发现问题:在问题发生时立即通知运维人员
  • 预防故障扩散:通过早期预警避免小问题演变成大故障
  • 提供决策依据:基于历史告警数据优化系统架构

创建告警规则文件(以 Milvus 服务状态监控为例)

在 /data/containers/prometheus/rules/ 目录下创建 milvus_alert_rules.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:告警描述信息

7.3 重启 Prometheus 服务

重启服务使配置生效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /data/containers/prometheus
docker compose stop
docker compose start

7.4 配置验证

第一步:验证监控目标

在 Prometheus Web 界面中,导航到 「Status → Target health」页面,确认新添加的监控目标状态:

  • prometheus:Prometheus 自监控,状态应为 UP
  • node:系统监控,状态应为 UP
  • milvus-standalone:Milvus 服务监控,状态应为 UP
Prometheus-Targets-milvus-v341
Prometheus-Targets-milvus-v341

第二步:验证告警规则

在 Prometheus Web 界面中,导航到 Alerts 页面,确认告警规则已正确加载,在 Alerts 页面可以查看当前的告警状态:

Prometheus-Alerts-milvus-standalone-v341
Prometheus-Alerts-milvus-standalone-v341

8. 部署可视化大屏

8.1 Grafana 可视化平台部署

Grafana 简介

Grafana 是业界领先的开源可视化和监控平台,它能够:

  • 数据可视化:将 Prometheus 的时序数据转换为直观的图表和仪表板
  • 多数据源支持:支持 Prometheus、InfluxDB、MySQL 等多种数据源
  • 告警管理:提供灵活的告警规则和通知机制
  • 用户管理:支持多用户、多组织的权限管理
  • 插件生态:丰富的插件生态系统,支持扩展功能

为什么选择 Grafana?

  • 专业性:专为监控和可视化设计,功能强大且易用
  • 美观性:提供现代化的 UI 界面和丰富的图表类型
  • 灵活性:支持自定义仪表板和复杂的查询表达式
  • 社区支持:活跃的开源社区和丰富的模板资源

第一步:创建工作目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/containers/grafana
cd /data/containers/grafana

第二步:创建 Docker Compose 配置

创建 docker-compose.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

8.2 启动 Grafana 服务

启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker compose up -d

8.3 服务状态验证

第一步:检查容器运行状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker compose ps

正常运行状态示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 界面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://服务器IP:3000

登录信息

  • 用户名admin
  • 密码admin
Grafana-login-v1163
Grafana-login-v1163

第三步:首次登录配置

首次登录后,建议:

  1. 修改管理员密码为更复杂的密码
  2. 配置用户权限和组织设置
  3. 检查插件安装状态
Grafana-reset-pass-v1163
Grafana-reset-pass-v1163

9. 配置监控可视化仪表板

9.1 配置 Prometheus 数据源

数据源的重要性

Grafana 需要连接到 Prometheus 才能获取监控数据。数据源配置是构建监控仪表板的基础步骤。

第一步:进入数据源配置

在 Grafana 主界面中,导航到:

  • 路径:Connections → Data sources → Add data source
  • 选择类型:Prometheus
Data-sources-Connections-Grafana
Data-sources-Connections-Grafana
Add-data-source-Data-sources-Connections-Grafana
Add-data-source-Data-sources-Connections-Grafana

第二步:配置数据源参数

根据实际环境配置以下参数:

基本配置

  • Nameprometheus121(建议使用描述性名称)
  • URLhttp://服务器IP:9090(替换为实际的 Prometheus 地址)
  • Access:Server (default)

认证配置

  • Authentication:Basic authentication
  • Useradmin
  • Passwordadmin123(与 Prometheus web.yml 中配置的密码一致)

高级配置

  • Scrape interval:15s(与 Prometheus 配置保持一致)
  • Query timeout:60s
  • HTTP Method:POST
prometheus121-Data-sources-Connections-Grafana
prometheus121-Data-sources-Connections-Grafana

第三步:测试数据源连接

点击页面底部的 Save & test 按钮,验证连接:

  • 成功提示:"Data source is working"
  • 失败排查:检查 URL、认证信息、网络连通性
prometheus121-Data-sources-Connections-Grafana-test
prometheus121-Data-sources-Connections-Grafana-test

9.2 配置系统监控仪表板

Node Exporter 仪表板选择

Grafana 社区提供了丰富的 Node Exporter 仪表板模板,我们可以直接导入使用。这些模板经过社区验证,功能完善且美观。

第一步:选择合适的仪表板

访问 Grafana Dashboards 官网,搜索 "Node Exporter":

Grafana-dashboards-Grafana-Labs-Node-Exporter
Grafana-dashboards-Grafana-Labs-Node-Exporter

推荐仪表板

  • ID 1860:Node Exporter Full(最受欢迎,功能全面)
  • ID 16098:Node Exporter Dashboard(本文示例,支持 JOB 分组)
  • ID 11074:Node Exporter for Prometheus(简洁版本)

第二步:导入仪表板

在 Grafana 中导航到:Dashboards → New → Import

方式一:使用仪表板 ID

直接输入仪表板 ID(本文使用 16098):

Import-dashboard-Dashboards-Grafana-16098
Import-dashboard-Dashboards-Grafana-16098

方式二:上传 JSON 文件

从官网下载 JSON 文件后上传。

第三步:配置仪表板参数

导入时需要配置:

  • Name:Node Exporter Dashboard(可自定义)
  • Folder:选择存放文件夹
  • Data source:选择之前配置的 prometheus121

第四步:验证仪表板效果

导入成功后,仪表板将显示系统监控数据:

  • 系统概览:CPU、内存、磁盘、网络使用情况
  • 详细指标:负载、进程、文件系统等
  • 历史趋势:时间序列图表展示
Node-Exporter-Dashboard-20240520-通用JOB分组版-Dashboards-Grafana
Node-Exporter-Dashboard-20240520-通用JOB分组版-Dashboards-Grafana

仪表板功能说明

  • 实时监控:显示当前系统状态
  • 时间范围选择:可查看历史数据
  • 告警状态:集成告警规则显示
  • 多实例支持:支持监控多台服务器

9.3 配置 Milvus 专用仪表板

Milvus 官方仪表板

Milvus 官方提供了专门的 Grafana 仪表板模板,针对 Milvus 的各个组件进行了优化,能够全面展示 Milvus 的运行状态和性能指标。

第一步:下载官方仪表板文件

根据 Milvus Standalone v2.5 版本下载对应的仪表板文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 下载 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

重要说明

  • Milvus 官方文档默认展示集群版配置
  • Milvus Standalone 版本需要使用专门的配置文件
  • 不同版本的 Milvus 对应不同的仪表板文件

第二步:导入仪表板到 Grafana

在 Grafana 中导航到:Dashboards → New → Import

选择 Upload dashboard JSON file

Import-dashboard-Dashboards-Grafana
Import-dashboard-Dashboards-Grafana

上传下载的 JSON 文件,然后点击 Import

Import-dashboard-Dashboards-Grafana-2
Import-dashboard-Dashboards-Grafana-2

第三步:配置仪表板参数

导入时配置以下参数:

  • Name:Milvus Standalone Dashboard
  • Folder:选择合适的文件夹

第四步:验证仪表板功能

导入成功后,可以看到仪表板概览:

Dashboards-Grafana-overview
Dashboards-Grafana-overview

Milvus 监控指标分类

Milvus 仪表板包含以下主要监控指标:

  • Runtime:运行时状态和资源使用
  • Root Coordinator:根协调器性能指标
  • Data Coordinator:数据协调器状态
  • Index Coordinator:索引协调器监控
  • Query Coordinator:查询协调器性能
  • Proxy:代理服务监控
  • Data Node:数据节点状态
  • Index Node:索引节点性能
  • Query Node:查询节点监控
MilvusStandalone-Dashboards-Grafana
MilvusStandalone-Dashboards-Grafana

第五步:查看详细监控指标

Runtime 指标详情

展示 Milvus 运行时的核心指标,包括:

  • CPU 和内存使用率
  • 协程数量和状态
  • 垃圾回收统计
  • 系统调用统计
MilvusStandalone-Dashboards-Grafana-runtime
MilvusStandalone-Dashboards-Grafana-runtime

Root Coordinator 指标详情

展示根协调器的性能指标,包括:

  • 请求处理速率
  • 响应时间分布
  • 错误率统计
  • 连接状态监控
MilvusStandalone-Dashboards-Grafana-Root-Coordinatr
MilvusStandalone-Dashboards-Grafana-Root-Coordinatr

监控数据说明

  • 某些指标可能因环境和使用情况而无数据显示
  • 建议根据实际业务场景调整监控阈值
  • 可以自定义添加业务相关的监控面板

10. 监控告警系统验证

10.1 告警系统架构说明

告警实现方案对比

监控告警有两种主要实现方案:

方案

优势

劣势

适用场景

Grafana 告警

配置简单,界面友好

功能相对有限

小型项目,简单告警

Prometheus + Alertmanager

功能强大,灵活性高

配置复杂

企业级项目,复杂告警

本文选择方案:Prometheus + Alertmanager

告警流程

  1. Prometheus 根据告警规则评估指标数据
  2. 触发告警 时将告警发送给 Alertmanager
  3. Alertmanager 处理告警(去重、分组、路由)
  4. 发送通知 到指定的接收方(邮件、钉钉、微信等)

10.2 告警功能测试

测试目标

验证之前配置的 Milvus 服务可用性告警规则是否正常工作。

第一步:模拟服务故障

停止 Milvus 服务来模拟服务故障:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 进入 Milvus 部署目录
cd /data/containers/milvus

停止 Milvus 服务

docker compose stop

验证服务已停止

docker compose ps

第二步:观察告警状态变化

PENDING 状态(告警触发初期):

访问 Prometheus Web 界面(http://服务器IP:9090),导航到 Status → Rules 或 Alerts 页面。

服务刚停止时,告警状态为 PENDING(等待确认期):

Prometheus-Alerts-milvus-standalone-pending-v341
Prometheus-Alerts-milvus-standalone-pending-v341

FIRING 状态(告警正式触发):

等待 1 分钟后(根据告警规则中的 for: 1m 配置),告警状态变为 FIRING

Prometheus-Alerts-milvus-standalone-firing-v341
Prometheus-Alerts-milvus-standalone-firing-v341

告警状态说明

  • INACTIVE:告警规则未触发
  • PENDING:告警条件满足,但未达到持续时间要求
  • FIRING:告警正式触发,已发送到 Alertmanager

第三步:验证 Alertmanager 接收

访问 Alertmanager Web 界面(http://服务器IP:9093),查看告警接收情况:

Alertmanager-milvus-standalone-down
Alertmanager-milvus-standalone-down

Alertmanager 功能验证

  • 告警接收:确认从 Prometheus 接收到告警
  • 告警分组:相同类型的告警会被分组显示
  • 告警状态:显示告警的当前状态和持续时间

第四步:恢复服务验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 重新启动 Milvus 服务
cd /data/containers/milvus
docker compose start

等待几分钟后检查告警状态

告警应该自动解除

注意事项

  • 本文未配置具体的告警通知方式(邮件、钉钉、微信等)
  • 生产环境建议配置多种通知渠道
  • 可以根据业务需求调整告警阈值和持续时间

写在最后

至此,我们已经成功搭建并验证了 Milvus Standalone 版本的监控、告警与可视化展示一体化解决方案。本文详细阐述了从环境准备、核心组件部署(Milvus、Prometheus、Alertmanager、Node Exporter)到 Grafana 可视化配置的全流程。通过本实践,您不仅掌握了各组件的部署细节,更理解了如何构建一个高效、可靠的 Milvus 监控体系。

受限于篇幅,本文在监控资源方面未深入探讨 etcd 和 Minio 的监控,告警通知方式也仅限于基础验证。未来,我们将以专题短文的形式,继续分享这些进阶内容,包括更丰富的告警通知集成(如邮件、钉钉、微信)、更细致的性能调优以及生产环境下的高可用实践。敬请持续关注,共同探索 Milvus 智能运维的更多可能性!

感谢大家的阅读和支持,期待下一次的"开盲盒"分享!

免责声明

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责

posted @ 2025-08-29 10:44  书读百遍,奇迹自现  阅读(7)  评论(0)    收藏  举报