Přeskočit obsah

Testování parserů

Je důležité testovat parsery a ověřovat jejich funkčnost s různými vstupy. LogMan.io nabízí nástroje pro ruční i automatizované testování parserů.

LogMan.io Parse Utility

Tato utilita je určena pro ruční spouštění parserů z příkazového řádku. Je užitečná pro testování, protože na vstup aplikuje vybrané skupiny parserů a nezpracované události ukládá do vyhrazeného souboru, takže parser lze vylepšovat, dokud není tento "nezpracovaný" výstup prázdný. Je určen pro parsování velmi rozsáhlých vstupů.

Nástroj parse je program pro příkazový řádek. Spouští se následujícím příkazem:

python3 ./parse.py -i input-syslog.txt -u unparsed-syslog.txt ./example/syslog_rfc5424-parser

-i, --input-file určuje soubor se vstupními řádky pro parsování

-u, --unparsed-file určuje soubor, do kterého se budou ukládat nerozparsované události ze vstupního souboru

a dále následuje skupina(y) parserů z knihovny, odkud se mají načíst deklarativní parsery.

Následující aplikace spustí parsování na daném vstupním souboru se záznamy rozdělenými novými řádky, jako např:

Feb 5 10:50:01 192.168.1.1 %ASA-1-105043 test1
Feb 5 10:55:10 192.168.1.1 %ASA-1-105043 test2
Feb 10 8:25:00 192.168.A1.1 X %ASA-1-105044 test3

a vytvoří soubor pouze s nerozčleněnými událostmi, který má stejnou strukturu:

Feb 10 8:25:00 192.168.A1.1 X %ASA-1-105044 test3

Parser Unit test

Parser LogMan.io poskytuje nástroj pro provádění unit testů nad knihovnou deklarací parserů a obohacovačů.

Pro začátek:

python3 ./test.py ./example [--config ./config.json]

Nástroj vyhledá testy v knihovně, načte je a pak je provede v zadaném pořadí.

Formát jednotkových testů

Soubor s jednotkovými testy musí být umístěn v adresáři test a jeho název musí odpovídat šabloně test*.yaml. Jeden testovací soubor YAML může obsahovat jeden nebo více dokumentů YAML se specifikací testu.

---
vstup: |
  řádek 1
  řádek 2
  ...

skupiny:

  # To znamená, že bude analyzováno vše ze vstupu
  unparsed: []

  parsed:
    - msg: line
      num: 1
    - msg: line
      num: 2