GO學習 32 Go實現日誌收集系統1

2022-06-07 18:00:10 字數 3983 閱讀 1520

當然即使是機器規模不大,乙個系統通常也會涉及到多種語言的開發,拿我們公司來說,底層是通過c++開發的,而也業務應用層是通過python開發的,並且即使是c++也分了很多級別應用,python這邊同樣也是有多個應用,那麼問題來了,每次系統出問題了,如何能夠迅速查問題? 好一點的情況可能是python應用層查日誌發現是系統底層處理異常了,於是又叫c++同事來查,如果c++這邊能夠迅速定位出錯誤告知python層這邊還好,如果錯誤好排查,可能就是各個開發層的都在一起查到底是**引起的。當然可能這樣說比較籠統,但是卻引發了乙個問題:

針對以上問題,我們想要實現的乙個解決方案是:

關於實現這個系統時可能會面臨的問題:

關於日誌收集系統,業界的解決方案是elk

elk的解決方案是通用的一套解決方案,所以不免就會產生以下的幾個問題:

針對這種情況,其實我們想要的系統是agent可以動態的獲取某個伺服器我們需要監控哪些日誌

以及那些日誌我們需要收集,並且當我們需要收集日誌的伺服器下線了,我們可以動態的停止收集

當然這些實現的效果最終也是通過web介面呈現。

主要的架構圖為

關於各個元件的說明:

注:這裡關於kafka並不會介紹太多,只是對基本的內容和應用場景的說明,畢竟展開來說,這裡的知識也是費非常多的

kafka中有幾個基本的訊息術語需要了解:

kafka的優點:

kafka非常快,並保證零停機和零資料丟失。

kafka的應用場景:

zookeeper是一種分布式協調服務,用於管理大型主機。在分布式環境中協調和管理服務是乙個複雜的過程。zookeeper通過其簡單的架構和api解決了這個問題。zookeeper允許開發人員專注於核心應用程式邏輯,而不必擔心應用程式的分布式特性。

apache zookeeper是由集群(節點組)使用的一種服務,用於在自身之間協調,並通過穩健的同步技術維護共享資料。zookeeper本身是乙個分布式應用程式,為寫入分布式應用程式提供服務。

zookeeper主要包含幾下幾個元件:

zookeeper的應用場景:

zookeeper是強一致的多個客戶端同時在zookeeper上建立相同znode,只有乙個建立成功

這個就是我們後面要通過**實現的一步分內容,主要實現的功能是:

類似於我們在linux下通過tail的方法讀日誌檔案,講讀取的內容發給kafka

這裡需要知道的是,我們這裡的tailf是可以動態變化的,當配置檔案發生變化是,可以通知我們程式自動增加需要增加的tailf去獲取相應的日誌並發給kafka producer

主要由一下幾部目錄組成:

當然即使是機器規模不大,乙個系統通常也會涉及到多種語言的開發,拿我們公司來說,底層是通過c++開發的,而也業務應用層是通過python開發的,並且即使是c++也分了很多級別應用,python這邊同樣也是有多個應用,那麼問題來了,每次系統出問題了,如何能夠迅速查問題? 好一點的情況可能是python應用層查日誌發現是系統底層處理異常了,於是又叫c++同事來查,如果c++這邊能夠迅速定位出錯誤告知python層這邊還好,如果錯誤好排查,可能就是各個開發層的都在一起查到底是**引起的。當然可能這樣說比較籠統,但是卻引發了乙個問題:

針對以上問題,我們想要實現的乙個解決方案是:

關於實現這個系統時可能會面臨的問題:

關於日誌收集系統,業界的解決方案是elk

elk的解決方案是通用的一套解決方案,所以不免就會產生以下的幾個問題:

針對這種情況,其實我們想要的系統是agent可以動態的獲取某個伺服器我們需要監控哪些日誌

以及那些日誌我們需要收集,並且當我們需要收集日誌的伺服器下線了,我們可以動態的停止收集

當然這些實現的效果最終也是通過web介面呈現。

主要的架構圖為

關於各個元件的說明:

注:這裡關於kafka並不會介紹太多,只是對基本的內容和應用場景的說明,畢竟展開來說,這裡的知識也是費非常多的

kafka中有幾個基本的訊息術語需要了解:

kafka的優點:

kafka非常快,並保證零停機和零資料丟失。

kafka的應用場景:

zookeeper是一種分布式協調服務,用於管理大型主機。在分布式環境中協調和管理服務是乙個複雜的過程。zookeeper通過其簡單的架構和api解決了這個問題。zookeeper允許開發人員專注於核心應用程式邏輯,而不必擔心應用程式的分布式特性。

apache zookeeper是由集群(節點組)使用的一種服務,用於在自身之間協調,並通過穩健的同步技術維護共享資料。zookeeper本身是乙個分布式應用程式,為寫入分布式應用程式提供服務。

zookeeper主要包含幾下幾個元件:

zookeeper的應用場景:

zookeeper是強一致的多個客戶端同時在zookeeper上建立相同znode,只有乙個建立成功

這個就是我們後面要通過**實現的一步分內容,主要實現的功能是:

類似於我們在linux下通過tail的方法讀日誌檔案,講讀取的內容發給kafka

這裡需要知道的是,我們這裡的tailf是可以動態變化的,當配置檔案發生變化是,可以通知我們程式自動增加需要增加的tailf去獲取相應的日誌並發給kafka producer

主要由一下幾部目錄組成:

Go實現海量日誌收集系統 四

到這一步,我的收集系統就已經完成很大一部分工作,我們重新看一下我們之前畫的圖 我們已經完成前面的部分,剩下是要完成後半部分,將kafka中的資料扔到elasticsearch,並且最終通過kibana展現出來 官網位址這裡介紹了非常詳細的安裝方法 但是其實這裡是需要配置一些東西的,要不然直接啟動是會...

Go實現海量日誌收集系統 一

當然即使是機器規模不大,乙個系統通常也會涉及到多種語言的開發,拿我們公司來說,底層是通過c 開發的,而也業務應用層是通過python開發的,並且即使是c 也分了很多級別應用,python這邊同樣也是有多個應用,那麼問題來了,每次系統出問題了,如何能夠迅速查問題?好一點的情況可能是python應用層查...

3 2 Go搭建乙個Web伺服器

前面小節已經介紹了web是基於http協議的乙個服務,go語言裡面提供了乙個完善的net http包,通過http包可以很方便的就搭建起來乙個可以執行的web服務。同時使用這個包能很簡單地對web的路由,靜態檔案,模版,cookie等資料進行設定和操作。fmt.fprintf w,hello ast...