我有下一个配置:
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 数据的消息...