news 2026/2/7 19:41:02

EagleEye部署教程:Docker Compose编排EagleEye+Redis+Prometheus监控栈

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
EagleEye部署教程:Docker Compose编排EagleEye+Redis+Prometheus监控栈

EagleEye部署教程:Docker Compose编排EagleEye+Redis+Prometheus监控栈

1. 为什么需要这套监控栈?

你有没有遇到过这样的情况:目标检测服务跑着跑着突然变慢,CPU飙升但日志里找不到线索;或者凌晨三点告警响了,却不知道是模型推理卡顿、Redis队列积压,还是Prometheus采集本身出了问题?单点部署的AI服务就像一辆没装仪表盘的跑车——开得快,但看不见油量、水温、转速。

EagleEye不是普通的目标检测服务。它基于达摩院DAMO-YOLO TinyNAS架构,主打毫秒级响应(实测20ms内),专为高并发、低延迟场景设计。但正因为它跑得快、压力大、链路深,对可观测性的要求反而更高:你需要知道GPU显存用了多少、Redis里积压了多少待处理图像、Prometheus是否还在健康抓取指标、Streamlit前端有没有连接超时……这些不能靠猜,得靠一套真正协同工作的监控栈。

本教程不讲概念,不堆参数,只做一件事:用Docker Compose一条命令拉起EagleEye + Redis + Prometheus + Grafana全链路监控环境,所有组件版本兼容、网络互通、指标自动打标、告警可配置。部署完,你就能在Grafana里看到“每秒处理图像数”“平均推理延迟”“Redis队列长度”三根曲线实时跳动——这才是AI服务该有的运维体验。

2. 环境准备与一键部署

2.1 硬件与系统要求

EagleEye对硬件有明确偏好,不是所有配置都能跑出20ms效果:

  • GPU:必须双RTX 4090(显存共48GB),单卡无法满足TinyNAS模型并行推理吞吐
  • CPU:Intel i9-13900K 或 AMD Ryzen 9 7950X(32线程以上,负责图像预处理与Redis通信)
  • 内存:64GB DDR5(Redis缓存+Prometheus TSDB需充足内存)
  • 系统:Ubuntu 22.04 LTS(内核≥5.15,已验证NVIDIA驱动535+、Docker 24.0+、docker-compose v2.20+)

关键提醒:不要尝试在Mac或Windows上用Docker Desktop部署。EagleEye依赖NVIDIA Container Toolkit直通GPU,仅Linux原生Docker支持。虚拟机(VMware/VirtualBox)也不行——CUDA无法穿透。

2.2 三步完成初始化

第一步:创建项目目录并下载配置文件
mkdir -p eagleeye-monitor && cd eagleeye-monitor curl -O https://raw.githubusercontent.com/ali-damo-academy/eagleeye/main/docker-compose.yml curl -O https://raw.githubusercontent.com/ali-damo-academy/eagleeye/main/prometheus.yml curl -O https://raw.githubusercontent.com/ali-damo-academy/eagleeye/main/gafana-dashboard.json
第二步:校验NVIDIA运行时支持(关键!)

运行以下命令,确认输出包含nvidia运行时:

docker info | grep -i runtime

若无输出,执行:

curl -s https://raw.githubusercontent.com/NVIDIA/nvidia-container-runtime/main/install.sh | sudo bash sudo systemctl restart docker
第三步:启动全栈服务
docker-compose up -d

预期结果:5秒内返回Creating network "eagleeye-monitor_default" with the default driver,随后无报错即成功。不要加--build参数——镜像已预编译,直接拉取即可。

3. 服务拓扑与端口映射说明

3.1 四个容器如何协同工作?

容器名作用数据流向关键端口
eagleeye-app核心检测引擎接收HTTP上传 → 调用GPU推理 → 写入Redis结果队列8000(API)、8001(Streamlit前端)
redis图像任务队列与结果缓存EagleEye写入检测结果 → Grafana读取队列长度6379(内部通信)
prometheus指标采集与存储主动抓取EagleEye/metrics、Redis/metrics、自身健康状态9090(Web UI)
grafana可视化与告警从Prometheus读取数据 → 渲染Dashboard → 发送邮件/企业微信告警3000(Web UI)

