Přeskočit obsah

Parser preprocesoru

parser preprocessor umožňuje předzpracovat vstupní událost pomocí imperativního kódu, např. Python, Cython, C atd.

Příklad

---
define:
  název: Demo vestavěného preprocesoru Syslog
  typ: parser/preprocesor
  tenant: (nepovinné)
  count: CEF.cnt # (nepovinné)

function: lmiopar.preprocessor.Syslog_RFC5424

tenant určuje atribut tenanta, který má být načten a předán do context['tenant'] pro další distribuci analyzovaných a nerozparsovaných událostí do specifických tenantů. indexům/úložištím v LogMan.io Dispatcher

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

Vestavěné preprocesory

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

Vestavěný preprocesor Syslog RFC5425

funkce: lmiopar.preprocessor.Syslog_RFC5424

Toto je preprocesor pro protokol Syslog (nový) podle RFC5425.

Vstupem pro tento preprocesor je platná položka protokolu Syslog, 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 protokolu událostí aplikace.

Výstupem je, část zprávy protokolu v události a analyzované prvky v context.syslog_rfc5424.

událost: Záznam v protokolu událostí aplikace.

context:
  Syslog_RFC5424:
    PRI: 165
    FACILITY: 20
    PRIORITA: 5
    VERZE: 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: Aplikace:
        eventID: 1011
      ...

Vestavěný preprocesor Syslog RFC3164

funkce: lmiopar.preprocessor.Syslog_RFC3164

Toto je preprocesor pro BSD syslog protokol (starý) podle RFC3164.

Preprocesor Syslog RFC3164 lze konfigurovat v sekci define:

define:
  type: parser/preprocessor
  year: 1999
  časové pásmo: Evropa/Praha

year určuje číselnou reprezentaci roku, která bude použita na časovou značku protokolů. Můžete také zadat smart (výchozí) pro pokročilý výběr roku na základě měsíce.

timezone určuje časové pásmo protokolů, výchozí je UTC.

Vstupem pro tento preprocesor je platný záznam Syslogu, např:

<34>Oct 11 22:14:15 mymachine su[10]: 'su root' selhalo pro lonvick na /dev/pts/8

Výstupem je, zpráva část logu v události a rozebrané prvky v context.syslog_rfc3164.

událost: "``su root' selhalo pro lonvick na /dev/pts/8"

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

TAG a PID jsou nepovinné parametry.

Vestavěný preprocesor CEF

funkce: lmiopar.preprocessor.CEF

Toto je preprocesor pro CEF neboli Common Event Format.

define:
  typ: parser/preprocesor
  year: 1999
  časové pásmo: Evropa/Praha

year určuje číselnou reprezentaci roku, která bude použita na časovou značku protokolů. Můžete také zadat smart (výchozí) pro pokročilý výběr roku na základě měsíce.

timezone určuje časové pásmo protokolů, výchozí je UTC.

Vstupem pro tento preprocesor je platná položka CEF, např:

CEF:0|Výrobce|Produkt|Verze|foobar:1:2|Neúspěšné heslo|Medium| eventId=1234 app=ssh categorySignificance=/Informational/Warning categoryBehavior=/Authentication/Verify

Výstupem je část protokolu s hlášením v události a analyzované prvky v context.CEF:

context:
  CEF:
    Verze: 0
    DeviceVendor: Vendor
    DeviceProduct: Product
    DeviceVersion: Verze:
    DeviceEventClassID: "foobar:1:2
    Name: Název: Failed password
    Závažnost: Heslo: Střední

    EventId: '1234'
    aplikace: ssh
    categorySignificance: /Informational/Warning
    categoryBehavior: /Authentication/Verify

CEF může obsahovat také hlavičku Syslog. To je podporováno řetězením příslušného preprocesoru Syslog s preprocesorem CEF. Podrobnosti naleznete v kapitole o řetězení preprocesorů.

Vestavěný preprocesor pro formáty protokolu serveru Apache HTTP

Existují vysoce výkonné preprocesory pro běžné přístupové protokoly serveru Apache HTTP.

function: lmiopar.preprocessor.Apache_Common_Log_Format

Toto je preprocesor pro Apache Common Log Format.

funkce: lmiopar.preprocessor.Apache_Combined_Log_Format

Toto je preprocesor pro kombinovaný formát protokolu Apache.

Příklad společného protokolu Apache

Vstup:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

Výstup:

