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

2021-09-08 14:01:00 字數 3617 閱讀 7216

到這一步,我的收集系統就已經完成很大一部分工作,我們重新看一下我們之前畫的圖:

我們已經完成前面的部分,剩下是要完成後半部分,將kafka中的資料扔到elasticsearch,並且最終通過kibana展現出來

官網位址這裡介紹了非常詳細的安裝方法:

但是其實這裡是需要配置一些東西的,要不然直接啟動是會悲劇的,在網上找了乙個位址,如果出現類似的錯誤直接處理就行,我自己已經驗證了:

如下圖所示就表示已經安裝完成:

通過go寫乙個簡單的呼叫elasticsearch的例子:

package main

import (

"fmt"elastic "gopkg.in/olivere/elastic.v2")

type tweet struct

func main()

fmt.println("conn es succ")

tweet := tweet

_, err = client.index().index("twitter").type("tweet").id("1").bodyjson(tweet).do()

if err !=nil

fmt.println("insert succ")

}

logtransfer主要負責從 kafka佇列中讀取日誌資訊,並且新增到elasticsearch中

看那一下logtransfer 目錄結構如下:

├── conf

├── es.go

├── etcd.go

├── ip.go

├── kafka.go

├── logs

│ └── transfer.log

└── main.go

conf:存放配置檔案

es.go:主要是連線elasticsearch的部分以及用於將訊息放到elasticsearch中

etcd.go:主要用於做動態的配置更改,當我們需要將kafka中的哪些topic日誌內容扔到elasticsearch中

ip.go: 用於獲取當前伺服器的ip位址

kafka.go: 主要是kafka的處理邏輯,包括連線kafka以及從kafka中讀日誌內容

main.go:**的入口函式

整體大**框架,通過如圖展示:

和之前的logagent中的**有很多啟示是可以復用的或者稍作更改,就可以了,其中es之心的,主要是連線elasticsearch並將日誌內容放進去

es.go的**內容為:

}最終我將logagnet以及logtransfer部署到虛擬機器上進行測試的效果是:

這樣當我再次查日誌的時候就可以不用登陸每台伺服器去查日誌,只需要通過頁面根據關鍵字迅速看到相關日誌,當然目前實現的功能還是有點粗糙,etcd的更改程式,是自己寫的傳送程式,其實更好的解決方法是通過頁面,讓使用者點來點去,來控制自己要收集哪些日誌,以及自己要將哪些topic的日誌從kafka中放到elasticsearch (本人是做後端開發,不擅長前端的開發,不過後面可以試著寫個頁面試試,估計會很醜哈哈)

同時這裡關於各個部分的安裝並沒有做過多的介紹,以及維護,當然我們的目標是是通過這些開源的軟體以及包來實現我們想要的功能,後期的維護,肯定需要對各個元件部分都進行深入了解

這裡附贈一下那個etcd客戶端**:

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

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

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

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

flume (日誌收集系統)

flume 日誌收集系統 flume是cloudera提供的乙個高可用的,高可靠的,分布式的海量日誌採集 聚合和傳輸的系統,flume支援在日誌系統中定製各類資料傳送方,用於收集資料 同時,flume提供對資料進行簡單處理,並寫到各種資料接受方 可定製 的能力。當前flume有兩個版本flume 0...