Giter Site home page Giter Site logo

gotoeasy / glogcenter Goto Github PK

View Code? Open in Web Editor NEW
78.0 78.0 24.0 4.1 MB

一个golang实现的日志中心glogcenter,简称GLC,资源占用低,性能高。作为传统ELK的替代方案,上至央企大项目下至本地开发调试,已历经众多案例磨炼,表现稳定出色,达生产级别应用要求。

Home Page: https://glc.gotoeasy.top

License: GNU Lesser General Public License v3.0

Go 47.53% HTML 0.25% Vue 26.28% JavaScript 8.28% Java 6.45% CSS 4.81% SCSS 3.72% Python 2.69%
glc glogcenter logcenter

glogcenter's People

Contributors

gotoeasy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

glogcenter's Issues

支持下载功能

因为服务器的磁盘空间一般不会存很长时间且很大的日志文件, 我们的服务器一般只保留7天的日志数据,
为了避免日志过期, 在检索到某些有问题的日志, 是否可以支持下载到本地, 以后慢慢处理呢?

我的想法是第一列前面加多选框, 可以让用户自己选择需要下载的行, 支持一键勾选当前页所有行 , 可以避免一次下载数据量太大把服务搞崩, 可以限制一次最多选择500条, 如果一行不是很长的话, 500条应该很小, 可以直接导出, 如果很大的话, 也可以是zip包.

关于镜像封装的疑问

image
image

因为电脑重启,我昨天测试的容器已经停止了。重启的时候启动的pid 1不是编译后的可执行文件。我上hub.docker.com查看了一下作者的镜像构建,发现了前面构建了一层CMD ["/bin/sh"],虽然ENTRYPOINT 会在镜像初始化时覆盖cmd指令,但是重启的时候会以pid 1/bin/sh启动。
如果我没理解错的话,这一层应该是多余的,非常感谢作者大大开源此项目,期待后续检索和字段功能的优化。

glc stop 不生效问题

image

当服务已经起来的时候 , 然后我想停止服务 , ./glc stop ,然后其实是走不到kill 逻辑部分的 因为之前判断了端口, 因为端口在所有直接退出了 ./glc

客户端

客户端需要怎么配置才能采集日志?
比如nginx日志。

搜索不到

启动命令 docker run -d -p 9090:8080 -v ./logs:/glogcenter gotoeasy/glc

./logs 下面的有a、b、c....多个目录,目录结构如下
./logs/a/log/root.log
./logs/b/log/root.log
./logs/c/log/root.log

里面有几十mb的日志,为啥我搜不到呢

日志仓也能找到
image

但是我去搜索,没任何反应,有点晕

集成springboot时,启动报错

集成springboot,配置好地址,启动项目的时候报错:
image
,不过登录到glogcenter中心之后,还是能看到推动的日志

有没有办法自定义字段/属性

有没有办法自定义字段/属性

比如说,我的接口访问日志,原来使用ES Create Index,就是很吃内存。

我像在glc中,兼容多种日志,如何处理?

/**
     * 日志id
     */
    @Schema(description = "日志ID")
    private String id;

    /**
     * 访问的操作
     *
     * @see AccessLogger#value()
     */
    @Schema(description = "操作")
    private String action;

    /**
     * 描述
     *
     * @see AccessLogger#describe()
     */
    @Schema(description = "描述")
    private String describe;

    /**
     * 访问对应的java方法
     */
    @Schema(description = "请求方法名")
    private String method;

    /**
     * 访问对应的java类
     */
    @Schema(description = "请求类")
    private String target;

    /**
     * 请求的参数,参数为java方法的参数而不是http参数,key为参数名,value为参数值.
     */
    @Schema(description = "请求参数")
    private Map<String, Object> parameters;

    /**
     * 请求者ip地址
     */
    @Schema(description = "请求中IP")
    private String ip;

    /**
     * 请求的url地址
     */
    @Schema(description = "请求地址")
    private String url;

    /**
     * http 请求头集合
     */
    @Schema(description = "请求头")
    private Map<String, String> httpHeaders = new HashMap<>();

    @Schema(description = "上下文")
    private Map<String, String> context = new HashMap<>();

    /**
     * http 请求方法, GET,POST...
     */
    @Schema(description = "请求方法")
    private String httpMethod;

    /**
     * 响应结果,方法的返回值
     */
    //private Object response;

    /**
     * 请求时间戳
     *
     * @see System#currentTimeMillis()
     */
    @Schema(description = "请求时间")
    private long requestTime;

    /**
     * 响应时间戳
     *
     * @see System#currentTimeMillis()
     */
    @Schema(description = "响应时间")
    private long responseTime;

    /**
     * 异常信息,请求对应方法抛出的异常
     */
    @Schema(description = "异常栈信息")
    private String exception;

