Přeskočit obsah

Preprocessor

---
title: Parser preprocessor
---

# Parser preprocessor

*Parser preprocessor* umožňuje předzpracovat vstupní událost pomocí imperativního kódu, např. v Pythonu, Cythonu, C atd.

## Příklad

define: name: Demo vestavěného Syslog předzpracování type: parser/preprocessor tenant: Syslog_RFC5424.STRUCTURED_DATA.soc@0.tenant # (volitelné) count: CEF.cnt # (volitelné)

function: lmiopar.preprocessor.Syslog_RFC5424

`tenant` specifikuje atribut tenant, který bude přečten a předán do `context['tenant']`
pro další distribuci zpracovaných i nezpracovaných událostí do specifických
ukazatelů/úložišť v LogMan.io Dispatcher

`count` specifikuje atribut count
s počtem událostí, které mají být přečteny a předány do `context['count']`

## Vestavěné preprocessory

Modul `lmiopar.preprocessor` obsahuje následující běžně používané preprocessory.
Tyto preprocessory jsou optimalizovány pro nasazení s vysokým výkonem.

### Syslog RFC5425 vestavěný preprocessor

`function: lmiopar.preprocessor.Syslog_RFC5424`

Toto je preprocessor pro protokol Syslog (nový) podle [RFC5425](https://tools.ietf.org/html/rfc5424).

Vstup pro tento preprocessor je platný Syslog záznam, např.:
<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog 10 ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] Záznam události aplikace.
Výstupem je, část zprávy v logu v události a parsované prvky v `context.syslog_rfc5424`.
event: Záznam události aplikace.

context: Syslog_RFC5424: PRI: 165 FACILITY: 20 PRIORITY: 5 VERSION: 1 TIMESTAMP: 2003-10-11T22:14:15.003Z HOSTNAME: mymachine.example.com APP_NAME: evntslog PROCID: 10 MSGID: ID47 STRUCTURED_DATA: exampleSDID@32473: iut: 3 eventSource: Application eventID: 1011 ...

### Syslog RFC3164 vestavěný preprocessor

`function: lmiopar.preprocessor.Syslog_RFC3164`

