elasticsearch 日志存储未在ES上以正确格式存储数据
我的设置如下:
elasticsearch 日志存储未在ES上以正确格式存储数据,
elasticsearch,logstash,elastic-stack,
elasticsearch,Logstash,Elastic Stack,我的设置如下: 应用程序正在一个文件中写入日志:file.json 文件中的每一行都包含一条json记录,我想将其存储在ES索引中 我已将logstash配置为从该文件读取数据并将数据存储在ES上 但是logstash没有将完整的json记录作为源存储在ES中。而是将完整的json放在一个字段中。 更多详细信息: 日志存储配置: input { file { type => "json" path => "file.json"
input {
file {
type => "json"
path => "file.json"
start_position => beginning
}
}
output {
elasticsearch {
hosts => [ "10.1.1.1:9200" ]
index => "index-name"
}
}
file.json:
{"name":"John", "age":31, "city":"Abc"}
存储在ES中的记录:
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "index_name",
"_type" : "doc",
"_id" : "eHD8KGUBy7HkgIAhGQln",
"_score" : 1.0,
"_source" : {
"type" : "json",
"host" : "qa-box",
"@version" : "1",
"message" : "{name:John,age:31,city:Abc}",
"@timestamp" : "2018-08-11T12:35:34.184Z",
"path" : "file.json"
}
}
]
}
我认为您需要一个过滤器将其视为JSON:
input {
file {
type => "json"
path => "file.json"
start_position => beginning
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => [ "10.1.1.1:9200" ]
index => "index-name"
}
}
默认情况下,Logstash将输入视为纯文本,并将其存储在
消息
字段中。
您应该使用@dwjv所说的json
过滤器
另外,如果您想删除原始的消息
字段(并且您可能想删除由日志存储生成的额外字段,如路径
和主机
),您也可以使用mutate
过滤器,如下所示:
filter {
json {
source => "message"
}
mutate {
remove_field => [ "message", "path", "host" ]
}
}