我是LogStash的新手。我有一些从Log4J中的Java应用程序写入的日志。我正在尝试将这些日志存入ElasticSearch。对于我的生活,我似乎无法让它始终如一地工作。目前,我正在使用以下logstash配置:使用Log4J和LogStash
input {
file {
type => "log4j"
path => "/home/ubuntu/logs/application.log"
}
}
filter {
grok {
type => "log4j"
add_tag => [ "ApplicationName" ]
match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" ]
}
}
output {
elasticsearch {
protocol => "http"
codec => "plain"
host => "[myIpAddress]"
port => "[myPort]"
}
}
此配置似乎被击中或未命中。我不知道为什么。例如,我有两条消息。一个工作,另一个抛出解析失败。然而,我不知道为什么。以下是消息及其各自的结果:
Tags Message
------ -------
["_grokparsefailure"] 2014-04-04 20:14:11,613 TRACE c.g.w.MyJavaClass [pool-2-
thread-6] message was null from https://domain.com/id-1/env-
MethodName
["ApplicationName"] 2014-04-04 20:14:11,960 TRACE c.g.w.MyJavaClass [pool-2-
thread-4] message was null from https://domain.com/id-1/stable-
MethodName
的一个与[“应用程序名称”]有timestamp
和level
我的自定义字段。但是,使用[“_grokparsefailure”]的条目没有我的自定义字段。奇怪的是,日志几乎与上面的消息栏中显示的相同。这真令我困惑,但我不知道如何弄清楚问题是什么或如何超越它。有谁知道我怎么可以用进口的log4j登录到logstash并获得以下字段一致:
- 日志级别
- 时间戳
- 日志消息
- 机名称
- 螺纹
感谢您提供任何帮助。即使我只能记录日志级别,时间戳和日志消息,这也是一个巨大的帮助。我衷心感谢!
我看不出你神交模式永远匹配。你在%{LOGLEVEL:level}之前有两个空格“如果你必须处理可变数目的空格,用\ s +而不是空格来匹配一个或多个空格,并且在grok调试器上使用+1回答 – Alcanzar