日志存储。按职位编号获取字段
Logstash. Get fields by position number
背景
我有这样的方案:来自我的应用程序的日志通过 rsyslog 到中央日志服务器,然后到 Logstash 和 Elasticsearch。
来自应用程序的日志是纯 JSON,但 rsyslog 添加到日志 "timestamp"、"app name" 和 "server name" 文件。日志变成这样:
timestamp app-name server-name [JSON]
问题
如何使用 Logstash 过滤器删除前三个字段?
我可以按位置编号获取字段(就像在 awk 中一样)并执行以下操作:
filter {
somefilter_name {
remove_field => , ,
}
}
或者我的想法完全错误,我必须换一种方式来做?
谢谢!
使用 grok{} 来匹配它们(它们本身可能很有用!)并将事件的其余部分放回 [message] 字段中:
输入如下:
2015-06-16 13:37:30 myApp myServer { "jsonField": "jsonValue" }
而这个配置:
grok {
pattern => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:app} %{WORD:server} %{GREEDYDATA:message}"
overwrite => [ "message" ]
}
json {
source => "message"
}
将生成此文档:
{
"message" => "{ \"jsonField\": \"jsonValue\" }",
"@version" => "1",
"@timestamp" => "2015-06-16T20:38:55.658Z",
"host" => "0.0.0.0",
"timestamp" => "2015-06-16 13:37:30",
"app" => "myApp",
"server" => "myServer",
"jsonField" => "jsonValue"
}
背景
我有这样的方案:来自我的应用程序的日志通过 rsyslog 到中央日志服务器,然后到 Logstash 和 Elasticsearch。 来自应用程序的日志是纯 JSON,但 rsyslog 添加到日志 "timestamp"、"app name" 和 "server name" 文件。日志变成这样:
timestamp app-name server-name [JSON]
问题
如何使用 Logstash 过滤器删除前三个字段? 我可以按位置编号获取字段(就像在 awk 中一样)并执行以下操作:
filter {
somefilter_name {
remove_field => , ,
}
}
或者我的想法完全错误,我必须换一种方式来做?
谢谢!
使用 grok{} 来匹配它们(它们本身可能很有用!)并将事件的其余部分放回 [message] 字段中:
输入如下:
2015-06-16 13:37:30 myApp myServer { "jsonField": "jsonValue" }
而这个配置:
grok {
pattern => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:app} %{WORD:server} %{GREEDYDATA:message}"
overwrite => [ "message" ]
}
json {
source => "message"
}
将生成此文档:
{
"message" => "{ \"jsonField\": \"jsonValue\" }",
"@version" => "1",
"@timestamp" => "2015-06-16T20:38:55.658Z",
"host" => "0.0.0.0",
"timestamp" => "2015-06-16 13:37:30",
"app" => "myApp",
"server" => "myServer",
"jsonField" => "jsonValue"
}