Přeskočit obsah

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