Skeyevss 日志采集方案落地实践

3 阅读2分钟

Skeyevss 日志采集方案落地实践

试用安装包下载 | SMS | 试用安装包下载 | 在线演示

项目地址 github.com/openskeye/g…


1. 背景与目标

在生产环境中,日志采集的核心价值不只是把日志存下来,而是:

  • 故障时能快速定位
  • 能按服务、设备、请求链路检索
  • 能做错误告警和趋势分析
  • 满足审计与留存要求

对于 Skeyevss,这一点尤其关键:系统涉及 DB RPCVSSBackend APICronWebMediaServer 多服务协同,且包含 SIP 信令链路。


2. 本项目日志来源有哪些

2.1 应用日志(各服务)

各服务配置文件都包含统一日志段(示例见 etc/.vss.yamletc/.base.yaml):

  • Log.Path: "${SKEYEVSS_SERVER_LOG_PATH}/${ServiceName}"
  • Log.Mode: "${SKEYEVSS_LOG_MODE}"
  • Log.Encoding: "${SKEYEVSS_LOG_ENCODING}"
  • Log.Level: "${SKEYEVSS_LOG_LEVEL}"

结论:应用日志采集根路径通常是
$SKEYEVSS_SERVER_LOG_PATH/

2.2 SIP 专项日志(VSS)

etc/.vss.yaml 中明确:

  • UseSipLogToFile: ${SKEYEVSS_PRINT_SAVE_SIP_LOG_FILE}
  • SipLogPath: "${SKEYEVSS_SERVER_LOG_PATH}/${SKEYEVSS_VSS_NAME}/sip"

只有当 SKEYEVSS_PRINT_SAVE_SIP_LOG_FILE=true 时,SIP 报文才会落盘。
后台“日志 -> SIP日志”文件视图也是读取该目录(backend/internal/logic/logs/siploglogic.go)。

2.3 容器启动日志(Docker 场景)

docker-compose.yml 里多个服务以命令重定向方式写入:

  • /app/logs/<ServiceName>.<YYYY.MM.DD>.log

所以 Docker 场景至少需要采集两类目录:

  1. 应用主日志目录(按 SKEYEVSS_SERVER_LOG_PATH
  2. /app/logs/*.log 启动输出日志

3. 推荐采集架构(通用)

推荐分层:

  1. 采集层:Filebeat 或 Fluent Bit(部署在每台节点)
  2. 传输层:Kafka(可选,流量大建议加)
  3. 存储检索层:Elasticsearch / OpenSearch / Loki
  4. 展示告警层:Kibana / Grafana + Alertmanager

中小规模可先用简化架构:

  • Filebeat/Fluent Bit -> Elasticsearch -> Kibana

这部分没有继承进项目,目前只采用的是写文件的方式,可根据实际场景推展需求。


4. 日志采集范围

4.1 必采目录

  • ${SKEYEVSS_SERVER_LOG_PATH}/**/*.log(服务应用日志)
  • ${SKEYEVSS_SERVER_LOG_PATH}/${SKEYEVSS_VSS_NAME}/sip/*.log(SIP 报文)
  • /app/logs/*.log(容器启动日志,Docker 场景)

4.2 建议打标签字段

采集时建议补充以下 metadata:

  • project: skeyevss
  • env: prod/test
  • service: vss/backendapi/dbrpc/...
  • log_type: app/sip/startup
  • host_ip
  • container_name(容器场景)

有了这些字段,检索效率会明显提升。


5. 配置建议

5.1 .env.prod 日志开关

SKEYEVSS_LOG_MODE=file
SKEYEVSS_LOG_ENCODING=json
SKEYEVSS_LOG_LEVEL=info
SKEYEVSS_SERVER_LOG_PATH=/app/logs/applications
SKEYEVSS_PRINT_SAVE_SIP_LOG_FILE=true

说明:

  • 建议 json,便于结构化采集
  • info 适合初期观测;稳定后可评估降到 error
  • SIP 排障强依赖文件日志,建议保持开启

6. 告警规则建议

  1. 服务级错误突增level=error 5 分钟内超过阈值
  2. VSS SIP 异常REGISTER/INVITE 失败比例升高
  3. 播放链路异常on_pub_start -> on_sub_start 延迟超阈值
  4. DB 连接问题:连接超时、重试次数激增
  5. 日志中断:某服务超过 N 分钟无日志
  6. 磁盘告警:日志盘使用率超过 80%

7. 常见问题与排查

7.1 开了 SIP 页面实时日志,但检索平台里没有 SIP 数据

原因通常是只看了 SSE 实时流,未开启 SIP 文件落盘。
检查 SKEYEVSS_PRINT_SAVE_SIP_LOG_FILE=trueSipLogPath

7.2 日志量太大导致成本高

优化建议:

  • 分级采集:app 全量,sip 关键字段抽取
  • 对 debug 日志做采样或短期保留
  • 热温冷分层存储(7天热 + 30天温 + 归档)

8. 落地步骤

  1. 统一 .env.prod 日志开关与路径规范
  2. 验证 3 类日志(app/sip/startup)都能检索
    3 增加核心字段(service/env/log_type)

9. 总结

日志采集在 Skeyevss 中本质是可观测性。
只要把下面三件事做好,故障定位效率会明显提升:

  • 路径统一(按服务 + SIP 专项)
  • 字段统一(service/env/log_type)
  • 告警统一(错误率、无日志、链路超时)