[英]Logstash output to ElasticSearch With Valid Types
ELK Stack已成功設置。
使用grokdebug.herokuapp.com
我的怪癖模式也有效,並被轉儲到ElasticSearch中
filter {
if [type] == "some_log" {
grok {
match => { "message" => '%{WORD:word_1} %{TIME:time_1} %{DATE:date_1} %{NUMBER:number_1}'
}
overwrite => "message"
}
}
}
輸入的此grok解析是完全正確的。
和輸出是
output {
elasticsearch {
protocol => "http"
}
}
問題是所有轉儲的變量都是字符串類型。
如何使它們登錄到ElasticSearch中的相應類型(正確的映射類型)
time_1,date_1和number_1的類型相同
"time_1":{
"type":"string",
"norms":{
"enabled":false
},
"fields":{
"raw":{
"type":"string",
"index":"not_analyzed",
"ignore_above":256
}
}
}
我希望在彈性搜索中將date_1索引為“日期類型”,將number_1索引為“數字類型”。
PS:有可能這樣做嗎? 從Logstash確定Elasticsearch字段的類型。
或-如何將具有正確類型的字段發送到ElasticSearch。
謝謝
您可以嘗試使用ruby
插件轉換所有字段。 在此示例中,我們將time_1
和date_1
組合在一起,並將它們轉換為Date
格式。
input {
stdin{}
}
filter {
grok {
match => [ "message" , "%{WORD:word_1} %{TIME:time_1} %{DATE:date_1} %{NUMBER:number_1}"]
overwrite => "message"
}
ruby {
code => "
datetime = event['time_1'] + ' ' + event['date_1']
event['datetime'] = Time.strptime(datetime,'%H:%M:%S %d-%m-%Y')
event['number_1'] = event['number_1'].to_i
"
}
}
output {
stdout { codec => rubydebug }
}
如果您還有其他類型需要轉換,可以嘗試找到ruby api進行轉換。 希望這可以幫到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.