SenseVoice-Small模型服务监控与日志收集实战部署好一个语音识别服务只是第一步就像买了一辆新车你得知道它跑得怎么样、油耗高不高、有没有哪里不对劲才能开得安心、开得长久。SenseVoice-Small模型上线后如果只是让它默默运行那就像在黑暗中开车——服务挂了、响应变慢了、识别不准了你可能是最后一个知道的。今天我们就来聊聊怎么给SenseVoice-Small服务装上“仪表盘”和“行车记录仪”也就是建立一套生产级的监控和日志体系。我们会用Prometheus来收集各项关键指标用Grafana做成直观的仪表盘再用ELK栈Elasticsearch, Logstash, Kibana把散落的日志收集起来方便排查问题。整个过程我会尽量用大白话讲清楚即使你之前没怎么接触过运维监控也能跟着一步步做下来。1. 为什么需要监控与日志在动手之前我们先花几分钟搞清楚做这些事到底是为了解决什么问题。你可能会想我的服务跑得好好的为啥要折腾这些想象一下这几个场景半夜两点突然有用户反馈语音识别接口全部超时。你从睡梦中惊醒连上服务器却不知道该从哪里查起只能一遍遍地重启服务、看日志像个无头苍蝇。老板问你这个语音服务这个月的可用性是多少平均响应时间有多长你只能挠挠头说“大概……可能……99%吧”心里完全没底。你发现最近GPU成本有点高但不知道是请求量变大了还是模型推理效率降低了没法做针对性的优化。有了监控和日志上面这些问题就清晰多了监控仪表盘告诉你服务现在和过去的健康状况。比如CPU/GPU用了多少每秒处理多少请求成功率和延迟是多少。让你一眼就能看出服务是否“发烧咳嗽”。日志记录仪告诉你发生了什么。当请求失败、出现异常时详细的日志能帮你快速定位到错误的代码行、异常的输入数据是排查问题的“福尔摩斯”。对于SenseVoice-Small这类AI模型服务我们尤其要关注几个核心指标GPU使用率看算力是否够用、API调用延迟用户体验的关键、识别成功率/错误率服务质量的直接体现。接下来我们就围绕这些目标来搭建系统。2. 搭建监控系统Prometheus Grafana这套组合是目前最流行的监控方案之一Prometheus负责“收数据”Grafana负责“画图表”。2.1 部署与配置Prometheus首先我们需要安装Prometheus。这里假设你使用的是Linux服务器。下载并安装Prometheus 去Prometheus官网下载最新版本的二进制包。我们通过命令行操作。# 创建一个目录用于存放Prometheus sudo mkdir -p /opt/prometheus cd /opt/prometheus # 下载Prometheus请替换为最新版本号 sudo wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz # 解压 sudo tar xvfz prometheus-2.47.0.linux-amd64.tar.gz # 为了方便将解压后的文件夹重命名 sudo mv prometheus-2.47.0.linux-amd64 prometheus-files配置Prometheus Prometheus的核心是它的配置文件prometheus.yml它定义了去哪里抓取scrape指标数据。我们需要修改它。cd /opt/prometheus/prometheus-files sudo nano prometheus.yml在scrape_configs部分我们需要添加一个任务来抓取SenseVoice-Small服务暴露的指标。这里假设你的SenseVoice服务提供了/metrics端点下一节会讲如何暴露。将以下配置添加到文件中# 在scrape_configs:部分添加新任务 scrape_configs: # 默认的抓取自身指标的配置 - job_name: prometheus static_configs: - targets: [localhost:9090] # 新增抓取SenseVoice-Small服务的指标 - job_name: sensevoice-small # 抓取间隔 scrape_interval: 15s static_configs: # 这里替换成你的SenseVoice服务实际IP和端口 - targets: [192.168.1.100:8000] labels: service: sensevoice-small env: production保存并退出编辑器。创建系统服务并启动 为了让Prometheus能开机自启和方便管理我们把它配置成systemd服务。sudo nano /etc/systemd/system/prometheus.service将以下内容粘贴进去[Unit] DescriptionPrometheus Monitoring System Afternetwork.target [Service] Userprometheus Groupprometheus ExecStart/opt/prometheus/prometheus-files/prometheus \ --config.file/opt/prometheus/prometheus-files/prometheus.yml \ --storage.tsdb.path/opt/prometheus/data \ --web.listen-address0.0.0.0:9090 Restartalways [Install] WantedBymulti-user.target创建专用用户并设置目录权限sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir -p /opt/prometheus/data sudo chown -R prometheus:prometheus /opt/prometheus最后启动并启用服务sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus # 检查状态是否正常现在访问http://你的服务器IP:9090就能看到Prometheus的Web界面了。在“Status” - “Targets”下应该能看到sensevoice-small这个job的状态是“UP”前提是你的SenseVoice服务指标端点已就绪。2.2 让SenseVoice-Small服务暴露指标Prometheus只能抓取那些主动暴露了指标的服务。我们需要在SenseVoice-Small的服务代码中集成一个客户端库。这里以Python的FastAPI服务为例使用prometheus-fastapi-instrumentator这个非常方便的库。安装客户端库 在你的服务虚拟环境中安装它。pip install prometheus-fastapi-instrumentator在FastAPI应用中集成 修改你的主应用文件例如main.py添加几行代码。from fastapi import FastAPI from prometheus_fastapi_instrumentator import Instrumentator app FastAPI(titleSenseVoice-Small API) # 初始化并挂载指标收集器 # 这行代码会自动为你的应用添加一个 /metrics 端点 instrumentator Instrumentator().instrument(app) app.on_event(startup) async def startup(): # 在应用启动时启动指标收集 instrumentator.expose(app) # 假设这是你的语音识别接口 app.post(/recognize) async def recognize_audio(audio_data: bytes): # 你的语音识别业务逻辑... # 例如调用SenseVoice-Small模型进行推理 # result model.transcribe(audio_data) return {text: 识别结果示例}就这么简单现在你的服务在http://你的服务地址:端口/metrics就会暴露出一大堆标准的HTTP指标比如请求次数、延迟分布等。重启你的SenseVoice服务。添加自定义业务指标 除了默认指标我们更关心业务指标比如识别成功率。我们可以用prometheus_client库自定义指标。from prometheus_client import Counter, Histogram, Gauge import time # 定义自定义指标 REQUESTS_TOTAL Counter(sensevoice_requests_total, Total number of recognition requests) REQUEST_DURATION Histogram(sensevoice_request_duration_seconds, Request duration in seconds) RECOGNITION_SUCCESS Counter(sensevoice_recognition_success_total, Total successful recognitions) RECOGNITION_FAILURE Counter(sensevoice_recognition_failure_total, Total failed recognitions) GPU_MEMORY_USAGE Gauge(sensevoice_gpu_memory_usage_mb, GPU memory usage in MB) app.post(/recognize) async def recognize_audio(audio_data: bytes): REQUESTS_TOTAL.inc() # 请求总数1 start_time time.time() try: # 你的业务逻辑... # 模拟调用模型 # result model.transcribe(audio_data) result {text: 识别成功} RECOGNITION_SUCCESS.inc() # 成功次数1 # 假设这里获取了GPU内存使用量需要安装pynvml等库 # gpu_mem get_gpu_memory_usage() # GPU_MEMORY_USAGE.set(gpu_mem) except Exception as e: RECOGNITION_FAILURE.inc() # 失败次数1 raise e finally: # 记录请求耗时 duration time.time() - start_time REQUEST_DURATION.observe(duration) return result这样我们就有了针对语音识别服务的定制化监控指标。记得将获取真实GPU信息的代码补充上。2.3 部署与配置Grafana仪表盘数据抓取到了我们需要一个漂亮的界面来展示。Grafana就是干这个的。安装Grafana 对于Ubuntu/Debian系统可以按照官方文档添加仓库安装。# 安装依赖 sudo apt-get install -y software-properties-common wget # 添加Grafana仓库 wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo deb https://packages.grafana.com/oss/deb stable main | sudo tee -a /etc/apt/sources.list.d/grafana.list # 更新并安装 sudo apt-get update sudo apt-get install grafana启动Grafana并设置开机自启sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl enable grafana-server sudo systemctl status grafana-server访问http://你的服务器IP:3000默认用户名和密码都是admin首次登录会要求修改密码。添加数据源登录后点击左侧齿轮图标 “Configuration” - “Data Sources”。点击 “Add data source”选择 “Prometheus”。在URL栏填写你的Prometheus地址例如http://localhost:9090如果Grafana和Prometheus装在同一台机器。点击 “Save Test”看到绿色提示框表示连接成功。导入或创建仪表盘快速上手推荐Grafana官网有大量社区制作好的仪表盘模板。你可以搜索 “Node Exporter” 导入一个监控服务器基础资源的仪表盘。对于自定义的sensevoice_开头的指标我们需要自己创建面板。创建自定义面板点击左侧 “” 号 - “Create” - “Dashboard”。点击 “Add new panel”。在 “Query” 选项卡下选择数据源为你的Prometheus。在 “Metrics browser” 中输入你的指标名比如sensevoice_requests_total就能看到图表。你可以创建多个面板分别展示请求速率rate(sensevoice_requests_total[5m])请求延迟P95histogram_quantile(0.95, rate(sensevoice_request_duration_seconds_bucket[5m]))成功率rate(sensevoice_recognition_success_total[5m]) / rate(sensevoice_requests_total[5m])GPU内存使用量sensevoice_gpu_memory_usage_mb调整图表样式、设置阈值告警线然后保存你的仪表盘。现在你就有了一套实时反映SenseVoice-Small服务健康状况的仪表盘了。3. 搭建日志收集系统ELK Stack监控告诉我们“哪里不对”日志则告诉我们“为什么不对”。当识别失败率飙升时我们需要查看具体的错误日志。3.1 部署Elasticsearch, Logstash, KibanaELK三个组件可以部署在同一台机器也可以分开。为了简化我们假设部署在同一台机器。安装Java环境 ELK依赖Java。sudo apt-get update sudo apt-get install openjdk-11-jdk -y java -version # 验证安装安装Elasticsearch 添加Elastic的APT仓库并安装。# 导入Elasticsearch GPG密钥 wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - # 添加仓库 echo deb https://artifacts.elastic.co/packages/7.x/apt stable main | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list # 安装 sudo apt-get update sudo apt-get install elasticsearch编辑配置文件/etc/elasticsearch/elasticsearch.yml确保网络设置正确生产环境需更严格配置network.host: 0.0.0.0 # 允许所有IP访问生产环境建议设置具体IP http.port: 9200 cluster.initial_master_nodes: [你的主机名] # 单节点集群启动并启用sudo systemctl start elasticsearch sudo systemctl enable elasticsearch # 等待一会儿然后测试 curl -X GET localhost:9200/安装Logstash Logstash负责处理日志。sudo apt-get install logstash创建一个Logstash配置文件例如/etc/logstash/conf.d/sensevoice.confinput { # 假设你的SenseVoice服务日志输出到文件 file { path /var/log/sensevoice/app.log # 你的应用日志路径 start_position beginning sincedb_path /dev/null # 仅用于测试生产环境请移除 codec json # 如果你的日志是JSON格式 } } filter { # 可以在这里对日志进行解析、过滤、丰富信息 # 例如如果不是JSON可以用grok解析 # grok { match { message %{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message} } } } output { elasticsearch { hosts [localhost:9200] index sensevoice-logs-%{YYYY.MM.dd} # 按天创建索引 } # 同时输出到控制台方便调试 stdout { codec rubydebug } }启动Logstash先测试配置文件sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/sensevoice.conf --config.test_and_exit sudo systemctl start logstash sudo systemctl enable logstash安装Kibana Kibana是日志的可视化界面。sudo apt-get install kibana编辑配置文件/etc/kibana/kibana.ymlserver.port: 5601 server.host: 0.0.0.0 # 生产环境建议限制IP elasticsearch.hosts: [http://localhost:9200]启动并启用sudo systemctl start kibana sudo systemctl enable kibana访问http://你的服务器IP:5601即可打开Kibana。3.2 配置SenseVoice-Small服务日志为了让日志能被有效收集和分析你的服务日志需要以结构化的方式输出比如JSON格式并写入到指定的文件。以Python的logging库为例import logging import json_log_formatter import sys # 配置JSON格式的Formatter formatter json_log_formatter.JSONFormatter() # 创建文件Handler输出到Logstash监控的文件 file_handler logging.FileHandler(/var/log/sensevoice/app.log) file_handler.setFormatter(formatter) # 也可以同时输出到控制台 stream_handler logging.StreamHandler(sys.stdout) stream_handler.setFormatter(formatter) # 获取logger logger logging.getLogger(sensevoice) logger.addHandler(file_handler) logger.addHandler(stream_handler) logger.setLevel(logging.INFO) # 在代码中记录日志 try: # 业务逻辑 logger.info(Recognition request received, extra{audio_length: len(audio_data), user_id: 123}) # ... 处理请求 logger.info(Recognition succeeded, extra{result_text: result[text][:50]}) # 记录部分结果 except Exception as e: logger.error(Recognition failed, exc_infoTrue, extra{audio_length: len(audio_data)}) raise e这样你的应用日志就会以JSON格式写入/var/log/sensevoice/app.log然后被Logstash抓取发送到Elasticsearch最终在Kibana中展示。3.3 在Kibana中查看与分析日志首次打开Kibana需要配置索引模式。进入 “Management” - “Stack Management” - “Index Patterns” - “Create index pattern”。输入sensevoice-logs-*作为模式点击下一步。选择时间戳字段如timestamp完成创建。进入 “Analytics” - “Discover”选择你创建的sensevoice-logs-*索引模式就能看到所有日志了。你可以根据日志级别loglevel、错误信息、用户ID等字段进行搜索和过滤快速定位问题。还可以将常用的搜索保存为可视化图表添加到仪表盘。4. 把监控和日志用起来告警与问题排查系统搭好了最后一步是让它真正发挥作用。4.1 设置关键告警光有仪表盘还不够我们不能一直盯着屏幕。需要在出现问题时主动通知我们。Prometheus的Alertmanager组件可以负责告警。在Prometheus中定义告警规则 创建一个规则文件例如/opt/prometheus/prometheus-files/rules/sensevoice_alerts.yml。groups: - name: sensevoice_service rules: - alert: HighRequestFailureRate expr: rate(sensevoice_recognition_failure_total[5m]) / rate(sensevoice_requests_total[5m]) 0.05 # 失败率超过5% for: 2m # 持续2分钟 labels: severity: warning annotations: summary: SenseVoice服务失败率过高 description: 失败率已达 {{ $value | humanizePercentage }}请检查服务日志。 - alert: ServiceDown expr: up{jobsensevoice-small} 0 # 服务端点不可达 for: 1m labels: severity: critical annotations: summary: SenseVoice服务可能已下线 description: 服务 {{ $labels.instance }} 无法访问。 - alert: HighRequestLatency expr: histogram_quantile(0.95, rate(sensevoice_request_duration_seconds_bucket[5m])) 3 # P95延迟超过3秒 for: 5m labels: severity: warning annotations: summary: SenseVoice服务延迟过高 description: 当前P95延迟为 {{ $value }} 秒。在prometheus.yml中引用这个规则文件rule_files: - rules/*.yml重启Prometheus。配置Alertmanager发送通知需要单独部署和配置Alertmanager并设置邮件、钉钉、企业微信等接收器这部分内容较多你可以查阅Prometheus Alertmanager的官方文档进行配置。核心思想是当上述规则被触发时Alertmanager会按照配置的路线发送告警信息给你。4.2 典型问题排查流程当收到告警或发现仪表盘异常时可以遵循以下步骤看Grafana仪表盘确认是哪个指标出了问题成功率暴跌延迟飙升GPU打满。看Kibana日志根据出问题的时间点在Kibana中过滤对应时间段的错误日志loglevel: ERROR。查看具体的错误堆栈信息。定位问题如果是GPU内存不足考虑优化模型加载、批处理大小或升级硬件。如果是识别失败率激增查看错误日志可能是遇到了新的音频格式、嘈杂环境或者模型在某些场景下效果不佳需要收集bad case。如果是服务完全不可用检查进程状态、端口监听、依赖服务如Redis、数据库是否正常。解决问题并验证修复后观察仪表盘指标是否恢复正常。5. 总结与后续建议走完这一趟你应该已经为你的SenseVoice-Small服务搭建起了一套虽然基础但非常实用的监控和日志体系。从Prometheus抓取指标到Grafana可视化再到ELK收集日志这套组合拳能让你从“盲人摸象”变成“心中有数”。实际用下来最大的感受是心里踏实了。以前服务出问题得靠用户反馈现在往往是告警先响起来我们就能在用户感知前介入处理。看日志排查问题的效率也高了很多不用再SSH到服务器上grep来grep去。当然这只是个起点。你可以根据业务复杂度继续深化更细的指标比如按音频时长分桶统计延迟按客户端类型统计成功率。链路追踪在微服务架构下引入Jaeger或SkyWalking来跟踪一个请求在所有服务间的完整路径。日志归档设置Elasticsearch的索引生命周期策略自动清理旧日志节省空间。自动化运维结合告警尝试一些简单的自动化修复比如服务异常时自动重启。监控和日志不是一劳永逸的事情它需要随着业务一起成长。建议你先把这套基础框架跑起来稳定运行一段时间过程中自然会遇到新的需求到时候再针对性加强就好。最重要的是迈出第一步让服务运行状态变得可见、可查、可预警。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
SenseVoice-Small模型服务监控与日志收集实战
发布时间:2026/7/1 12:58:49
SenseVoice-Small模型服务监控与日志收集实战部署好一个语音识别服务只是第一步就像买了一辆新车你得知道它跑得怎么样、油耗高不高、有没有哪里不对劲才能开得安心、开得长久。SenseVoice-Small模型上线后如果只是让它默默运行那就像在黑暗中开车——服务挂了、响应变慢了、识别不准了你可能是最后一个知道的。今天我们就来聊聊怎么给SenseVoice-Small服务装上“仪表盘”和“行车记录仪”也就是建立一套生产级的监控和日志体系。我们会用Prometheus来收集各项关键指标用Grafana做成直观的仪表盘再用ELK栈Elasticsearch, Logstash, Kibana把散落的日志收集起来方便排查问题。整个过程我会尽量用大白话讲清楚即使你之前没怎么接触过运维监控也能跟着一步步做下来。1. 为什么需要监控与日志在动手之前我们先花几分钟搞清楚做这些事到底是为了解决什么问题。你可能会想我的服务跑得好好的为啥要折腾这些想象一下这几个场景半夜两点突然有用户反馈语音识别接口全部超时。你从睡梦中惊醒连上服务器却不知道该从哪里查起只能一遍遍地重启服务、看日志像个无头苍蝇。老板问你这个语音服务这个月的可用性是多少平均响应时间有多长你只能挠挠头说“大概……可能……99%吧”心里完全没底。你发现最近GPU成本有点高但不知道是请求量变大了还是模型推理效率降低了没法做针对性的优化。有了监控和日志上面这些问题就清晰多了监控仪表盘告诉你服务现在和过去的健康状况。比如CPU/GPU用了多少每秒处理多少请求成功率和延迟是多少。让你一眼就能看出服务是否“发烧咳嗽”。日志记录仪告诉你发生了什么。当请求失败、出现异常时详细的日志能帮你快速定位到错误的代码行、异常的输入数据是排查问题的“福尔摩斯”。对于SenseVoice-Small这类AI模型服务我们尤其要关注几个核心指标GPU使用率看算力是否够用、API调用延迟用户体验的关键、识别成功率/错误率服务质量的直接体现。接下来我们就围绕这些目标来搭建系统。2. 搭建监控系统Prometheus Grafana这套组合是目前最流行的监控方案之一Prometheus负责“收数据”Grafana负责“画图表”。2.1 部署与配置Prometheus首先我们需要安装Prometheus。这里假设你使用的是Linux服务器。下载并安装Prometheus 去Prometheus官网下载最新版本的二进制包。我们通过命令行操作。# 创建一个目录用于存放Prometheus sudo mkdir -p /opt/prometheus cd /opt/prometheus # 下载Prometheus请替换为最新版本号 sudo wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz # 解压 sudo tar xvfz prometheus-2.47.0.linux-amd64.tar.gz # 为了方便将解压后的文件夹重命名 sudo mv prometheus-2.47.0.linux-amd64 prometheus-files配置Prometheus Prometheus的核心是它的配置文件prometheus.yml它定义了去哪里抓取scrape指标数据。我们需要修改它。cd /opt/prometheus/prometheus-files sudo nano prometheus.yml在scrape_configs部分我们需要添加一个任务来抓取SenseVoice-Small服务暴露的指标。这里假设你的SenseVoice服务提供了/metrics端点下一节会讲如何暴露。将以下配置添加到文件中# 在scrape_configs:部分添加新任务 scrape_configs: # 默认的抓取自身指标的配置 - job_name: prometheus static_configs: - targets: [localhost:9090] # 新增抓取SenseVoice-Small服务的指标 - job_name: sensevoice-small # 抓取间隔 scrape_interval: 15s static_configs: # 这里替换成你的SenseVoice服务实际IP和端口 - targets: [192.168.1.100:8000] labels: service: sensevoice-small env: production保存并退出编辑器。创建系统服务并启动 为了让Prometheus能开机自启和方便管理我们把它配置成systemd服务。sudo nano /etc/systemd/system/prometheus.service将以下内容粘贴进去[Unit] DescriptionPrometheus Monitoring System Afternetwork.target [Service] Userprometheus Groupprometheus ExecStart/opt/prometheus/prometheus-files/prometheus \ --config.file/opt/prometheus/prometheus-files/prometheus.yml \ --storage.tsdb.path/opt/prometheus/data \ --web.listen-address0.0.0.0:9090 Restartalways [Install] WantedBymulti-user.target创建专用用户并设置目录权限sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir -p /opt/prometheus/data sudo chown -R prometheus:prometheus /opt/prometheus最后启动并启用服务sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus # 检查状态是否正常现在访问http://你的服务器IP:9090就能看到Prometheus的Web界面了。在“Status” - “Targets”下应该能看到sensevoice-small这个job的状态是“UP”前提是你的SenseVoice服务指标端点已就绪。2.2 让SenseVoice-Small服务暴露指标Prometheus只能抓取那些主动暴露了指标的服务。我们需要在SenseVoice-Small的服务代码中集成一个客户端库。这里以Python的FastAPI服务为例使用prometheus-fastapi-instrumentator这个非常方便的库。安装客户端库 在你的服务虚拟环境中安装它。pip install prometheus-fastapi-instrumentator在FastAPI应用中集成 修改你的主应用文件例如main.py添加几行代码。from fastapi import FastAPI from prometheus_fastapi_instrumentator import Instrumentator app FastAPI(titleSenseVoice-Small API) # 初始化并挂载指标收集器 # 这行代码会自动为你的应用添加一个 /metrics 端点 instrumentator Instrumentator().instrument(app) app.on_event(startup) async def startup(): # 在应用启动时启动指标收集 instrumentator.expose(app) # 假设这是你的语音识别接口 app.post(/recognize) async def recognize_audio(audio_data: bytes): # 你的语音识别业务逻辑... # 例如调用SenseVoice-Small模型进行推理 # result model.transcribe(audio_data) return {text: 识别结果示例}就这么简单现在你的服务在http://你的服务地址:端口/metrics就会暴露出一大堆标准的HTTP指标比如请求次数、延迟分布等。重启你的SenseVoice服务。添加自定义业务指标 除了默认指标我们更关心业务指标比如识别成功率。我们可以用prometheus_client库自定义指标。from prometheus_client import Counter, Histogram, Gauge import time # 定义自定义指标 REQUESTS_TOTAL Counter(sensevoice_requests_total, Total number of recognition requests) REQUEST_DURATION Histogram(sensevoice_request_duration_seconds, Request duration in seconds) RECOGNITION_SUCCESS Counter(sensevoice_recognition_success_total, Total successful recognitions) RECOGNITION_FAILURE Counter(sensevoice_recognition_failure_total, Total failed recognitions) GPU_MEMORY_USAGE Gauge(sensevoice_gpu_memory_usage_mb, GPU memory usage in MB) app.post(/recognize) async def recognize_audio(audio_data: bytes): REQUESTS_TOTAL.inc() # 请求总数1 start_time time.time() try: # 你的业务逻辑... # 模拟调用模型 # result model.transcribe(audio_data) result {text: 识别成功} RECOGNITION_SUCCESS.inc() # 成功次数1 # 假设这里获取了GPU内存使用量需要安装pynvml等库 # gpu_mem get_gpu_memory_usage() # GPU_MEMORY_USAGE.set(gpu_mem) except Exception as e: RECOGNITION_FAILURE.inc() # 失败次数1 raise e finally: # 记录请求耗时 duration time.time() - start_time REQUEST_DURATION.observe(duration) return result这样我们就有了针对语音识别服务的定制化监控指标。记得将获取真实GPU信息的代码补充上。2.3 部署与配置Grafana仪表盘数据抓取到了我们需要一个漂亮的界面来展示。Grafana就是干这个的。安装Grafana 对于Ubuntu/Debian系统可以按照官方文档添加仓库安装。# 安装依赖 sudo apt-get install -y software-properties-common wget # 添加Grafana仓库 wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo deb https://packages.grafana.com/oss/deb stable main | sudo tee -a /etc/apt/sources.list.d/grafana.list # 更新并安装 sudo apt-get update sudo apt-get install grafana启动Grafana并设置开机自启sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl enable grafana-server sudo systemctl status grafana-server访问http://你的服务器IP:3000默认用户名和密码都是admin首次登录会要求修改密码。添加数据源登录后点击左侧齿轮图标 “Configuration” - “Data Sources”。点击 “Add data source”选择 “Prometheus”。在URL栏填写你的Prometheus地址例如http://localhost:9090如果Grafana和Prometheus装在同一台机器。点击 “Save Test”看到绿色提示框表示连接成功。导入或创建仪表盘快速上手推荐Grafana官网有大量社区制作好的仪表盘模板。你可以搜索 “Node Exporter” 导入一个监控服务器基础资源的仪表盘。对于自定义的sensevoice_开头的指标我们需要自己创建面板。创建自定义面板点击左侧 “” 号 - “Create” - “Dashboard”。点击 “Add new panel”。在 “Query” 选项卡下选择数据源为你的Prometheus。在 “Metrics browser” 中输入你的指标名比如sensevoice_requests_total就能看到图表。你可以创建多个面板分别展示请求速率rate(sensevoice_requests_total[5m])请求延迟P95histogram_quantile(0.95, rate(sensevoice_request_duration_seconds_bucket[5m]))成功率rate(sensevoice_recognition_success_total[5m]) / rate(sensevoice_requests_total[5m])GPU内存使用量sensevoice_gpu_memory_usage_mb调整图表样式、设置阈值告警线然后保存你的仪表盘。现在你就有了一套实时反映SenseVoice-Small服务健康状况的仪表盘了。3. 搭建日志收集系统ELK Stack监控告诉我们“哪里不对”日志则告诉我们“为什么不对”。当识别失败率飙升时我们需要查看具体的错误日志。3.1 部署Elasticsearch, Logstash, KibanaELK三个组件可以部署在同一台机器也可以分开。为了简化我们假设部署在同一台机器。安装Java环境 ELK依赖Java。sudo apt-get update sudo apt-get install openjdk-11-jdk -y java -version # 验证安装安装Elasticsearch 添加Elastic的APT仓库并安装。# 导入Elasticsearch GPG密钥 wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - # 添加仓库 echo deb https://artifacts.elastic.co/packages/7.x/apt stable main | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list # 安装 sudo apt-get update sudo apt-get install elasticsearch编辑配置文件/etc/elasticsearch/elasticsearch.yml确保网络设置正确生产环境需更严格配置network.host: 0.0.0.0 # 允许所有IP访问生产环境建议设置具体IP http.port: 9200 cluster.initial_master_nodes: [你的主机名] # 单节点集群启动并启用sudo systemctl start elasticsearch sudo systemctl enable elasticsearch # 等待一会儿然后测试 curl -X GET localhost:9200/安装Logstash Logstash负责处理日志。sudo apt-get install logstash创建一个Logstash配置文件例如/etc/logstash/conf.d/sensevoice.confinput { # 假设你的SenseVoice服务日志输出到文件 file { path /var/log/sensevoice/app.log # 你的应用日志路径 start_position beginning sincedb_path /dev/null # 仅用于测试生产环境请移除 codec json # 如果你的日志是JSON格式 } } filter { # 可以在这里对日志进行解析、过滤、丰富信息 # 例如如果不是JSON可以用grok解析 # grok { match { message %{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message} } } } output { elasticsearch { hosts [localhost:9200] index sensevoice-logs-%{YYYY.MM.dd} # 按天创建索引 } # 同时输出到控制台方便调试 stdout { codec rubydebug } }启动Logstash先测试配置文件sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/sensevoice.conf --config.test_and_exit sudo systemctl start logstash sudo systemctl enable logstash安装Kibana Kibana是日志的可视化界面。sudo apt-get install kibana编辑配置文件/etc/kibana/kibana.ymlserver.port: 5601 server.host: 0.0.0.0 # 生产环境建议限制IP elasticsearch.hosts: [http://localhost:9200]启动并启用sudo systemctl start kibana sudo systemctl enable kibana访问http://你的服务器IP:5601即可打开Kibana。3.2 配置SenseVoice-Small服务日志为了让日志能被有效收集和分析你的服务日志需要以结构化的方式输出比如JSON格式并写入到指定的文件。以Python的logging库为例import logging import json_log_formatter import sys # 配置JSON格式的Formatter formatter json_log_formatter.JSONFormatter() # 创建文件Handler输出到Logstash监控的文件 file_handler logging.FileHandler(/var/log/sensevoice/app.log) file_handler.setFormatter(formatter) # 也可以同时输出到控制台 stream_handler logging.StreamHandler(sys.stdout) stream_handler.setFormatter(formatter) # 获取logger logger logging.getLogger(sensevoice) logger.addHandler(file_handler) logger.addHandler(stream_handler) logger.setLevel(logging.INFO) # 在代码中记录日志 try: # 业务逻辑 logger.info(Recognition request received, extra{audio_length: len(audio_data), user_id: 123}) # ... 处理请求 logger.info(Recognition succeeded, extra{result_text: result[text][:50]}) # 记录部分结果 except Exception as e: logger.error(Recognition failed, exc_infoTrue, extra{audio_length: len(audio_data)}) raise e这样你的应用日志就会以JSON格式写入/var/log/sensevoice/app.log然后被Logstash抓取发送到Elasticsearch最终在Kibana中展示。3.3 在Kibana中查看与分析日志首次打开Kibana需要配置索引模式。进入 “Management” - “Stack Management” - “Index Patterns” - “Create index pattern”。输入sensevoice-logs-*作为模式点击下一步。选择时间戳字段如timestamp完成创建。进入 “Analytics” - “Discover”选择你创建的sensevoice-logs-*索引模式就能看到所有日志了。你可以根据日志级别loglevel、错误信息、用户ID等字段进行搜索和过滤快速定位问题。还可以将常用的搜索保存为可视化图表添加到仪表盘。4. 把监控和日志用起来告警与问题排查系统搭好了最后一步是让它真正发挥作用。4.1 设置关键告警光有仪表盘还不够我们不能一直盯着屏幕。需要在出现问题时主动通知我们。Prometheus的Alertmanager组件可以负责告警。在Prometheus中定义告警规则 创建一个规则文件例如/opt/prometheus/prometheus-files/rules/sensevoice_alerts.yml。groups: - name: sensevoice_service rules: - alert: HighRequestFailureRate expr: rate(sensevoice_recognition_failure_total[5m]) / rate(sensevoice_requests_total[5m]) 0.05 # 失败率超过5% for: 2m # 持续2分钟 labels: severity: warning annotations: summary: SenseVoice服务失败率过高 description: 失败率已达 {{ $value | humanizePercentage }}请检查服务日志。 - alert: ServiceDown expr: up{jobsensevoice-small} 0 # 服务端点不可达 for: 1m labels: severity: critical annotations: summary: SenseVoice服务可能已下线 description: 服务 {{ $labels.instance }} 无法访问。 - alert: HighRequestLatency expr: histogram_quantile(0.95, rate(sensevoice_request_duration_seconds_bucket[5m])) 3 # P95延迟超过3秒 for: 5m labels: severity: warning annotations: summary: SenseVoice服务延迟过高 description: 当前P95延迟为 {{ $value }} 秒。在prometheus.yml中引用这个规则文件rule_files: - rules/*.yml重启Prometheus。配置Alertmanager发送通知需要单独部署和配置Alertmanager并设置邮件、钉钉、企业微信等接收器这部分内容较多你可以查阅Prometheus Alertmanager的官方文档进行配置。核心思想是当上述规则被触发时Alertmanager会按照配置的路线发送告警信息给你。4.2 典型问题排查流程当收到告警或发现仪表盘异常时可以遵循以下步骤看Grafana仪表盘确认是哪个指标出了问题成功率暴跌延迟飙升GPU打满。看Kibana日志根据出问题的时间点在Kibana中过滤对应时间段的错误日志loglevel: ERROR。查看具体的错误堆栈信息。定位问题如果是GPU内存不足考虑优化模型加载、批处理大小或升级硬件。如果是识别失败率激增查看错误日志可能是遇到了新的音频格式、嘈杂环境或者模型在某些场景下效果不佳需要收集bad case。如果是服务完全不可用检查进程状态、端口监听、依赖服务如Redis、数据库是否正常。解决问题并验证修复后观察仪表盘指标是否恢复正常。5. 总结与后续建议走完这一趟你应该已经为你的SenseVoice-Small服务搭建起了一套虽然基础但非常实用的监控和日志体系。从Prometheus抓取指标到Grafana可视化再到ELK收集日志这套组合拳能让你从“盲人摸象”变成“心中有数”。实际用下来最大的感受是心里踏实了。以前服务出问题得靠用户反馈现在往往是告警先响起来我们就能在用户感知前介入处理。看日志排查问题的效率也高了很多不用再SSH到服务器上grep来grep去。当然这只是个起点。你可以根据业务复杂度继续深化更细的指标比如按音频时长分桶统计延迟按客户端类型统计成功率。链路追踪在微服务架构下引入Jaeger或SkyWalking来跟踪一个请求在所有服务间的完整路径。日志归档设置Elasticsearch的索引生命周期策略自动清理旧日志节省空间。自动化运维结合告警尝试一些简单的自动化修复比如服务异常时自动重启。监控和日志不是一劳永逸的事情它需要随着业务一起成长。建议你先把这套基础框架跑起来稳定运行一段时间过程中自然会遇到新的需求到时候再针对性加强就好。最重要的是迈出第一步让服务运行状态变得可见、可查、可预警。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。