V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
neochau
V2EX  ›  Go 编程语言

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

  •  
  •   neochau · 2019-07-10 12:59:43 +08:00 · 2690 次点击
    这是一个创建于 1723 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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(&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 实时展示日志)

    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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1012 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:58 · PVG 03:58 · LAX 12:58 · JFK 15:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.