代码之家  ›  专栏  ›  技术社区  ›  Alan

用于动态设置mongodb集合名称的rsyslog语法是什么?

  •  1
  • Alan  · 技术社区  · 12 年前

    我已经将rsyslog v7.4.5写入MongoDB,现在想根据当前时间动态设置集合名称。我试着阅读了他们的在线文档,但不清楚在这种情况下应该使用哪种语法。我基本上使用的是他们在这里的示例中提供的配置: http://www.rsyslog.com/tag/ommongodb/

    我的配置是:

    input(type="imuxsock" socket="/dev/log")
    
    template(name="mongodblocal" type="subtree" subtree="$!")
    
    if $syslogfacility-text == 'local0' then {
        action(type="mmjsonparse")
        if $parsesuccess == "OK" then {
            # set vars that are appended onto the doc that's written to MongoDB
            set $!time = $timestamp;
            set $!sys = $hostname;
            set $!procid = $syslogtag;
            set $!syslog_fac = $syslogfacility;
            set $!syslog_sever = $syslogpriority;
            set $!pid = $procid;
    
            action(type="ommongodb" server="127.0.0.1" db="logs" collection="syslog" template="mongodblocal")
        }
    }
    

    请注意指定MongoDB数据库和集合名称的操作:

    action(type="ommongodb" server="127.0.0.1" db="logs" collection="syslog" template="mongodblocal")
    

    我想使用rsyslog财产动态设置集合名称,如下所示:

    action(type="ommongodb" server="127.0.0.1" db="logs" collection="syslog%YEAR%%MONTH%%DAY%%HOUR%" template="mongodblocal")
    

    然而,这显然不是正确的语法,因为属性名称被解释为文字字符串。

    我也尝试过,这导致MongoDB日志不再工作:

    set $!collection = "syslog%YEAR%%MONTH%%DAY%%HOUR%";
    action(type="ommongodb" server="127.0.0.1" db="logs" collection="$!collection" template="mongodblocal")
    

    有人知道实现这一点的合适语法吗?

    1 回复  |  直到 12 年前
        1
  •  0
  •   Alan    12 年前

    我在开发者论坛上发布了这个问题,他们回答说,目前无法使用属性值自定义集合名称参数:

    http://kb.monitorware.com/rsyslog-ommongodb-syntax-for-dynamic-collection-name-t12161.html