Go語言一個輕便的實時日誌類似slack收集應用
wslog原理
- 利用github.com上無數的slack hook 日誌工具sdk
- 遵循 slack hook API 規範 https://api.slack.com/incoming-webhooks
- wslog暴露Http API來收集slack hook api 規範的json日誌
- wslog提供websocket API像前端實時展示收集的日誌,提供http api 展示搜尋歷史日誌
視訊DEMO
視訊演示地址 https://www.bilibili.com/video/av57474467
1. 為什麼要開發這個應用
我們程式設計師再開發中需要不停的檢視日誌來解決bug,我在google上一直都沒有找到一款輕便簡潔有效的日誌收集應用. 而這款應用可以結局一下疼點:
-
- linux下檢視日誌學習曲線較陡, tail/cat/grep/sed 命令眼花繚亂
-
- ELK日誌伺服器部署困難繁瑣,其次對機器的效能記憶體要求很高,ELK基於elasticSearch/java記憶體無底洞.
-
- 使用Slack Hook收集日誌: 國內網路載入slack介面非常吃力,各種js/css下載失敗,更甚對於免費使用者日誌數量還有數量條數限制(<10000條).
-
- 釘釘Bot Hooks收集日誌: 釘釘辦公工具是大資本加剝削工薪階級的工具(哈哈),你怎麼能使用釘釘來解析日誌的收集展示呢?
2. wslog的優勢
2.1 部署簡單
- wslog 後端基於golang開發,一次編譯多平臺可執行檔案.
- wslog UI基於瀏覽器,支援任意平臺.
- wslog 資料庫使用SQLite3和go語言記憶體資料庫,沒有任何資料庫運維工作和資料庫限制.
前端程式碼和後端程式碼都編譯到一個可執行二進位制檔案中,雙擊二進位制檔案就可以執行.
2.2 多平臺支援
wslog 支援單機執行,可以支援windows/linux伺服器執行. 支援各種主流作業系統windows/linux/mac/中標麒麟/國產linux作業系統. 支援任意架構arm/x86,支援樹莓派系統...
2.3 實時日誌輸出
wslog採用websocket通訊,像聊天工具那樣實時輸出日誌, 也可以在日誌歷史列表中快捷檢視日誌
2.4 日誌分類
日誌從功能來說,可分為診斷日誌、統計日誌、審計日誌. wslog日誌支援debug/info/warning/error/fatal等日誌級別
2.5 日誌全文檢索
wslog 可以輕鬆的在數百萬條日誌中快速的定位你的日誌
2.6 全面相容支援slack-hook日誌sdk
進入wslog->hook 建立hook,複製hook_url,把hook_url貼上替換之前slack_hook sdk 配置.
2.7 全面相容支援slack_hook API的第三方日誌收集SDK
- go: logrus slackrus
- python: slack-logger
- java: slack appender for Log4j
- C#: Microsoft.Extensions.Logging.Slack
- php: laravel/lumen slack日誌
- javascript: Slack logger nodejs library
- swift: SwiftyBeaver slack
3. 編譯/安裝
可以訪問線上demo網站 http://felix.mojotv.cn
3.1 go語言編譯安裝
設定環境變數
- 設定GOBIN
- 新增GOBIN到PATH環境變數
go get github.com/dejavuzhou/felix
felix ssh -h
felix sshw
3.2 mac 系統安裝執行
curl https://github.com/dejavuzhou/ ... arwin -o felix
sudo chmod +x felix
./felix sshw
3.3 linux 系統安裝執行
curl https://github.com/dejavuzhou/ ... linux -o felix
sudo chmod +x felix
./felix sshw
3.4 linux-arm(樹莓派) 系統安裝執行
curl https://github.com/dejavuzhou/ ... x-arm -o felix
sudo chmod +x felix
./felix sshw
3.5 window 系統安裝執行
curl https://github.com/dejavuzhou/ ... n.exe -o felix
./felix sshw
4. wslog 使用教程
這裡就以golang的logrus包為例子,包日誌介入wslog WebUI 實時顯示
4.1 啟動ws_log 服務
- 建立wslog 頻道
http://localhost:2222/#/wslog/channel
- 建立wslog hook 同時關聯到頻道
http://localhost:2222/#/wslog/hook
- 複製hook url 地址
4.2 配置logrus slack
slackHook := "http://localhost:2222/api/wslog/hook-api?_t=B5tCwWtHKgHdhYQ4cmr5JQ"
func initSlackLogrus() {
slackHook := "http://localhost:2222/api/wslog/hook-api?_t=B5tCwWtHKgHdhYQ4cmr5JQ"
lvl := logrus.DebugLevel
//logrus.SetFormatter(&logrus.JSONFormatter{})
//file, _ := os.Create(time.Now().Format("2006_01_02.log"))
//logrus.SetOutput(file)
logrus.SetLevel(lvl)
//給logrus新增SlackrusHook
logrus.AddHook(&slackrus.SlackrusHook{
HookURL: slackHook,
AcceptedLevels: slackrus.LevelThreshold(lvl),
Channel: "#felix",
IconEmoji: ":shark:",
Username: "felixAPP",
})
}
4.3 在go中輸出日誌
//使用logrus 包方法列印日誌
title := utils.RandomString(34)
logrus.WithField("time", time.Now()).WithField("fint", 1).WithField("fBool", false).WithField("fstring", "awesome").WithField("fFloat", 0.45).WithError(fmt.Errorf("error fmt format: %s", "felix is awesome")).Error("this mgs ", "error ", title)
4.4 在網頁中檢視實時日誌,或者檢視檢索歷史日誌
http://localhost:2222/#/wslog-msg-rt
檢視websocket 實時日誌http://localhost:2222/#/wslog-msg-hi
檢視歷史日誌
4.1 WebUI簡介
websocket-vuejs-table展示實時日誌(本來打算做一個聊天視窗介面的,發現css比較複雜,前端知識比較平庸,所以就是elementUI的table實時展示日誌)
API Hook
歷史日誌
4.2 PHP laravel/lumen 教程
編輯laravel/lumen .env
配置檔案
設定 LOG_SLACK_WEBHOOK_URL
LOG_SLACK_WEBHOOK_URL=http://localhost:2222/api/wslo ... mr5JQ
5. 未來展望
更具系統複雜程度錯容易到難排序
- 演變成一個安裝配置簡潔實時日誌展示工具
- 接入公司賬號做一個公司內部的日誌收集平臺
- 2C:做一個免費的網頁版聊天工具,同時也可以做日誌收集平臺
- 2C:做一個國內版的slack聊天工具,不同於釘釘/微信, 可以像slack那樣利用API-HOOK開發各種各樣的小應用
程式碼地址dejavuzhou/felix 歡迎提出issue 或者 PR 其他更多功能詳解我的其他部落格
原文來自我的部落格網站tech.mojotv.cn
相關文章
- 【Go】類似csv的資料日誌元件設計Go元件
- Go 語言的 10 個實用技巧Go
- ThinkGo:一個輕量級的 Go 語言 MVC 框架GoMVC框架
- Docker應用容器日誌資訊收集Docker
- 簡便地Android崩潰日誌收集Android
- 《自然》證實:計算機語言更類似人類語言計算機
- 如何實現一個高效的本地日誌收集程式
- Go語言核心36講(Go語言實戰與應用一)--學習筆記Go筆記
- 分享一個收集 Nginx 日誌的 ExporterNginxExport
- Go語言的 10 個實用技術Go
- gmcache一個用go寫的分散式快取,類似memcachedGo分散式快取
- Data Guard備庫日誌的實時應用與非實時應用
- 輕量級日誌收集方案LokiLoki
- 一個完整的go 日誌元件Go元件
- Slack是用Hack語言開發
- Pants:類似Maven但支援多個語言的構建Maven
- Amazon Kinesis Data Streams 實現跨賬戶應用日誌收集應用日誌
- tiny4j:一個輕量級的類似Spring的實現Spring
- 採用 SwiftNIO 實現一個類似 Express 的 Web 框架SwiftExpressWeb框架
- 【Go語言探險】線上奇怪日誌問題的排查Go
- Go語言核心36講(Go語言實戰與應用七)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用八)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用二)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用四)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用五)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十七)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十八)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用九)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十一)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十九)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用二十)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十二)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十三)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十四)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十五)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十六)--學習筆記Go筆記
- 用Go語言寫一個Windows的外掛(上)GoWindows
- 用Java 19實現類似Go併發 - mccueJavaGo