kontext:
  Apache_Access_Log:
    HOST: '127.0.0.1'
    IDENT: '-'
    USERID: "frank
    TIMESTAMP: '2000-10-10T20:55:36.000Z'
    METODA: "GET
    RESOURCE: "/apache_pb.gif
    PROTOKOL: "HTTP/1.0
    STATUS_CODE: 200
    DOWNLOAD_SIZE: 2326

Příklad kombinovaného protokolu Apache

Vstupní data:

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 [cs] (Win98; I ;Nav)"

Výstup:

kontext:
  Apache_Access_Log:
    HOST: '127.0.0.1'
    IDENT: '-'
    USERID: "frank
    TIMESTAMP: '2000-10-10T20:55:36.000Z'
    METODA: "GET
    RESOURCE: "/apache_pb.gif
    PROTOKOL: "HTTP/1.0
    STATUS_CODE: 200
    DOWNLOAD_SIZE: 2326
    REFERE": http://www.example.com/start.html
    USER_AGENT: Mozilla/4.08 [cs] (Win98; I ;Nav)

Vestavěný preprocesor Microsoft ULS

funkce: lmiopar.preprocessor.Microsoft_ULS

Toto je preprocesor pro Microsoft_ULS podle Microsoft Docs.

Pro protokoly Microsoft SharePoint ULS, které neobsahují název serveru ani korelační pole, je k dispozici speciální preprocesor:

