rsyslog fromhost-ip 使用外部查找表

rsyslog fromhost-ip 使用外部查找表

在 RHEL 7 主机上工作,配置 rsyslog 以从数百个 IP 的各种设备(路由器、交换机、设备等)收集 udp/tcp 事件。使用以下配置开始。

问题:rsyslog 中是否有方法可以调用“fromhost-ip”使用的外部 IP 地址表,这样我就不必列出每个单独的 IP 的数十行或更多行,而是更新列表?由于 IP 不在同一范围内(许多甚至不在同一 CIDR 块中),我无法使用“startswith”,也不知道 rsyslog 是否识别 CIDR 表示法或子网掩码。

$ModLoad imudp
$UDPServerRun 514
#
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
#
$template networking,"/var/log/splunk/networking/%FROMHOST-IP%/%FROMHOST-  IP%_%$now%.log"
$template firewall,"/var/log/splunk/firewall/%FROMHOST-IP%/%FROMHOST-IP%_%$now%.log"
$template security,"/var/log/splunk/security/%FROMHOST-IP%/%FROMHOST-IP%_%$now%.log"
$template infrastructure,"/var/log/splunk/infrastructure/%FROMHOST-IP%/%FROMHOST-IP%_%$now%.log"
$template linux,"/var/log/splunk/linux/%FROMHOST-IP%/%FROMHOST-IP%_%$now%.log"
$template uncategorized,"/var/log/splunk/uncategorized/%FROMHOST-IP%/%FROMHOST-IP%_%$now%.log"
#
if $msg contains "%ASA-" then ?firewall
if $fromhost-ip == [ "172.31.4.3","172.31.4.2" ] then ?firewall
& ~

if $fromhost-ip == [ '172.31.4.211', '172.31.4.212', '172.31.4.213' ] then ?networking
& ~

if $fromhost-ip == [ '172.31.4.200','172.31.4.201','172.31.4.203' ] then ?security
& ~

if $fromhost-ip == [ '172.31.4.241','172.31.4.242','172.31.4.243' ] then ?infrastructure
& ~

if $fromhost-ip == [ '172.31.4.250','172.31.4.251','172.31.4.253' ] then ?linux
& ~

if $fromhost-ip != '127.0.0.1' then  ?uncategorized
& ~

答案1

我不知道你在 Rhel7 中安装了哪个版本的 rsyslog,也不知道这个功能什么时候可用,但你也许可以使用 RainerScript

您必须提供一个文件,比如说mytable.json包含一个包含所需键和值的 json 格式的表,例如:

{ "version" : 1,
  "nomatch" : "uncategorized",
  "type"    : "string",
  "table" : [
    {"index" : "172.31.4.211", "value" : "networking" },
    {"index" : "127.0.0.1",    "value" : "linux" },
  ]}

显然,最好使用小型 awk 脚本从更易于编辑的地址和类别列表中生成它。

您可以使用 将此表加载到配置文件中lookup_table()。然后只需使用变量$.myclass而不是所有类别来提供一个通用模板,然后通过lookup()表中的 来设置该变量。例如,

lookup_table(name="myipmap" file="mytable.json" reloadOnHUP="on")
$template all,"/var/log/splunk/%$.myclass%/%FROMHOST-IP%/%FROMHOST-IP%_%$now%.log"
set $.myclass = lookup("myipmap", $fromhost-ip);
action(type="omfile" dynaFile="all")

相关内容