Přeskočit obsah

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