lmiopar.preprocessor.Microsoft_ULS_Sharepoint`.

Preprocesor Microsoft SharePoint ULS lze nakonfigurovat v sekci define:

define:
  type: parser/preprocessor
  year: 1999
  časové pásmo: Evropa/Praha

year určuje číselnou reprezentaci roku, která bude použita na časovou značku protokolů. Můžete také zadat smart (výchozí) pro pokročilý výběr roku na základě měsíce.

timezone určuje časové pásmo protokolů, výchozí je UTC.

Vstupem pro tento preprocesor 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 = Chyba z webu SharePoint: WebExceptionStatus: Podkladové spojení bylo uzavřeno: hr = 90141214 [sts3util.cxx:6994] search\native\gather\protocols\sts3\sts3util.cxx 3aeca97a-a9db-4010-970e-fe01483bfd4f

Výstupem je část zprávy protokolu v události a analyzované prvky v context.Microsoft_ULS.

událost: Zpráva obsažená v protokolu.

context:
  Microsoft_ULS:
    ČASOVÉ RAZÍTKO 1619613117.69
    PROCES: mssdmn.exe (0x38E0)
    THREAD: 0x4D10
    PRODUCT: SharePoint Server Search
    KATEGORIE: Konektory:SharePoint
    EVENTID: dvt6
    ÚROVEŇ: Vysoká

Query String preprocesor

funkce: lmiopar.preprocessor.Query_String

Toto je preprocesor pro řetězec dotazu (key=value&key=value...), jako jsou metainformace z LogMan.io Collector.

Příklad vstupu:

file_name=log.log&amp;search=true

Výstupem je část logu v události a analyzované prvky v context.QUERY_STRING.

událost: Zpráva obsažená v protokolu.

context:
  QUERY_STRING:
    Název_souboru: log.log
    search: true

JSON vestavěný preprocesor

funkce: lmiopar.preprocessor.JSON

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

Vstupem pro tento preprocesor je tedy platný zápis JSON.

Vestavěný preprocesor XML

function: lmiopar.preprocessor.XML

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

Vstupem pro tento preprocesor je tedy platný záznam XML, 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>Systém</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>Certifikát přijatý ze vzdáleného serveru neobsahuje očekávaný název. Proto není možné určit, zda se připojujeme ke správnému serveru. Název serveru, který jsme očekávali, je localhost. Požadavek na připojení TLS se nezdařil. Přiložené údaje obsahují certifikát serveru.</Message>
      <Level>Chyba</Level>
      <Task />
      <Opcode>Informace</Opcode>
      <Channel>Systém</Channel>
      <Provider />
      <Keywords />
   </RenderingInfo>
</Event>

Výstup preprocesoru 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": "Certifikát přijatý ze vzdáleného serveru neobsahuje očekávaný název. Není proto možné určit, zda se připojujeme ke správnému serveru. Název serveru, který jsme očekávali, je localhost. Požadavek na připojení TLS se nezdařil. Přiložené údaje obsahují certifikát serveru.",
  "RenderingInfo.Level": "Error",
  "RenderingInfo.Opcode": "Info",
  "RenderingInfo.Channel": "System"
}

Vestavěný preprocesor CSV

funkce: lmiopar.preprocessor.CSV

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

Vstupem pro tento preprocesor je tedy platný záznam CSV, např:

user,last_name\njack,black\njohn,doe

Výstup preprocesoru v context["CSV"]:

{
  "lines": [
    {"user": "jack", "last_name": "black"},
    {"user": "john", "last_name": "doe"}
  ]
}

Parametry

V sekci define preprocesoru CSV, lze nastavit následující parametry pro čtení CSV:

oddělovač: (výchozí: ",")
escapechar: únikový znak
doublequote: povolí dvojité uvozovky (výchozí: true)
lineterminator: znak pro ukončení řádku, buď \n, nebo \r (výchozí je oddělovač řádků operačního systému)
quotechar: výchozí znak uvozovek (výchozí: "\"")
quoting: typ uvozovek
skipinitialspace: vynechá počáteční mezeru (výchozí: false)
strict: přísný režim (výchozí: false)

Vlastní preprocesory

Vlastní preprocesory lze volat z parseru, příslušný kód musí být přístupný mikroslužbě parseru běžným způsobem importu Pythonu.

---
define:
  název: Ukázka vlastního preprocesoru Pythonu.
  typ: parser/preprocesor

funkce: mypreprocessors.preprocessor

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

Parser určuje funkci, která se má zavolat. Používá se notace Pythonu a automaticky se provede import modulu.

Signatura funkce:

def preprocessor(context, event):
  ...
  return event

Preprocesor může (1) modifikovat událost (!EVENT) a/nebo (2) modifikovat kontext (!CONTEXT).

Výstup funkce preprocessor bude předán následnému parseru. Preprocesorový parser nevytváří přímo parsované události. Pokud funkce vrátí None, parsování eveny se tiše ukončí. Pokud funkce vyvolá výjimku, bude výjimka zaznamenána a událost bude předána do výstupu unparsed.

Řetězení preprocesorů

Preprocesory lze řetězit, aby bylo možné analyzovat složitější vstupní formáty. Výstup (neboli událost) prvního preprocesoru je přiveden jako vstup druhého preprocesoru (a tak dále).

Například vstupem je formát CEF se záhlavím Syslog RFC3164:

<14>Jan 28 05:51:33 connector-test CEF_PARSED_LOG: CEF:0|Výrobce|Produkt|Verze|foobar:1:2|Neúspěšné heslo|Medium| eventId=1234 app=ssh categorySignificance=/Informational/Warning categoryBehavior=/Authentication/Verify

Potrubí obsahuje dva preprocesory:

p01_parser.yaml:

---
define:
  název: Preprocesor pro část zprávy Syslog RFC5424
  type: parser/preprocessor
  nájemce: Syslog_RFC5424.STRUCTURED_DATA.soc@0.tenant

funkce: lmiopar.preprocessor.Syslog_RFC5424

p02_parser.yaml:

---
define:
  name: Preprocesor pro část zprávy CEF
  typ: parser/preprocesor

funkce: lmiopar.preprocessor.CEF

a finální parser p03_parser.yaml:

---
define:
  name: Finalizovat rozborem události do slovníku
  typ: parser/cascade

parse:
  !DICT
  set:
    Syslog_RFC5424: !ITEM CONTEXT Syslog_RFC5424
    CEF: !ITEM CONTEXT CEF
    Message: !EVENT

Příklad výstupu:

context:
  CEF:
    Verze: 0
    DeviceVendor: Vendor
    DeviceProduct: Product
    DeviceVersion: Verze:
    DeviceEventClassID: "foobar:1:2
    Name: Název: Failed password
    Závažnost: Heslo: Střední

    EventId: '1234'
    aplikace: ssh
    categorySignificance: /Informational/Warning
    categoryBehavior: /Authentication/Verify

  Syslog_RFC3164:
    PRI: 14
    FACILITY: 1
    PRIORITA: 6
    HOSTNAME: connector-test'
    TAG: CEF_PARSED_LOG
    TIMESTAMP': '2020-01-28T05:51:33.000Z'

  Zpráva: "Provedení: 1. Provedení: 2. Provedení: 3: ''

Vestavěný preprocesor Cisco ASA

funkce: lmiopar.preprocessor.CiscoASA

Warning

Tento preprocesor bude nahrazen parserem založeným na SP-Lang.