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.
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.
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.
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ř.:
<?xml version="1.0" encoding="UTF-8"?>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Schannel" Guid="{1f678132-5938-4686-9fdc-c8ff68f15c85}" />
<EventID>36884</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000000</Keywords>
<TimeCreated SystemTime="2020-06-26T07:12:01.331577900Z" />
<EventRecordID>30286</EventRecordID>
<Correlation ActivityID="{8e20742a-4b06-0002-c274-208e064bd601}" />
<Execution ProcessID="788" ThreadID="948" />
<Channel>System</Channel>
<Computer>XX</Computer>
<Security UserID="S-1-5-21-1627182167-2524376360-74743131-1001" />
</System>
<UserData>
<EventXML xmlns="LSA_NS">
<Name>localhost</Name>
</EventXML>
</UserData>
<RenderingInfo Culture="en-US">
<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.</Message>
<Level>Error</Level>
<Task />
<Opcode>Info</Opcode>
<Channel>System</Channel>
<Provider />
<Keywords />
</RenderingInfo>
</Event>
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|Version|foobar:1:2|Failed password|Medium| eventId=1234 app=ssh categorySignificance=/Informational/Warning categoryBehavior=/Authentication/Verify
Pipeline obsahuje dva preprocessory:
p01_parser.yaml
:
```
define: name: Preprocessor pro část zprávy Syslog RFC5424 type: parser/preprocessor tenant: Syslog_RFC5424.STRUCT