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

Syslog-NG配置:如何按程序名实现条件路由拆分日志文件

Syslog-NG 按程序名路由日志配置方案

你当前使用的3.30版本原生支持该需求,无需额外安装组件,以下是可直接落地的配置,优先实现你提到的「指定程序拆分、其余走默认文件」的效果,同时附无预定义自动拆分的配置方法。

核心实现逻辑

  • 利用Syslog-NG内置的${PROGRAM}宏提取日志对应的来源程序名
  • 日志路径按顺序匹配:优先匹配需要单独拆分的程序规则,命中后写入对应同名文件,终止后续匹配
  • 未命中拆分规则的日志,统一写入默认的全量日志文件

修改后完整可用配置

@version: 3.30
@include "scl.conf"

options 
{
    flush_lines (100); # 原配置0为每条日志刷盘,高流量下建议调整为100减少IO压力,无性能要求可保留原值
    time_reopen (10);
    log_fifo_size (1000);
    chain_hostnames (off);
    use_dns (yes);
    use_fqdn (yes);
    create_dirs (yes);
    keep_hostname (yes);
    normalize_hostnames (yes);
    stats_freq (600);
    stats_level (2);
};

source s_local 
{
  internal();
};

source s_network 
{
  syslog(transport(udp) port(5514));
};

# 默认全量日志目的地
destination d_logs 
{
    file
    (
      "/var/log/all_logs.log"
      create_dirs(yes)
    );
};

# 按程序名单独存储的目的地,文件名直接引用程序名宏
destination d_per_program {
    file(
        "/var/log/${PROGRAM}.log"
        create_dirs(yes)
    );
};

# 定义需要单独拆分的程序列表,按需增删正则内的程序名即可,用|分隔
filter f_split_programs {
    program("^(dpinger|sshd|unbound)$");
};

# 可选:清洗程序名中的特殊字符,避免路径穿越风险
rewrite r_sanitize_program {
    subst("/", "_", value("PROGRAM"), flags(global));
    subst("\\.\\.", "_", value("PROGRAM"), flags(global));
};

# 拆分规则日志路径:必须放在默认路径之前,命中后直接终止匹配
log {
    source(s_network);
    # source(s_local); # 如需本地internal日志也按规则拆分,取消该行注释
    rewrite(r_sanitize_program);
    filter(f_split_programs);
    destination(d_per_program);
    flags(final); # 命中该规则的日志不再进入后续log路径
};

# 默认全量日志路径:接收所有未命中拆分规则的日志
log {
    source(s_network);
    # source(s_local);
    rewrite(r_sanitize_program);
    destination(d_logs);
};

配置调整说明

  • 新增拆分程序:直接修改f_split_programs过滤器中正则的程序名列表即可,例如要新增nginx拆分,改为program("^(dpinger|sshd|unbound|nginx)$")
  • 忽略程序名大小写:如果日志中程序名存在大小写不统一的情况,给program匹配加flags(ignore-case)参数,写法为program("^(dpinger|sshd|unbound)$", flags(ignore-case));
  • 无预定义自动拆分:如果要实现所有程序日志自动写入同名文件、无需提前配置列表,直接删除拆分log路径中的filter(f_split_programs);行即可。注意该模式会在日志目录生成大量零散文件,生产环境不推荐使用。如果需要同时保留全量日志,删除该行的同时去掉flags(final);参数即可,日志会同时写入单独程序文件和全量文件。
  • 权限注意:确保Syslog-NG运行用户对/var/log目录有写入权限,否则会出现文件创建失败、日志丢失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:30:53