2016-05-23 64 views
0

我的問題是我創建了logstash模式(wchich是正確的),我想通過elasticsearch發送給kibana。一切都應該正常工作,但kibana無法檢測到任何模式(無法獲取映射)。kibana沒有看到任何模式

這裏是我的logstash.conf:

input { 
    udp { 
    port => 1514 
    type => docker 
    } 
} 

filter { 


    grok { 
    match => { 
       "message" => "<%{NUMBER}>%{DATA}(?:\s+)%{DATA:hostname}(?:\s+)%{DATA:imageName}(?:\s+)%{DATA:containerName}(?:\s+\[%{NUMBER}\]:\s+)(?:%{NUMBER:logCode}?(?:\s*)\[(?<logDate>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}T%{HOUR}:%{MINUTE}:%{SECOND}Z)\] %{LOGLEVEL:logLevel}(?:\s*); %{DATA:logAdditionalInfo};)?%{GREEDYDATA:logMsg}" 
      } 
     keep_empty_captures => false 
     remove_field => ["message"] 
    } 

    #check if logCode was matched, if not then add a logCode = 0 
    if [logCode] !~ /.+/ { 
     mutate { 
     add_field => { "logCode" => "0"} 
    } 
    } 
} 

output { 
     elasticsearch { } 
    } 

任何想法我怎麼能解決這個問題?

+0

你能描述一下你的問題嗎?所以你的Grok模式工作正常,但你究竟想用Kibana做什麼?您應該可以搜索Grok製作的任何提取的字段。 – Chro

回答

0

感謝您的回覆。

好吧我會盡力描述我的問題,我可以做到最好。

我已經創建了我的配置文件(logstash.conf)。我安裝了elasticsearch和kibana來處理日誌,但是運行logstash之後kibana沒有收到任何消息,所以kibana無法獲取任何映射。

我甚至嘗試處理簡單的日誌,看看是否一切正常,所以我用命令:

/opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => localhost } stdout { codec => rubydebug } } 

,所以我可以將日誌發送到elasticsearch,看看輸出是否正確。

從命令行一切都看起來不錯:

hello world 
{ 
     "message" => "hello world", 
     "@version" => "1", 
    "@timestamp" => "2016-05-27T08:37:29.365Z", 
      "host" => "tm" 
} 

,但有一個在elasticsearch沒有輸出(http://localhost:9200/_search?pretty不看我的日誌)。

我不知道有什麼問題,因爲我已經從教程(逐步)安裝了logstash,elasticsearch和kibana。

好吧,我不知道發生了什麼,但它現在正在與標準輸入:

"_index" : "logstash-2016.05.27", 
     "_type" : "logs", 
     "_id" : "AVTyGOQ718zRCPMUwWXj", 
     "_score" : 1.0, 
     "_source" : { 
     "message" : "hey hey hey world", 
     "@version" : "1", 
     "@timestamp" : "2016-05-27T12:03:17.409Z", 
     "host" : "tm" 

但使用了從/etc/logstash/conf.d/ conf下logstash不工作(configtest是確定) 。這裏是我的新的logstash.conf文件:

input { 
      file { 
       path => "filepath" 
       start_position => "beginning" 
       codec => multiline { 
        pattern => "^~" 
        negate => true 
        what => previous 
       } 
      } 
     } 

    filter { 
     mutate { 
      gsub => [ "message", "\r", "" ] 
     } 

     grok { 
      match => { "message" => "(?m)~%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:severity} %{GREEDYDATA:message}" } 
      overwrite => [ "message" ] 
     } 

     date { 
      match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,SSS" ] 
     } 
    } 

output { 
     elasticsearch { 
      hosts => ["localhost"] 
      index => "logs-%{{+YYYY.MM.dd}}" 
      flush_size => 5 
     } 
    } 

您是否看到一些清楚說明爲什麼elasticsearch不會收到任何信息?

相關問題