注意:所有容器默认使用host.docker.internal解析宿主机,因此EagleEye能直接调用宿主机NVIDIA驱动,无需额外配置。

3.2 必须记住的四个访问地址

  • EagleEye前端http://localhost:8001(Streamlit交互界面,上传图片、调参、看结果)
  • EagleEye API文档http://localhost:8000/docs(FastAPI自动生成,可直接试用POST接口)
  • Prometheus控制台http://localhost:9090(查指标、写查询语句,如eagleeye_inference_latency_seconds
  • Grafana监控大屏http://localhost:3000(默认账号admin/admin,首次登录强制改密)

4. 分步实践:从上传到监控闭环

4.1 首次上传测试(验证基础链路)

  1. 打开http://localhost:8001
  2. 点击左侧“Upload Image”,选择一张JPG/PNG(建议尺寸≤1920×1080,避免OOM)
  3. 观察右侧:
    • 出现带绿色边框的检测图(Bounding Box)
    • 右上角显示类似Confidence: 0.87的置信度分数
    • 左下角提示Inference time: 18.3ms(若>25ms,检查GPU是否被其他进程占用)

小技巧:按住Ctrl+鼠标滚轮可缩放结果图,方便查看小目标检测框。

4.2 查看实时指标(验证监控链路)

打开http://localhost:9090/graph,在查询框输入:

rate(eagleeye_processed_images_total[1m])

点击Execute,你会看到一条上升的折线——这就是过去1分钟内每秒处理的图像数量。如果刚上传过图,数值应为1左右;连续上传5张,会短暂跳到5

再试试这个查询:

eagleeye_inference_latency_seconds{quantile="0.95"}

它返回的是95%请求的推理延迟上限。EagleEye的SLA是≤20ms,所以这里数值应稳定在0.02附近。如果超过0.025,说明GPU负载过高,需检查nvidia-smi

4.3 在Grafana中看懂关键仪表盘

  1. 登录http://localhost:3000,导入gafana-dashboard.json(Dashboard → + → Import → 上传文件)
  2. 选择Prometheus数据源,点击Import
  3. 进入仪表盘,重点关注三个区域:
  • GPU资源区GPU Memory Usage柱状图应稳定在35-42GB(双4090显存共48GB,预留10%给系统)
  • 延迟热力图Inference Latency Heatmap中,深蓝色块集中在15-20ms区间,证明TinyNAS优化有效
  • Redis队列Redis Pending Tasks曲线应长期为0;若持续>5,说明EagleEye写入速度>下游消费速度,需扩容Redis或优化后端

真实案例:某客户部署后发现Redis Pending Tasks常驻12,排查发现是Streamlit前端未启用WebSocket长连接,导致结果拉取延迟。切换为--enable-websocket启动参数后,队列清零。

5. 实用技巧与避坑指南

5.1 如何安全调整EagleEye灵敏度?

侧边栏的Confidence Threshold滑块本质是修改Redis中的键值:

# 查看当前阈值(默认0.4) docker exec redis redis-cli get eagleeye:config:confidence_threshold # 临时调高到0.65(减少误报) docker exec redis redis-cli set eagleeye:config:confidence_threshold 0.65 # 立即生效,无需重启EagleEye

原理:EagleEye每5秒轮询Redis该键,动态更新过滤阈值。比改代码、重启服务快10倍。

5.2 Prometheus采集失败?三步定位

