go單體日志采集zincsearch方案實現(xiàn)
前言
微服務(wù)中的日志采集方案ELK(EFK)已經(jīng)是基本事實標(biāo)準(zhǔn)了,但是單體服務(wù)中卻沒有像ELK這樣的成熟采集方案,這與單體性質(zhì)有關(guān),單體畢竟涉及到服務(wù)少,而ELK又是很耗費資源的,單體要是上ELK,可能需要的服務(wù)器資源比業(yè)務(wù)服務(wù)器還多,所以單體沒有上ELK的。
但是單體也有日志采集需要,畢竟出了問題都要查日志的,如果沒有采集系統(tǒng),就只能靠tail命令不斷去找,就算有,一般也是直接放到mysql或者mongodb中,然后直接查庫,好點的可能做個查詢頁面。
下面我要介紹的是個號稱ElasticSearch替代方案的zincsearch,這個zincsearch是對標(biāo)ElasticSearch的,專門解決es的部署困難,資源要求高。這個zincsearch由go語言編寫而成,非常容易就跑起來了。
周末有時間正好對zinsearch進行了調(diào)研,網(wǎng)上類似的技術(shù)文章真的太少了,有的也是官網(wǎng)文檔的翻譯。
一 構(gòu)架
zincsearch用官方的話說是一個全文本搜索引擎,而且搜索很快。支持es格式接口,一般ELK中直接filebeat采集數(shù)據(jù)直接給es,你要使用zincsearch可以直接把它放到filebeat后頭,filebeat采集數(shù)據(jù)給zincsearch。因為單體比較簡單,filebeat使用也有一定門檻,我就自己寫了一個logfile,專門采集日志,通過接口把數(shù)據(jù)傳給zincsearch,構(gòu)架如下圖。

數(shù)據(jù)入庫后通過zincsearch自帶ui界面(類似kibana)就可以檢索數(shù)據(jù)了.

二 zinsearch 安裝
我是通過docker安裝的,為了方便啟動做成了一個docker-compose,配置如下:
docker-compose.yml
version: '3.5'
networks:
zinnet:
driver: ${NETWORKS_DRIVER}
services:
zinc: ## mqtt 服務(wù)
image: zinc:v1
environment:
- TZ=${TZ}
- DATA_PATH="/data"
- ZINC_FIRST_ADMIN_USER=admin
- ZINC_FIRST_ADMIN_PASSWORD=123456
- ZINC_PROMETHEUS_ENABLE=true
ports:
- "4080:4080"
volumes:
- ${DATA_PATH_HOST}:/data
networks:
- ${NET_NAME}
restart: always
.env
# 設(shè)置時區(qū) TZ=Asia/Shanghai # 設(shè)置網(wǎng)絡(luò)模式 NETWORKS_DRIVER=bridge # 宿主機上Mysql Reids數(shù)據(jù)存放的目錄路徑 DATA_PATH_HOST = ./data # 網(wǎng)絡(luò)名稱 NET_NAME = zinnet
在目錄下創(chuàng)建指定的data目錄 運行 docker-compose up -d 即可。
二 logbeat
logbeat是一個我自己寫的類似filebeat的采集器,主要原理也是用了一個由tail作用的go庫對文件進行監(jiān)控,當(dāng)由數(shù)據(jù)采集上來后進行過濾處理然后發(fā)送給zincsearch。
logbeat也是完全由golang編寫,項目地址 gitee.com/lambdang/lo… 該項目下載下來編譯后進行配置即可使用。
logbeat特點:
- 當(dāng)zincsearch掛掉后整個采集就阻塞住了,會按照設(shè)定的時長進行服務(wù)可用性輪詢試探,直到zincsearch服務(wù)恢復(fù)
- 該logbeat支持多文本日志監(jiān)控,采集后為了減少zincsearch的壓力,會順序進行數(shù)據(jù)發(fā)送。
如果有filebeat經(jīng)驗的人也可以直接用filebeat進行數(shù)據(jù)采集,zincsearch文檔上有filebeat的配置。
配置項如下:
Beat:
Files:
-
Index: api
File: ./test.log
Hosts: http://localhost:4080
Username: admin
Password: "123456"
RetrySecond: 300 #重試秒s
Log:
OutType: all
三 zincsearch 使用經(jīng)驗
1 關(guān)于刪除
zincsearch是以索引組織數(shù)據(jù)的,刪除目前通過文檔只發(fā)現(xiàn)了兩種方式,一種是根據(jù)記錄的id進行單個刪除,一種是根據(jù)索引批量刪除該索引下的所有數(shù)據(jù),所以數(shù)據(jù)最好按照天或者月進行索引組織,這樣方便以后按照天或者月進行數(shù)據(jù)刪除,畢竟誰的硬盤也不是無窮大的。
之前一直想通過按照搜索進行數(shù)據(jù)刪除,比如給一個時間段,然后進行刪除,但是沒有發(fā)現(xiàn)類似方法,有能這樣實現(xiàn)的小伙伴歡迎交流。
2 關(guān)于日期date類型
zincsearch索引數(shù)據(jù)一共有如下幾種類型