我的系统日志

 @Schema(description = "ID")
    private String id;

    @Schema(description = "模块")
    private String mavenModule;

    @Schema(description = "名称")
    private String name;

    @Schema(description = "线程名")
    private String threadName;

    @Schema(description = "日志级别")
    private String level;

    @Schema(description = "类名")
    private String className;

    @Schema(description = "方法名")
    private String methodName;

    @Schema(description = "行号")
    private int lineNumber;

    @Schema(description = "代码地址")
    private String java;

    @Schema(description = "日志内容")
    private String message;

    @Schema(description = "异常栈")
    private String exceptionStack;

    @Schema(description = "日志时间")
    private long createTime;

    @Schema(description = "线程ID")
    private String threadId;

    @Schema(description = "上下文")
    private Map<String, String> context;

带有换行符的字符串无法搜索

image image

第一张图是我不带条件搜索出来的结果,里面有带有换行符的日志内容
第二张图是我加了条件,带有换行符的结果没有搜索出来
用最新版本的docker部署

system不支持中文

如题,我看了一下是存储的时候存储桶将全部都分词了,这里system可否做成可选择分词,也可不分词的模式呢?毕竟中文在系统过多的时候还是有用的

建议在数据库添加一个level字段,方便按DEUBG、INFO等不同级别查询

image
在Appender中,从event.getLevel().levelStr可以拿到日志级别。

GlcHttpJsonAppender 的submitToGlogCenter()方法
1、添加Stirng level参数
2、http请求添加level传参

GlcAmqpAppender 的sendToRabbitMQ()方法添加Stirng level参数
1、添加Stirng level参数
2、http请求添加level传参

由于不会go语法,不知道go那边和数据库怎么接收处理,帮不上忙。
仅自己的一点小小建议。

日志只能显示前一百条

日志只能显示前一百条,停止自动查询,往下拉仍然无法加载下面的日志,dockers方式部署的。还有可以按照时间倒序排查看嘛,比如倒序

1700797813711

如何命中时间戳索引完成日志检索?

image
image
image

如图所示,尝试了多种时间字段的格式的输入,均发现无法通过时间日期字段检索出日志,只能通过系统名称检索。另外通过“近10分钟”选项检索出来的也不符合时间日期的筛选:

# 示例中发送测试数据的参考脚本中的时间格式
curl -X POST -d '{"system":"demo", "date":"20230816 06:44:54.456,"text":"demo log text"}' \
  -H "Content-Type:application/json" http://127.0.0.1:8080/glc/v1/log/add

# filebeat中生成的时间格式
curl -X POST -d '{
  "@timestamp": "2023-08-16T06:44:54.389Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.9.0"
  },
  "system": "iot-sync-local-deployment",
  "date": "2023-08-16T06:44:54.389Z",
  "message": "2023-08-16 06:44:54.386 DEBUG 1 --- [p-nio-80-exec-4] o.s.web.servlet.DispatcherServlet        : Completed 200 OK",
  "text": "2023-08-16 06:44:54.386 DEBUG 1 --- [p-nio-80-exec-4] o.s.web.servlet.DispatcherServlet        : Completed 200 OK"
}' \
  -H "Content-Type:application/json" http://127.0.0.1:8080/glc/v1/log/add

是否是时间日期字段的填写问题?
docker镜像版本:gotoeasy/glc:0.10.2

请问是否存在特殊字符过滤?

image
我正在收集Python程序的日志信息,这里我捕获了堆栈信息,在控制台显示如上图。我在发起请求之前检查了请求信息,确实是带有堆栈信息,但是部分信息在前端显示的时候是空白的。如下图所示
image
image

一个关于版本号检测的建议

个人认为在glcui库里面内置版本检测提示稍微有点不合适,毕竟您的网站有时候会崩溃,而且有收集用户信息的链路了,不是很好,还是建议做成可选项或者优化掉这部分,个人拙见

bug: v0.10.1版本,按日志级别查询有误

我在代码中按四个级别打印了日志:
image

GlcHttpJsonAppender和GlcAmqpAppender都能成功发送、保存日志,

bug:
当使用GlcHttpJsonAppender记录器,搜索不到warn级别日志。(debug、info、error的可以搜索到)
当使得GlcAmqpAppender记录器,所有级别都搜索不了。

关于单应用多实例使用问题

大佬的日志确实使用起来很方便,目前使用的时候遇到各问题,对于微服务状态下,单个应用,启动了多个实例,目前的日志平台只有按照分类来进行区分(并且分类没有默认的提示,得手动输入),导致多个实例的日志全部混在一起了

以非docker的方式,本地打包到linux环境,无法运行

作者大大,请问一下,本地打包成linux环境运行包,打包过程无任何报错,在linux启动 运行包,项目无法启动,无任何报错信息,
请问是有什么需要额外配置的吗?
打包命令:
go build -o glc main.go

环境配置:
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\AppData\Local\go-build
set GOENV=C:\Users\AppData\Roaming\go\env
set GOEXE=
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=D:\Java\GoTools\GoPath\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=linux
set GOPATH=D:\Java\GoTools\GoPath
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-fPIC -m64 -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\AppData\Local\Temp\go-build810017971=/tmp/go-build -gno-record-gcc-switches

自己编译的服务没显示用户

就我问题多,见谅, 另外我昨天自己编译了一个服务器,发现管理员账户没显示用户列表 ,但是请求有数据

image

另外就是自己编译的代码查询界面也有异常
image

我是不是编译姿势不对 ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.