elasticsearch Logstash logback编码器、Logstash转发器和Logstash,elasticsearch,logstash,logstash-forwarder,logstash-logback-encoder,elasticsearch,Logstash,Logstash Forwarder,Logstash Logback Encoder" /> elasticsearch Logstash logback编码器、Logstash转发器和Logstash,elasticsearch,logstash,logstash-forwarder,logstash-logback-encoder,elasticsearch,Logstash,Logstash Forwarder,Logstash Logback Encoder" />

elasticsearch Logstash logback编码器、Logstash转发器和Logstash

elasticsearch Logstash logback编码器、Logstash转发器和Logstash,elasticsearch,logstash,logstash-forwarder,logstash-logback-encoder,elasticsearch,Logstash,Logstash Forwarder,Logstash Logback Encoder,根据建议,我设置了logstash编码器+logstash转发器,将所有内容推送到我的logstash deamon,并最终在ElasticSearch中为所有内容编制索引 以下是我的配置: logstash.xml logstash.conf input { lumberjack { port => 5043 ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder/logstas

根据建议,我设置了logstash编码器+logstash转发器,将所有内容推送到我的logstash deamon,并最终在ElasticSearch中为所有内容编制索引

以下是我的配置:

logstash.xml

logstash.conf

input {
    lumberjack {
        port => 5043

        ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder/logstash-forwarder.crt"
        ssl_key => "/etc/pki/tls/private/logstash-forwarder/logstash-forwarder.key"
    }
}

output {
    elasticsearch { host => "localhost" }
}
一切正常,日志保存在ElasticSearch中

此时,我希望能够指定ElasticSearch要索引的其他字段,例如实例日志级别。在@message内容中搜索是否存在错误或警告并没有多大用处


我该怎么做?我应该改变哪种配置以使级别在ElasticSearch中显示为索引字段?

您正在寻找的是一个日志存储过滤器,它将在索引器上用作输入和输出节的对等点

有很多过滤器(请参阅),但您可以使用它们将regexp应用于消息字段并提取日志级别

您没有包含示例消息,但是,给定一个类似“foo 123 bar”的字符串,此模式会将“123”提取到一个名为loglevel的整数字段中:

grok {
    match => ["message", "foo %{NUMBER:loglevel:int} bar"]
}
关于在网络上编写grok模式,有相当多的信息。试试看


您可以使用'add_tag'或'add_field'指定一个特殊字段

感谢您指出这一点,事实证明有更好的解决方案,因为logstash logback编码器已经将日志转换为JSON格式,您只需添加JSON过滤器{JSON{source=>“message”}这使得您的整个JSON日志被输出的所有字段索引。
input {
    lumberjack {
        port => 5043

        ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder/logstash-forwarder.crt"
        ssl_key => "/etc/pki/tls/private/logstash-forwarder/logstash-forwarder.key"
    }
}

output {
    elasticsearch { host => "localhost" }
}
grok {
    match => ["message", "foo %{NUMBER:loglevel:int} bar"]
}
logstash config file:
input {
  file {
    path =>  [ "/tmp/web.log" ]
  }
}
filter {
    grok {
        match => [ "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:severity} %{GREEDYDATA:message}" ]
       }
    }
output {
    elasticsearch {
        host => "127.0.0.1"
        index => "web-%{+YYYY.MM.dd}"
    }
}