2014-02-23 37 views
1

我正在使用Logstash將來自Tomcat訪問日誌的日誌輸出到elasticsearch。 我使用的模式如下:Elasticsearch不理解Logstash類型

grok { 
    type => "access_log" 
    pattern => "\[%{DATA:my_timestamp}\] %{IP:client} %{WORD:method} %{URIPATHPARAM:request} \[%{DATA:auth_data}\] \[%{DATA:another_timstamp}\] %{NUMBER:result_code} %{NUMBER:duration} %{NUMBER:bytes}" 
    } 

當你場期間我們格式化爲NUMBER上面看到的。

登錄時elasticsearch的信息,並通過鍍鉻感插件做一個REST查詢,如下所示:

GET /_all/_mapping?pretty=1 

它識別領域,但與String類型如下:

"duration": { 
       "type": "multi_field", 
       "fields": { 
        "duration": { 
        "type": "***string***", 
        "omit_norms": true 
        }, 
        "raw": { 
        "type": "string", 
        "index": "not_analyzed", 
        "omit_norms": true, 
        "index_options": "docs", 
        "include_in_all": false, 
        "ignore_above": 256 
        } 
       } 
      } 

我期望它把它理解爲一個數字。這是預期的嗎?

例如geoip等其他字段被理解爲與字符串不同的類型。

"geoip": { 
       "dynamic": "true", 
       "properties": { 
        "location": { 
        "type": "geo_point" 
        } 
       } 
      }, 

THX提前

回答

2

你好我幾乎可以肯定日誌藏匿發送的一切作爲一個字符串。所以如果字段的值是以字符串的形式提供的(意思是用「。」括起來,那麼elasticsearch會將它作爲一個字符串)默認情況下,logstash創建一個模板映射,它爲所有字符串類型創建原始字段。所以如果你想成爲一個數字,創建你自己的定製映射與訂單2,並添加爲特定的字段持續時間配置是一個數字類型:「長」

默認的logstash映射可以是這裏找到: https://github.com/elasticsearch/logstash/blob/master/lib/logstash/outputs/elasticsearch/elasticsearch-template.json

創建您的自定義映射關係不硬,你可以在這裏找到一個例子: http://blog.trifork.com/2014/01/28/using-logstash-elasticsearch-and-kibana-to-monitor-your-video-card-a-tutorial/

+0

Thx。您提供的方向非常有幫助,並將我帶入解決方案。 –

+0

@ isaac.hazan所以我有同樣的問題,你的評論導致我認爲這不是直接的答案? – stedotmartin

+0

是的,爲了使這項工作,我必須在elasticsearch中定義索引的類型如下:「evtTime」:{「type」:「date」,「format」:「dd/MMM/yyyy:HH:mm:ss」 }, –

相關問題