Go語言一個輕便的實時日誌類似slack收集應用

jjjjerk發表於2019-07-10

ws_log_logo.png

wslog原理

  1. 利用github.com上無數的slack hook 日誌工具sdk
  2. 遵循 slack hook API 規範 https://api.slack.com/incoming-webhooks
  3. wslog暴露Http API來收集slack hook api 規範的json日誌
  4. wslog提供websocket API像前端實時展示收集的日誌,提供http api 展示搜尋歷史日誌

視訊DEMO

視訊演示地址 https://www.bilibili.com/video/av57474467

1. 為什麼要開發這個應用

我們程式設計師再開發中需要不停的檢視日誌來解決bug,我在google上一直都沒有找到一款輕便簡潔有效的日誌收集應用. 而這款應用可以結局一下疼點:

    1. linux下檢視日誌學習曲線較陡, tail/cat/grep/sed 命令眼花繚亂
    1. ELK日誌伺服器部署困難繁瑣,其次對機器的效能記憶體要求很高,ELK基於elasticSearch/java記憶體無底洞.
    1. 使用Slack Hook收集日誌: 國內網路載入slack介面非常吃力,各種js/css下載失敗,更甚對於免費使用者日誌數量還有數量條數限制(<10000條).
    1. 釘釘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

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實時展示日誌)

ws_log_history_log.png

API Hook

ws_log_hook_api.png

歷史日誌

ws_log_realtime_msg.png

4.2 PHP laravel/lumen 教程

編輯laravel/lumen .env 配置檔案 設定 LOG_SLACK_WEBHOOK_URL LOG_SLACK_WEBHOOK_URL=http://localhost:2222/api/wslo ... mr5JQ

5. 未來展望

更具系統複雜程度錯容易到難排序

  1. 演變成一個安裝配置簡潔實時日誌展示工具
  2. 接入公司賬號做一個公司內部的日誌收集平臺
  3. 2C:做一個免費的網頁版聊天工具,同時也可以做日誌收集平臺
  4. 2C:做一個國內版的slack聊天工具,不同於釘釘/微信, 可以像slack那樣利用API-HOOK開發各種各樣的小應用

程式碼地址dejavuzhou/felix 歡迎提出issue 或者 PR 其他更多功能詳解我的其他部落格

原文來自我的部落格網站tech.mojotv.cn

相關文章