寫在前面
學習這個實戰項目也已經過去很久了,本來一直也想以文字的方式將項目中的 點 進行記錄下來。有什麼問題,歡迎大家一起留言討論。
關於這個系列的 所有文章,有新的想法,我也會及時做更新
項目效果
主要是想監控生產上的實時日誌,日誌可以是Linux的系統日誌,MySQL數據庫的日誌,也可以是我們生產項目的業務日誌,比如:SpringBoot 項目中打的日誌。這些日誌都可以作爲本項目的原始日誌。
對一些即將發生的問題 發出預警
-->
這樣就可以對一些即將出現的問題可以提前預知,這樣我們就可以在問題實際發生前進行解決
-->
預警目標:將問題 扼殺在發生前
爲啥要做預警?可能公司有服務的SLA保障!
SLA: 99.99%
sla:允許服務宕機時間
9越多代表全年服務可用時間越長服務更可靠,停機時間越短
全年拿365天做計算吧,看看幾個9要停機多久時間做能才能達到!
1年 = 365天 = 8760小時
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小時
99.99 = 8760 * 0.0001 = 0.876小時 = 0.876 * 60 = 52.6分鐘
99.999 = 8760 * 0.00001 = 0.0876小時 = 0.0876 * 60 = 5.26分鐘
架構選擇
zabbix
elk 都是可以的
本項目選擇的架構:
關於上面的架構,做幾點簡單說明
- 服務器產生的日誌 我們需要修改爲json格式的日誌,默認是string。因爲json格式的日誌自帶schema,方便spark處理。比如SpringBoot項目中的日誌就可以通過修改配置文件達到這個目的。
- 產生的日誌該是位於服務器的某一個文件夾位置。
場景一:日誌名稱始終不變,可以使用tail -F /logs/serverA.log
當前的一份--> 保留10份
200M產生一個
場景二:日誌名稱是變化的,tail -F 文件夾 spoolDir
- 本來,flume exec source 是可以監控某一個文件或文件夾下 的日誌的,但是,當我們的 節點+服務 比較多的時候,我們就無法知道改日誌是來自於哪一個機器的哪一個服務,所以,我們需要基於Flume源代碼做二次開發,改造後能夠使得我們的flume將 機器名+服務名 一起打進source ,最後sink 到 kafka中去,
ps:本來這裏我還想說,sink的時候能夠按照某一規則sink 到kafka指定分區中。後面再做吧
4.原始日誌+機器名+服務名這樣的 json 格式的數據已經從 flume 到Kafka 中去。我們需要使用Spark Straeming +Spark SQL 對流日誌進行處理,處理後的結果可以存儲到InfluxDB(時序數據庫),最後通過Grafana 進行可視化
項目概要
基於上面的幾點說明,寫一下本項目的大致流程:
-
基於CDH5 搭建好 各個環境
版本:
hadoop-2.6.0-cdh5.7.0
apache-flume-1.9.0-bin
kafka_2.11-1.1.0
scala-2.11.8
spark-2.4.3-bin-2.6.0-cdh5.7.0
grafana-4.1.1
InfluxDB-1.7.0 -
基於flume 源碼 做二次開發,參考exec sorce --> exec+機器名+服務名 的source
-
上一步做好之後,就能將數據採集到kafka中去,並使用kafka-console-consumer.sh 將採集的數據打印到控制檯,大致這樣:
{"hostname":"host36","servicename":"serverA","time":"2019-07-11 02:10:23,756","logtype":"INFO","loginfo":"org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor:Rescanning after 3000 milliseconds"}
- 接着,就是開發spark 對接kafka ,進行各種編碼,這個過程中,處理結果會實時寫到InfluxDB中,然後我們使用Grafana進行展示。Grafana配置告警即可。類似:
項目收穫
大致寫一下,本項目能夠得到主要技能
- Flume: 1.源碼二次開發 2. 自定義Interceptor 3.概念 安裝 配置文件 與 命令使用
- Kafka: 1.多分區全局有序的實現 2.at lease once + offset 自定義管理 3. 概念 安裝(分佈式) 與 命令使用
- Spark 廣播變量如何結合業務需要?+ 窗口函數的使用?
- Spark Streaming + Kafka 自定義Offset 管理到 MySQL
- InfluxDB + Grafana 配合做監控
- Spark On Yarn
基於上面的流程,我們由易到難,
現在開始!!!
更多文章:企業級生產監控預警平臺:https://blog.csdn.net/liuge36/category_9600405.html