log_facility=LOG_LOCAL0
# 设置日志设施为 LOG_LOCAL0
log_prefix="{$mt $hdr(CSeq) $ci} "
# 设置日志前缀格式
以下是这两行 Kamailio 配置的详细解释:
1. log_facility=LOG_LOCAL0
作用
- 定义日志的设施(Facility):
该参数指定 Kamailio 的日志消息通过 Syslog 的 LOCAL0 设施 输出。Syslog 是 Linux 系统中用于管理日志的标准协议,设施(Facility)用于分类日志来源(如邮件服务、内核消息等)。
Syslog 设施类型
- 标准设施:
LOG_AUTH
(认证日志)、LOG_MAIL
(邮件日志)等。 - 本地设施:
LOG_LOCAL0
到LOG_LOCAL7
,专门预留给用户自定义服务的日志分类。
使用场景
- 日志分类:将 Kamailio 的日志与其他服务(如 Nginx、MySQL)区分开,便于集中管理。
- 定向处理:在
/etc/rsyslog.conf
中配置LOCAL0
的日志存储路径或转发规则。# 示例:将 LOCAL0 的日志写入单独文件 local0.* /var/log/kamailio.log
注意事项
- 需确保操作系统支持
LOG_LOCAL0
,并在 Syslog 配置中启用对应的处理规则。 - 生产环境中常用于分离关键服务的日志,避免混杂。
2. log_prefix="{$mt $hdr(CSeq) $ci} "
作用
- 定义日志前缀格式:
每条日志的开头会添加自定义的标识符,包含 SIP 请求的关键信息,方便快速定位问题。
变量解析
$mt
:SIP 请求的方法类型(Method Type),如INVITE
、REGISTER
、BYE
等。$hdr(CSeq)
:SIP 头部字段CSeq
的值,标识请求的序列号和方法(如100 INVITE
)。$ci
:Call-ID,唯一标识一个 SIP 会话(Call Leg),用于关联同一会话的多个请求。
示例输出
假设收到一个 INVITE
请求,其日志行可能如下:
INVITE 101 INVITE abc123def@192.168.1.1 ...(后续日志内容)
其中:
INVITE
:方法类型($mt
)101 INVITE
:CSeq 值($hdr(CSeq)
)abc123def@192.168.1.1
:Call-ID($ci
)
使用场景
- 调试跟踪:通过
Call-ID
快速关联同一会话的所有日志。 - 请求分析:通过
CSeq
和Method
分析请求顺序和类型,定位异常(如重复请求)。 - 日志过滤:在日志工具(如 ELK、Graylog)中按前缀字段过滤或统计。
扩展变量
Kamailio 支持更多变量用于日志前缀,例如:
$ts
:时间戳$si
:源 IP 地址$sp
:源端口$ru
:请求 URI
示例:
log_prefix="{$mt $hdr(CSeq) $ci $si:$sp} " # 包含源 IP 和端口
3. 完整配置示例
# 将日志发送到 LOCAL0 设施
log_facility=LOG_LOCAL0# 定义日志前缀格式
log_prefix="{$mt $hdr(CSeq) $ci} "# 其他日志参数
debug=3 # 日志级别(0-3,3 为最详细)
log_stderror=no # 不输出到标准错误
4. 生产环境实践建议
-
Syslog 配置
- 在
/etc/rsyslog.conf
中添加规则,将LOCAL0
日志写入独立文件并轮转:local0.* /var/log/kamailio.log
- 使用
logrotate
管理日志文件大小和保留周期。
- 在
-
日志级别控制
- 生产环境建议设置
debug=2
(减少冗余日志),测试环境可设为debug=3
。
- 生产环境建议设置
-
安全与性能
- 避免记录敏感信息(如
$au
用户密码)。 - 高频日志可能影响性能,需平衡信息量和资源消耗。
- 避免记录敏感信息(如
总结
log_facility=LOG_LOCAL0
:将 Kamailio 日志归类到独立设施,便于定向管理。log_prefix="..."
:通过关键字段(方法、CSeq、Call-ID)增强日志可读性和可追踪性。- 结合 Syslog 工具链(如 rsyslog + ELK),可实现高效的日志监控与分析。