Kaskádový parser
Příklad
---
define:
název: Syslog RFC5424
typ: parser/cascade
field_alias: field_alias.default
encoding: utf-8 # none, ascii, utf-8 ... (výchozí: utf-8)
target: parsed # nepovinné, určete cíl parsované události (výchozí: parsed)
predicate:
!AND
- !CONTAINS
what: !EVENT
podřetězec: "ASA
- !INCLUDE predicate_filter
parse:
!REGEX.PARSE
what: !EVENT
regex: '^(\w{1,3}\s+\d+\s\d+:\d+:\d+)\s(?:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|([^\s]+))\s%ASA-\d+-(.*)$'
položky:
- rt:
!DATETIME.PARSE
value: !ARG
format: '%b %d %H:%M:%S'
flags: Y
- dvchost
Sekce define
Tato sekce obsahuje společnou definici a metadata.
Položka name
Kratší lidsky čitelný název této deklarace.
Item type
Typ této deklarace, musí být parser/cascade
.
Položka field_alias
Název vyhledávače aliasů polí, který se má načíst, aby bylo možné v deklaraci použít aliasové názvy atributů událostí vedle jejich kanonických názvů.
Položka encoding
Kódování příchozí události.
Položka target
(nepovinné)
Výchozí cílové potrubí analyzované události, pokud není v poli context
uvedeno jinak.
Mezi možnosti patří: parsed
, lookup
, unparsed
.
Položka description
(nepovinné)
Dlouhý, případně víceřádkový, lidsky čitelný popis deklarace.
Sekce predicate
(nepovinné)
Predikát
filtruje příchozí události pomocí výrazu.
Pokud výraz vrátí hodnotu True
, vstoupí událost do sekce parse
.
Pokud výraz vrátí False
, událost se přeskočí.
Ostatní vrácené hodnoty jsou nedefinované.
Tuto sekci lze použít k urychlení parsování přeskočením řádků se zjevně nerelevantním obsahem.
Včetně vnořených predikátových filtrů
Predikátové filtry jsou výrazy umístěné ve vyhrazeném souboru, které lze zahrnout do mnoha různých predikátů jako jejich části.
Pokud chcete zahrnout externí filtr predikátu, který se nachází buď ve složce include
, nebo ve složce filters
.
(jedná se o globální složku umístěnou v nejvyšší hierarchii knihovny LogMan.io),
použijte příkaz !INCLUDE
:
!INCLUDE predicate_filter
kde predicate_filter
je název souboru s příponou .yaml
.
Obsahem souboru predicate_filter.yaml
je výraz, který má být zahrnut, jako např:
---
!EQ
- !ITEM EVENT category
- "MyEventCategory"
Sekce parse
Tato sekce specifikuje vlastní mechanismus parsování.
Očekává, že bude vrácen slovník nebo None
, což znamená, že parsování nebylo úspěšné.
Typické příkazy v sekci parse
Příkaz !FIRST
umožňuje specifikovat seznam deklarací parsování, které budou vyhodnoceny v pořadí (shora dolů), přičemž první deklarace, která vrátí hodnotu jinou než None
, iteraci ukončí a tato hodnota je vrácena.
Příkaz !REGEX.PARSE
umožňuje transformovat řádek protokolu do slovníkové struktury. Umožňuje také připojit dílčí parsery pro další rozklad podřetězců.
Výstupní směrování
Označení, že parser nebude
analyzovat událost, kterou dosud obdržel,
je třeba v rámci kontextu
nastavit atribut cíl
na hodnotu nerozparsováno
.
Pak mohou událost přijmout a rozebrat další parsery v koncovce.
Stejným způsobem lze cíl nastavit na různé cílové skupiny,
například parsed
.
Pro nastavení cíle
v kontextu
se používá příkaz !CONTEXT.SET
:
- !CONTEXT.SET
co: <... expression ...>
set:
cíl: neparazitovaný
Příklad použití v parseru. Pokud příchozí události neodpovídá žádný regex,
událost je odeslána do cíle unparsed
, takže ostatní parsery v řadě
ji mohou zpracovat.
!FIRST
- !REGEX.PARSE
co: !EVENT
regex: '^(one)\s(two)\s(three)$'
items:
- 1
- dva
- tři
- !REGEX.PARSE
co: !EVENT
regex: '^(uno)\s(duo)\s(tres)$'
items:
- jedna
- dva
- tři
# Zde začíná zpracování částečně rozebrané události
- !CONTEXT.SET
set:
cíl: nerozparsováno
- !DICT
set:
nerozbaleno: !EVENT