将JSON文件导入Logstash + Elasticsearch + Kibana

时间:2014-09-22 15:10:06

标签: json logging elasticsearch logstash kibana

因此,我有一个Web平台,每个请求都会打印一个JSON文件,其中包含有关该请求的一些日志数据。我可以配置几个关于何时记录内容的规则,仅限于某些级别等...

现在,我一直在玩Logstash + Elasticsearch + Kibana3堆栈,我很想找到一种在Kibana中查看这些日志的方法。我的问题是,有没有办法让Logstash导入这些类型的文件,还是我必须为它编写自定义输入插件?我一直在寻找和看到我所看到的,插件是用Ruby编写的,这是一种我没有经验的语言。

3 个答案:

答案 0 :(得分:17)

Logstash是处理动态文件的非常好的工具。

以下是使用logstash将json文件导入elasticsearch的方法:

配置文件:

input 
{
    file 
    {
        path => ["/path/to/json/file"]
        start_position => "beginning"
        sincedb_path => "/dev/null"
        exclude => "*.gz"
    }
}

filter 
{
    mutate
    {
        replace => [ "message", "%{message}" ]
        gsub => [ 'message','\n','']
    }
    if [message] =~ /^{.*}$/
    {
        json { source => message }
    }

}

output
{ 
  elasticsearch {
    protocol => "http"
    codec => json
    host => "localhost"
    index => "json"
    embedded => true
  }

    stdout { codec => rubydebug }
}

json文件的例子:

{"foo":"bar", "bar": "foo"}
{"hello":"world", "goodnight": "moon"}

注意json需要在一行中。如果要解析多行json文件,请替换配置文件中的相关字段:

   input 
{   
    file 
    {
        codec => multiline
        {
            pattern => '^\{'
            negate => true
            what => previous                
        }
        path => ["/opt/mount/ELK/json/*.json"]
        start_position => "beginning"
        sincedb_path => "/dev/null"
        exclude => "*.gz"
    }
}

filter 
{
    mutate
    {
        replace => [ "message", "%{message}}" ]
        gsub => [ 'message','\n','']
    }
    if [message] =~ /^{.*}$/ 
    {
        json { source => message }
    }

}

答案 1 :(得分:12)

Logstash只是一种工具,用于将各种syslog文件转换为JSON并将它们加载到elasticsearch(或graphite,或......)中。

由于您的文件已经使用JSON,因此您不需要使用logstash。您可以使用curl将它们直接上传到elasticsearch。

请参阅Import/Index a JSON file into Elasticsearch

但是,为了与Kibana一起使用,您的JSON文件需要最少。

  1. Flat - Kibana不会嵌套嵌套的JSON结构。您需要一个简单的键/值对散列。

  2. 有可识别的时间戳。

  3. 我建议查看JSON文件的logstash输出,看看是否可以按摩JSON文件以匹配该结构。你可以用任何语言做到这一点 像那样支持JSON。程序jq非常便于将json从一种格式过滤到另一种格式。

    Logstash格式 - https://gist.github.com/jordansissel/2996677

    jq - http://stedolan.github.io/jq/

答案 2 :(得分:1)

Logstash可以导入不同的格式和来源,因为它提供了大量的插件。还有其他日志收集器和转发器工具可以将日志发送到logstash,例如nxlog,rsyslog,syslog-ng,flume,kafka,流利等。从我听到的大多数人使用nxlog windows(虽然它在linux上运行得很好)与ELK堆栈结合使用,因为它的资源占用空间很小。 (免责声明:我是该项目的附属机构)