有個(gè)同事在搭ES+Logstash來同步mysql的數(shù)據(jù),問我珠漂,我也不懂晚缩,就網(wǎng)上學(xué)習(xí)一下,順便弄了一下媳危,在這分享一下流程荞彼,有啥不對或問題的,歡迎各位斧正待笑。
Elasticsearch:是實(shí)時(shí)分布式全文搜索分析引擎鸣皂,提供搜集、分析暮蹂、存儲(chǔ)數(shù)據(jù)三大功能寞缝,速度快;是一套開放REST和JAVA API等結(jié)構(gòu)提供高效搜索功能仰泻,可擴(kuò)展的分布式系統(tǒng)荆陆。它構(gòu)建于Apache Lucene搜索引擎庫之上。在這Elasticsearch作為后臺(tái)數(shù)據(jù)的存儲(chǔ)集侯。
Logstash:是動(dòng)態(tài)數(shù)據(jù)收集管道被啼,擁有可擴(kuò)展的插件生態(tài)系統(tǒng),能夠與 Elasticsearch 產(chǎn)生強(qiáng)大的協(xié)同作用浅悉。在這Logstash在其過程中擔(dān)任搬運(yùn)工的角色趟据。
![https://upload-images.jianshu.io/upload_images/6791900-23e17655467a2af1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/864/format/webp](https://upload-images.jianshu.io/upload_images/6791900-23e17655467a2af1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/864/format/webp)
?
Logstash工作三個(gè)階段:1,input數(shù)據(jù)輸入端术健,可以接收來自任何地方的源數(shù)據(jù)汹碱。
2,F(xiàn)ilter數(shù)據(jù)中轉(zhuǎn)層荞估,主要進(jìn)行格式處理咳促,數(shù)據(jù)類型轉(zhuǎn)換稚新、數(shù)據(jù)過濾、字段添加跪腹,修改等褂删。
3,output是logstash工作的最后一個(gè)階段冲茸,負(fù)責(zé)將數(shù)據(jù)輸出到指定位置屯阀,兼容大多數(shù)應(yīng)用。
軟件安裝:
1轴术,環(huán)境--1.8以上的JDK难衰。
2,下載Elasticsearch和Logstash的軟件壓縮包逗栽,https://www.elastic.co/盖袭,這選擇6.6.1版的Linux 64位壓縮包解壓到自己建立的目錄下面,此處 放在目錄/home/el/彼宠,然后執(zhí)行就可以運(yùn)行了鳄虱。(<ins>注意選著的elasticsearch和logstash版本保持一致,不然會(huì)出問題</ins>)
啟動(dòng)和配置:
一凭峡,Elasticsearch
啟動(dòng) ---進(jìn)入到/home/el/elasticsearch-6.6.1/目錄下拙已,執(zhí)行啟動(dòng)命令 bin/elasticsearch(<ins>*啟動(dòng)時(shí)候不能以root用戶啟動(dòng),否則會(huì)報(bào)錯(cuò)*</ins>),
啟動(dòng)成功時(shí)想罕,可以看到IP的綁定(<ins>*10.112.76.31:9300 , 10.112.76.31:9200*</ins>)悠栓。
瀏覽器訪問elasticsearch ---進(jìn)入到 /home/el/elasticsearch-6.6.1/config/elasticsearch.yml霉涨,修改屬性network.host: 0.0.0.0和http.port: 9200,
修改端口按价,是因?yàn)镋S 每次啟動(dòng)時(shí),端口可能會(huì)變(端口被占用笙瑟,ES 自己會(huì)改端口)楼镐,還不能正常啟動(dòng) ES,并 提示端口被占用往枷,就查看一下什么程序占用 9200 端口框产,kill 掉,重啟 ES 就行错洁。最后通過在瀏覽器通過地址 http://10.112.76.31:9200或http://localhost:9200訪問elasticsearch秉宿。
二,Logstash
配置:
1屯碴,安裝插件描睦,由于這里是從mysql同步數(shù)據(jù)到elasticsearch,所以需要安裝jdbc的入插件和elasticsearch的出插件:logstash-input- jdbc导而、logstash-output-elasticsearch(<ins>*Logstash5版本后自帶input和out 插件忱叭,這邊選用的是6.6.1隔崎,所以不用安裝*</ins>)
2,下載mysql連接庫韵丑,logstash是ruby開發(fā)的爵卒,所以這里要下載mysql的連接庫jar包,從[官網(wǎng)](https://dev.mysql.com/downloads/connector/j/)下載撵彻,我這里下載的是:mysql-connector- java-5.1.46.jar钓株,將下載好的mysql-connector-java-5.1.46.jar,放至/home/el/elasticsearch-6.6.1/config/目錄下陌僵。
3享幽,創(chuàng)建配置文件,在/home/el/elasticsearch-6.6.1/config/目錄下拾弃,創(chuàng)建配置文件(mysql-to-es.conf):
<pre>input {
jdbc {
# mysql 數(shù)據(jù)庫鏈接,shop為數(shù)據(jù)庫名
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/shop"</pre>
<pre> # 用戶名和密碼
jdbc_user => "root"
jdbc_password => "root"</pre>
<pre> # jdbc連接mysql驅(qū)動(dòng)的文件目錄
jdbc_driver_library => "./config/mysql-connector-java-5.1.46.jar"</pre>
<pre> # 驅(qū)動(dòng)類名
jdbc_driver_class => "com.mysql.jdbc.Driver"</pre>
<pre> jdbc_paging_enabled => "true"
jdbc_page_size => "50000"</pre>
<pre> # sql 文件路徑, 也可以直接寫SQL語句在此處值桩,如下:
# statement => "select * from t_order where update_time >= :sql_last_value;"
statement_filepath => "./config/jdbc.sql"</pre>
<pre> # 同步的頻率 各字段含義(由左至右)分、時(shí)豪椿、天奔坟、月、年搭盾,全部為默認(rèn)含義為每分鐘都更新
schedule => " * * * *"</pre>
<pre> # 是否記錄上次執(zhí)行結(jié)果, 如果為真,將會(huì)把上次執(zhí)行到的 tracking_column 字段的值記錄下來,保存到 last_run_metadata_path 指定的文件中
#record_last_run => true</pre>
<pre> # 是否需要記錄某個(gè)column 的值,如果record_last_run為真,可以自定義我們需要 track 的 column 名稱咳秉,
# 該參數(shù)就要為 true. 否則默認(rèn) track 的是 timestamp 的值.
use_column_value => true</pre>
<pre> # 如果 use_column_value 為真,需配置此參數(shù). track 的數(shù)據(jù)庫 column 名,該 column 必須是遞增的. 一般是mysql主鍵
tracking_column => "update_time"</pre>
<pre> tracking_column_type => "timestamp"</pre>
<pre> last_run_metadata_path => "./logstash_capital_bill_last_id"</pre>
<pre> # 是否清除 last_run_metadata_path 的記錄,如果為真那么每次都相當(dāng)于從頭開始查詢所有的數(shù)據(jù)庫記錄
clean_run => false</pre>
<tt class="wikimodel-verbatim">#是否將 字段(column) 名稱轉(zhuǎn)小寫 lowercase_column_names => false }</tt> }
<pre>output {
elasticsearch {</pre>
<pre> #es地址與端口</pre>
<pre> #hosts => ["192.168.100.101:9200","192.168.100.102:9200","192.168.100.103:9200"]</pre>
<pre> hosts => "10.112.76.31:9200"</pre>
<pre> #es索引(自己定義)</pre>
<pre> index => "mysql_order"</pre>
<pre> #表示按照查詢出的字段key_id(一般用主鍵,防止重復(fù))進(jìn)行數(shù)據(jù)的同步</pre>
<pre> document_id => "%{key_id}"</pre>
<pre> template_overwrite => true</pre>
<pre>}
</pre>
4鸯隅,啟動(dòng)澜建,bin/logstash -f config/mysql-to-es.conf
最后,方便查看蝌以,Elasticsearch 可以安裝head插件炕舵,通過http://...:9100,可以查看Elasticsearch里的數(shù)據(jù)。
擴(kuò)展--日志收集平臺(tái)elk與上述過程基本一致跟畅,不同之處:
1咽筋,Logstash的input不是連接mysql,而是去收集控制臺(tái)或日志文件徊件;
2奸攻,需要安裝kibana軟件,該軟件與Elasticsearch對接虱痕,用戶通過kibana查看Elasticsearch的日志