我使用Logstash转发器从远程服务器接收Log4j生成的日志文件。日志事件包含字段,包括名为“file”的字段,格式为/tomcat/logs/app.log,/tomcat/logs/app.log.1等。当然,文件路径/ tomcat / logs位于远程计算机上我希望Logstash只使用文件名在本地文件系统上创建文件,而不是使用远程文件路径。
在本地,我想基于文件名app.log,app.log.1等创建一个文件。如何实现这一目标?
我无法使用grok,因为它似乎仅适用于“message”字段,而不适用于其他字段。
示例日志事件:
{“message”:[“2014年9月11日16:29:04,934 INFO日志消息详情在这里”],“@ version”:“1”,“@ timestamp”:“2014-09-15T05:44:43.472 Z”, “文件”:[ “/ Tomcat的/日志/ app.log.1”], “宿主”: “AUS-002157”, “偏移量”: “3116”, “类型”: “app.log”}
Logstash配置 - 我如何使用它来编写过滤器部分?
input {
lumberjack {
port => 48080
ssl_certificate => "/tools/LogStash/logstash-1.4.2/ssl/logstash.crt"
ssl_key => "/tools/LogStash/logstash-1.4.2/ssl/logstash.key"
}
}
filter{
}
output {
file{
#message_format => "%{message}"
flush_interval => 0
path => "/tmp/%{host}.%{type}.%{filename}"
max_size => "4M"
}
}
答案 0 :(得分:3)
计算出如下模式:
grok{
match => [ "file", "^(/.*/)(?<filename>(.*))$" ]
}
感谢您的帮助!
答案 1 :(得分:2)
Logstash Grok可以解析日志事件中的所有字段,而不仅仅是message
字段。
例如,您想要提取file
字段,
你可以这样做
filter {
grok {
match => [ "file", "your pattern" ]
}
}