簡體   English   中英

將Logstash輸出到具有有效類型的ElasticSearch

[英]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。

謝謝

在您的grok模式中,使用%{PATTERN:field:datatype}形式將捕獲的字段轉換為字符串以外的其他內容。 有效的數據類型為“ int”和“ float”。 在您的情況下,您可以使用%{NUMBER:number_1:int}將number_1字段轉換為整數。

請參閱Grok基礎知識下的grok過濾器文檔

另一個選擇是使用mutate過濾器來轉換現有字段的類型:

mutate {
  convert => ["name-of-field", "integer"]
}

有關:

您可以嘗試使用ruby插件轉換所有字段。 在此示例中,我們將time_1date_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM