Файл журнала анализа, имеющий разделитель '|'изменение с использованием Pattern Matcher - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть 100s файла журнала, которые разделены alternation '|', похоже, это примерно с 17 полями в каждой строке -

23:55:58,727|10.29.2.6||unknown|||0|0|0|250|250|215||400|da79b7ee-1741-14a9-8d12-54ab3a911327|0|InvalidBucketName|,1
23:55:27,971|10.29.2.5||unknown|||0|0|0|250|250|283||400|da79b7d4-1741-14a9-8d12-54ab3a911327|0|InvalidBucketName|,1
23:56:04,381|10.1.198.46|splunk|getObject|splunk|splunk|160|0|200|697|1057|15669|dns%2Fdma%2Fa2%2Fb4%2F523%7EA4218FD9-A28C-4961-8AA3-173CBA3F3DE7%2F5C218CC9-77D3-4BBE-AD24-A5FB31CC56F2_DM_SplunkforPaloAltoNetworks_pan_traps%2Freceipt.json|200|da79b7f4-1741-14a9-8d12-54ab3a911327|a38b9d0d03b24b36cb38692f6f3c384a|0|,1
23:56:12,892|10.29.2.5||unknown|||0|0|0|250|250|238||400|da79b808-1741-14a9-8d12-54ab3a911327|0|InvalidBucketName|,1

Я работал над использованием сопоставителя шаблонов в Java / Scala следующим образом-

def apacheLogPattern():Pattern = {
    val ddd = "\\d{1,3}"                      
    val ip = s"($ddd\\.$ddd\\.$ddd\\.$ddd)?"  
    val client = "(\\S+)"                     
    val user = "(\\S+)"
    val dateTime = "(\\[.+?\\])"              
    val request = "\"(.*?)\""                 
    val status = "(\\d{3})"
    val bytes = "(\\S+)"                     
    val referer = "\"(.*?)\""
    val agent = "\"(.*?)\""
    val regex = s"$ip $client $user $dateTime $request $status $bytes $referer $agent"
    Pattern.compile(regex)    
  }

, который можно использовать здесь в моем коде scala -

import java.util.regex.Pattern
import java.util.regex.Matcher

val requests = lines.map(x => {val matcher:Matcher = pattern.matcher(x); if (matcher.matches()) matcher.group(5)})

И этот шаблон может анализировать файл журнала следующим образом -

54.165.199.171 - - [29/Nov/2015:04:32:27 +0000] "GET /post-sitemap.xml HTTP/1.0" 200 2502 "-" "W3 Total Cache/0.9.4.1"
54.165.199.171 - - [29/Nov/2015:04:32:27 +0000] "GET /page-sitemap.xml HTTP/1.0" 200 11462 "-" "W3 Total Cache/0.9.4.1"
54.165.199.171 - - [29/Nov/2015:04:32:27 +0000] "GET /category-sitemap.xml HTTP/1.0" 200 585 "-" "W3 Total Cache/0.9.4.1"
54.165.199.171 - - [29/Nov/2015:04:32:27 +0000] "GET /blog/ HTTP/1.0" 200 31746 "-" "-"
54.165.199.171 - - [29/Nov/2015:04:32:27 +0000] "GET /orlando-sports/ HTTP/1.0" 200 35510 "-" "-"

Нотеперь я также должен транслировать логи из этого нового файла с разделителем |.Я не могу понять, как мне написать сопоставитель шаблонов для этого.

...