У меня следующий конфиг:
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.
что случилось? почему не работает?
Я обнаружил проблему: 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 сообщений с данными 1 КБ, а другой - 10 сообщений с данными 3 КБ ...