Работа на хосте RHEL 7, настройка rsyslog для сбора событий udp / tcp с широкого спектра устройств (маршрутизаторов, коммутаторов, устройств и т. Д.) С нескольких сотен IP-адресов. Для начала воспользуйтесь конфигурацией ниже.
Вопрос: Есть ли способ в rsyslog вызвать внешнюю таблицу IP-адресов, используемых "fromhost-ip", чтобы мне не нужно было иметь десятки или более строк с каждым отдельным IP-адресом, а вместо этого обновить список? Поскольку IP-адреса не находятся в одном диапазоне (многие даже не находятся в одном и том же блоке CIDR), я не могу использовать «startwith» и не знаю, что 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
& ~
Я не знаю, какая у вас версия rsyslog в Rhel7 и когда эта функция стала доступной, но вы можете использовать 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")