elk消費kafka數據延遲過大的問題

elk消費kafka數據延遲過大的問題

1.問題現象表述:

當前elk作爲日誌系統消費kafka日誌數據有很大的延遲,即elk的消費kafka中日誌的速度(200條/s)遠

遠低於maplearning生產日誌的速度(平均3000條/s)(吐出的日誌topic:log_trialproducetion);

導致從kibana中查詢最新的es日誌數據的時間遠遠低於當前時間,在實際生產環境或【預上線】環境

中,導致查詢不到最新的業務/統計日誌;

在這裏插入圖片描述

圖1 ELK消費kafka架構流程

logstash消費kafka數據有延遲,見下圖2

在這裏插入圖片描述

圖2 logstash消費kafka數據有延遲圖

在這裏插入圖片描述

3 kibana中檢查到logstash的消費速率;(200條/秒)

查看相關kafka中日誌的生成速度是,每秒鐘3000條

在這裏插入圖片描述

圖4 kafka中日誌速率

同時,查看elk的業務日誌時間爲:

在這裏插入圖片描述

2.問題總結

當前實際上有兩個問題:

第一:我們使用logstash消費kafka中的數據,雖然設置的是auto_offffset_reset => “latest”,但是似乎消

費者的offffset沒有生效;

第二.ml向kafka中吐出日誌的速度約爲3000條/秒;但是logstash的消費速度卻只有約200條/秒;差距

巨大導致巨大的延遲;

3.技術思路與結果

3.1 優化方向1:

logstash配置項優化

logstash.yml的原始配置信息:

http.host: "0.0.0.0" 
xpack.monitoring.elasticsearch.url: 172.19.32.68:9200 

修改之後的配置如下

vim logstash.yml的配置信息

如圖5, logstash消費提高明顯;從速度上來說應該是由原來的250條/秒,提升到後來的1000條/s,說

明logstash消費速率提升明顯;但是es的存儲效率仍然不理想;


http.host: "0.0.0.0" 
xpack.monitoring.elasticsearch.url: 172.19.32.68:9200 
pipeline.workers: 24 
pipeline.output.workers: 24 
pipeline.batch.size: 10000 
pipeline.batch.delay: 10

在這裏插入圖片描述

圖5 kafka生產與消費監控

提示:到目前爲止,我們的es仍然是單點的,我們希望的是構建一個es的集羣來使用,增加吞吐量;也

可以增加高可用性和橫向擴展能力;

關於es集羣的docker搭建方式,詳見其他文章;

3.2 優化方向2:

logstash輸出日誌影響

(注意:本次兩輪的優化,分別在獨立的兩個環境,只保持單一變量)

1.logstash消費kafka的配置文件logstash_kafka.conf;其中logstash消費並不停打印出日誌。

input { 

kafka{

bootstrap_servers => 

["172.19.32.xxx:9292,172.19.32.xxx:9292,172.19.32.xxx:9292"] 

client_id => "clientid-trial-ml-fct2" 

group_id => "groupid-trial-ml-fct2" 

auto_offset_reset => "earliest" 

consumer_threads => 6 

decorate_events => true 

topics => ["log_trialproduction"] 

type => "statisticalanalysis" 

} 

}

filter{ 

if [type] == "statisticalanalysis"{ 

csv{ 

columns=> 

["time","level","host","location","module","param0","param1","param2","param3"," 

param4","param5","param6","param7","param8","param9","param10","param11","param1 

2","param13","param14"] 

separator=>"@#" 

}mutate{ 

convert => ["param14","float"] 

} 

}

date{

match=>["time","yyyy-MM-dd HH:mm:ss.SSS 'GMT+8'"] 

target=>"@timestamp" 

} 

}

output {

elasticsearch { 

hosts => 

["172.19.32.xxx:9202","172.19.32.yyy:9202","172.19.32.zzz:9202"] 

index => "statisticalanalysis_%{+YYYY-MM-dd}" 

}

stdout { codec => rubydebug} 

} 

stdout { codec => rubydebug} 是logstash打印日誌的語句

去掉:stdout { codec => rubydebug}之後,效率提升十幾倍。

在這裏插入圖片描述

查看logstash消費kafka的監控:

在這裏插入圖片描述

優化方向3:

構建es集羣

es集羣已經初步搭建完成,後期經過驗證之後,年後會遷移到es的集羣中,保證可靠新和吞吐量!

=========我是分割線

附件:

搭建es集羣

基於docker搭建elasticSearch集羣的方式相對簡單,注意host的網絡模式,我是使用bridge的橋接模式

出現失敗的情況。切記!我是用的版本是6.5.1的es和kibana版本;

    1. docker下搭建ES集羣,超簡單,親測完美可用

https://blog.csdn.net/qq_43308337/article/details/90237696

或者這個:

  • 2.docker簡易搭建ElasticSearch集羣

https://blog.csdn.net/belonghuang157405/article/details/83301937

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章