SenseVoice-small-ONNX部署教程:使用systemd-journald集中收集服务运行日志

1. 项目概述

SenseVoice-small-ONNX是一个基于ONNX量化的多语言语音识别服务,支持中文、粤语、英语、日语、韩语等多种语言的语音转写。本文将指导您完成服务的部署,并重点介绍如何使用systemd-journald集中收集和管理服务运行日志。

这个语音识别服务具有以下核心特性:

  • 多语言识别:自动检测并支持50多种语言
  • 高效推理:10秒音频仅需70毫秒处理时间
  • 富文本转写:包含情感识别和音频事件检测
  • REST API支持:提供标准的HTTP接口调用

2. 环境准备与快速部署

2.1 系统要求

确保您的系统满足以下要求:

  • Ubuntu 18.04+ 或 CentOS 7+
  • Python 3.8+
  • 至少2GB可用内存
  • 500MB磁盘空间

2.2 一键安装依赖

# 安装Python依赖
pip install funasr-onnx gradio fastapi uvicorn soundfile jieba

# 安装系统工具(用于日志管理)
sudo apt-get update
sudo apt-get install -y systemd journalctl

2.3 快速启动服务

# 下载项目代码
git clone https://github.com/danieldong/sensevoice-small-onnx.git
cd sensevoice-small-onnx

# 启动语音识别服务
python3 app.py --host 0.0.0.0 --port 7860

服务启动后,您可以通过以下地址访问:

  • Web界面:http://localhost:7860
  • API文档:http://localhost:7860/docs
  • 健康检查:http://localhost:7860/health

3. systemd服务配置与日志管理

3.1 创建systemd服务文件

为了让服务在后台稳定运行并自动管理日志,我们需要创建systemd服务配置文件:

# 创建服务配置文件
sudo nano /etc/systemd/system/sensevoice.service

将以下内容添加到配置文件中:

[Unit]
Description=SenseVoice Small ONNX Speech Recognition Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/sensevoice-small-onnx
ExecStart=/usr/bin/python3 app.py --host 0.0.0.0 --port 7860
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=sensevoice

# 环境变量设置
Environment=PYTHONUNBUFFERED=1
Environment=MODEL_PATH=/root/ai-models/danieldong/sensevoice-small-onnx-quant

[Install]
WantedBy=multi-user.target

3.2 启用并启动服务

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用开机自启动
sudo systemctl enable sensevoice

# 启动服务
sudo systemctl start sensevoice

# 检查服务状态
sudo systemctl status sensevoice

4. 使用journalctl管理服务日志

4.1 基本日志查看命令

systemd-journald会自动收集服务的所有输出日志,您可以使用以下命令查看:

# 查看最新日志
sudo journalctl -u sensevoice

# 实时跟踪日志输出
sudo journalctl -u sensevoice -f

# 查看指定时间段的日志
sudo journalctl -u sensevoice --since "2024-01-15 09:00:00" --until "2024-01-15 17:00:00"

# 查看错误日志
sudo journalctl -u sensevoice -p err

# 查看最近100行日志
sudo journalctl -u sensevoice -n 100

4.2 高级日志过滤技巧

# 按优先级过滤日志
sudo journalctl -u sensevoice -p warning..emerg

# 查看特定进程的日志
sudo journalctl _SYSTEMD_UNIT=sensevoice.service

# 导出日志到文件
sudo journalctl -u sensevoice --since today > sensevoice-$(date +%Y%m%d).log

# 查看磁盘使用情况
sudo journalctl --disk-usage

4.3 日志轮转配置

为了避免日志文件过大,可以配置日志轮转策略:

# 创建日志配置文件
sudo nano /etc/systemd/journald.conf

修改以下配置项:

[Journal]
SystemMaxUse=1G
SystemMaxFiles=10
SystemMaxFileSize=100M
MaxRetentionSec=1month

5. 服务监控与故障排查

5.1 健康检查脚本

创建一个简单的健康检查脚本,定期验证服务状态:

