Deklarace parserů¶
Deklarace parseru bere jako vstup původní událost nebo specifické pole částečně zpracované události, analyzuje její jednotlivé části a ukládá je jako páry klíč-hodnota do události.
LogMan.io Parsec v současnosti podporuje tři typy deklarací parserů:
- Parser-kombinátor
- JSON parser
- XML parser
- Parser Windows Events
Struktura deklarace¶
Aby bylo možné určit typ deklarace, je nutné specifikovat sekci define
.
define:
type: parsec/<type>
Pro deklaraci parseru:
define:
type: parsec/parser
Parser-kombinátor¶
Parser-kombinátor (parsec) se používá pro zpracování událostí v prostém textovém formátu. Je založen na SP-Lang Parsec výrazech.
Pro zpracování původních událostí použijte následující deklaraci:
define:
name: Můj Parser
type: parsec/parser
parse:
!PARSE.KVLIST
- ...
- ...
- ...
define:
name: Můj Parser
type: parsec/parser
field: <custom_field>
parse:
!PARSE.KVLIST
- ...
- ...
- ...
Když je specifikováno field
, zpracování se aplikuje na toto pole, jinak se aplikuje na původní událost. Proto musí být přítomno v každém sub-parseru.
Příklady deklarací parser-kombinátorů¶
Příklad 1: Jednoduchý příklad
Pro účely příkladu si řekněme, že chceme zpracovat kolekci jednoduchých událostí:
Ahoj Miroslave z Prahy!
Ahoj Kristýno z Plzně.
Příklad deklarace parseru:
define:
type: parsec/parser
parse:
!PARSE.KVLIST
- !PARSE.UNTIL " " # 'Ahoj '
- name: !PARSE.UNTIL " " # 'Miroslav '
- !PARSE.EXACTLY "z " # 'z '
- city: !PARSE.LETTERS # 'Praha'
- !PARSE.CHARS # '!'
Výstupy:
{
"name": "Miroslav",
"city": "Praha"
}
{
"name": "Kristýna",
"city": "Plzeň"
}
Příklad 2: Složitější příklad
Pro účely tohoto příkladu si řekněme, že chceme zpracovat kolekci jednoduchých událostí:
Process cleaning[123] finished with code 0.
Process log-rotation finished with code 1.
Process cleaning[657] started.
A chceme, aby výstup byl v následujícím formátu:
{
"process.name": "cleaning",
"process.pid": 123,
"event.action": "process-finished",
"return.code": 0
}
{
"process.name": "log-rotation",
"event.action": "process-finished",
"return.code": 1
}
{
"process.name": "cleaning",
"process.pid": 657,
"event.action": "process-started",
}
Deklarace bude následující:
define:
type: parsec/parser
parse:
!PARSE.KVLIST
- !PARSE.UNTIL " "
- !TRY
- !PARSE.KVLIST
- process.name: !PARSE.UNTIL "["
- process.pid: !PARSE.UNTIL "]"
- !PARSE.SPACE
- !PARSE.KVLIST
- process.name: !PARSE.UNTIL " "
- !TRY
- !PARSE.KVLIST
- !PARSE.EXACTLY "started."
- event.action: "process-started"
- !PARSE.KVLIST
- !PARSE.EXACTLY "finished with code "
- event.action: "process-finished"
- return.code: !PARSE.DIGITS
Příklad 3: Zpracování syslog událostí
Pro účely příkladu si řekněme, že chceme zpracovat jednoduchou událost ve formátu syslog:
<189>Sep 22 10:31:39 server-abc server-check[1234]: User "harry potter" logged in from 198.20.65.68
Chtěli bychom, aby výstup byl v následujícím formátu:
{
"log.syslog.priority": 189,
"@timestamp": 1695421899,
"host.hostname": "server-abc",
"process.name": "server-check",
"process.pid": 1234,
"user.name": "harry potter",
"source.ip": "198.20.65.68"
}
Vytvoříme dva parsery. První parser zpracuje hlavičku syslogu a druhý zpracuje zprávu.
define:
name: Syslog parser
type: parsec/parser
parse:
!PARSE.KVLIST
- "<"
- PRI: !PARSE.DIGITS # 189
- ">"
- "@timestamp": !PARSE.DATETIME RFC3164 # Sep 22 10:31:39
- host.hostname: !PARSE.UNTIL " " # server-abc
- process.name: !PARSE.UNTIL "[" # server-check
- process.pid: !PARSE.UNTIL "]" # 1234
- ":"
- !PARSE.SPACES
- message: !PARSE.CHARS # User "harry potter" logged in from 198.20.65.68
define:
type: parsec/parser
field: message
parse:
!PARSE.KVLIST
- !PARSE.UNTIL " " # Uživatel
- user.name: !PARSE.BETWEEN { what: '"' } # harry potter
- " "
- !PARSE.UNTIL " " # přihlášen
- !PARSE.UNTIL " " # z
- !PARSE.UNTIL " " # adresy
- source.ip: !PARSE.CHARS
JSON parser¶
JSON parser se používá pro zpracování událostí se strukturou JSON.
define:
name: JSON parser
type: parsec/parser/json
Toto je kompletní JSON parser a zpracovává události do objektu JSON, který může být později odkazován v sub-parsers a mapování.
XML parser¶
XML parser se používá pro zpracování událostí se strukturou XML.
define:
name: XML parser
type: parsec/parser/xml
Toto je kompletní XML parser a zpracovává události do objektu XML, který může být později odkazován v sub-parsers a mapování.
Parser Windows Event¶
Parser Windows Events se používá pro zpracování událostí, které jsou generovány z Microsoft Windows. Tyto události jsou ve formátu XML.
define:
name: Parser Windows Events
type: parsec/parser/windows-event
Toto je kompletní parser Windows Event a zpracovává události z Microsoft Windows, oddělující pole do párů klíč-hodnota.