У меня есть 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 "-" "-"
Нотеперь я также должен транслировать логи из этого нового файла с разделителем |
.Я не могу понять, как мне написать сопоставитель шаблонов для этого.