Rozšíření parseru Pipeline
Knihovnu LogMan.io dodáváme se standardními parsery uspořádanými do předem definovaných skupin. Někdy však budete chtít proces parsování rozšířit o vlastní parsery nebo obohacovače.
Uvažujme následující vstupní událost, která má být analyzována parsery z knihovny LogMan.io s ID skupiny lmio_parser_default_syslog_rfc3164:
<163>Feb 22 14:12:56 vmhost01 2135: ERR042: Něco se pokazilo.
Taková událost bude rozebrá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: Něco se pokazilo.\n"
}
Vstupní událost však obsahuje další zajímavé klíčové slovo - chybový kód "ERR042", který není součástí strukturované události. Tuto hodnotu můžeme extrahovat do vlastního pole strukturované události přidáním obohacovače (typ parseru), který rozřízne část události "message" a vybere kód chyby.
Najděte skupinu parserů, kterou chcete rozšířit
Ve výše uvedeném příkladu používáme parsery s ID skupiny lmio_parser_default_syslog_rfc3164
. Přejděme tedy do složky této skupiny v knihovně LogMan.io:
# ... nebo jiné umístění souboru lmio-ecs
$ cd syslog_rfc3164-parser
Vytvoření nového deklaračního souboru
Ve výchozím nastavení bez přípony 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
.
- Písmeno "e" znamená "enricher".
- "01" znamená prioritu, kterou bude mít tento obohacovač.
- Znak "-enricher" můžete nahradit čímkoli, co pro vás bude mít smysl
- "yaml" je povinné rozšíření
Přidání obsahu do souboru deklarace
Definujte
Deklarace je soubor YAML s hlavičkou YAML (v našem případě prázdnou) a povinným blokem definice. Přidáváme standardní obohacovač s názvem "Obohacovač chybového kódu".
Do souboru deklarace přidáme následující text:
---
define:
název: Error Code Enricher
typ: enricher/standard
Predikát
Chceme, aby se náš obohacovač aplikoval pouze na vybrané zprávy, proto musíme deklarovat predikát pomocí deklarativního jazyka.
Aplikujme obohacení na zprávy z hostitele vmhost01
.
Do deklaračního souboru přidáme následující text:
predikát:
!EQ
- !ITEM EVENT host.name
- "vmhost01"
Obohatit
Při pohledu na "zprávu" příkladové události chceme zprávu rozdělit dvojtečkami, vzít hodnotu první položky výsledků a uložit ji jako "error.code" (nebo jiné pole ECS).
Toho můžeme dosáhnout opět pomocí deklarativního jazyka.
Do deklaračního souboru přidejte následující text:
obohatit:
!DICT
s: !EVENT
set:
error.code: !CUT
co: !ITEM EVENT zpráva
oddělovač: ":
pole: 0
Výsledná událost předávaná parsovacímu pipeline se bude skládat ze všech polí z původní události a z jednoho dalšího pole "error.code", jehož hodnota je výsledkem !CUT
vyjmutí pole "message" z původní události (!ITEM EVENT message
) pomocí :
jako delimiteru a vyzvednutí položky na indexu 0
.
Takto vypadá výsledný obsah souboru e01-enricher.yaml
:
---
define:
name: Error Code Enricher
typ: obohacovač/standard
predikát:
!EQ
- !ITEM EVENT host.name
- "vmhost01"
obohatit:
!DICT
with: !EVENT
set:
error.code: !CUT
co: !ITEM EVENT zpráva
oddělovač: ":
pole: 0
Použít změny
Nová deklarace by měla být uložena ve správě verzí. Instance lmio-parser, která používá ID skupiny parserů, musí být restartována.
Závěr
Do pipeline parserů lmio_parser_default_syslog_rfc3164 jsme přidali nový obohacovač.
Nové události z hostitele vmhost01 budou nyní analyzovány a obohaceny, což povede k této výstupní 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": 2135: ERR042: Něco se pokazilo.\n": "log": "<163>Feb 22 14:12:56 vmhost01 2135: ERR042: Něco se pokazilo.\n",
"error.code": "ERR042"
}