elasticsearch 日志存储未在ES上以正确格式存储数据,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack" /> elasticsearch 日志存储未在ES上以正确格式存储数据,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack" />

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"

我的设置如下:

  • 应用程序正在一个文件中写入日志:file.json
  • 文件中的每一行都包含一条json记录,我想将其存储在ES索引中
  • 我已将logstash配置为从该文件读取数据并将数据存储在ES上
  • 但是logstash没有将完整的json记录作为源存储在ES中。而是将完整的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" ]
      }
    }