Toto je preprocessor pro protokol _BSD syslog_ (starší) podle [RFC3164](https://tools.ietf.org/html/rfc3164).

Syslog RFC3164 preprocessor lze nakonfigurovat v sekci `define`:
define: type: parser/preprocessor year: 1999 timezone: Europe/Prague
`year` specifikuje číselné označení roku, které bude aplikováno na časovou značku logů.
Také můžete specifikovat `smart` (výchozí) pro pokročilý výběr roku založený na měsíci.

`timezone` specifikuje časové pásmo logů, výchozí je `UTC`.

Vstup pro tento preprocessor je platný Syslog záznam, např.:
<34>Oct 11 22:14:15 mymachine su[10]: 'su root' failed for lonvick on /dev/pts/8
Výstupem je, část zprávy v logu v události a parsované prvky v `context.syslog_rfc3164`.
event: "'su root' failed for lonvick on /dev/pts/8"

context: Syslog_RFC3164: PRI: 34 PRIORITY: 2 FACILITY: 4 TIMESTAMP: '2003-10-11T22:14:15.003Z' HOSTNAME: mymachine TAG: su PID: 10

`TAG` a `PID` jsou volitelné parametry.

### CEF vestavěný preprocessor

`function: lmiopar.preprocessor.CEF`

Toto je preprocessor pro _CEF_ nebo Common Event Format.
define: type: parser/preprocessor year: 1999 timezone: Europe/Prague
`year` specifikuje číselné označení roku, které bude aplikováno na časovou značku logů.
Také můžete specifikovat `smart` (výchozí) pro pokročilý výběr roku založený na měsíci.

`timezone` specifikuje časové pásmo logů, výchozí je `UTC`.

Vstup pro tento preprocessor je platný CEF záznam, např.:
CEF:0|Vendor|Product|Version|foobar:1:2|Failed password|Medium| eventId=1234 app=ssh categorySignificance=/Informational/Warning categoryBehavior=/Authentication/Verify
Výstupem je, část zprávy v logu v události a parsované prvky v `context.CEF`:  
context: CEF: Version: 0 DeviceVendor: Vendor DeviceProduct: Product DeviceVersion: Version DeviceEventClassID: 'foobar:1:2' Name: Failed password Severity: Medium

eventId: '1234'
app: ssh
categorySignificance: /Informational/Warning
categoryBehavior: /Authentication/Verify

CEF může také obsahovat hlavičku Syslog.
To je podporováno řetězením relevantního preprocessoru Syslog s preprocesorem CEF.
Prosím, odkažte se na kapitolu o řetězení preprocessorů pro detaily.

### Vestavěné preprocessory formátů logů Apache HTTP serveru

Existují vysoce výkonné preprocessory pro běžné přístupy logů Apache HTTP serveru.

`function: lmiopar.preprocessor.Apache_Common_Log_Format`

Toto je preprocessor pro _Apache Common Log Format_.

`function: lmiopar.preprocessor.Apache_Combined_Log_Format`

Toto je preprocessor pro _Apache Combined Log Format_.

#### Příklad Apache Common Log

Vstup:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
Výstup:
context: Apache_Access_Log: HOST: '127.0.0.1' IDENT: '-' USERID: 'frank' TIMESTAMP: '2000-10-10T20:55:36.000Z' METHOD: 'GET' RESOURCE: '/apache_pb.gif' PROTOCOL: 'HTTP/1.0' STATUS_CODE: 200 DOWNLOAD_SIZE: 2326
#### Příklad Apache Combined Log

Vstup:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
Výstup:
context: Apache_Access_Log: HOST: '127.0.0.1' IDENT: '-' USERID: 'frank' TIMESTAMP: '2000-10-10T20:55:36.000Z' METHOD: 'GET' RESOURCE: '/apache_pb.gif' PROTOCOL: 'HTTP/1.0' STATUS_CODE: 200 DOWNLOAD_SIZE: 2326 REFERE: 'http://www.example.com/start.html' USER_AGENT: 'Mozilla/4.08 [en] (Win98; I ;Nav)'
### Microsoft ULS vestavěný preprocessor

`function: lmiopar.preprocessor.Microsoft_ULS`

Toto je preprocessor pro Microsoft_ULS podle [Microsoft Docs](https://docs.microsoft.com/cs-cz/archive/blogs/sharepoint_scott/ulsviewer-filters-performance-filters).

Pro Microsoft SharePoint ULS logy, které neobsahují názvy serverů ani korelaci polí,
je poskytnut vyhrazený preprocessor:

`function: lmiopar.preprocessor.Microsoft_ULS_Sharepoint`

Preprocessor Microsoft SharePoint ULS lze nakonfigurovat v sekci define:
define: type: parser/preprocessor year: 1999 timezone: Europe/Prague
`year` specifikuje číselné označení roku, které bude aplikováno na časovou značku logů.
Také můžete specifikovat `smart` (výchozí) pro pokročilý výběr roku založený na měsíci.

`timezone` specifikuje časové pásmo logů, výchozí je `UTC`.

Vstup pro tento preprocessor je platný záznam Microsoft ULS Sharepoint, např.:
04/28/2021 12:31:57.69 mssdmn.exe (0x38E0) 0x4D10 SharePoint Server Search Connectors:SharePoint dvt6 High SetSTSErrorInfo ErrorMessage = Error from SharePoint site: WebExceptionStatus: SendFailure The underlying connection was closed: An unexpected error occurred on a send. hr = 90141214 [sts3util.cxx:6994] search\native\gather\protocols\sts3\sts3util.cxx 3aeca97a-a9db-4010-970e-fe01483bfd4f
Výstupem je, část zprávy v logu v události a parsované prvky v `context.Microsoft_ULS`.
event: Zpráva zahrnutá v logu.

context: Microsoft_ULS: TIMESTAMP: 1619613117.69 PROCESS: mssdmn.exe (0x38E0) THREAD: 0x4D10 PRODUCT: SharePoint Server Search CATEGORY: Connectors:SharePoint EVENTID: dvt6 LEVEL: High

### Query String preprocessor

`function: lmiopar.preprocessor.Query_String`

Toto je preprocessor pro Query String (key=value&key=value...) jako je meta informace z LogMan.io Collector

Příklad vstupu:
file_name=log.log&search=true
Výstupem je, část zprávy v logu v události a parsované prvky v `context.QUERY_STRING`.
event: Zpráva zahrnutá v logu.

context: QUERY_STRING: file_name: log.log search: true

### JSON vestavěný preprocessor

`function: lmiopar.preprocessor.JSON`

Toto je preprocessor pro formát JSON.
Očekává vstup ve formátu binárním nebo textovém, výstupní slovník je umístěn v události.

Vstupem pro tento preprocessor je tedy platný JSON záznam.

### XML vestavěný preprocessor

`function: lmiopar.preprocessor.XML`

Toto je preprocessor pro formát XML.
Očekává vstup ve formátu binárním nebo textovém, výstupní slovník je umístěn v události.

Vstupem pro tento preprocessor je tedy platný XML záznam, např.:

36884 0 2 0 0 0x8000000000000000 30286 System XX localhost The certificate received from the remote server does not contain the expected name. It is therefore not possible to determine whether we are connecting to the correct server. The server name we were expecting is localhost. The TLS connection request has failed. The attached data contains the server certificate. Error Info System

Výstup preprocessoru v `event`:
{ "System.EventID": "36884", "System.Version": "0", "System.Level": "2", "System.Task": "0", "System.Opcode": "0", "System.Keywords": "0x8000000000000000", "System.EventRecordID": "30286", "System.Channel": "System", "System.Computer": "XX", "UserData.EventXML.Name": "localhost", "RenderingInfo.Message": "The certificate received from the remote server does not contain the expected name. It is therefore not possible to determine whether we are connecting to the correct server. The server name we were expecting is localhost. The TLS connection request has failed. The attached data contains the server certificate.", "RenderingInfo.Level": "Error", "RenderingInfo.Opcode": "Info", "RenderingInfo.Channel": "System" }
### CSV vestavěný preprocessor

`function: lmiopar.preprocessor.CSV`

Toto je preprocessor pro formát CSV.
Očekává vstup ve formátu binárním nebo textovém, výstupní slovník je umístěn v události.

Vstupem pro tento preprocessor je tedy platný CSV záznam, např.:
user,last_name\njack,black\njohn,doe
Výstup preprocessoru v `context["CSV"]`:
{ "lines": [ {"user": "jack", "last_name": "black"}, {"user": "john", "last_name": "doe"} ] }
#### Parametry

V sekci `define` CSV preprocessoru, mohou být nastaveny následující parametry pro čtení CSV:
delimiter: (výchozí: ",") escapechar: znak pro escapu doublequote: umožnit dvojitou uvozovku (výchozí: true) lineterminator: znak ukončení řádku, buď \n nebo \r (výchozí je ukončení řádku operačního systému) quotechar: výchozí znak pro citát (výchozí: "\"") quoting: typ citování skipinitialspace: přeskočit počáteční mezeru (výchozí: false) strict: přísný režim (výchozí: false)
## Vlastní preprocessory

Vlastní preprocessory mohou být vyvolány z parseru, příslušný kód musí být přístupný mikroservisu parseru přes běžný způsob importu v Pythonu.


define: name: Demo vlastního Python preprocessoru type: parser/preprocessor

function: mypreprocessors.preprocessor

`mypreprocessors` je modul odpovídající složce s `__init__.py`, která obsahuje funkci `preprocessor()`.

Parser specifikuje `function` ke spuštění.
Používá notaci Pythonu a automaticky importuje modul.

Signatura funkce:
def preprocessor(context, event): ... return event
Preprocessor může (1) modifikovat událost (`!EVENT`) a/nebo (2) modifikovat kontext (`!CONTEXT`).

Výstup funkce `preprocessor` bude předán do následných parserů.
Preprocessor parser nevytváří zpracované události přímo.
Pokud funkce vrátí None, zpracování události je potichu ukončeno.
Pokud funkce vyvolá výjimku, výjimka bude zaznamenána a událost bude přeposlána do výstupu `unparsed`.

## Řetězení preprocessorů

Preprocessory mohou být řetězeny za účelem parsování složitějších vstupních formátů.
Výstup (neboli událost) z prvního preprocessoru je předán jako vstup druhému preprocessoru (a tak dále).

Například vstup je ve formátu CEF s hlavičkou Syslog RFC3164:
<14>Jan 28 05:51:33 connector-test CEF_PARSED_LOG: CEF:0|Vendor|Product