Rozšíření parsovacího pipeline
Dodáváme LogMan.io knihovnu se standardními parsery, které jsou organizovány do předdefinovaných skupin. Někdy však můžete chtít rozšířit proces parsování vlastními parsers nebo obohacovači.
Zvažte následující vstupní událost, která bude parsována pomocí parserů z knihovny LogMan.io se skupinovým ID lmio_parser_default_syslog_rfc3164:
<163>Feb 22 14:12:56 vmhost01 2135: ERR042: Something went wrong.
Tato událost bude parsována do strukturované události, která vypadá takto:
{
"@timestamp": 1614003176,
"ecs.version": "1.6.0",
"event.kind": "event",
"event.dataset": "syslog.rfc3164",
"message": "ERR042: Something went wrong.\n",
"host.name": "vmhost01",
"tenant": "default",
"log.syslog.priority": 163,
"log.syslog.facility.code": 20,
"log.syslog.severity.code": 3,
"event.ingested": 1614004510.4724128,
"_s": "SzOe",
"_id": "[ID]",
"log.original": "<163>Feb 22 14:12:56 vmhost01 2135: ERR042: Something went wrong.\n"
}
Vstupní událost však obsahuje další klíčové slovo - chybový kód "ERR042", který není součástí strukturované události. Můžeme extrahovat tuto hodnotu do vlastního pole strukturované události přidáním obohacovače (typ parseru), který rozdělí část "message" události a vybere chybový kód.
Najděte Skupinu Parserů k Rozšíření
V výše uvedeném příkladu používáme parsery s ID skupiny lmio_parser_default_syslog_rfc3164
. Takže se pojďme přesunout do složky této skupiny v knihovně LogMan.io:
$ cd /opt/lmio-ecs # ... nebo vaše jiná umístění lmio-ecs
$ cd syslog_rfc3164-parser
Vytvoření Nového Deklaračního Souboru
Ve výchozím nastavení, bez rozšíření, jsou ve složce skupiny parserů tyto soubory:
$ ls -l
p01-parser.YAML p02-parser.YAML
Tyto soubory obsahují deklarace parserů.
Pro deklaraci nového obohacovače vytvořte soubor e01-enricher.yaml
.
- "e" znamená "enricher" (obohacovač)
- "01" znamená prioritu, kterou tento obohacovač získá
- "-enricher" může být nahrazeno čímkoliv, co vám dává smysl
- "yaml" je povinná přípona
Přidání Obsahu do Deklaračního Souboru
Definice
Deklarace je YAML soubor s YAML záhlavím (v našem případě prázdným) a povinným blokem definice. Přidáváme standardní obohacovač s názvem "Error Code Enricher".
Přidejte následující do dekleračního souboru:
---
define:
name: Error Code Enricher
type: enricher/standard
Predikát
Chceme, aby náš obohacovač byl aplikován pouze na vybrané zprávy, takže musíme deklarovat predikát pomocí deklarativního jazyka.
Aplikujme obohacení na zprávy z hosta vmhost01
.
Přidejte následující do dekleračního souboru:
predicate:
!EQ
- !ITEM EVENT host.name
- "vmhost01"
Obohacení
Když se podíváme na "message" výše uvedené události, chceme zprávu rozdělit podle dvojteček, vzít hodnotu prvního prvku výsledků a uložit ji jako "error.code" (nebo jiné ECS pole).
Toho můžeme dosáhnout opět pomocí deklarativního jazyka.
Přidejte následující do dekleračního souboru:
enrich:
!DICT
with: !EVENT
set:
error.code: !CUT
what: !ITEM EVENT message
delimiter: ':'
field: 0
Výsledná událost předaná do parsovacího pipeline bude obsahovat všechna pole z původní události a jedno další pole "error.code", jehož hodnota je výsledkem !CUT
"message" pole z původní události (!ITEM EVENT message
) pomocí :
jako oddělovače a vybráním prvku na indexu 0
.
Takto vypadá obsah souboru e01-enricher.yaml
:
---
define:
name: Error Code Enricher
type: enricher/standard
predicate:
!EQ
- !ITEM EVENT host.name
- "vmhost01"
enrich:
!DICT
with: !EVENT
set:
error.code: !CUT
what: !ITEM EVENT message
delimiter: ':'
field: 0
Aplikování změn
Nová deklarace by měla být udržována ve verzi řízení. lmio-parser instance, která používá ID skupiny parserů, musí být restartována.
Závěr
Přidali jsme nový obohacovač do lmio_parser_default_syslog_rfc3164's parsovací pipeline.
Nové události z hosta vmhost01 nyní budou parsovány a obohaceny s následujícím výstupem události:
{
"@timestamp": 1614003176,
"ecs.version": "1.6.0",
"event.kind": "event",
"event.dataset": "syslog.rfc3164",
"message": "ERR042: Something went wrong.\n",
"host.name": "vmhost01",
"tenant": "default",
"log.syslog.priority": 163,
"log.syslog.facility.code": 20,
"log.syslog.severity.code": 3,
"event.ingested": 1614004510.4724128,
"_s": "SzOe",
"_id": "[ID]",
"log.original": "<163>Feb 22 14:12:56 vmhost01 2135: ERR042: Something went wrong.\n",
"error.code": "ERR042"
}