dyn_stats。它应该如何工作?

dyn_stats。它应该如何工作?

我有下一个配置:

module( load="impstats"
        interval="300"
        severity="7"
        log.syslog="off"
        log.file="/var/log/rsyslog-stats.log"
)

dyn_stats(name="msg_per_host" resettable="off" maxCardinality="3000" unusedMetricLife="86400")
set $.inc_status = dyn_inc("msg_per_host", $hostname)

if ($.inc_status != 0) then { 
    action(name="dyn_stat_inc_error" type="omfile" file="/dev/null" template="DynStatsError")
}

module(load="imuxsock")
input( type="imuxsock" socket="/dev/log")

module(load="imudp")
input( type="imudp" port="514")

$WorkDirectory /var/lib/rsyslog

module( load="builtin:omfile" template="RSYSLOG_TraditionalFileFormat")

*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

# Templates
$template RemoteHost,"/var/log/syslog/%$YEAR%-%$MONTH%-%$DAY%/%fromhost-ip%-syslog.log"

# Remote Logging
$RuleSet remote
*.* ?RemoteHost

$InputUDPServerBindRuleset remote
$UDPServerRun 514

# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @rsyslog_storage:514

我想通过 IP 地址获取指标...但是,它不起作用。

在官方文档中,它看起来有点棘手: 手动的 官方网站上的文档 官方网站上的另一个页面

据我了解,它应该可以工作......但是在日志中我看到它:

/var/tmp/rsyslog # cat /var/log/rsyslog-stats.log 
Fri Mar 22 13:45:47 2019: global: origin=dynstats msg_per_host.ops_overflow=0 msg_per_host.new_metric_add=0 msg_per_host.no_metric=0 msg_per_host.metrics_purged=0 msg_per_host.ops_ignored=0 msg_per_host.purge_triggered=0 
Fri Mar 22 13:45:47 2019: msg_per_host: origin=dynstats.bucket 
Fri Mar 22 13:45:47 2019: resource-usage: origin=impstats utime=29199 stime=6257 maxrss=5008 minflt=1800 majflt=0 inblock=0 oublock=0 nvcsw=117 nivcsw=6 openfiles=6 
Fri Mar 22 13:45:47 2019: main Q: origin=core.queue size=0 enqueued=0 full=0 discarded.full=0 discarded.nf=0 maxqsize=0 

这是不正确的,因为我发送了带有logger和不带有的警报set $.inc_status =,并且if...它显示了所有消息。但没有显示 IP 地址的计数器。

/var/tmp/rsyslog # rsyslogd -v
rsyslogd 8.40.0, compiled with:
    PLATFORM:               x86_64-alpine-linux-musl
    PLATFORM (lsb_release -d):      
    FEATURE_REGEXP:             Yes
    GSSAPI Kerberos 5 support:      Yes
    FEATURE_DEBUG (debug build, slow code): No
    32bit Atomic operations supported:  Yes
    64bit Atomic operations supported:  Yes
    memory allocator:           system default
    Runtime Instrumentation (slow code):    No
    uuid support:               Yes
    systemd support:            No
    Number of Bits in RainerScript integers: 64

See https://www.rsyslog.com for more information.

出了什么问题?为什么它不起作用?

答案1

我发现问题:dyn_inc应该添加功能ruleset

但是,这有点尴尬,因为我想获得全球指标......

现在我的配置如下:

$WorkDirectory /var/lib/rsyslog

module( load="impstats"
        interval="300"
        severity="7"
        ruleset="remote"
        log.file="/var/log/rsyslog-stats.log"
)

module(load="imuxsock")
input( type="imuxsock" socket="/dev/log")

module(load="imudp")
input( type="imudp" port="514" ruleset="remote")

module( load="builtin:omfile"
        template="RSYSLOG_TraditionalFileFormat"
)

dyn_stats(name="msg_per_host" resettable="off" maxCardinality="3000" unusedMetricLife="86400")


*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

# Templates
template(name="RemoteHost" type="list") {
    constant(value="/var/log/syslog/")
    property(name="timegenerated" dateFormat="year")
    constant(value="-")
    property(name="timegenerated" dateFormat="month")
    constant(value="-")
    property(name="timegenerated" dateFormat="day")
    constant(value="/")
    property(name="fromhost-ip")
    constant(value="-syslog.log")
    property(name="$.logpath")
}


ruleset(name="remote") {
    set $.inc_status = dyn_inc("msg_per_host", $fromhost-ip);

    if ($.inc_status != 0) then { 
        action(name="dyn_stat_inc_error" type="omfile" file="/dev/null")
    }
    action(type="omfile" DynaFile="RemoteHost")
}

另外,还有一个问题 - 是否可以显示接收字节的统计信息?因为可能存在这样的情况,网络中的某个服务器发送 20 条包含 1kb 数据的消息,而另一个服务器发送 10 条包含 3kb 数据的消息...

相关内容