gos-log高性能大日志检索中台
gos-log
基于Go语言的轻量级高性能的大日志检索系统
开源地址
gos-log
https://gitee.com/dianjiu/gos-log
https://github.com/dianjiu/gos-log
gos-log-vue
https://gitee.com/dianjiu/gos-log-vue
https://github.com/dianjiu/gos-log-vue
演示地址
http://goslog.dianjiu.org.cn
账号:admin
密码:admin
演示截图
登陆页

客户端

项目管理

日志查找

项目构建
gos-log
# 进入go工作空间
cd ~/codes/go/src
# 配置go国内代理
sudo vim ~/.bash_profile
# 新增如下内容
export GOPATH=/Users/dianjiu/Codes/go
export GOROOT=/usr/local/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://goproxy.cn
export GO111MODULE=on
# 使配置生效
source ~/.bash_profile
# 安装beego依赖
go get github.com/astaxie/beego
go get github.com/beego/bee
# 克隆项目
git clone https://github.com/dianjiu/gos-log.git
# 分别进入项目目录
cd gos-log/logs #进入服务端
cd gos-log/logc #进入客户端
# 启动服务
bee run
gos-log-vue
# 克隆项目
git clone https://github.com/dianjiu/gos-log-vue.git
# 进入项目目录
cd gos-log-vue
# 安装依赖
yarn install
# 启动服务
yarn run dev
项目部署
gos-log
# 打包服务端
cd gos-log/logs
bee pack -be GOOS=linux
# 打包客户端
cd gos-log/logc
bee pack -be GOOS=linux
# 准备数据库 见gos-log项目下的sql文件夹
gos-log-logs
# 解压缩
tar -zxf logs.tar.gz -C ./
# 授权
chmod 777 logs
# 修改数据库配置
sudo vim conf/app.conf
# 启动
nohup ./logs >> logs.log &
gos-log-logc
# 解压缩
tar -zxf logc.tar.gz -C ./
# 授权
chmod 777 logc
# 启动
nohup ./logc >> logc.log &
gos-log-vue
# 打包构建
yarn run build
# 把dist目录下的文件拿到服务器部署即可
# nginx部署如下nginx.conf
server {
listen 2022;
server_name localhost;
location / {
root /web/gos-log/vue;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:2021;
}
}
更新日志
V2.0.0
1、优化压缩算法、解决压缩包路径过长问题
2、优化并行查询速度,查询全部服务器理论耗时于单台服务相当
3、实现客户端启动即注册,及服务端健康检查功能
4、优化向下截取行可输入,解决默认1000行有时不够用的问题
5、增加安全性,服务端所有接口实现token验证,客户端仅支持注册的服务端进行调用
6、有机会的话做一下权限管理,不同的用户(即不同的部门成员)仅可看到和查询该部门客户端下的服务器日志
V1.0.0
1、基于bufio实现高性能的日志检索算法
2、基于beego实现服务端客户端分离设计
3、基于vue2.0实现服务端前后端分离设计
4、基于DBMan实现数据库表关系设计
5、实现多种数据库适配,支持MySQL、PostgreSQL
6、实现服务端的登陆登出功能
7、实现服务端的客户端增删改查、分页、注册接口
8、实现服务端的项目日志的增删改查、分页接口
9、实现服务端的项目日志单台和全部客户端的查询
10、实现客户端的日志检索功能
11、实现客户端的服务注册功能
性能测试
系统硬件
| CPU | Intel Core i5-10210U CPU @ 1.60GHz × 8 |
|---|---|
| 内存 | 16G |
| 硬盘 | 512.1 GB |
| 操作系统 | Ubuntu 20.04.2 LTS 64位 |
| GNOME版本 | 3.36.8 |
系统环境
| Java环境 | ORACLE JDK13.0.2 |
|---|---|
| Go环境 | GO1.15.7 linux/amd64 |
| Python环境 | Python 3.8.5 |
性能对比
单文件逐行读取 17.8G test.log (单线程读取)
| 语言 | test1 | test2 | test3 | test4 | test5 | 总耗时 | 平均耗时 |
|---|---|---|---|---|---|---|---|
| Go | 32.99s | 34.24s | 30.33s | 31.21s | 35.70s | 164.16s | 32.83s |
| Python | 32分钟还没执行完 | ||||||
| Java | 226s | 206s | 153s | 219s | 183s | 987s | 197.4s |
关于点九
个人站点
http://dianjiu.co/
个人邮箱
dianjiu@dianjiu.cc
公众号

交流群

