PDF

Wyrażenia parsujące tekst

Zadaniem wyrażeń parsujących jest dostarczenie listy nazwanych wartości (par klucz-wartość) dla danego tekstu. Pola te umożliwiają późniejsze filtrowanie wiadomości, a także mogą być użyte jako liczniki lub obiekty statusu. Każde wyrażenie wymaga zadeklarowania listy zmiennych, które zostaną zwrócone przez wyrażenie.

Wartości oddzielone przecinkiem

Prawdopodobnie jest to najprostszy format do parsowania. Nazwy zmiennych opisują każdą kolumnę, a domyślnym separatorem jest przecinek.

Przykład parsowania danych CSV

Pary klucz wartość

Ten format jest przydatny, gdy dane są zakodowane jako serie par klucz-wartość oddzielone jednym dodatkowym separatorem. Na przykład:

          from:John;val:10

W tym przypadku Separatorem par będzie ; a separatorem wartości :

innym przykładem będzie kodowanie ini*:

        speed=10
        acceleration=0

W tym przypadku Separatorem Par będzie \n a separatorem wartości =

Wyrażenia regularne

Wyrażenia regularne mogą być szeroko wykorzystane i są bardzo przydatne w dopasowywaniu wzorców. NetCrunch używa implementacji JavaScript wyrażenia regularnego i dopasowuje zmienną według kolejności pasujących grup.

Przykład - format dziennika Log4J

Utworzyliśmy wzorzec regexp dla popularnego formatu Log4J.

      (\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2},\d{3}) \[(.*?)\] ([^ ]*) +([^ ]*) - (.*)$          

któremu przypisaliśmy następujące zmienna (pola)

  • Data (Date)
  • Czas (Time)
  • Wątek (Thread)
  • Ważność (Severity)
  • Moduł (Module)
  • Komunikat (Message)

Standardowy format dziennika Apache

Pozwala na dekodowanie wpisów Apache używających formatu Common Log Format. Wszystko, czego potrzebujesz, to podanie formatu używanego do konfiguracji danego dziennika.

Common Log Format

Więcej informacji w dokumentacji Apache

Selektory XPath/DOM

NetCrunch obsługuje ścieżki XML do pobierania danych z XML. Obsługiwane są tylko ścieżki zwracające pojedyncze wartości.

Przykład
     <doc>
         <amount>10.2</amount>
         <user name="John" id="123"/>
     </doc>

Możemy wyciągnąć wszystkie zmienne za pomocą następujących ścieżek:

  • /doc/amount
  • //user/@name
  • //user/@id
Selektory warunkowe

Możesz wybrać atrybut elementu, wybierając element węzła za pomocą innego atrybutu. W naszym przykładzie możemy uzyskać nazwę użytkownika, wybierając element według jego identyfikatora.

  //doc/user[@id='123']/@name
Slektory DOM

Wyrażenie XPath obsługuje również selektory DOM (inaczej selektory CSS). Można ich używać do wybierania wartości węzłów. Jeśli jednak potrzebujesz wartości atrybutu, nie ma możliwości określenia tego za pomocą standardowego selektora CSS. Dlatego rozszerzyliśmy składnię, dodając znak '|' , po którym można dodać nazwę atrybutu.

Tak więc poniższa ścieżka da taki sam wynik, jak powyższe XPath.

  • doc > amount
  • user|name
  • user|id

Przykład XPath

JSON Path

NetCrunch obsługuje ścieżki JSON Path do pobierania danych z JSON. Obsługiwane są tylko ścieżki zwracające pojedyncze wartości.

Przykład
   {
     "doc"  :  {
     "amount": 22,
     "user" :  {
        "name" : "John",
        "id" : 100
     }
   }
}

Możemy wyciągnąć wszystkie zmienne za pomocą następujących ścieżek:

  • $.doc.amount
  • $..user.name
  • $..user.id
Przykład JSON path

Javascript

JavaScript wydaje się najlepszym rozwiązaniem do wyciągania danych, ponieważ możesz używać wyrażeń regularnych i wszystkich możliwości silnika JavaScript (V8) implementującego najnowszy standard językowy. Twój skrypt jest uruchamiany w trybie ścisłym (strict mode) w oddzielnym i 'sandboxowanym' silniku NodeJS i jest zabijany, jeśli przekroczy limit czasowy.

Wejście (Input)

Dane wejściowe skrypti znajdują się w zmiennej text. #### Wynik (The Output) W wyniku działania skryptu NetCrunch oczekuje, że zmienna

Wynik (The Output)

W wyniku działania skryptu NetCrunch oczekuje, że zmienna result będzie obiektem o właściwościach pasujących do zadeklarowanych zmiennych (pól).

Przykład

Wyobraźmy sobie, że otrzymujemy wiadomość e-mail zawierającą JSON. Użycie JavaScriptu do wyodrębniania potrzebnych danych będzie bardzo proste,

Test Text
          {
              "probe_1" : {
                    "temp" : 10 
              }
         }    
Zmienne
  • temperature
Skrypt
          const data = JSON.parse(text);
          result = {
             temperature : data.probe_1.temp                     
          }

domemailexpressionjsonpathlogparsingselectortexttext logxpath