Назад | Перейти на главную страницу

rsyslog fromhost-ip с использованием внешней таблицы поиска

Работа на хосте 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")