前言:最近這一段時間對接合作方的廣告項目統計數據,每天一上班,合作方就一大堆問題,為什么昨天數據又怎么不對呀,問題在哪, 數據統計問題 道不明,很難去找原因,搞的LZ頭都大了,老板也催,真是無奈,我已經把代碼已經調整到沒有問題的狀態,他媽還是統計數據不對,不知道是對方的原因還是我們自身的原因,很難去定位,沒辦法,最終我只能使出大招,每天打日志數據文件,看到底是什么原因的,最終預料之中背鍋俠不是我,的確是合作方自身的原因。統計的問題也就告一段落了,也就閑下來和大家聊聊技術,吹吹牛皮了。今天和大家聊聊日志統計收集的問題,通過log4j 打日志的方式,通過kafka生產和消費 入到ElasticSearch中,然后再用Kibana做展示層實時的看每天的數據。咋們回歸正題,我給大家一一道來(里面的技術很多是CTO實現的,我只是個打雜的)。
今天先簡單的給大家介紹 log4j ?kafka ?ElasticSerach ?kibana 這些技術在我們的系統中扮演了什么角色。以及它們的基礎知識。
Log4j:其實就是一個日志文件系統的具體實現,當然還有其他的日志文件的系統實現,比如Log4j 的升級版Logback,是不消耗內存和計算開銷的日志系統。據說很吊的樣子 雖然我也用過,但是感覺不出來。沒看過源碼 不知道它對于Log4j 優化了哪些。
我們經常提Log4j? 也會提到Logback,SLF4J,那他們三者是個什么樣的關系?
官方是這樣說明的:
slf4j譯為簡單日志門面,是一系列的日志接口,是日志框架的抽象。而log4j和logback是眾多日志框架中的幾種,SLF4J在具體開發中,需要綁定一個日志框架,才能正常的使用slf4j。而日志框架比如就是Log4j或者logback等等
而log4j和logback的區別:
log4j是apache實現的一個開源日志組件。(Wrapped implementations)
logback同樣是由log4j的作者設計完成的,擁有更好的特性,用來取代log4j的一個日志框架。是slf4j的原生實現
在Log4j在我們的系統中作用是以JSON的格式輸出統計日志文件。
我們的log4J配置文件類似如下: 下一章給大家md代碼并給大家介紹具體的配置
KafKa: 其實就是消息隊列,業內有很多成熟的消息隊列 有redis java原生的消息隊BloackQueue,阿里的RabbitMQ,Apache下的ActiveMQ等等,大家都大同小異,而我們采用的是kafka而已。
簡單的介紹kafka的基本知識,kafka中有以下概念:
producer:消息生產者,發布消息到 kafka 集群的終端或服務。
.broker:kafka 集群中包含的服務器。
topic:每條發布到 kafka 集群的消息屬于的類別,即 kafka 是面向 topic 的。
partition:partition 是物理上的概念,每個 topic 包含一個或多個 partition。kafka 分配的單位是 partition。
consumer:從 kafka 集群中消費消息的終端或服務。
Consumer group:high-level consumer API 中,每個 consumer 都屬于一個 consumer group,每條消息只能被 consumer group 中的一個 Consumer 消費,但可以被多個 consumer group 消費。
replica:partition 的副本,保障 partition 的高可用。
leader:replica 中的一個角色, producer 和 consumer 只跟 leader 交互。
follower:replica 中的一個角色,從 leader 中復制數據。
controller:kafka 集群中的其中一個服務器,用來進行 leader election 以及 各種 failover。
zookeeper:kafka 通過 zookeeper 來存儲集群的 meta 信息。
下載window kafka的包 可以通過以下方式來操作kafka?
打開kafka:(打開kafka之前 首先要啟動zookeeper)
.\bin\windows\kafka-server-start.bat .\config\server.properties
創建topics(主題)
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
打開producer:
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test
打開Consumer:
.\bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic test
在producer生產界面生產數據 在消費者界面就可以看到消費的數據 例如:
kafka 在我們的系統中扮演的角色是生產日志文件 并進行消費到ES中。
ElasticSearch
Elasticsearch是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。
而我們用ES來收集統計日志,可以實時的分析數據。
簡單的介紹一下ES中的基本知識點:
index
ES中的索引,類似于mysql中的database
Type
文檔類型, 類似于mysql中的table,根據用戶需求每個index中可以新建任意數量的type。
Document
定義:對應mysql中的row。有點類似于MongoDB中的文檔結構,每個Document是一個json格式的文本。每個文檔由不同的結構,限制條件:不同的文檔類型對同一個字段不能設置為不同的字段類型。
Mapping
更像是一個用來定義每個字段類型的語義規范在mysql中類似sql語句,在ES中經過包裝后,都被封裝為友好的Restful風格的接口進行操作。這一點也是為什么開發人員更愿意使用ES或者compass這樣的框架而不是直接使用Lucene的一個原因。
分片:將數據切分,分布在不同的機器上,但歸屬一個index
副本:副本分片是對原始分片的一個精準拷貝,原始分片被稱為主分片。
在官網上https://www.elastic.co/cn/downloads/elasticsearch 下載windows版本。
進入bin目錄啟動elasticsearch.bat文件即可 ?es單機版就啟動了 ?訪問9200端口 即可看到數據
9300 是es客戶端操作es數據存儲端口,9200是展示數據的端口
訪問內容如下:
具體url后面帶的參數我后面再給大家介紹,這里不做具體的討論。
在我們的系統中 ?ES 扮演著收集日志數據的存儲系統。
Kibana:
Kibana是一個開源的分析與可視化平臺,設計出來用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的數據,使用各種不同的圖表、表格、地圖等kibana能夠很輕易地展示高級數據分析與可視化。其實就是ES的web展示層 可以實時看到數據和統計數據。統計數據可以采用表格 圖形都可以支持的。
在官網上https://www.elastic.co/cn/downloads/kibana 下載windows版本。一定要下載ES對應適配的版本,否則啟動不了Kibana。會報以下的錯:直接報警了
版本不兼容 ?大意就是下載一個5.4.2的版本就可以解決了。我用的是5.5.2版本 肯定不行 不兼容。
換了個版本也就正常了 ? 正常的如下:
kibana通過http訪問 默認端口是5601
我在里面建立了業務相關的三個索引 也可以看到我們展示的數據 我們對這些數據做分組統計 也可以建圖表 或者表格的方式來進行統計 kinana支持很多種方式的統計。而且還是實時的 非常的方便。
Kibana在我們的系統中扮演的角色作為ES數據的展示層,給我們實時的統計數據和以表格或者圖表的方式看數據 非常的方便 看到想要統計的BI數據。
說了這么多,今天介紹的內容大概就這些了,簡單介紹了log4j、kafka、ElasticSearch、Kibana 這些是什么 ?基礎的相關知識點 以及在我們的系統中扮演的角色。下一章我們將以我們的具體業務如何將這些知識點應用到具體的場景中去的 我會以代碼的形式給大家分享,感謝上次肖大神給我提的建議 貼代碼不好 優好性太差,不便于閱讀,我記住了,下次直接md貼代碼 哈哈。你們的建議是我最大的向前奔跑的動力。
我是小志碼字,一個簡單碼代碼的小人物。看了這么多,喜歡就關注我 或者點贊哦