Golang Go语言一个轻便的实时日志类似slack收集应用
Golang Go语言一个轻便的实时日志类似slack收集应用
wslog 原理
- 利用 github.com 上无数的 slack hook 日志工具 sdk
- 遵循 slack hook API 规范 https://api.slack.com/incoming-webhooks
- wslog 暴露 Http API 来收集 slack hook api 规范的 json 日志
- wslog 提供 websocket API 像前端实时展示收集的日志,提供 http api 展示搜索历史日志
视频 DEMO
视频演示地址 https://www.bilibili.com/video/av57474467
1. 为什么要开发这个应用
我们程序员再开发中需要不停的查看日志来解决 bug,我在 google 上一直都没有找到一款轻便简洁有效的日志收集应用. 而这款应用可以结局一下疼点:
-
- linux 下查看日志学习曲线较陡, tail/cat/grep/sed 命令眼花缭乱
-
- ELK 日志服务器部署困难繁琐,其次对机器的性能内存要求很高,ELK 基于 elasticSearch/java 内存无底洞.
-
- 使用 Slack Hook 收集日志: 国内网络加载 slack 界面非常吃力,各种 js/css 下载失败,更甚对于免费用户日志数量还有数量条数限制(<10000 条).
-
- 钉钉 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
- go: logrus slackrus
- python: slack-logger
- java: slack appender for Log4j
- C#: Microsoft.Extensions.Logging.Slack
- php: laravel/lumen slack 日志
- javascript: Slack logger nodejs library
- swift: SwiftyBeaver slack
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 实时展示日志)
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. 未来展望
更具系统复杂程度错容易到难排序
- 演变成一个安装配置简洁实时日志展示工具
- 接入公司账号做一个公司内部的日志收集平台
- 2C:做一个免费的网页版聊天工具,同时也可以做日志收集平台
- 2C:做一个国内版的 slack 聊天工具,不同于钉钉 /微信, 可以像 slack 那样利用 API-HOOK 开发各种各样的小应用
代码地址dejavuzhou/felix 欢迎提出 issue 或者 PR 其他更多功能详解我的其他博客
原文来自我的博客网站tech.mojotv.cn
更多关于Golang Go语言一个轻便的实时日志类似slack收集应用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于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技术。通过合理的架构设计和高效的代码实现,可以打造出一个既实用又易于维护的日志收集工具。