Fish Speech 1.5语音合成生产环境监控QPS/延迟/错误率指标看板当你把Fish Speech 1.5这样的语音合成模型部署到生产环境最怕的是什么是半夜收到报警说服务挂了还是用户投诉语音生成太慢又或者是突然发现某个时间段错误率飙升却不知道原因这些问题靠人工盯着日志是解决不了的。你需要的是一个能实时告诉你服务健康状况的“仪表盘”——一个集成了QPS、延迟、错误率等关键指标的可视化监控看板。今天我就带你从零开始搭建一套专为Fish Speech 1.5设计的生产级监控系统。1. 为什么生产环境必须要有监控想象一下你开了一家24小时营业的语音合成工厂。客户随时下单你的机器随时生产。如果没有监控你根本不知道工厂现在忙不忙一小时接了多少订单QPS生产一件产品平均要多久延迟生产线上有没有出次品错误率机器的“体力”怎么样CPU/GPU/内存使用率Fish Speech 1.5虽然强大但在生产环境中它只是一个“工人”。你需要一个“监工”来时刻了解它的工作状态。监控看板就是这个监工的眼睛它能帮你提前发现问题在用户投诉之前发现延迟升高或错误率异常。容量规划根据QPS趋势判断是否需要增加服务器。性能优化分析不同参数配置下的延迟表现找到最佳设置。故障排查当问题发生时快速定位是模型问题、代码问题还是资源问题。没有监控你的服务就是在“裸奔”。接下来我们一步步把这个“监工”系统搭建起来。2. 监控系统架构设计一个完整的监控系统就像一套精密的传感器网络。它需要采集数据、传输数据、存储数据最后展示数据。我们的架构也遵循这个逻辑。2.1 核心组件选型市面上监控工具很多我们选择最经典、最稳定的组合数据采集AgentPrometheus Node Exporter自定义应用指标暴露。Node Exporter负责采集服务器硬件指标CPU、内存、磁盘、网络我们的Fish Speech应用则需要通过代码暴露业务指标QPS、延迟、错误率。数据存储与告警ServerPrometheus。它是一个时间序列数据库专门用来存储监控指标数据并且内置了强大的告警规则引擎。数据可视化DashboardGrafana。这是目前最流行的监控数据可视化工具图表丰富配置灵活社区有大量现成的仪表盘模板。这套组合Prometheus Grafana几乎是云原生监控的事实标准社区活跃资料丰富。2.2 数据流设计整个系统的数据流动是这样的[Fish Speech 1.5 应用] --(暴露/metrics端点)-- [Prometheus] --(拉取存储)-- [Grafana] --(查询绘图)-- [Web看板] ↑ ↑ | | (集成SDK在代码中打点) (运维、开发人员查看)打点在Fish Speech 1.5的Web服务代码中我们在处理每个语音合成请求的关键位置开始、成功、失败插入记录生成指标。暴露应用启动一个HTTP端点通常是/metrics以Prometheus规定的格式提供这些指标数据。拉取Prometheus服务器按照配置的时间间隔如15秒主动去抓取每个应用实例的/metrics端点数据。存储与告警Prometheus将数据存入时序数据库并根据我们设定的规则如错误率5%持续1分钟评估是否触发告警。可视化Grafana配置Prometheus为数据源我们通过编写查询语句PromQL来绘制各种图表组装成直观的看板。3. 为Fish Speech 1.5注入监控能力监控的第一步是让应用自己能“说话”告诉我们内部发生了什么。我们需要改造Fish Speech 1.5的Web服务代码集成Prometheus客户端库。3.1 添加应用指标埋点假设你的Fish Speech 1.5服务是基于Python的FastAPI或Flask框架。我们需要安装prometheus-client库并在关键位置添加指标。# 安装Prometheus客户端库 pip install prometheus-client接下来在应用的主文件中例如app.py添加指标定义和埋点逻辑。我们主要关注三类核心指标计数器Counter用于记录累计数量如总请求数、总错误数。它只增不减。直方图Histogram用于记录分布情况特别是延迟。它会自动计算平均值、分位数如P50, P90, P99。测量仪Gauge用于记录瞬时值如当前正在处理的请求数并发数。# app.py (示例代码需要根据你的实际框架调整) from prometheus_client import Counter, Histogram, Gauge, generate_latest, CONTENT_TYPE_LATEST from flask import Flask, request, Response # 或 from fastapi import FastAPI, Request, Response import time app Flask(__name__) # 1. 定义指标 # 总请求数计数器 REQUEST_COUNT Counter( fishspeech_requests_total, Total number of requests to Fish Speech API, [method, endpoint, http_status] # 标签用于细分维度 ) # 请求延迟直方图单位秒 REQUEST_LATENCY Histogram( fishspeech_request_duration_seconds, Request latency in seconds, [method, endpoint], buckets(0.1, 0.5, 1.0, 2.0, 5.0, 10.0) # 自定义桶用于统计分布 ) # 当前正在处理的请求数测量仪 IN_PROGRESS_REQUESTS Gauge( fishspeech_requests_in_progress, Number of requests currently being processed, [method, endpoint] ) # 错误请求计数器 ERROR_COUNT Counter( fishspeech_errors_total, Total number of error responses, [method, endpoint, error_type] ) # 2. 应用中间件/装饰器进行埋点 app.before_request def before_request(): 在请求开始前记录 request.start_time time.time() IN_PROGRESS_REQUESTS.labels(methodrequest.method, endpointrequest.path).inc() app.after_request def after_request(response): 在请求结束后记录延迟和状态 # 计算延迟 latency time.time() - getattr(request, start_time, time.time()) REQUEST_LATENCY.labels(methodrequest.method, endpointrequest.path).observe(latency) # 记录总请求数 REQUEST_COUNT.labels(methodrequest.method, endpointrequest.path, http_statusresponse.status_code).inc() # 记录错误假设4xx, 5xx为错误 if 400 response.status_code 600: ERROR_COUNT.labels(methodrequest.method, endpointrequest.path, error_typestr(response.status_code)).inc() # 减少正在处理的请求数 IN_PROGRESS_REQUESTS.labels(methodrequest.method, endpointrequest.path).dec() return response # 3. 暴露/metrics端点给Prometheus抓取 app.route(/metrics) def metrics(): return Response(generate_latest(), mimetypeCONTENT_TYPE_LATEST) # 4. 你的语音合成主逻辑示例 app.route(/api/synthesize, methods[POST]) def synthesize_speech(): # 这里是你的Fish Speech 1.5合成逻辑 # 如果合成失败可以手动记录业务错误 # ERROR_COUNT.labels(methodPOST, endpoint/api/synthesize, error_typesynthesis_failed).inc() return {audio: base64_encoded_audio_or_url} if __name__ __main__: app.run(host0.0.0.0, port7860)代码解释我们定义了四个核心指标分别对应总请求量、延迟、并发数和错误数。利用Flask的before_request和after_request钩子自动为每个请求记录开始时间、结束时间、状态码。提供了一个/metrics端点Prometheus会定期访问这个端点来拉取最新的指标数据。在业务逻辑中如合成失败还可以手动增加错误计数以区分HTTP错误和业务错误。完成代码修改后重启你的Fish Speech服务。访问http://你的服务地址:7860/metrics你应该能看到Prometheus格式的指标数据输出。4. 搭建Prometheus与Grafana应用准备好了现在来搭建监控平台本身。我们使用Docker来快速部署这是最方便的方式。4.1 使用Docker Compose一键部署创建一个docker-compose.yml文件定义Prometheus、Grafana和Node Exporter三个服务。# docker-compose.yml version: 3.8 services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件 - prometheus_data:/prometheus # 数据持久化 command: - --config.file/etc/prometheus/prometheus.yml - --storage.tsdb.path/prometheus - --web.console.libraries/etc/prometheus/console_libraries - --web.console.templates/etc/prometheus/consoles - --storage.tsdb.retention.time30d # 数据保留30天 - --web.enable-lifecycle ports: - 9090:9090 networks: - monitoring grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 # 设置初始管理员密码 volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning # 预配置数据源和看板可选 ports: - 3000:3000 networks: - monitoring depends_on: - prometheus node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - --path.procfs/host/proc - --path.rootfs/rootfs - --path.sysfs/host/sys - --collector.filesystem.mount-points-exclude^/(sys|proc|dev|host|etc)($$|/) ports: - 9100:9100 networks: - monitoring networks: monitoring: driver: bridge volumes: prometheus_data: grafana_data:4.2 配置Prometheus抓取目标接下来创建Prometheus的配置文件prometheus.yml告诉它要去哪里抓取数据。# prometheus.yml global: scrape_interval: 15s # 每15秒抓取一次数据 evaluation_interval: 15s # 每15秒评估一次告警规则 # 告警规则配置可以先留空后续添加 rule_files: # - alert_rules.yml # 抓取配置列表 scrape_configs: # 监控Prometheus自身 - job_name: prometheus static_configs: - targets: [localhost:9090] # 监控服务器节点通过Node Exporter - job_name: node static_configs: - targets: [node-exporter:9100] # 使用Docker服务名 # 可以添加标签方便在Grafana中分组 relabel_configs: - source_labels: [__address__] target_label: instance regex: ([^:])(?::\d)? replacement: $1 # 监控Fish Speech 1.5应用 - job_name: fish-speech-app metrics_path: /metrics # 应用暴露指标的路径 static_configs: - targets: [你的Fish Speech服务器IP:7860] # 替换为你的实际地址和端口 labels: app: fish-speech-1.5 env: production重要将配置文件中的你的Fish Speech服务器IP:7860替换为你部署Fish Speech 1.5服务的真实IP地址和端口。4.3 启动监控栈在包含docker-compose.yml和prometheus.yml的目录下执行一条命令docker-compose up -d等待片刻三个服务就会启动Prometheus访问http://你的服务器IP:9090Grafana访问http://你的服务器IP:3000(用户名:admin, 密码:admin123)Node Exporter数据由Prometheus抓取不直接提供UI。在Prometheus的Web界面9090端口的“Status” - “Targets”页面你应该能看到三个抓取目标的状态都是“UP”。这表示Prometheus已经成功连接到你的Fish Speech应用和服务器节点。5. 在Grafana中构建监控看板数据已经流入Prometheus现在是时候用Grafana把它们变成直观的图表了。5.1 配置数据源登录Grafana默认3000端口。点击左侧齿轮图标 - “Data Sources”。点击“Add data source”选择“Prometheus”。URL填写http://prometheus:9090因为它们在同一个Docker网络内。点击“Save Test”应该显示“Data source is working”。5.2 创建核心监控看板我们创建一个名为“Fish Speech 1.5 Production Dashboard”的新看板并添加以下几个最重要的面板。面板1请求概览QPS 错误率这个面板展示服务的整体流量和健康度。图表类型Stat统计 Graph图形PromQL查询总QPS每秒请求数rate(fishspeech_requests_total{jobfish-speech-app}[5m])错误率sum(rate(fishspeech_errors_total{jobfish-speech-app}[5m])) / sum(rate(fishspeech_requests_total{jobfish-speech-app}[5m]))将这个结果乘以100并在Grafana面板设置中设置单位为“percent (0-100)”。当前并发数fishspeech_requests_in_progress{jobfish-speech-app}配置技巧为错误率设置一个阈值告警比如1%并在Grafana中将其背景色设置为红色这样一眼就能看到异常。面板2延迟分布Latency延迟是语音合成服务体验的关键。我们不仅要看平均延迟更要关注长尾延迟如P99。图表类型Time series时间序列图PromQL查询平均延迟rate(fishspeech_request_duration_seconds_sum{jobfish-speech-app}[5m]) / rate(fishspeech_request_duration_seconds_count{jobfish-speech-app}[5m])P90延迟90%的请求快于这个值histogram_quantile(0.90, sum(rate(fishspeech_request_duration_seconds_bucket{jobfish-speech-app}[5m])) by (le))P99延迟99%的请求快于这个值histogram_quantile(0.99, sum(rate(fishspeech_request_duration_seconds_bucket{jobfish-speech-app}[5m])) by (le))将这三个查询放在同一个图表中用不同颜色的线表示。P99延迟是评估服务稳定性的黄金指标。面板3服务器资源监控服务慢不一定是模型问题也可能是服务器资源耗尽了。图表类型Gauge仪表盘 GraphPromQL查询数据来自Node ExporterCPU使用率100 - (avg by (instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100)内存使用率(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100GPU使用率如果服务器有GPU需要安装dcgm-exporter或nvidia_gpu_exporterDCGM_FI_DEV_GPU_UTIL{jobnode} # 示例具体指标名取决于导出器磁盘使用率(node_filesystem_size_bytes{mountpoint/} - node_filesystem_free_bytes{mountpoint/}) / node_filesystem_size_bytes{mountpoint/} * 100将这些资源使用率做成仪表盘设置警告如80%和危险如95%阈值非常直观。面板4合成请求详情我们可以进一步细分看看不同端点或不同参数下的表现。图表类型Table表格 Pie chart饼图PromQL查询各端点QPSsum by (endpoint) (rate(fishspeech_requests_total{jobfish-speech-app}[5m]))各端点平均延迟sum by (endpoint) (rate(fishspeech_request_duration_seconds_sum{jobfish-speech-app}[5m])) / sum by (endpoint) (rate(fishspeech_request_duration_seconds_count{jobfish-speech-app}[5m]))错误类型分布sum by (error_type) (rate(fishspeech_errors_total{jobfish-speech-app}[5m]))这个面板能帮你快速定位是哪个API接口或哪种错误类型出了问题。5.3 看板布局与告警将以上面板合理排列在你的Grafana看板上。通常的布局是顶部放置QPS、错误率、并发数等概览Stat面板。中间左侧放置延迟趋势图。中间右侧放置服务器资源仪表盘。底部放置请求详情表格或饼图。设置告警 在Grafana中你可以为每个面板设置告警规则。例如当错误率持续2分钟大于1%时发送告警到钉钉/企业微信/邮件。当P99延迟持续5分钟大于5秒时发送告警。当CPU使用率持续5分钟大于90%时发送告警。告警是监控的最终目的它能让你在用户感知之前就采取行动。6. 总结从监控到洞察通过以上步骤你已经为Fish Speech 1.5语音合成服务搭建了一套完整的生产环境监控看板。它不再是一个黑盒而是一个所有状态都清晰可见的透明系统。这套看板的价值会随着服务运行时间的增长而愈发凸显。你可以通过它复盘故障当出现问题时查看历史图表精准定位故障开始时间、影响面和关联指标。评估优化效果调整模型参数或服务器配置后对比优化前后的QPS、延迟曲线量化改进效果。预测容量观察业务增长趋势预测何时需要扩容避免服务被突发流量打垮。监控不是终点而是起点。它为你提供了数据驱动的决策依据让你能更主动、更自信地管理和优化你的AI服务。现在你的Fish Speech 1.5服务终于可以安心地7x24小时为业务提供支持了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
Fish Speech 1.5语音合成生产环境监控:QPS/延迟/错误率指标看板
Fish Speech 1.5语音合成生产环境监控QPS/延迟/错误率指标看板当你把Fish Speech 1.5这样的语音合成模型部署到生产环境最怕的是什么是半夜收到报警说服务挂了还是用户投诉语音生成太慢又或者是突然发现某个时间段错误率飙升却不知道原因这些问题靠人工盯着日志是解决不了的。你需要的是一个能实时告诉你服务健康状况的“仪表盘”——一个集成了QPS、延迟、错误率等关键指标的可视化监控看板。今天我就带你从零开始搭建一套专为Fish Speech 1.5设计的生产级监控系统。1. 为什么生产环境必须要有监控想象一下你开了一家24小时营业的语音合成工厂。客户随时下单你的机器随时生产。如果没有监控你根本不知道工厂现在忙不忙一小时接了多少订单QPS生产一件产品平均要多久延迟生产线上有没有出次品错误率机器的“体力”怎么样CPU/GPU/内存使用率Fish Speech 1.5虽然强大但在生产环境中它只是一个“工人”。你需要一个“监工”来时刻了解它的工作状态。监控看板就是这个监工的眼睛它能帮你提前发现问题在用户投诉之前发现延迟升高或错误率异常。容量规划根据QPS趋势判断是否需要增加服务器。性能优化分析不同参数配置下的延迟表现找到最佳设置。故障排查当问题发生时快速定位是模型问题、代码问题还是资源问题。没有监控你的服务就是在“裸奔”。接下来我们一步步把这个“监工”系统搭建起来。2. 监控系统架构设计一个完整的监控系统就像一套精密的传感器网络。它需要采集数据、传输数据、存储数据最后展示数据。我们的架构也遵循这个逻辑。2.1 核心组件选型市面上监控工具很多我们选择最经典、最稳定的组合数据采集AgentPrometheus Node Exporter自定义应用指标暴露。Node Exporter负责采集服务器硬件指标CPU、内存、磁盘、网络我们的Fish Speech应用则需要通过代码暴露业务指标QPS、延迟、错误率。数据存储与告警ServerPrometheus。它是一个时间序列数据库专门用来存储监控指标数据并且内置了强大的告警规则引擎。数据可视化DashboardGrafana。这是目前最流行的监控数据可视化工具图表丰富配置灵活社区有大量现成的仪表盘模板。这套组合Prometheus Grafana几乎是云原生监控的事实标准社区活跃资料丰富。2.2 数据流设计整个系统的数据流动是这样的[Fish Speech 1.5 应用] --(暴露/metrics端点)-- [Prometheus] --(拉取存储)-- [Grafana] --(查询绘图)-- [Web看板] ↑ ↑ | | (集成SDK在代码中打点) (运维、开发人员查看)打点在Fish Speech 1.5的Web服务代码中我们在处理每个语音合成请求的关键位置开始、成功、失败插入记录生成指标。暴露应用启动一个HTTP端点通常是/metrics以Prometheus规定的格式提供这些指标数据。拉取Prometheus服务器按照配置的时间间隔如15秒主动去抓取每个应用实例的/metrics端点数据。存储与告警Prometheus将数据存入时序数据库并根据我们设定的规则如错误率5%持续1分钟评估是否触发告警。可视化Grafana配置Prometheus为数据源我们通过编写查询语句PromQL来绘制各种图表组装成直观的看板。3. 为Fish Speech 1.5注入监控能力监控的第一步是让应用自己能“说话”告诉我们内部发生了什么。我们需要改造Fish Speech 1.5的Web服务代码集成Prometheus客户端库。3.1 添加应用指标埋点假设你的Fish Speech 1.5服务是基于Python的FastAPI或Flask框架。我们需要安装prometheus-client库并在关键位置添加指标。# 安装Prometheus客户端库 pip install prometheus-client接下来在应用的主文件中例如app.py添加指标定义和埋点逻辑。我们主要关注三类核心指标计数器Counter用于记录累计数量如总请求数、总错误数。它只增不减。直方图Histogram用于记录分布情况特别是延迟。它会自动计算平均值、分位数如P50, P90, P99。测量仪Gauge用于记录瞬时值如当前正在处理的请求数并发数。# app.py (示例代码需要根据你的实际框架调整) from prometheus_client import Counter, Histogram, Gauge, generate_latest, CONTENT_TYPE_LATEST from flask import Flask, request, Response # 或 from fastapi import FastAPI, Request, Response import time app Flask(__name__) # 1. 定义指标 # 总请求数计数器 REQUEST_COUNT Counter( fishspeech_requests_total, Total number of requests to Fish Speech API, [method, endpoint, http_status] # 标签用于细分维度 ) # 请求延迟直方图单位秒 REQUEST_LATENCY Histogram( fishspeech_request_duration_seconds, Request latency in seconds, [method, endpoint], buckets(0.1, 0.5, 1.0, 2.0, 5.0, 10.0) # 自定义桶用于统计分布 ) # 当前正在处理的请求数测量仪 IN_PROGRESS_REQUESTS Gauge( fishspeech_requests_in_progress, Number of requests currently being processed, [method, endpoint] ) # 错误请求计数器 ERROR_COUNT Counter( fishspeech_errors_total, Total number of error responses, [method, endpoint, error_type] ) # 2. 应用中间件/装饰器进行埋点 app.before_request def before_request(): 在请求开始前记录 request.start_time time.time() IN_PROGRESS_REQUESTS.labels(methodrequest.method, endpointrequest.path).inc() app.after_request def after_request(response): 在请求结束后记录延迟和状态 # 计算延迟 latency time.time() - getattr(request, start_time, time.time()) REQUEST_LATENCY.labels(methodrequest.method, endpointrequest.path).observe(latency) # 记录总请求数 REQUEST_COUNT.labels(methodrequest.method, endpointrequest.path, http_statusresponse.status_code).inc() # 记录错误假设4xx, 5xx为错误 if 400 response.status_code 600: ERROR_COUNT.labels(methodrequest.method, endpointrequest.path, error_typestr(response.status_code)).inc() # 减少正在处理的请求数 IN_PROGRESS_REQUESTS.labels(methodrequest.method, endpointrequest.path).dec() return response # 3. 暴露/metrics端点给Prometheus抓取 app.route(/metrics) def metrics(): return Response(generate_latest(), mimetypeCONTENT_TYPE_LATEST) # 4. 你的语音合成主逻辑示例 app.route(/api/synthesize, methods[POST]) def synthesize_speech(): # 这里是你的Fish Speech 1.5合成逻辑 # 如果合成失败可以手动记录业务错误 # ERROR_COUNT.labels(methodPOST, endpoint/api/synthesize, error_typesynthesis_failed).inc() return {audio: base64_encoded_audio_or_url} if __name__ __main__: app.run(host0.0.0.0, port7860)代码解释我们定义了四个核心指标分别对应总请求量、延迟、并发数和错误数。利用Flask的before_request和after_request钩子自动为每个请求记录开始时间、结束时间、状态码。提供了一个/metrics端点Prometheus会定期访问这个端点来拉取最新的指标数据。在业务逻辑中如合成失败还可以手动增加错误计数以区分HTTP错误和业务错误。完成代码修改后重启你的Fish Speech服务。访问http://你的服务地址:7860/metrics你应该能看到Prometheus格式的指标数据输出。4. 搭建Prometheus与Grafana应用准备好了现在来搭建监控平台本身。我们使用Docker来快速部署这是最方便的方式。4.1 使用Docker Compose一键部署创建一个docker-compose.yml文件定义Prometheus、Grafana和Node Exporter三个服务。# docker-compose.yml version: 3.8 services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件 - prometheus_data:/prometheus # 数据持久化 command: - --config.file/etc/prometheus/prometheus.yml - --storage.tsdb.path/prometheus - --web.console.libraries/etc/prometheus/console_libraries - --web.console.templates/etc/prometheus/consoles - --storage.tsdb.retention.time30d # 数据保留30天 - --web.enable-lifecycle ports: - 9090:9090 networks: - monitoring grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 # 设置初始管理员密码 volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning # 预配置数据源和看板可选 ports: - 3000:3000 networks: - monitoring depends_on: - prometheus node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - --path.procfs/host/proc - --path.rootfs/rootfs - --path.sysfs/host/sys - --collector.filesystem.mount-points-exclude^/(sys|proc|dev|host|etc)($$|/) ports: - 9100:9100 networks: - monitoring networks: monitoring: driver: bridge volumes: prometheus_data: grafana_data:4.2 配置Prometheus抓取目标接下来创建Prometheus的配置文件prometheus.yml告诉它要去哪里抓取数据。# prometheus.yml global: scrape_interval: 15s # 每15秒抓取一次数据 evaluation_interval: 15s # 每15秒评估一次告警规则 # 告警规则配置可以先留空后续添加 rule_files: # - alert_rules.yml # 抓取配置列表 scrape_configs: # 监控Prometheus自身 - job_name: prometheus static_configs: - targets: [localhost:9090] # 监控服务器节点通过Node Exporter - job_name: node static_configs: - targets: [node-exporter:9100] # 使用Docker服务名 # 可以添加标签方便在Grafana中分组 relabel_configs: - source_labels: [__address__] target_label: instance regex: ([^:])(?::\d)? replacement: $1 # 监控Fish Speech 1.5应用 - job_name: fish-speech-app metrics_path: /metrics # 应用暴露指标的路径 static_configs: - targets: [你的Fish Speech服务器IP:7860] # 替换为你的实际地址和端口 labels: app: fish-speech-1.5 env: production重要将配置文件中的你的Fish Speech服务器IP:7860替换为你部署Fish Speech 1.5服务的真实IP地址和端口。4.3 启动监控栈在包含docker-compose.yml和prometheus.yml的目录下执行一条命令docker-compose up -d等待片刻三个服务就会启动Prometheus访问http://你的服务器IP:9090Grafana访问http://你的服务器IP:3000(用户名:admin, 密码:admin123)Node Exporter数据由Prometheus抓取不直接提供UI。在Prometheus的Web界面9090端口的“Status” - “Targets”页面你应该能看到三个抓取目标的状态都是“UP”。这表示Prometheus已经成功连接到你的Fish Speech应用和服务器节点。5. 在Grafana中构建监控看板数据已经流入Prometheus现在是时候用Grafana把它们变成直观的图表了。5.1 配置数据源登录Grafana默认3000端口。点击左侧齿轮图标 - “Data Sources”。点击“Add data source”选择“Prometheus”。URL填写http://prometheus:9090因为它们在同一个Docker网络内。点击“Save Test”应该显示“Data source is working”。5.2 创建核心监控看板我们创建一个名为“Fish Speech 1.5 Production Dashboard”的新看板并添加以下几个最重要的面板。面板1请求概览QPS 错误率这个面板展示服务的整体流量和健康度。图表类型Stat统计 Graph图形PromQL查询总QPS每秒请求数rate(fishspeech_requests_total{jobfish-speech-app}[5m])错误率sum(rate(fishspeech_errors_total{jobfish-speech-app}[5m])) / sum(rate(fishspeech_requests_total{jobfish-speech-app}[5m]))将这个结果乘以100并在Grafana面板设置中设置单位为“percent (0-100)”。当前并发数fishspeech_requests_in_progress{jobfish-speech-app}配置技巧为错误率设置一个阈值告警比如1%并在Grafana中将其背景色设置为红色这样一眼就能看到异常。面板2延迟分布Latency延迟是语音合成服务体验的关键。我们不仅要看平均延迟更要关注长尾延迟如P99。图表类型Time series时间序列图PromQL查询平均延迟rate(fishspeech_request_duration_seconds_sum{jobfish-speech-app}[5m]) / rate(fishspeech_request_duration_seconds_count{jobfish-speech-app}[5m])P90延迟90%的请求快于这个值histogram_quantile(0.90, sum(rate(fishspeech_request_duration_seconds_bucket{jobfish-speech-app}[5m])) by (le))P99延迟99%的请求快于这个值histogram_quantile(0.99, sum(rate(fishspeech_request_duration_seconds_bucket{jobfish-speech-app}[5m])) by (le))将这三个查询放在同一个图表中用不同颜色的线表示。P99延迟是评估服务稳定性的黄金指标。面板3服务器资源监控服务慢不一定是模型问题也可能是服务器资源耗尽了。图表类型Gauge仪表盘 GraphPromQL查询数据来自Node ExporterCPU使用率100 - (avg by (instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100)内存使用率(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100GPU使用率如果服务器有GPU需要安装dcgm-exporter或nvidia_gpu_exporterDCGM_FI_DEV_GPU_UTIL{jobnode} # 示例具体指标名取决于导出器磁盘使用率(node_filesystem_size_bytes{mountpoint/} - node_filesystem_free_bytes{mountpoint/}) / node_filesystem_size_bytes{mountpoint/} * 100将这些资源使用率做成仪表盘设置警告如80%和危险如95%阈值非常直观。面板4合成请求详情我们可以进一步细分看看不同端点或不同参数下的表现。图表类型Table表格 Pie chart饼图PromQL查询各端点QPSsum by (endpoint) (rate(fishspeech_requests_total{jobfish-speech-app}[5m]))各端点平均延迟sum by (endpoint) (rate(fishspeech_request_duration_seconds_sum{jobfish-speech-app}[5m])) / sum by (endpoint) (rate(fishspeech_request_duration_seconds_count{jobfish-speech-app}[5m]))错误类型分布sum by (error_type) (rate(fishspeech_errors_total{jobfish-speech-app}[5m]))这个面板能帮你快速定位是哪个API接口或哪种错误类型出了问题。5.3 看板布局与告警将以上面板合理排列在你的Grafana看板上。通常的布局是顶部放置QPS、错误率、并发数等概览Stat面板。中间左侧放置延迟趋势图。中间右侧放置服务器资源仪表盘。底部放置请求详情表格或饼图。设置告警 在Grafana中你可以为每个面板设置告警规则。例如当错误率持续2分钟大于1%时发送告警到钉钉/企业微信/邮件。当P99延迟持续5分钟大于5秒时发送告警。当CPU使用率持续5分钟大于90%时发送告警。告警是监控的最终目的它能让你在用户感知之前就采取行动。6. 总结从监控到洞察通过以上步骤你已经为Fish Speech 1.5语音合成服务搭建了一套完整的生产环境监控看板。它不再是一个黑盒而是一个所有状态都清晰可见的透明系统。这套看板的价值会随着服务运行时间的增长而愈发凸显。你可以通过它复盘故障当出现问题时查看历史图表精准定位故障开始时间、影响面和关联指标。评估优化效果调整模型参数或服务器配置后对比优化前后的QPS、延迟曲线量化改进效果。预测容量观察业务增长趋势预测何时需要扩容避免服务被突发流量打垮。监控不是终点而是起点。它为你提供了数据驱动的决策依据让你能更主动、更自信地管理和优化你的AI服务。现在你的Fish Speech 1.5服务终于可以安心地7x24小时为业务提供支持了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。