海景美女图FLUX.1企业级运维:Prometheus+Grafana监控GPU温度/显存/请求QPS
海景美女图FLUX.1企业级运维:Prometheus+Grafana监控GPU温度/显存/请求QPS
1. 为什么你的AI绘图服务需要监控?
想象一下这个场景:你的“海景美女图”AI绘图服务正在稳定运行,用户们愉快地输入着“sunset beach with beautiful woman”这样的提示词,一张张精美的图片不断生成。突然,某个深夜,服务响应变得极其缓慢,用户开始抱怨“图片生成失败”或“网页打不开”。你紧急登录服务器,手忙脚乱地敲着nvidia-smi和supervisorctl status命令,试图找出问题所在——是GPU过热降频了?显存泄漏了?还是请求量突然暴增把服务压垮了?
如果你经历过类似情况,就会明白一个道理:对于生产环境的AI服务,靠人工登录服务器查日志、看命令行的运维方式,就像用算盘管理现代企业财务——效率低下且容易出错。
这就是为什么我们需要为企业级的“海景美女图”FLUX.1服务搭建一套完整的监控系统。今天我要分享的,就是用Prometheus + Grafana这套业界标准的监控组合,为你的AI绘图服务装上“全天候雷达”,让你能够:
- 实时看到GPU的温度、显存使用率、利用率
- 准确掌握服务的请求量、响应时间、成功率
- 提前预警潜在问题,而不是等问题发生了再救火
- 历史回溯任何时间点的服务状态,分析性能趋势
更重要的是,这套方案完全免费、开源,你不需要支付任何云监控服务的高额费用。接下来,我会手把手带你从零搭建这套监控系统,即使你之前没接触过Prometheus或Grafana,也能跟着一步步完成。
2. 监控系统整体架构:三大部分如何协同工作
在开始动手之前,我们先花几分钟理解一下整个监控系统是怎么运转的。不用担心技术细节,我用一个简单的比喻来解释:
想象一下医院的ICU监护室。病人(你的AI绘图服务)身上连接着各种传感器(监控指标),这些传感器把心率、血压、血氧数据(GPU温度、显存使用率)实时发送到监护仪(Prometheus),护士站的中央大屏(Grafana)显示着所有病人的生命体征,一旦某个指标异常就会报警(Alertmanager)。
对应到我们的技术架构,就是下面这个流程:
AI绘图服务(海景美女图) → 指标暴露(Exporter) → 数据收集(Prometheus) → 可视化展示(Grafana) → 报警通知(可选)2.1 各个组件的作用
Prometheus(普罗米修斯)
- 角色:数据收集和存储中心
- 工作:每隔15秒(可配置)主动去各个目标拉取监控数据
- 特点:时序数据库,专门存储随时间变化的数据(比如GPU温度随时间的变化曲线)
Node Exporter(节点导出器)
- 角色:服务器基础指标收集器
- 工作:收集CPU、内存、磁盘、网络等系统级指标
- 注意:它不收集GPU指标,GPU需要专门的exporter
NVIDIA GPU Exporter(NVIDIA GPU导出器)
- 角色:GPU专用指标收集器
- 工作:通过NVIDIA的NVML库获取GPU温度、显存、利用率等指标
- 关键:这是我们监控AI绘图服务的核心组件
cAdvisor(容器监控器)
- 角色:容器资源监控器(如果你的服务用Docker运行)
- 工作:收集容器的CPU、内存、网络IO等使用情况
- 可选:如果服务直接运行在宿主机上,可以不用
Grafana(格拉法纳)
- 角色:数据可视化仪表盘
- 工作:从Prometheus读取数据,生成漂亮的图表和仪表盘
- 优点:拖拽式操作,无需编程,社区有大量现成模板
Alertmanager(报警管理器)
- 角色:报警通知中心
- 工作:接收Prometheus的报警规则触发,发送邮件、钉钉、微信等通知
- 可选:初期可以先搭建监控看板,报警功能后续再加
2.2 数据流向示意图
为了更直观理解,我们看看数据是怎么流动的:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ │ │ AI绘图服务 │────▶│ 各种Exporter │────▶│ Prometheus │ │ (海景美女图) │ │ (GPU/Node等) │ │ 数据存储 │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────┬───────┘ │ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ │ │ │ │ 管理员 │◀────│ Grafana │◀────│ Alertmanager │ │ (你) │ │ 可视化看板 │ │ 报警通知 │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘现在你对整体架构有了基本概念,接下来我们进入实战环节。我会假设你的“海景美女图”服务运行在一台Ubuntu 20.04/22.04的服务器上,并且已经按照之前的文档正常提供服务。
3. 第一步:安装和配置Prometheus监控服务器
Prometheus是我们监控系统的核心,它负责收集和存储所有监控数据。安装过程比想象中简单,跟着步骤来就行。
3.1 创建专用用户和目录
首先,为了安全起见,我们不建议用root用户运行Prometheus。创建一个专用用户和目录:
# 创建prometheus用户组和用户 sudo groupadd --system prometheus sudo useradd -s /sbin/nologin --system -g prometheus prometheus # 创建数据存储目录 sudo mkdir /var/lib/prometheus # 创建配置目录 sudo mkdir -p /etc/prometheus/rules /etc/prometheus/rules.d /etc/prometheus/files_sd # 设置目录权限 sudo chown -R prometheus:prometheus /etc/prometheus sudo chown -R prometheus:prometheus /var/lib/prometheus3.2 下载并安装Prometheus
访问Prometheus官网下载最新版本,或者直接用wget命令下载。这里以2.45.0版本为例:
# 进入临时目录 cd /tmp # 下载Prometheus(请检查官网获取最新版本号) wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz # 解压 tar xvf prometheus-2.45.0.linux-amd64.tar.gz # 复制二进制文件到系统目录 cd prometheus-2.45.0.linux-amd64 sudo cp prometheus promtool /usr/local/bin/ # 复制配置文件 sudo cp -r consoles/ console_libraries/ /etc/prometheus/ sudo cp prometheus.yml /etc/prometheus/prometheus.yml # 设置权限 sudo chown -R prometheus:prometheus /etc/prometheus sudo chown prometheus:prometheus /usr/local/bin/prometheus sudo chown prometheus:prometheus /usr/local/bin/promtool3.3 配置Prometheus主配置文件
现在编辑Prometheus的主配置文件,告诉它要监控哪些目标:
sudo nano /etc/prometheus/prometheus.yml将文件内容替换为以下配置(我会详细解释每个部分的作用):
# 全局配置 global: scrape_interval: 15s # 每15秒抓取一次数据 evaluation_interval: 15s # 每15秒评估一次报警规则 # 报警规则文件位置 rule_files: # - "first_rules.yml" # - "second_rules.yml" # 抓取配置 - 定义要监控的目标 scrape_configs: # 监控Prometheus自身 - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] # 监控服务器节点(通过node_exporter) - job_name: 'node' static_configs: - targets: ['localhost:9100'] # 监控NVIDIA GPU(通过nvidia_gpu_exporter) - job_name: 'nvidia-gpu' static_configs: - targets: ['localhost:9835'] # 监控AI绘图服务(自定义指标) - job_name: 'seaview-beauty' static_configs: - targets: ['localhost:8000'] # 假设你的服务在8000端口暴露指标 metrics_path: '/metrics' # 指标端点路径 scrape_interval: 30s # 30秒抓取一次,对AI服务不需要太频繁配置说明:
- scrape_interval: 15秒抓取一次,平衡了实时性和系统负载
- job_name: 定义了四组监控目标:
prometheus: 监控Prometheus自身健康状况node: 监控服务器基础资源(CPU、内存等)nvidia-gpu: 监控GPU指标(温度、显存等)seaview-beauty: 监控你的AI绘图服务(需要服务暴露指标)
3.4 创建Systemd服务文件
为了让Prometheus随系统自动启动,我们创建systemd服务:
sudo nano /etc/systemd/system/prometheus.service添加以下内容:
[Unit] Description=Prometheus Documentation=https://prometheus.io/docs/introduction/overview/ Wants=network-online.target After=network-online.target [Service] Type=simple User=prometheus Group=prometheus ExecReload=/bin/kill -HUP $MAINPID ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 \ --web.external-url= SyslogIdentifier=prometheus Restart=always [Install] WantedBy=multi-user.target3.5 启动Prometheus并验证
现在启动Prometheus服务:
# 重新加载systemd配置 sudo systemctl daemon-reload # 启动Prometheus sudo systemctl start prometheus # 设置开机自启 sudo systemctl enable prometheus # 检查服务状态 sudo systemctl status prometheus如果一切正常,你会看到类似这样的输出:
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-01-15 10:00:00 CST; 10s ago Docs: https://prometheus.io/docs/introduction/overview/ Main PID: 12345 (prometheus) Tasks: 10 (limit: 4915) Memory: 50.3M CGroup: /system.slice/prometheus.service └─12345 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml ...现在打开浏览器,访问http://你的服务器IP:9090,应该能看到Prometheus的Web界面。点击顶部菜单的"Status" → "Targets",应该能看到我们配置的监控目标(虽然有些还没启动,会显示DOWN,这是正常的)。
恭喜!你已经成功安装了监控系统的大脑——Prometheus。接下来我们安装各种"传感器"(Exporter)来收集具体指标。
4. 第二步:安装GPU监控组件(核心重点)
对于AI绘图服务来说,GPU监控是最关键的部分。我们需要知道GPU的温度、显存使用情况、利用率等指标,这些直接关系到服务的稳定性和性能。
4.1 安装NVIDIA驱动和CUDA工具包(如果还没安装)
首先确认你的服务器已经安装了NVIDIA驱动和CUDA。运行以下命令检查:
# 检查NVIDIA驱动 nvidia-smi # 检查CUDA版本 nvcc --version如果nvidia-smi命令能正常显示GPU信息,但nvcc命令不存在,你可能需要安装CUDA工具包。这里以Ubuntu 22.04为例:
# 添加NVIDIA包仓库 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt-get update # 安装CUDA工具包(最小化安装,不包含驱动) sudo apt-get install -y cuda-toolkit-12-3 # 添加CUDA到环境变量 echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc # 验证安装 nvcc --version4.2 安装NVIDIA GPU Exporter
这是专门用于监控NVIDIA GPU的组件,它会通过NVML库获取GPU的各种指标。
# 下载最新版本的nvidia_gpu_exporter # 访问 https://github.com/utkuozdemir/nvidia_gpu_exporter/releases 查看最新版本 cd /tmp wget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia_gpu_exporter_1.2.0_linux_x86_64.tar.gz # 解压 tar xvf nvidia_gpu_exporter_1.2.0_linux_x86_64.tar.gz # 复制到系统目录 sudo cp nvidia_gpu_exporter /usr/local/bin/ sudo chmod +x /usr/local/bin/nvidia_gpu_exporter4.3 创建GPU Exporter的Systemd服务
sudo nano /etc/systemd/system/nvidia-gpu-exporter.service添加以下内容:
[Unit] Description=NVIDIA GPU Exporter After=network.target [Service] Type=simple User=root Group=root ExecStart=/usr/local/bin/nvidia_gpu_exporter --web.listen-address=:9835 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target注意:这里我们使用9835端口,与Prometheus配置中的localhost:9835对应。
4.4 启动GPU Exporter并验证
# 重新加载systemd sudo systemctl daemon-reload # 启动服务 sudo systemctl start nvidia-gpu-exporter # 设置开机自启 sudo systemctl enable nvidia-gpu-exporter # 检查状态 sudo systemctl status nvidia-gpu-exporter现在测试一下GPU Exporter是否正常工作:
# 检查端口是否监听 sudo netstat -tlnp | grep 9835 # 直接访问指标端点 curl http://localhost:9835/metrics如果一切正常,curl命令会返回大量以nvidia_开头的指标,比如:
# HELP nvidia_gpu_temperature_celsius GPU temperature in Celsius # TYPE nvidia_gpu_temperature_celsius gauge nvidia_gpu_temperature_celsius{gpu="0",name="NVIDIA GeForce RTX 4090"} 65 # HELP nvidia_gpu_memory_total_bytes Total GPU memory in bytes # TYPE nvidia_gpu_memory_total_bytes gauge nvidia_gpu_memory_total_bytes{gpu="0",name="NVIDIA GeForce RTX 4090"} 25769803776 # HELP nvidia_gpu_memory_used_bytes Used GPU memory in bytes # TYPE nvidia_gpu_memory_used_bytes gauge nvidia_gpu_memory_used_bytes{gpu="0",name="NVIDIA GeForce RTX 4090"} 8589934592 # HELP nvidia_gpu_utilization_percent GPU utilization percentage # TYPE nvidia_gpu_utilization_percent gauge nvidia_gpu_utilization_percent{gpu="0",name="NVIDIA GeForce RTX 4090"} 78这些指标正是我们需要的!它们分别表示:
nvidia_gpu_temperature_celsius: GPU温度(摄氏度)nvidia_gpu_memory_total_bytes: GPU总显存(字节)nvidia_gpu_memory_used_bytes: GPU已用显存(字节)nvidia_gpu_utilization_percent: GPU利用率百分比
4.5 安装Node Exporter(监控服务器基础资源)
除了GPU,我们还需要监控服务器的CPU、内存、磁盘、网络等基础资源:
# 下载Node Exporter cd /tmp wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz # 解压 tar xvf node_exporter-1.6.0.linux-amd64.tar.gz # 复制到系统目录 sudo cp node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/ sudo chmod +x /usr/local/bin/node_exporter # 创建系统用户(如果不存在) sudo useradd -rs /bin/false node_exporter创建systemd服务:
sudo nano /etc/systemd/system/node-exporter.service添加内容:
[Unit] Description=Node Exporter After=network.target [Service] User=node_exporter Group=node_exporter Type=simple ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100 [Install] WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload sudo systemctl start node-exporter sudo systemctl enable node-exporter sudo systemctl status node-exporter4.6 为AI绘图服务添加自定义指标(高级功能)
如果你想让监控更完善,可以为“海景美女图”服务本身添加一些业务指标,比如请求数、生成图片数量、平均生成时间等。这需要修改你的服务代码,暴露Prometheus格式的指标。
这里给出一个Python Flask服务的示例(假设你的服务是用Python写的):
from flask import Flask, request, jsonify from prometheus_client import Counter, Histogram, generate_latest, CONTENT_TYPE_LATEST import time app = Flask(__name__) # 定义Prometheus指标 REQUEST_COUNT = Counter('seaview_beauty_requests_total', 'Total request count') REQUEST_LATENCY = Histogram('seaview_beauty_request_latency_seconds', 'Request latency in seconds') IMAGES_GENERATED = Counter('seaview_beauty_images_generated_total', 'Total images generated') @app.route('/generate', methods=['POST']) def generate_image(): # 记录请求开始时间 start_time = time.time() # 增加请求计数 REQUEST_COUNT.inc() # 这里是你的图片生成逻辑 # ... # 增加生成图片计数 IMAGES_GENERATED.inc() # 记录请求延迟 REQUEST_LATENCY.observe(time.time() - start_time) return jsonify({"status": "success", "image_url": "..."}) @app.route('/metrics') def metrics(): """暴露Prometheus指标端点""" return generate_latest(), 200, {'Content-Type': CONTENT_TYPE_LATEST} if __name__ == '__main__': app.run(host='0.0.0.0', port=8000)然后在Prometheus配置中添加这个目标(我们之前已经配置了seaview-beautyjob)。
5. 第三步:安装和配置Grafana可视化看板
现在数据已经收集到Prometheus了,但原始数据不够直观。Grafana可以把这些数据变成漂亮的图表和仪表盘。
5.1 安装Grafana
Grafana提供了官方的APT仓库,安装很方便:
# 安装必要的依赖 sudo apt-get install -y software-properties-common wget # 添加Grafana的GPG密钥 sudo mkdir -p /etc/apt/keyrings/ wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null # 添加Grafana的APT仓库 echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list # 更新并安装Grafana sudo apt-get update sudo apt-get install -y grafana5.2 配置Grafana数据源
启动Grafana服务:
# 启动Grafana sudo systemctl start grafana-server # 设置开机自启 sudo systemctl enable grafana-server # 检查状态 sudo systemctl status grafana-server现在打开浏览器访问http://你的服务器IP:3000,你会看到Grafana的登录页面。默认用户名和密码都是admin,首次登录会要求修改密码。
登录后,我们需要添加Prometheus作为数据源:
- 点击左侧菜单的"Configuration"(齿轮图标)→ "Data sources"
- 点击"Add data source"
- 选择"Prometheus"
- 在URL字段输入
http://localhost:9090(如果Prometheus和Grafana在同一台服务器) - 点击"Save & Test",应该显示"Data source is working"
5.3 导入GPU监控仪表盘
Grafana社区有很多现成的仪表盘模板,我们不需要从零开始创建。这里推荐一个专门监控NVIDIA GPU的仪表盘:
- 点击左侧菜单的"Dashboards"(四个方块图标)→ "Import"
- 在"Import via grafana.com"字段输入仪表盘ID:
10795 - 点击"Load"
- 选择我们刚才添加的Prometheus数据源
- 点击"Import"
现在你就拥有了一个专业的GPU监控仪表盘!这个仪表盘包含了:
- GPU温度实时曲线
- 显存使用情况(已用/总量)
- GPU利用率百分比
- 功率使用情况
- 风扇速度等
5.4 创建AI绘图服务监控仪表盘
虽然有了GPU监控,但我们还需要一个专门针对“海景美女图”服务的业务监控仪表盘。我来教你创建一个简单的版本:
- 点击左侧菜单的"Dashboards" → "New" → "New Dashboard"
- 点击"Add visualization"添加第一个图表
图表1:GPU温度监控
- 数据源:选择你的Prometheus
- 查询:
nvidia_gpu_temperature_celsius - 设置:将图例格式改为
{{gpu}} - {{name}} - 面板标题:GPU温度(℃)
图表2:显存使用情况
- 添加新的图表
- 查询A:
nvidia_gpu_memory_used_bytes{gpu="0"},标签:已用显存 - 查询B:
nvidia_gpu_memory_total_bytes{gpu="0"},标签:总显存 - 可视化类型:选择"Stat"(统计值)
- 单位:选择"bytes(IEC)"(会自动转换为GB/MB)
- 面板标题:显存使用情况
图表3:GPU利用率
- 添加新的图表
- 查询:
nvidia_gpu_utilization_percent - 可视化类型:选择"Gauge"(仪表盘)
- 设置:最小0,最大100,阈值70(黄色),90(红色)
- 面板标题:GPU利用率(%)
图表4:服务器基础资源(使用Node Exporter数据)
- CPU使用率:
100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) - 内存使用率:
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 - 磁盘使用率:
(node_filesystem_size_bytes{fstype!="tmpfs"} - node_filesystem_free_bytes{fstype!="tmpfs"}) / node_filesystem_size_bytes{fstype!="tmpfs"} * 100
图表5:AI服务请求监控(如果添加了自定义指标)
- 总请求数:
rate(seaview_beauty_requests_total[5m]) - 平均响应时间:
rate(seaview_beauty_request_latency_seconds_sum[5m]) / rate(seaview_beauty_request_latency_seconds_count[5m]) - 图片生成总数:
seaview_beauty_images_generated_total
调整每个图表的大小和位置,让仪表盘看起来整洁美观。最后点击右上角的"Save"保存仪表盘,命名为"海景美女图服务监控"。
6. 第四步:配置告警规则(可选但重要)
监控的目的是为了及时发现问题。我们可以配置一些告警规则,当指标异常时自动通知。
6.1 在Prometheus中配置告警规则
首先创建告警规则文件:
sudo nano /etc/prometheus/ai_service_alerts.yml添加以下告警规则:
groups: - name: ai_service_alerts rules: # GPU温度过高告警 - alert: GPUTemperatureHigh expr: nvidia_gpu_temperature_celsius > 85 for: 5m labels: severity: warning annotations: summary: "GPU温度过高 (实例 {{ $labels.instance }})" description: "GPU {{ $labels.gpu }} 温度已达到 {{ $value }}°C,超过85°C阈值" # 显存使用率过高告警 - alert: GPUMemoryUsageHigh expr: (nvidia_gpu_memory_used_bytes / nvidia_gpu_memory_total_bytes) * 100 > 90 for: 5m labels: severity: warning annotations: summary: "GPU显存使用率过高 (实例 {{ $labels.instance }})" description: "GPU {{ $labels.gpu }} 显存使用率已达到 {{ $value | humanizePercentage }}" # GPU利用率持续过高告警 - alert: GPUUtilizationHigh expr: nvidia_gpu_utilization_percent > 95 for: 10m labels: severity: warning annotations: summary: "GPU利用率持续过高 (实例 {{ $labels.instance }})" description: "GPU {{ $labels.gpu }} 利用率已持续10分钟超过95%,当前 {{ $value }}%" # 服务宕机告警(通过up指标) - alert: ServiceDown expr: up{job="seaview-beauty"} == 0 for: 1m labels: severity: critical annotations: summary: "服务宕机 ({{ $labels.instance }})" description: "{{ $labels.job }} 服务已宕机超过1分钟" # 服务器内存不足告警 - alert: MemoryUsageHigh expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90 for: 5m labels: severity: warning annotations: summary: "服务器内存使用率过高 ({{ $labels.instance }})" description: "内存使用率已达到 {{ $value | humanizePercentage }}"然后修改Prometheus主配置文件,启用这个告警规则文件:
sudo nano /etc/prometheus/prometheus.yml在rule_files部分取消注释并添加:
rule_files: - "ai_service_alerts.yml" # 添加这一行重启Prometheus使配置生效:
sudo systemctl restart prometheus6.2 安装和配置Alertmanager(发送告警通知)
Alertmanager负责接收Prometheus的告警并发送通知。首先安装Alertmanager:
# 下载Alertmanager cd /tmp wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz # 解压 tar xvf alertmanager-0.25.0.linux-amd64.tar.gz # 复制到系统目录 cd alertmanager-0.25.0.linux-amd64 sudo cp alertmanager amtool /usr/local/bin/ sudo mkdir -p /etc/alertmanager sudo cp alertmanager.yml /etc/alertmanager/ # 创建用户 sudo useradd --no-create-home --shell /bin/false alertmanager # 创建数据目录 sudo mkdir /var/lib/alertmanager sudo chown alertmanager:alertmanager /var/lib/alertmanager配置Alertmanager(这里以邮件通知为例):
sudo nano /etc/alertmanager/alertmanager.ymlglobal: smtp_smarthost: 'smtp.gmail.com:587' # 你的SMTP服务器 smtp_from: 'your-email@gmail.com' # 发件人邮箱 smtp_auth_username: 'your-email@gmail.com' smtp_auth_password: 'your-app-password' # 应用专用密码,不是邮箱密码 route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'email-notifications' receivers: - name: 'email-notifications' email_configs: - to: 'admin@your-company.com' send_resolved: true创建systemd服务:
sudo nano /etc/systemd/system/alertmanager.service[Unit] Description=Alertmanager Wants=network-online.target After=network-online.target [Service] User=alertmanager Group=alertmanager Type=simple ExecStart=/usr/local/bin/alertmanager \ --config.file=/etc/alertmanager/alertmanager.yml \ --storage.path=/var/lib/alertmanager [Install] WantedBy=multi-user.target启动Alertmanager:
sudo systemctl daemon-reload sudo systemctl start alertmanager sudo systemctl enable alertmanager最后,修改Prometheus配置,告诉它Alertmanager的位置:
sudo nano /etc/prometheus/prometheus.yml在文件末尾添加:
alerting: alertmanagers: - static_configs: - targets: - localhost:9093 # Alertmanager默认端口重启Prometheus:
sudo systemctl restart prometheus现在当GPU温度超过85度或显存使用率超过90%时,你就会收到邮件告警了。
7. 第五步:实际监控效果展示与解读
一切配置完成后,让我们看看监控系统在实际运行中的效果。我会展示几个关键监控场景,并教你如何解读这些数据。
7.1 正常情况下的监控视图
当你的“海景美女图”服务正常运行时,监控面板应该显示类似下面的状态:
GPU监控区域:
- GPU温度:通常在65-75°C之间波动(取决于散热条件)
- 显存使用率:生成图片时上升到70-80%,空闲时回落到10-20%
- GPU利用率:生成图片时达到90-100%,空闲时为0-5%
服务器资源区域:
- CPU使用率:相对较低,因为主要负载在GPU
- 内存使用率:稳定在30-50%
- 磁盘IO:偶尔有读写波动
服务业务指标区域(如果配置了):
- 请求QPS:每分钟请求数,反映服务负载
- 平均响应时间:图片生成耗时,通常在2-5分钟
- 成功率:请求成功比例,应该接近100%
7.2 异常情况识别与排查
监控的真正价值在于发现问题。下面是一些常见异常及其在监控面板上的表现:
场景一:GPU温度过高(超过85°C)
- 监控表现:GPU温度曲线持续在红色区域(>85°C)
- 可能原因:散热风扇故障、环境温度过高、机箱风道不畅
- 排查步骤:
- 检查服务器机房温度
- 听风扇声音是否正常
- 清理GPU散热器灰尘
- 考虑降低生成图片的分辨率或步数
场景二:显存使用率持续高位(>90%)
- 监控表现:显存使用率曲线几乎贴顶
- 可能原因:显存泄漏、同时生成多张图片、图片分辨率设置过高
- 排查步骤:
- 检查是否有内存泄漏:重启服务看显存是否释放
- 查看当前生成队列:是否堆积了大量请求
- 调整服务配置:限制并发生成数量
- 建议用户使用较低分辨率(768x768代替1024x1024)
场景三:服务响应时间突然变长
- 监控表现:平均响应时间曲线出现尖峰
- 可能原因:GPU降频、系统资源竞争、网络问题
- 排查步骤:
- 查看GPU温度是否导致降频
- 检查系统负载:
top命令查看CPU和内存 - 检查磁盘IO:
iostat命令查看磁盘繁忙程度 - 查看服务日志:
tail -f /root/seaview-beauty/seaview-beauty.log
场景四:请求QPS突增
- 监控表现:请求数曲线突然大幅上升
- 可能原因:用户量增长、被爬虫扫描、遭受攻击
- 应对措施:
- 实施限流:限制单个IP的请求频率
- 添加验证码:防止自动化脚本
- 考虑扩容:如果确实是业务增长,需要增加服务器
7.3 建立监控看板使用习惯
有了监控系统后,建议养成以下习惯:
每日例行检查(5分钟):
- 打开Grafana仪表盘,快速浏览所有指标
- 关注是否有告警(红色/黄色区域)
- 查看昨日峰值:GPU最高温度、最大显存使用率
- 检查服务成功率:是否低于99.9%
每周性能分析(15分钟):
- 查看一周趋势:识别性能退化模式
- 分析高峰时段:了解用户使用习惯
- 计算平均资源使用率:为扩容提供数据支持
- 检查磁盘空间:预测何时需要清理或扩容
每月容量规划(30分钟):
- 分析月度增长趋势:预测未来资源需求
- 评估当前配置是否满足下月需求
- 制定扩容计划:如果需要的话
- 优化告警阈值:根据历史数据调整
8. 总结:从监控到运维智能化的进阶之路
通过本文的步骤,你已经为“海景美女图”FLUX.1 AI绘图服务搭建了一套完整的企业级监控系统。让我们回顾一下你获得的成果:
8.1 你已经实现的核心能力
实时可视化监控:通过Grafana仪表盘,你可以7x24小时实时查看:
- GPU温度、显存使用率、利用率
- 服务器CPU、内存、磁盘状态
- 服务请求量、响应时间、成功率
智能告警机制:当出现异常时,系统会自动:
- GPU温度超过85°C → 发送告警
- 显存使用率超过90% → 发送告警
- 服务宕机超过1分钟 → 发送告警
- 内存使用率超过90% → 发送告警
历史数据分析:所有监控数据都存储在Prometheus中,你可以:
- 回溯任意时间点的服务状态
- 分析性能趋势和周期性模式
- 基于数据做出容量规划决策
快速故障排查:当用户报告问题时,你可以:
- 立即查看相关时间段的监控图表
- 快速定位是GPU问题、内存问题还是服务问题
- 大大缩短平均故障恢复时间(MTTR)
8.2 运维效率的显著提升
对比监控系统部署前后的运维方式:
| 运维场景 | 部署前 | 部署后 |
|---|---|---|
| 服务异常 | 用户反馈 → 登录服务器 → 手动查日志 → 猜原因 | 告警通知 → 查看仪表盘 → 定位问题 → 针对性解决 |
| 性能分析 | 凭感觉、靠经验 | 基于数据、看趋势 |
| 容量规划 | 拍脑袋决定 | 基于历史数据预测 |
| 故障复盘 | 难以重现、说不清楚 | 完整数据记录、清晰时间线 |
8.3 后续优化建议
这套监控系统已经可以满足基本需求,但你还可以进一步优化:
短期优化(1个月内):
- 完善业务指标:为服务添加更多自定义指标,如图片生成成功率、用户地域分布、热门提示词统计等
- 优化告警策略:根据实际运行数据调整告警阈值,减少误报
- 设置分级告警:区分警告(需要关注)和严重(需要立即处理)
中期规划(1-3个月):
- 多节点监控:如果服务扩展到多台服务器,可以集中监控所有节点
- 日志聚合:将服务日志也接入监控系统,实现日志与指标的关联分析
- 自动化修复:对某些已知问题设置自动化修复脚本(如服务自动重启)
长期愿景(3个月以上):
- AI运维:基于历史数据训练模型,预测潜在故障
- 成本优化:基于使用模式动态调整资源分配,节省成本
- 用户体验监控:从用户角度监控服务可用性和性能
8.4 最重要的收获
搭建这套监控系统最大的价值,不是技术本身,而是运维思维的转变:
- 从被动救火到主动预防:在用户发现问题前,你已经知道了
- 从经验驱动到数据驱动:决策基于数据,而不是猜测
- 从局部视角到全局视图:同时看到GPU、服务器、服务多个维度
- 从人工操作到自动化:减少重复性的人工检查工作
现在,当你的“海景美女图”服务在深夜出现问题时,你不再需要被紧急电话吵醒,然后迷迷糊糊地登录服务器排查。监控系统会提前告诉你:“GPU温度正在缓慢上升,预计30分钟后可能触发降频”,让你有充足的时间从容应对。
这就是现代运维该有的样子——让机器做机器擅长的事(监控、告警),让人做人擅长的事(分析、决策、优化)。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
