Logstash從kafka獲取數(shù)據(jù)寫入ES失敗

背景
搭建好了6.2.4版本的ELK集群,從另外一個kafka集群中獲取topic中的數(shù)據(jù),寫入到ES中,出現(xiàn)了兩個問題,第一:從kafka集群獲取數(shù)據(jù)失??;第二:能夠獲取到數(shù)據(jù),但是寫入ES,一直報錯如下:

Attempted to send a bulk request to Elasticsearch configured at '["http://localhost:9200/"]', but an error occurred and it failed! Are you sure you can reach elasticsearch from this machine using the configuration provided? {:error_message=>"[406] {"error":"Content-Type header [text/plain; charset=ISO-8859-1] is not supported","status":406}", :error_class=>"Elasticsearch::Transport::Transport::Errors::NotAcceptable"

分析

問題1:從kafka集群獲取數(shù)據(jù)失敗
現(xiàn)象是:logstash啟動成功,控制臺沒有打印message的日志,去Kibana上查看index,發(fā)現(xiàn)index也沒有創(chuàng)建成功。排查方式如下:

  • 配置項是參考kafka-input-plugin對應(yīng)版本配置的,check了下,沒有錯。
  • 輸出改為控制臺輸出,仍沒有數(shù)據(jù),說明和ES無關(guān)。
  • 修改bootstrap_servers從另外一個kafka集群獲取數(shù)據(jù),發(fā)現(xiàn)能夠正常獲取數(shù)據(jù),說明kafka兼容性問題。
  • logstash查看插件版本 ./bin/logstash-plugin list --verbose,發(fā)現(xiàn)內(nèi)嵌的kafka插件是logstash-input-kafka (8.0.6) ,對應(yīng)的客戶端是1.0.0;而kafka集群的版本為0.9.0.1。<u>https://www.elastic.co/guide/en/logstash-versioned-plugins/current/v8.0.2-plugins-inputs-kafka.html</u>
    logstash官網(wǎng)很明確的說明了,對于0.9的kafka集群,是不兼容的,因此沒法獲取到數(shù)據(jù)
    image.png

<<既然是kafka插件不兼容的問題,查看了官網(wǎng),支持0.9的,下載了logstash2.4版本安裝,配置如下>>

input {
     kafka {
        zk_connect => "datastream0.lt.org:2181,datastream1.lt.org:2181,datastream2.lt.org:2181/kafka_online"
        auto_offset_reset => "smallest"
        group_id => "logstash23"
        topic_id => "datastream.novel"
        codec => "json"
        reset_beginning => "true"
        }
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}
output {
         stdout {  }
         elasticsearch {
                hosts => "esIp:port"
                index => "exception-%{YYYY.MM.dd}"
        } 
}

問題2:寫入ES,報錯406,NotAcceptable
現(xiàn)象是:使用了Logstash2.4的版本號,從0.9版本的kafka集群可以獲取到數(shù)據(jù),控制臺有打印,但是寫入ES一直報錯。注:本地ES是6.2.4的,已有業(yè)務(wù)運行其上。
出現(xiàn)這個錯誤的原因是因為Logstash2.4和ES6.2.4無法兼容。也曾嘗試將logstash6.2.4版本的kafka插件降為2.0.9(logstash2.4使用的kafka插件),但是因為在更新插件過程中,會和logstash-core-plugin-api不兼容,出現(xiàn)很多沖突,也不能解決這個問題。

綜上所述:

  • 降低logstash2.4.0可以獲取到0.9kafka集群的數(shù)據(jù),但是寫入ES6.2.4有兼容性問題。
  • 基于Logstash6.2.4,降低logstash-input-kafka插件為2.0.9,會出現(xiàn)API兼容性問題。
  • 正如官網(wǎng)所說,ELK版本盡可能保持和kafka等輸入源版本一致。

解決方案:

  • 升級kafka集群的版本
  • 遷移kafka集群的數(shù)據(jù)至高版本kafka集群
  • ELK全部降級為匹配到kafka0.9的版本

經(jīng)驗總結(jié):

  • 搭建ELK首先需要確定數(shù)據(jù)來源有哪些,尤其是涉及到kafka這種組件的,需要提前了解kafka集群的版本信息,確定你需要下載的ELK版本。否則數(shù)據(jù)讀取不到。
  • ELK這三個組件,版本盡可能一致,否則即使能夠讀取到輸入的數(shù)據(jù),但是寫入不到ES中,也是很蛋疼的。
  • ELK的配置問題,對于不同的版本,配置項很多不一樣,不能僅僅在網(wǎng)上查到一個配置就填上去,需到官網(wǎng)查詢對應(yīng)的配置項。例如,kafka插件早期版本logstash的配置項是zk_connect,但是稍微新一點的版本都是bootstrap_servers;另外需要注意配置項的類型,有些是string的,有些是array的,不要亂填。
  • Kibana的關(guān)鍵配置項
server.port: 5601 
server.host: "10.171.xxx.yyy"   //這個是外部瀏覽器訪問的地址
elasticsearch.url: "http://esIp:9200" //這個是集群內(nèi)部通信的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容