Golang輕便的實時日誌相似slack收集應用

圖片描述

wslog原理

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

視頻DEMO

視頻演示地址 https://www.bilibili.com/vide...javascript

1. 爲何要開發這個應用

咱們程序員再開發中須要不停的查看日誌來解決bug,我在google上一直都沒有找到一款輕便簡潔有效的日誌收集應用.
而這款應用能夠結局一下疼點:php

    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語言內存數據庫,沒有任何數據庫運維工做和數據庫限制.

前端代碼和後端代碼都編譯到一個可執行二進制文件中,雙擊二進制文件就能夠執行.css

2.2 多平臺支持

wslog 支持單機運行,能夠支持windows/linux服務器運行.
支持各類主流操做系統windows/linux/mac/中標麒麟/國產linux操做系統.
支持任意架構arm/x86,支持樹莓派系統...前端

2.3 實時日誌輸出

wslog採用websocket通信,像聊天工具那樣實時輸出日誌,
也能夠在日誌歷史列表中快捷查看日誌vue

2.4 日誌分類

日誌從功能來講,可分爲診斷日誌、統計日誌、審計日誌. wslog日誌支持debug/info/warning/error/fatal等日誌級別java

2.5 日誌全文檢索

wslog 能夠輕鬆的在數百萬條日誌中快速的定位你的日誌node

2.6 全面兼容支持slack-hook日誌sdk

進入wslog->hook 建立hook,複製hook_url,把hook_url粘貼替換以前slack_hook sdk 配置.python

2.7 全面兼容支持slack_hook API的第三方日誌收集SDK

3. 編譯/安裝

能夠訪問在線demo網站 http://felix.mojotv.cnlinux

3.1 go語言編譯安裝

設置環境變量laravel

  • 設置GOBIN
  • 添加GOBIN到PATH環境變量
go get github.com/dejavuzhou/felix
felix ssh -h
felix sshw

3.2 mac 系統安裝運行

curl https://github.com/dejavuzhou/felix/releases/download/0.3/felix-amd64-darwin -o felix
sudo chmod +x felix
./felix sshw

3.3 linux 系統安裝運行

curl https://github.com/dejavuzhou/felix/releases/download/0.3/felix-amd64-linux -o felix
sudo chmod +x felix
./felix sshw

3.4 linux-arm(樹莓派) 系統安裝運行

curl https://github.com/dejavuzhou/felix/releases/download/0.3/felix-amd64-linux-arm -o felix
sudo chmod +x felix
./felix sshw

3.5 window 系統安裝運行

curl https://github.com/dejavuzhou/felix/releases/download/0.3/felix-amd64-win.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實時展現日誌)

realtime_log

API Hook

api hook

歷史日誌

history log

4.2 PHP laravel/lumen 教程

編輯laravel/lumen .env 配置文件
設置 LOG_SLACK_WEBHOOK_URL
LOG_SLACK_WEBHOOK_URL=http://localhost:2222/api/wslog/hook-api?_t=B5tCwWtHKgHdhYQ4cmr5JQ

5. 將來展望

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

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

代碼地址dejavuzhou/felix 歡迎提出issue 或者 PR 其餘更多功能詳解個人其餘博客

原文來自個人博客網站tech.mojotv.cn

相關文章
相關標籤/搜索