Logstash - Elesticsearch - Kibana:将日志存储在tcp-input上并在Kibana中显示

时间:2015-03-12 13:48:01

标签: elasticsearch logstash kibana-4

我正在尝试设置logstash,elasicsearch和Kibana来实现日志的可视化。 日志应该通过TCP发送到logstash,过滤,输出到ES-index,然后显示在kibana中。

我发送给logstash的消息:

msg_to_tcp="id=1324 type=error name=system_name"
  

logstash.conf:

input{
   tcp {
      host => localhost
      port => 55555
     }
}
filter {
   kv {} 
   mutate {
      convert => ["id" , "integer"]
   }
}
output {
   elasticsearch {
       host => localhost
       port => 9200
    } 
}
  

用法:logstash 1.4.2,elasticsearch 1.4.4和kibana 4

不幸的是,将id转换为整数不起作用。 Kibana告诉我它仍然是一个字符串。

我还尝试在kibana中使用“脚本过滤器”,它只会导致错误。

Integer.parseInt(doc["id"].value)

有人可以帮助我将“id”转换为整数吗?

2 个答案:

答案 0 :(得分:3)

  • 从elasticsearch中删除现有索引并创建具有正确映射的新索引,即,如果您希望id为整数,则在创建索引时将id列数据类型创建为整数。

    PUT indexname
    {
     "mappings": {
         "mappingname": {
            "properties": {
            "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }   
    
            }
         }
      }
    
    }
    
  • 然后为logstash创建grok过滤器,以如下标识字段值

    input{
    tcp {
          host => localhost
          port => 55555
         }
    }
    filter {
       grok {
                match => {
                    "message" => "id=%{NUMBER:id}\s*type=%{WORD:type}\s*name=%{WORD:name}"
                }
    
            }
    }
    output {
       elasticsearch {
           host => localhost
           port => 9200
        } 
    }
    

现在尝试上面的解决方案,我希望它能起作用!

答案 1 :(得分:0)

在进行此更改之前,您是否删除了任何已存在的索引?如果不是,则无法更改ElasticSearch索引使用的模板,并且包括每个字段的类型。相反,您必须创建一个新索引并将数据填充到其中。如果要使用相同的索引名称,则需要先删除现有索引。