项目致谢
gos-log高性能大日志检索中台的更多相关文章
- 超轻量级、高性能C日志库--EasyLogger
[ 声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:armink.ztl@gmail.com] EasyLogger 1. 介绍 EasyLogger 是一款超轻量级(ROM<1.6K, ...
- SQL Server 2008 收缩日志 清空删除大日志文件 转载
SQL Server 2008 收缩日志 清空删除大日志文件 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)Ba ...
- 17.2.2.1 The Slave Relay Log Slave中继日志
17.2.2.1 The Slave Relay Log Slave中继日志 中继日志, 像binary log,有一组文件组成包含events 描述数据库的修改,和一个index文件包含所有使用过的 ...
- mysql错误日志/var/log/mariadb/mariadb.log,二进制日志
mariadb-日志 IT_luo关注0人评论65人阅读2018-10-15 08:59:03 mariadb日志 mariadb日志: 1.查询日志:query log: 2.慢查询日志:slo ...
- 成功配置TOMCAT的LOG4J日志系统,格式:HTML+每天以YYYY-MM-DD.LOG命名的日志文件
关于log4j.properties文件在web项目中放的位置,找过很多,最后实践结果是: 一.web项目 二.放在src的目录里面,然后项目生成后会自动在\WEB-INF\classes文件里有份l ...
- 日志检索实战 grep sed
日志检索实战 grep sed 参考 sed命令 使用 grep -5 'parttern' inputfile //打印匹配行的前后5行 grep -C 5 'parttern' inputfile ...
- Fortify漏洞之 Log Forging(日志伪造)
继续对Fortify的漏洞进行总结,本篇主要针对 Log Forging(日志伪造)的漏洞进行总结,如下: 1.1.产生原因: 在以下情况下会发生 Log Forging 的漏洞: 1. 数据从一个不 ...
- tail -fn 1000 test.log | grep '关键字' 按照时间段 sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log /var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
Linux 6种日志查看方法,不会看日志会被鄙视的 2020-02-11阅读 7.3K0 作为一名后端程序员,和Linux打交道的地方很多,不会看Linux日志,非常容易受到来自同事和面试官的嘲讽 ...
- linux下 大日志文件查看与搜索---less
场景 有一个几十m的大日志文件,里边的记录是按时间排序的. 现在需要找到其中,不知道在什么位置的一条错误消息.这时候,想把内容拷出来都费劲,就算拷出来了,一般的编辑器也难以hold住这么大的文件.这时 ...
随机推荐
- springboot实现自定义拦截器
为了更容易理解,我们通过一个代码例子来演示. 例子: 我们现在要访问http://localhost:8080/main.html页面,这个页面需要登录之后才能够浏览,没登录不能浏览. 那么现在问题来 ...
- 使用Go module和GoLand初始化一个Go项目
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 Golang是一门优秀的语言,特别是在并发编程上,得益于它的协程和channel等,非常方便易用.它通过go m ...
- Linux中查看网络命令
tcp三次握手,所以一直在listening,在等待信号 udp是没有listening状态的,因为不管你在不在都会发信息给你. netstat -r =route -n 可以查看路由
- B站英文教学视频的字幕获取 学习必看!
前言 最近在B站看一些纯英文的课程,视频课程有的是纯中文字幕的,有的是纯英文字幕的.由于英文的重要性,一份字幕的文档在我们观看后,留着日后粗略再读是很有益处的.但是为了得到这个英文字幕走了许多弯路.最 ...
- VueJs(16)---Nuxt引入mavon-editor插件实现markdown功能
Vue引入mavon-editor插件实现markdown功能 说明 mavon-editor是一款基于Vue的markdown编辑器,因为当前项目是采用Nuxt,所以这里所展示的教程是针对Nuxt引 ...
- 视频云峰会|“科技 X 艺术” 的颗粒度体验是什么?
科技日新月异,交互艺术新门类也随之蓬勃,当代艺术创作者不断凭借其想象力和跨学科能力,致力科技与艺术的融合创作. 7 月 10 日,在北京,2021 阿里云视频云全景创新峰会暨全球视频云创新挑战赛决赛颁 ...
- Nginx:Nginx日志切割方法
Nginx的日志文件是没有切割(rotate)功能的,但是我们可以写一个脚本来自动切割日志文件. 首先我们要注意两点: 1.切割的日志文件是不重名的,所以需要我们自定义名称,一般就是时间日期做文件名. ...
- Mybatis学习(1)开发环境搭建
什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML ...
- Python+unittest+excel
接口测试设计思想: 框架结构如下: 目录如下: readme: config下的run_case_config.ini 文件说明: run_mode: 0:获取所有sheet页 1: if case_ ...
- leetcode 数组分成和相等的三个部分
题目: 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + . ...