Logstash/Elasticsearch CSV字段类型,日期格式和多字段(.raw)
我一直在使用Logstash中的CSV筛选器来获取制表符分隔文件到Elasticsearch中。获取数据实际上非常简单,但是当我查看Kibana中的数据时,我无法使字段类型正确显示。日期和整数继续以字符串形式出现,所以我无法按日期进行绘图或对整数(总和,平均值等)执行任何分析函数。Logstash/Elasticsearch CSV字段类型,日期格式和多字段(.raw)
我也无法获得.raw版本的字段填充。例如,在设备中,我有“HTC One”等数据,但是如果我在Kibana中做了饼图,它将显示为两个单独的分组“HTC”和“One”。当我尝试绘制device.raw时,它会出现一个缺失的字段。从我读过的内容看来,Logstash似乎应该自动创建每个字符串字段的原始版本,但似乎并没有发生。
我一直在浏览文档,谷歌和堆栈,但还没有找到解决方案。任何想法赞赏!谢谢。
配置文件:
#logstash.conf
input {
file {
path => "file.txt"
type => "event"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
columns => ["userid","date","distance","device"]
separator => " "
}
}
output {
elasticsearch {
action => "index"
host => "localhost"
port => "9200"
protocol => "http"
index => "userid"
workers => 2
template => template.json
}
#stdout {
# codec => rubydebug
#}
}
这里的模板文件:
#template.json:
{
"template": "event",
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 0,
"index" : {
"query" : { "default_field" : "userid" }
}
},
"mappings": {
"_default_": {
"_all": { "enabled": false },
"_source": { "compress": true },
"dynamic_templates": [
{
"string_template" : {
"match" : "*",
"mapping": { "type": "string", "index": "not_analyzed" },
"match_mapping_type" : "string"
}
}
],
"properties" : {
"date" : { "type" : "date", "format": "yyyy-MM-dd HH:mm:ss"},
"device" : { "type" : "string", "fields": {"raw": {"type": "string","index": "not_analyzed"}}},
"distance" : { "type" : "integer"}
}
}
}
想通了 - 模板名称是索引。所以“模板”:“事件”行应该是“模板”:“用户标识”
我发现了另一种(更简单)的方式来指定字段的类型。您可以使用logstash的mutate过滤器来更改字段的类型。只需将您的CSV过滤器后添加以下过滤器,以你的logstash配置
mutate {
convert => [ "fieldname", "integer" ]
}
还有一个csv过滤器的“转换”属性,但它不适用于我。任何想法,为什么,@markus? – 2016-08-03 11:04:32
@DmitriLikhachev对不起,但我还没有使用过。 – markus 2016-08-04 07:59:23
的“模板”,在模板的根属性实际上是一个模式,因此“用户*”将匹配以“用户”一词开头的任何索引。当您将其张贴到elasticsearch时,会给出该模板的名称。文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-templates.html – 2015-03-02 16:49:31
@econgineer我也(未成功地)试图将csv过滤器的列转换为某些类型,例如而不是字符串到一个整数。你有没有碰运气? – markus 2015-03-02 17:02:59
@markus,就像我说的,上面的工作一旦我确定“template”属性被标记为与我在logstash.conf文件中定义的索引名称相同。 – econgineer 2015-03-03 08:23:04