1. 程式人生 > >elasticsearch+kafka日誌收集和分析以及分散式配置(附)

elasticsearch+kafka日誌收集和分析以及分散式配置(附)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">由於公司內部業務需求,需要將大量的請求日誌做統計分析,所以用到了elasticsearch全文搜尋引擎</span>

一、採用何種方式做日誌收集

1、採用mysql資料同步的方式將資料批量寫入elasticsearch,這種方式需要自己控制每次最後一次插入資料的狀態,以便下次從上次標記的狀態繼續同步資料,

2、網上給出的方案為jdbc-river這種方式同步過程比較慢,而且對於百萬級資料不是最好的選擇,另外對於資料的實時收集影響mysql的效能

3、最後採用kafka+elasticsearch的方式做:

具體為:

1)每次請求以及產生的資料都通過資料管道kafka做資料傳輸,再通過指令碼將管道中的資料寫入elasticsearch,這裡想說的是elasticsearch有個bulk可以批量的匯入資料

下面附上elasticsearch的配置以及中文分詞的ik的配置方式

本文ElasticSearch2.3.1最新版的安裝,如果遇到未知錯誤請翻牆google,國內的相關文章都比較老

(首先確保已經有jdk環境,本人jdk版本為1.8.51)這裡筆者想說明的是jdk1.8.91安裝以後會提示java環境找不到或者是librjava.so找不到,所以最好選擇1.7到1.8.51版本

按照官網的提示進行啟動發現報錯:

Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.
     at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93)
     at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:144)
     at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)


     at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)

這是因為不能用root使用者執行,必須為其建立一個使用者和使用者組,但是非要執行那筆者給出經過嘗試和google終於執行成功

解決如下:

 ./bin/elasticsearch -d  -Des.insecure.allow.root=true 

這樣啟動就正常了

對於分散式配置只要配置檔案的cluster.name的值為同一個就可以,但是在不同IP段想要分散式感應需要配置IP,在配置檔案中找到

discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"] 陣列中改為對應的IP即可成功感應

二、分詞外掛ik安裝

對於es2.3以後的版本安裝ik分詞器需要使用者自己打包,然後將對於的jar包檔案和配置檔案複製到es目錄中即可

具體步驟為:

1、在github中下載對應的版本地址為:https://github.com/medcl/elasticsearch-analysis-ik/releases

2、選擇對應版本

cd /tmp
wget https://github.com/medcl/elasticsearch-analysis-ik/archive/master.zip
unzip master.zip
cd elasticsearch-analysis-ik/

然後使用mvn package 命令,編譯出jar包
將target/releases/下所有檔案包複製到Elasticsearch的plugins/analysis-ik 目錄下,再把解壓出的ik目錄(配置和詞典等),複製到Elasticsearch的config 目錄下。然後編輯配置檔案elasticsearch.yml ,在後面加一行:index.analysis.analyzer.ik.type:"ik" 3、最後重啟即可安裝成功 三、kafka安裝請參考本人上期安裝說明部落格