Deklarace parserů
Deklarace parseru bere jako vstup původní událost nebo konkrétní pole částečně zpracované události, analyzuje jeho jednotlivé části a ukládá je jako páry klíč-hodnota do události.
LogMan.io Parsec aktuálně podporuje tři typy deklarací parserů:
- JSON parser
- Parser Windows událostí
- Parsec parser
Struktura deklarace
Aby bylo možné určit typ deklarace, je třeba specifikovat sekci define
.
define:
type: <declaration_type>
Pro deklaraci parseru specifikujte type
jako parser
.
JSON parser
JSON parser se používá pro zpracování událostí se strukturou JSON.
define:
name: JSON parser
type: parser/json
Toto je kompletní JSON parser a bude analyzovat události ze struktury JSON, odděluje pole na páry klíč-hodnota.
Varování
Zatím LogMan.io Parsec nepodporuje zpracování událostí s vnořenou strukturou JSON. Například událost níže nelze analyzovat pomocí JSON parseru:
{
"key": {
"foo": 1,
"bar": 2
}
}
Parser Windows událostí
Parser Windows událostí se používá pro zpracování událostí, které jsou vytvářeny Microsoft Windows. Tyto události jsou ve formátu XML.
define:
name: Windows Events Parser
type: parser/windows-event
Toto je kompletní parser Windows událostí a bude analyzovat události z Microsoft Windows, odděluje pole na páry klíč-hodnota.
Parsec parser
Parsec parser se používá pro zpracování událostí ve formátu prostého textu. Je založen na výrazech SP-Lang Parsec.
Pro zpracování původních událostí použijte následující deklaraci:
define:
name: My Parser
type: parser/parsec
parse:
!PARSE.KVLIST
- ...
- ...
- ...
define:
name: My Parser
type: parser/parsec
field: <custom_field>
parse:
!PARSE.KVLIST
- ...
- ...
- ...
Když je specifikováno field
, parsová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í Parsec parseru
Příklad 1: Jednoduchý příklad
Pro účely příkladu předpokládejme, že chceme zpracovat kolekci jednoduchých událostí:
Hello Miroslav from Prague!
Hi Kristýna from Pilsen.
{
"name": "Miroslav",
"city": "Prague"
}
{
"name": "Kristýna",
"city": "Pilsen"
}
define:
type: parser/parsec
parse:
!PARSE.KVLIST
- !PARSE.UNTIL " "
- name: !PARSE.UNTIL " "
- !PARSE.EXACTLY "from "
- city: !PARSE.LETTERS
Příklad 2: Složitější příklad
Pro účely tohoto příkladu předpokládejme, ž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 výstup 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: parser/parsec
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 předpokládejme, ž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
Chceme výstup v následujícím formátu:
{
"PRI": 189,
"timestamp": 1695421899,
"server": "server-abc",
"process.name": "server-check",
"process.pid": 1234,
"user": "harry potter",
"action": "log-in",
"ip": "198.20.65.68"
}
Vytvoříme dva parsry. První parser bude zpracovávat hlavičku syslogu a druhý bude zpracovávat zprávu.
define:
name: Syslog parser
type: parser/parsec
parse:
!PARSE.KVLIST
- !PARSE.EXACTLY "<"
- PRI: !PARSE.DIGITS
- !PARSE.EXACTLY ">"
- timestamp: ...
- server: !PARSE.UNTIL " "
- process.name: !PARSE.UNTIL "["
- process.pid: !PARSE.UNTIL "]"
- !PARSE.EXACTLY ":"
- message: !PARSE.CHARS
Tento parser
define:
type: parser/parsec
field: message
drop: yes
parse:
!PARSE.KVLIST
- !PARSE.UNTIL " "
- user: !PARSE.BETWEEN { what: '"' }
- !PARSE.EXACTLY " "
- !PARSE.UNTIL " "
- !PARSE.UNTIL " "
- !PARSE.UNTIL " "
- ip: !PARSE.CHARS