其中date類型是個特殊的存在
文檔中索引的日期類型可以按照實際文本數(shù)據(jù)設(shè)置format。如下圖:

但是通過一番摸索發(fā)現(xiàn)這個format只是你日志的格式,并不是最終ui界面顯示的格式,經(jīng)過測試,所有date類型數(shù)據(jù)最終都會轉(zhuǎn)換成”數(shù)值“,可能是為了搜索的時候可以比較大小吧,但是顯示的時候也是數(shù)值,這個就看著很不友好了。

目前我能想到的就覺方案是索引里不要弄date類型,直接弄numeric類型時間戳和text類型的字符串,兩個同時弄,即方便時間區(qū)間查詢也方便查看,也可以根據(jù)時間字符串進行查詢,畢竟這可是支持全文檢索的。誰有更好的方案歡迎交流。
3 關(guān)于檢索中時間選項
所有數(shù)據(jù)查詢都需要一個時間范圍,一般默認(rèn)是30分鐘內(nèi),但是你也可以設(shè)置一天,一星期,一個月,也可以設(shè)置時間段。但是不要以為設(shè)置多少時間就能檢索出該時間內(nèi)所有數(shù)據(jù),還要看數(shù)據(jù)量,就是數(shù)據(jù)左下角那個數(shù)值。

這個數(shù)值可以設(shè)置,這個才是決定最終的數(shù)據(jù)量的,它設(shè)置100,你檢索出來的數(shù)據(jù)只是檢索條件中結(jié)束時間點開始往前100條數(shù)據(jù)。所以你時間跨度設(shè)置再大,這個數(shù)值很小,你查出來數(shù)據(jù)也很少的。
結(jié)語
整體看這套單體采集方案可行性比較高,不會占用太多的資源,也能夠?qū)θ罩具M行實時采集。但是畢竟代碼都是一天搞出來的,不知道長期測試會有什么問題,下一步打算用這套采集系統(tǒng)做個長期測試看看。
大家用的什么樣的日志采集方案歡迎留言交流。
日志只是系統(tǒng)可觀測性的一方面,其他還包括,鏈路,性能指標(biāo)監(jiān)控,這些東西在為微服務(wù)上都有很好的解決方案,可是單體上卻沒有,原因無他,就是復(fù)雜性,資源高。
以上就是go單體日志采集zincsearch方案實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于go單體日志采集zincsearch的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
GO 使用Webhook 實現(xiàn)github 自動化部署的方法
這篇文章主要介紹了GO 使用Webhook 實現(xiàn)github 自動化部署的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
Go語言同步等待組sync.WaitGroup結(jié)構(gòu)體對象方法詳解
這篇文章主要為大家介紹了Go語言同步等待組sync.WaitGroup結(jié)構(gòu)體對象方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
Go 實現(xiàn)一次性打包各個平臺的可執(zhí)行程序
這篇文章主要介紹了Go 實現(xiàn)一次性打包各個平臺的可執(zhí)行程序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang如何實現(xiàn)任意進制轉(zhuǎn)換的方法示例
進制轉(zhuǎn)換是人們利用符號來計數(shù)的方法,進制轉(zhuǎn)換由一組數(shù)碼符號和兩個基本因素“基數(shù)”與“位權(quán)”構(gòu)成,這篇文章主要給大家介紹了關(guān)于Golang如何實現(xiàn)10進制轉(zhuǎn)換62進制的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí)學(xué)習(xí),下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09

