Go 语言一个轻便的实时日志类似 slack 收集应用

2019-07-10 12:59:43 +08:00
 neochau

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 上一直都没有找到一款轻便简洁有效的日志收集应用. 而这款应用可以结局一下疼点:

2. wslog 的优势

2.1 部署简单

前端代码和后端代码都编译到一个可执行二进制文件中,双击二进制文件就可以执行.

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 语言编译安装

设置环境变量

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 服务

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 在网页中查看实时日志,或者查看检索历史日志

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/wslog/hook-api?_t=B5tCwWtHKgHdhYQ4cmr5JQ

5. 未来展望

更具系统复杂程度错容易到难排序

  1. 演变成一个安装配置简洁实时日志展示工具
  2. 接入公司账号做一个公司内部的日志收集平台
  3. 2C:做一个免费的网页版聊天工具,同时也可以做日志收集平台
  4. 2C:做一个国内版的 slack 聊天工具,不同于钉钉 /微信, 可以像 slack 那样利用 API-HOOK 开发各种各样的小应用

代码地址dejavuzhou/felix 欢迎提出 issue 或者 PR 其他更多功能详解我的其他博客

原文来自我的博客网站tech.mojotv.cn

2706 次点击
所在节点    Go 编程语言
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX