You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Ubuntu服务器的每一条syslog日志行自动添加自定义前缀

实现方案

Ubuntu默认使用rsyslog作为系统日志服务,你可以通过rsyslog的自定义变量、模板功能实现日志前缀自动添加,具体操作按两种场景分别说明:


场景1:前缀从环境变量获取

步骤1:将环境变量传递给rsyslog进程

rsyslog作为systemd管理的系统服务,默认不会继承全局环境变量,需要手动配置传递:

  1. 创建rsyslog服务的自定义配置目录:mkdir -p /etc/systemd/system/rsyslog.service.d/
  2. 编辑配置文件/etc/systemd/system/rsyslog.service.d/override.conf,添加以下内容:
[Service]
# 直接写死环境变量值
Environment="PLUGIN_VERSION=32k0dkwfrghhaq3faiwejaf932"
# 如果环境变量存在于文件中,可改用下面的配置直接读取文件
# EnvironmentFile=/etc/your-custom-env-file
  1. 重载systemd配置生效:systemctl daemon-reload

步骤2:配置rsyslog日志模板

新建rsyslog规则文件/etc/rsyslog.d/00-custom-prefix.conf,添加以下配置:

# 从环境变量读取前缀值,存入自定义变量
set $!custom_prefix = getenv("PLUGIN_VERSION");

# 定义带前缀的日志模板,可根据需求调整日志其他字段的顺序和格式
$template CustomPrefixedLog,"%$!custom_prefix% %timegenerated% %hostname% %syslogtag% %msg%\n"

# 将模板设为所有文件日志的默认模板,所有日志都会自动加上前缀
$ActionFileDefaultTemplate CustomPrefixedLog

步骤3:生效配置

  1. 先检查配置语法是否正确,避免服务启动失败:rsyslogd -N1
  2. 重启rsyslog服务生效:systemctl restart rsyslog

场景2:前缀从特定文件夹名称获取

如果前缀是某个目录下的文件夹名,只需要调整上述步骤2中自定义变量的取值方式即可,不需要修改环境变量配置:

# 示例:取/opt/app/目录下的第一个子文件夹名作为前缀,可自行替换为你需要的shell命令
set $!custom_prefix = exec("/bin/sh", "-c", "ls -1 /opt/app/ | head -n1");

# 后续模板配置和场景1完全一致
$template CustomPrefixedLog,"%$!custom_prefix% %timegenerated% %hostname% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate CustomPrefixedLog

注意:需要确保rsyslog运行用户对你指定的目录有读取权限,否则无法正常获取文件夹名。如果不需要实时更新前缀,也可以提前把文件夹名写入固定文件,用set $!custom_prefix = exec("cat", "/path/to/prefix-file");读取,性能和稳定性更好。


验证方法

执行命令发送测试日志:logger "test custom prefix log"
查看/var/log/syslog文件,确认最新的日志行最前端已经显示你指定的前缀值。


注意事项

  • 如果只需要给nginx的日志加前缀,不需要全量系统日志加前缀,可以在rsyslog规则中匹配nginx的日志来源单独应用模板,不需要修改全局默认模板。
  • 前缀包含特殊字符时建议提前转义,避免日志格式错乱。
  • 配置修改前建议备份原有rsyslog配置文件,出错可快速回滚。

内容的提问来源于stack exchange,提问作者W4rQCC1yGh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 08:09:02