Přeskočit obsah

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"
}