我有一个由应用程序连续写的日志文件。该应用程序使用log4j进行日志记录。 我无法更改应用程序的log4j配置。
是否有任何java解析器可以读取application / log4j写入的日志,并且基于在应用程序中配置log4j的相同模式,是否可以检索日志中的字段?
有方法还是java解析器?
TQ, 马赫什
答案 0 :(得分:-1)
是的,有办法。您可以使用logstash在您需要的字段中解析日志文件。由于您没有包含日志格式的示例,因此我将向您展示logstash如何与日志一起使用的示例:
127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"
现在,logstash可以将其作为输入并将其解析为以下字段:
{
"message" => "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/status.php HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"",
"@timestamp" => "2013-12-11T08:01:45.000Z",
"@version" => "1",
"host" => "cadenza",
"clientip" => "127.0.0.1",
"ident" => "-",
"auth" => "-",
"timestamp" => "11/Dec/2013:00:01:45 -0800",
"verb" => "GET",
"request" => "/xampp/status.php",
"httpversion" => "1.1",
"response" => "200",
"bytes" => "3891",
"referrer" => "\"http://cadenza/xampp/navi.php\"",
"agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\""
}
您可以使用elasticsearch将此输出保存到文件或索引中,以便使用Kibana进行搜索和可视化数据。
Logstash使用grok过滤器将日志解析为字段和eben如果您的日志看起来不像这样,您可以使用grok过滤器将日志解析为您需要的字段。 Grok使用正则表达式在日志中查找模式,以便您可以编写自己的正则表达式以满足您的需要,或者您可以使用140个现有模式中的任何一个来匹配时间戳,IP地址,log4j调试级别等。 您需要做的就是创建一个在运行时加载logstash的配置文件, 像这样的东西:
input {
file {path => "path/to/logfile" }
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
stdout { codec => rubydebug }
}
这里%{COMBINEDAPACHELOG}是一个预先编写的正则表达式,它匹配apache服务器日志。您可以查看可用的模式或创建自己的模式。 Logstash,elasticsearch和kibana都是开源的。