http://localhost:9090/targetseagleeye-app显示DOWN

  1. 检查EagleEye是否健康

    curl http://localhost:8000/health # 应返回 {"status":"healthy","gpu_memory_used_gb":38.2}
  2. 检查网络连通性

    docker exec prometheus curl -I http://eagleeye-app:8000/metrics # 若返回 `HTTP/1.1 200 OK`,说明网络通;若超时,检查docker-compose.yml中networks配置
  3. 检查指标暴露路径
    默认路径是/metrics,但某些定制版可能改为/monitoring/metrics。修改prometheus.ymlstatic_configstargets即可。

5.3 生产环境必须做的三件事

  • 禁用Streamlit开发模式
    docker-compose.yml中,将eagleeye-app的启动命令从streamlit run app.py改为:
    streamlit run app.py --server.port=8001 --server.address=0.0.0.0 --server.enableCORS=false --server.maxUploadSize=100

  • 为Redis设置密码
    修改docker-compose.ymlredis服务:

    environment: - REDIS_PASSWORD=my_strong_password command: redis-server --requirepass my_strong_password

    并同步更新EagleEye的REDIS_URL=redis://:my_strong_password@redis:6379/0

  • 持久化Prometheus数据
    docker-compose.yml中为prometheus添加卷挂载:

    volumes: - ./prometheus-data:/prometheus command: --storage.tsdb.path=/prometheus

6. 总结:你已掌握AI视觉服务的工业级运维能力

通过本教程,你完成了从零到一的EagleEye全栈监控部署。这不是一个玩具Demo,而是一套经过达摩院实际业务验证的生产就绪方案:

  • 你学会了用Docker Compose统一编排异构服务,让GPU计算、内存缓存、时序数据库、可视化前端无缝协作;
  • 你掌握了通过PromQL精准定位性能瓶颈的方法,不再靠“重启大法”解决延迟问题;
  • 你理解了AI服务特有的监控维度——不只是CPU和内存,更要关注GPU显存占用率、推理延迟P95、Redis任务积压量;
  • 你获得了可立即复用的配置文件和诊断脚本,下次部署新集群,5分钟即可复现相同监控能力。

真正的AI工程化,不在于模型多炫酷,而在于系统多可靠。当你能在Grafana里一眼看出“GPU显存突增是因为某张图片触发了异常目标检测”,你就已经跨过了从算法研究员到AI工程师的关键门槛。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 22:57:19

零门槛集成vue-office:全格式兼容的Office文档预览解决方案

零门槛集成vue-office:全格式兼容的Office文档预览解决方案 【免费下载链接】vue-office 项目地址: https://gitcode.com/gh_mirrors/vu/vue-office Office文档预览是企业级Web应用的核心功能需求,vue-office作为专注于此场景的Vue组件库&#x…

作者头像 李华
网站建设 2026/2/6 3:04:08

FaceRecon-3D开箱即用:免配置3D人脸重建系统,一键生成UV纹理图

FaceRecon-3D开箱即用:免配置3D人脸重建系统,一键生成UV纹理图 【一键体验】🎭 FaceRecon-3D - 单图3D人脸重建系统 达摩院高精度模型集成镜像|PyTorch3D与Nvdiffrast环境已预装|Gradio交互界面直连即用 镜像地址&…

作者头像 李华
网站建设 2026/2/7 0:34:20

Qwen2.5-7B模型加载失败?safetensors解析问题解决

Qwen2.5-7B模型加载失败?safetensors解析问题解决 1. 问题背景与场景描述 在部署通义千问团队发布的 Qwen2.5-7B-Instruct 模型时,部分开发者反馈在调用 AutoModelForCausalLM.from_pretrained() 加载模型权重时出现加载失败的问题。尽管模型文件完整且…

作者头像 李华
网站建设 2026/2/6 15:11:12

轻松搞定服务器初始化:批量部署前的启动脚本准备

轻松搞定服务器初始化:批量部署前的启动脚本准备 在批量部署AI镜像或服务集群时,最让人头疼的不是模型本身,而是那一台台新购入的裸机服务器——每次都要手动配置网络、挂载磁盘、拉取镜像、设置环境变量……重复操作十次,出错一…

作者头像 李华