我正在尝试设置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”转换为整数吗?
答案 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索引使用的模板,并且包括每个字段的类型。相反,您必须创建一个新索引并将数据填充到其中。如果要使用相同的索引名称,则需要先删除现有索引。