Maxwell+Kafka+ELK 實(shí)現(xiàn)數(shù)據(jù)庫(kù)日志分析(一)

產(chǎn)品正式上線有一段時(shí)間了,用戶量越來越多,對(duì)產(chǎn)品進(jìn)行深入的商業(yè)分析這件事逐漸被提上了日程。此時(shí),就需要搭建一套系統(tǒng)能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的采集,處理和展示。

系統(tǒng)架構(gòu)

做了一些調(diào)研,最后決定用ElasticStack架構(gòu),也就是 Kafka+ELK 的架構(gòu)。架構(gòu)實(shí)現(xiàn)參照文章 ?【 ES 私房菜 】系統(tǒng)運(yùn)維數(shù)據(jù)分析平臺(tái)架構(gòu)

系統(tǒng)主要架構(gòu)如圖所示:

具體實(shí)現(xiàn)為:

1. Maxwell 鏈接數(shù)據(jù)庫(kù),讀取Mysql數(shù)據(jù)庫(kù)中的BinLog文件,并將內(nèi)容轉(zhuǎn)化為json格式發(fā)送給 Kafka。

2. Kafka接收消息并實(shí)現(xiàn)轉(zhuǎn)發(fā)

3. Logstash 從Kafka 讀取轉(zhuǎn)發(fā)的消息,并經(jīng)過一定的數(shù)據(jù)處理后存入Elastcisearch

4. Elasticsearch按照一定的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)

5. Kibana展示Elastcisearch存儲(chǔ)的數(shù)據(jù)

組件搭建

Maxwell

Maxwell?能夠讀取MySQL 數(shù)據(jù)庫(kù)的 binlogs,并將binlog中的更新以JSON的格式轉(zhuǎn)發(fā)給Kafka,Kinesis,RabbitMQ, Google Cloud Pub/Sub 或者Redis 等第三方數(shù)據(jù)存儲(chǔ)或轉(zhuǎn)發(fā)工具。

數(shù)據(jù)庫(kù)配置

在數(shù)據(jù)庫(kù)連接Maxwell之前,需要先對(duì)數(shù)據(jù)庫(kù)做一些配置。

1. 配置MySQL的binlogs 格式為row

$ vi my.cnf

[mysqld]

server-id=1

log-bin=master

binlog_format=row

2. MySQL數(shù)據(jù)庫(kù)新建一個(gè)用戶 maxwell,并為其配置相關(guān)權(quán)限

mysql> GRANT ALL on maxwell.* to 'maxwell'@'%' identified by 'XXXXXX';

mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to 'maxwell'@'%';?

Maxwell docker搭建

1. 調(diào)試maxwell和MySQL的連接,可將producer定義為輸出

docker run -ti --rm zendesk/maxwell bin/maxwell --user='maxwell' --password='XXXXXX' --host='mysql_host' --producer=stdout

若連接正常,則一旦MySQL中的binlog文件有更新,maxwell會(huì)接收文件更新,并打印輸出。

2. Maxwell連接kafka,將mysql消息發(fā)送到kafka

搭建好kafka后(后文會(huì)介紹如何docker搭建kafka),maxwell可以將producer設(shè)置為kafka,此時(shí)maxwell能夠?qū)ySQL中的數(shù)據(jù)更新發(fā)送給kafka。

docker run -ti --rm zendesk/maxwell bin/maxwell --user='maxwell' --password='XXXXXX' --host='mysql_host' --producer=kafka --kafka.bootstrap.servers=kafka_host:9092 --log_level=debug

配置 log_level 的環(huán)境變量值為debug可以查看maxwell運(yùn)行時(shí)更加詳細(xì)的log輸出。不配置次環(huán)境變量時(shí)默認(rèn)為 info。

若一切正常,kafka 的 maxwell 的topic的consumer能夠收到MySQL的binlog數(shù)據(jù)更新,格式為json。


以上為maxwell 的docker搭建和配置。后文會(huì)繼續(xù)介紹 kafka, elk等的docker搭建。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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