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...

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/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


golang后端
Go语言后端技术分享,希望 [链接]的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交...

mojotv.cn

447 声望
33 粉丝
0 条评论
推荐阅读
Go语言详解:HTTP断点续传多线程下载原理
原文地址:Go语言详解:HTTP断点续传多线程下载原理

mojotv_cn阅读 2.1k

前端如何入门 Go 语言
类比法是一种学习方法,它是通过将新知识与已知知识进行比较,从而加深对新知识的理解。在学习 Go 语言的过程中,我发现,通过类比已有的前端知识,可以更好地理解 Go 语言的特性。

robin23阅读 3.2k评论 6

封面图
Golang 中 []byte 与 string 转换
string 类型和 []byte 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。

机器铃砍菜刀24阅读 58k评论 2

年度最佳【golang】map详解
这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。

去去100216阅读 11.5k评论 2

年度最佳【golang】GMP调度详解
Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱, 虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的. 这篇文章将通过分析...

去去100215阅读 11.9k评论 4

万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide8阅读 1.7k

封面图
数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...

白鲸鱼9阅读 5.3k

mojotv.cn

447 声望
33 粉丝
宣传栏