#!/bin/bash
# health_check.sh

SERVICE="sensevoice"
API_URL="http://localhost:7860/health"

# 检查服务是否运行
if systemctl is-active --quiet $SERVICE; then
    echo "$(date): Service is running"
    
    # 检查API健康状态
    response=$(curl -s -o /dev/null -w "%{http_code}" $API_URL)
    if [ "$response" -eq 200 ]; then
        echo "$(date): API health check passed"
    else
        echo "$(date): API health check failed: HTTP $response"
        # 重启服务
        systemctl restart $SERVICE
    fi
else
    echo "$(date): Service is not running. Attempting to restart..."
    systemctl start $SERVICE
fi

5.2 常见问题排查

当遇到问题时,可以按照以下步骤排查:

# 1. 检查服务状态
sudo systemctl status sensevoice

# 2. 查看详细日志
sudo journalctl -u sensevoice -n 50 --no-pager

# 3. 检查端口占用
sudo netstat -tlnp | grep 7860

# 4. 验证模型文件
ls -la /root/ai-models/danieldong/sensevoice-small-onnx-quant/

# 5. 测试API接口
curl -X GET http://localhost:7860/health

5.3 性能监控

使用journalctl结合其他工具进行性能监控:

# 监控服务启动时间
sudo journalctl -u sensevoice --since "5 minutes ago" | grep "Started"

# 查看内存使用情况
sudo journalctl -u sensevoice | grep -i memory

# 查找错误和警告
sudo journalctl -u sensevoice -p err..warning --since "today"

6. 日志分析与优化建议

6.1 结构化日志输出

为了更好的日志分析,建议在代码中添加结构化日志:

import logging
import sys
from systemd.journal import JournalHandler

# 配置日志
logger = logging.getLogger('sensevoice')
logger.setLevel(logging.INFO)
logger.addHandler(JournalHandler(SYSLOG_IDENTIFIER='sensevoice'))

# 在代码中使用结构化日志
logger.info("Service started successfully", extra={
    'PORT': 7860,
    'MODEL_PATH': model_path,
    'LANGUAGE_SUPPORT': 'zh,en,yue,ja,ko'
})

logger.error("Audio processing failed", extra={
    'FILE': audio_file,
    'REASON': str(e)
})

6.2 日志轮转策略优化

建议的日志管理策略:

# 创建日志清理脚本
sudo nano /usr/local/bin/cleanup_journal.sh
#!/bin/bash
# 保留最近7天的日志
journalctl --vacuum-time=7d

# 限制总日志大小不超过2GB
journalctl --vacuum-size=2G

6.3 监控告警设置

设置日志监控告警:

# 监控错误日志并发送告警
sudo tail -f /var/log/syslog | grep --line-buffered "sensevoice.*error" | while read line; do
    # 发送邮件或通知
    echo "SenseVoice Error: $line" | mail -s "SenseVoice Alert" admin@example.com
done

7. 总结

通过本教程,您已经学会了如何部署SenseVoice-small-ONNX语音识别服务,并使用systemd-journald进行专业的日志管理。这种方案提供了以下优势:

核心价值

  • 集中化管理:所有服务日志统一收集到systemd-journald
  • 实时监控:可以实时查看和跟踪服务运行状态
  • 故障排查:详细的日志记录便于快速定位和解决问题
  • 自动化维护:systemd自动管理服务生命周期和日志轮转

实践建议

  1. 定期检查日志磁盘使用情况,避免日志文件过大
  2. 设置日志监控告警,及时发现服务异常
  3. 使用结构化日志输出,便于后续分析和查询
  4. 定期备份重要日志,用于性能分析和审计

下一步学习

  • 深入学习journalctl高级查询语法
  • 探索日志分析工具如ELK Stack
  • 学习使用Prometheus和Grafana进行服务监控

通过良好的日志管理实践,您可以确保语音识别服务的稳定运行,快速响应和处理各种运行问题。


获取更多AI镜像

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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