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

发布于 1周前 作者 sinazl 来自 Go语言

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

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/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(&amp;logrus.JSONFormatter{})
//file, _ := os.Create(time.Now().Format("2006_01_02.log"))
//logrus.SetOutput(file)
logrus.SetLevel(lvl)
//给 logrus 添加 SlackrusHook
logrus.AddHook(&amp;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/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语言一个轻便的实时日志类似slack收集应用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言一个轻便的实时日志类似slack收集应用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


针对您提到的Golang实现的轻便实时日志收集应用,类似于Slack的功能需求,以下是我的专业回复:

在Go语言中开发一个类似Slack的轻便实时日志收集应用是一个既实用又具有挑战性的项目。这类应用能够极大地提升开发效率,特别是在团队协作和问题排查中。

要实现这样的应用,首先需要构建一个健壮的日志系统。Go语言内置的log包提供了基础功能,但为了满足实时性和多平台支持,建议使用更强大的日志库,如logrus或zap。这些库支持结构化日志记录,并提供了丰富的配置选项,如日志级别、输出格式和位置等。

在实时性方面,可以利用WebSocket技术实现日志的实时推送和展示。WebSocket允许服务器和客户端之间建立持久的连接,从而能够实时地传输日志数据。

此外,为了兼容Slack的日志收集功能,可以遵循Slack Hook API规范,暴露HTTP API来接收和解析日志数据。这样,现有的Slack Hook日志工具SDK和第三方日志收集SDK都可以轻松地与您的应用集成。

综上所述,开发一个类似Slack的轻便实时日志收集应用需要综合运用Go语言的日志处理、网络通信和Web技术。通过合理的架构设计和高效的代码实现,可以打造出一个既实用又易于维护的日志收集工具。

回到顶部