RegEx для форматирования журналов Rsyslog для работы с шаблоном Arcsight - PullRequest
1 голос
/ 09 мая 2019

Я пытался избавиться от пробелов или символов, которые должны быть прочитаны соединителем arcsight. Я безуспешно пытался использовать шаблон с выражением regex - проблема в том, что arcsight анализирует каждую вещь в одном поле, потому что не распознает формат как CEF

Я использовал два модуля omfwd и omfile, но оба не работали

ОБРАЗЕЦ ЖЕСТКОГО ОБРАЗЦА OMFWD

 CEF:0|Symantec|Messaging Gateway||ASA|CEF: 0\|CISCO\|ASA\|\|305011\|Built dynamic TCP translation\|Low\| eventId=41069435 proto=TCP

ОБРАЗЕЦ ОФИЛЬНОГО СЫРЬЯ

2019-05-08T20:55:04.913701+00:00  CEF: 0|CISCO|ASA||302013|Built outbound TCP connection|Low| eventId=17363056 externalId=116395008 proto=TCP 

Я бы хотел отформатировать сообщение таким образом

CEF: 0 | CISCO | ASA || 302013 | Построено исходящее TCP-соединение | Низкий | eventId = 17363056 externalId = 116395008 proto = TCP

без пробелов и других вещей

Вот шаблоны, которые мы пытались использовать:

$template outfmt,"%msg:R,ERE,1:(.*) CEF: --end% CEF: %msg:R,ERE,1: CEF: (.*)--end%\n"


$template outfmt,"%msg:R,ERE,1,\?(.*)\sCEF\:\s\?(.*)--end% CEF: %msg:R,ERE,1,\?(.*)CEF\:\?(.*)--end%\n"

Любой, кто может помочь с этой документацией, действительно беден на веб-сайте rsyslog.

1 Ответ

0 голосов
/ 09 мая 2019

Если вы хотите создать выражение для удаления нежелательных пробелов, это выражение может дать вам представление.

^(.+)([A-Z]{3}:)(\s+)([A-Z0-9|=]+)(.*\S\s*?)

, который вы можете упростить или добавить больше границ, если хотите.

Я предположил некоторые лишние пробелы в ваших входных строках. Я видел только два экземпляра нежелательных пробелов, один в группе $3, а некоторые в конце, которые я захватил с помощью групп (), и вы можете так же просто удалить эти пробелы. Если может быть больше пробелов, вы можете просто добавить эти группы захвата везде, где могут быть дополнительные пробелы.

Мои границы ослаблены, например ([A-Z0-9|=]+), который просто пролистывает некоторые буквы и цифры без логики. Я так и сделал, так как не знаю, как могут выглядеть ваши экземпляры. Вы можете просто ограничить их, если хотите.

enter image description here

Graph

Этот график показывает, как будет работать выражение, и вы можете визуализировать другие выражения в этой ссылке :

enter image description here

Тест производительности

Этот фрагмент JavaScript показывает производительность этого выражения, используя простой цикл for в 1 миллион раз.

const repeat = 1000000;
const start = Date.now();

for (var i = repeat; i >= 0; i--) {
	var string = '2019-05-08T20:55:04.913701+00:00   CEF:    0|CISCO|ASA||302013|Built outbound TCP connection|Low| eventId=17363056 externalId=116395008 proto=TCP               ';
	var regex = /^(.+)([A-Z]{3}:)(\s+)([A-Z0-9|=]+)(.*\S\s*?)(.*)/gm;
	var match = string.replace(regex, "$2$4$5");
}

const end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match ??? ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ? ");
...