在生产环境中运行 Qdrant,监控与可观测性是保障服务稳定性的关键。没有完善的监控体系,你就像在黑夜里开车——不知道油量、不知道速度、不知道前方路况。本章将系统讲解 Qdrant 的监控指标体系、日志管理、健康检查以及告警策略。
Qdrant 内置了 Prometheus 指标暴露端点,这是最推荐的监控数据采集方式。
在 Qdrant 的配置文件中启用 telemetry:
telemetry: enabled: true metrics: port: 6333 # 指标暴露端口 enable: true
启用后,可以通过以下端点获取指标:
GET /metrics
该端点返回标准的 Prometheus 文本格式指标,可以直接被 Prometheus Server 抓取。
Qdrant 暴露了大量细粒度指标,以下是生产环境中最关键的几类:
请求延迟指标
qdrant_requests_count 和 qdrant_requests_duration_seconds 是两个最核心的指标,分别统计请求总数和请求耗时。通过这些指标可以监控:
在 Grafana 中配置如下 PromQL 查询:
# 搜索请求 P99 延迟 histogram_quantile(0.99, rate(qdrant_requests_duration_seconds_bucket{method="POST", endpoint="/collections/{collection}/points/search"}[5m])) # 搜索请求吞吐量 QPS sum(rate(qdrant_requests_count{endpoint=~"/collections/.*/points/search"}[1m]))
向量操作指标
qdrant_collections_vector_count 记录每个集合中的向量总数。这个指标帮助你:
qdrant_collections_optimization_status 反映集合的优化状态,当值不为 green 时,说明集合正在进行内部优化或存在未完成的后台任务。
资源使用指标
Qdrant 通过标准的 Go runtime 指标暴露内存和 CPU 使用情况:
process_resident_memory_bytes:进程常驻内存go_goroutines:协程数量(异常增长可能意味着资源泄漏)go_memstats_alloc_bytes:当前堆内存分配Qdrant 的指标覆盖以下几个维度:
Qdrant 支持动态调整日志级别,适应不同场景的需求:
log_level: INFO # 可选: TRACE, DEBUG, INFO, WARN, ERROR
生产环境建议使用 INFO 级别。当需要排查问题时,可以临时调整到 DEBUG 或 TRACE 级别,获取更详细的内部执行信息。
Qdrant 默认输出 JSON 格式的结构化日志,方便日志采集系统解析。一条典型的搜索请求日志包含:
{ "timestamp": "2026-07-06T10:30:00.123Z", "level": "INFO", "message": "Search request completed", "collection": "product_vectors", "request_id": "abc-123", "search_time_ms": 3.2, "results_count": 10, "filter_applied": true }
结构化日志的好处是可以精确地按照任意字段进行过滤和聚合分析,这对于排查性能问题和审计非常有价值。
对于生产部署,建议将日志采集到集中式日志平台:
方案一:文件日志 + Filebeat
将 Qdrant 日志输出到文件,使用 Filebeat 采集并推送到 Elasticsearch 或 Loki。
方案二:容器日志 + Fluentd
在 Docker/Kubernetes 环境中,使用 Fluentd DaemonSet 采集容器标准输出日志。
方案三:直接推送到日志服务
使用 Vector 等高性能日志路由工具,直接将 Qdrant 日志推送到云端日志服务。
在日常运维中,需要重点关注以下日志事件:
WARN 级别的优化延迟警告ERROR 级别的磁盘写入失败Qdrant 提供了标准的健康检查端点:
GET /healthz GET /health GET /metrics/health
健康检查端点返回 HTTP 200 状态码表示服务正常,HTTP 503 表示服务异常。这些端点可以集成到负载均衡器和容器编排系统中。
存活检查用于判断 Qdrant 进程是否在运行并能够响应请求。配置示例:
# Kubernetes Liveness Probe livenessProbe: httpGet: path: /healthz port: 6333 initialDelaySeconds: 30 periodSeconds: 10 failureThreshold: 3
就绪检查用于判断 Qdrant 是否已经完成初始化并准备好处理流量。Qdrant 在启动时需要加载数据和构建索引,这个过程可能需要一些时间。就绪检查会等到数据加载完成后才返回成功:
# Kubernetes Readiness Probe readinessProbe: httpGet: path: /readyz port: 6333 initialDelaySeconds: 60 periodSeconds: 5 failureThreshold: 3
除了实例级别的健康检查,还可以通过 API 检查特定集合的状态:
GET /collections/{collection_name}
返回的响应中包含集合的详细状态信息,包括向量数量、索引状态、分片分布等。可以编写脚本定期检查这些状态,确保每个集合都处于健康状态。
一个完整的 Qdrant 监控仪表板应该包含以下几个面板:
概览面板
性能面板
资源面板
集群面板(仅集群模式)
基于 Prometheus 指标,配置以下关键告警规则:
P0 级告警(立即响应)
P1 级告警(30分钟内响应)
P2 级告警(当日响应)
- alert: QdrantHighLatency expr: histogram_quantile(0.99, rate(qdrant_requests_duration_seconds_bucket[5m])) > 0.5 for: 5m labels: severity: critical annotations: summary: "Qdrant 搜索延迟过高" description: "搜索请求 P99 延迟达到 {{ $value }}s,超过 500ms 阈值"
在微服务架构中,Qdrant 通常作为下游服务被调用。为了追踪一个请求的完整链路,需要集成分布式追踪。
Qdrant 支持通过 OpenTelemetry 协议导出追踪数据:
telemetry: tracing: host: otel-collector port: 4317 enable: true
启用后,每个 API 请求都会生成 Span,包含请求路径、处理时间、集合名称等信息。这些 Span 会与调用方的追踪上下文自动关联,形成完整的请求链路视图。
在 Jaeger 或 Tempo 中可以看到类似如下的追踪链路:
用户请求 → API 网关 → 业务服务(embedding 生成)→ Qdrant(向量搜索)→ 业务服务(结果处理)→ 返回
每个环节的耗时一目了然,快速定位性能瓶颈。
Qdrant 的可观测性体系涵盖指标、日志、追踪三大支柱。通过 Prometheus 采集指标、Grafana 可视化、结构化日志集中管理、分布式追踪串联请求链路,可以构建出完整的 Qdrant 运维监控体系。核心要点: