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安裝請參考本人上期安裝說明部落格