ewsq / glogcenter

一个golang实现的日志中心glogcenter,简称GLC,资源占用低,性能高,目标是作为传统ELK的替代方案

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

缘起

日志中心,一直是用传统的三件套ELK,感激之余,终究还是不理想(定制安装并非简单、页面打开初始化太慢,界面操作不习惯,最主要的是资源占用太厉害,甚至隔段时间就会崩溃),替代品总是找不到。终于,用go试写一个logcenter,结果各种优异表现确实是惊艳到了自己,故起名glogcenter,简称GLC,开仓建库

目标: 逐步替换线上的ELK

Golang Docker Pulls GitHub release License

特点

  • 使用golang实现,具备go的各种特性优势,关键是省资源、性能高
  • 借助goleveldb做数据保存,结合日志写多读少特点稍加设计,真是快
  • 关键词全文检索,支持中文分词(使用jiebago进行分词),毫秒级响应,自然流畅
  • 日志吞食量每秒近万条,闲时建索引速度每秒数千条,基本能满足大多项目需要
  • 支持个性化环境变量开关控制,支持日志仓自动化维护,灵活省心
  • 提供docker镜像,支持容器化部署,方便之极
  • 提供java项目日志收集包,java项目闭环支持
  • 提供golang项目日志收集包,golang项目闭环支持
  • 支持从RabbitMQ收取日志信息,满足更多闭环需求
  • 内置提供简洁的VUE实现的日志查询管理界面
  • 支持多服务集群模式部署,确保服务及数据的冗余性

docker单机部署模式简易示例

# 简单示例
docker run -d -p 8080:8080 gotoeasy/glc

# 外挂数据目录
docker run -d -p 8080:8080 -v /glc:/glogcenter gotoeasy/glc

docker集群部署模式简易示例

# 以下3台以集群方式启动,配置本节点地址及关联节点地址即可
# 采用“乐观集群”方式,简易选主(简单排序)+日志群发(忽略失败)+数据补偿(隔日历史数据)

# 服务1
docker run -d -p 8080:8080 -e GLC_CLUSTER_MODE=true -e GLC_SERVER_URL=http://172.27.59.51:8080 \
       -e GLC_CLUSTER_URLS=http://172.27.59.51:8080;http://172.27.59.52:8080;http://172.27.59.53:8080 \
       gotoeasy/glc
# 服务2
docker run -d -p 8080:8080 -e GLC_CLUSTER_MODE=true -e GLC_SERVER_URL=http://172.27.59.52:8080 \
       -e GLC_CLUSTER_URLS=http://172.27.59.51:8080;http://172.27.59.52:8080;http://172.27.59.53:8080 \
       gotoeasy/glc
# 服务3
docker run -d -p 8080:8080 -e GLC_CLUSTER_MODE=true -e GLC_SERVER_URL=http://172.27.59.53:8080 \
       -e GLC_CLUSTER_URLS=http://172.27.59.51:8080;http://172.27.59.52:8080;http://172.27.59.53:8080 \
       gotoeasy/glc

docker启动环境变量

  • GLC_STORE_NAME_AUTO_ADD_DATE日志仓是否自动按日存储,默认true
  • GLC_SAVE_DAYS日志仓按日存储自动维护时的保留天数(0~180),0表示不自动删除,默认180
  • GLC_ENABLE_LOGIN是否开启用户密码登录功能,默认false
  • GLC_USERNAME查询界面登录用的用户名,默认glc
  • GLC_PASSWORD查询界面登录用的密码,默认GLogCenter100%666
  • GLC_ENABLE_SECURITY_KEY日志添加的接口是否开启API秘钥校验,默认false
  • GLC_HEADER_SECURITY_KEYAPI秘钥的header键名,默认X-GLC-AUTH
  • GLC_SECURITY_KEYAPI秘钥,默认glogcenter
  • GLC_ENABLE_AMQP_CONSUME是否开启rabbitMq消费者接收日志,默认false
  • GLC_AMQP_ADDR消息队列rabbitMq连接地址,例:amqp://user:password@ip:port/,默认空白
  • GLC_AMQP_JSON_FORMAT消息队列rabbitMq消息文本是否为json格式,默认true
  • GLC_CLUSTER_MODE是否集群模式启动,默认false
  • GLC_SERVER_URL集群模式时的本节点服务地址,默认空白
  • GLC_CLUSTER_URLS集群模式时的关联节点服务地址,多个时;分隔,默认空白
  • GLC_LOG_LEVEL日志级别,可设定值为debug/info/warn/error,默认info
  • GLC_GOMAXPROCS使用最大CPU数量,设定值不在实际范围内时按最大值看待,默认最大值,通常非docker方式启动使用

命令行启动参数(适用0.6.*及以上版本)

  • 支持命令行参数-v查看版本
  • 在Linux系统下支持命令行参数-d以后台方式启动
  • 在Linux系统下支持命令行参数stop关闭程序
  • 在Linux系统下支持命令行参数restart重启程序
  • 服务端口可通过环境变量GLC_SERVER_PORT设定,默认8080
  • 其他环境变量同以上docker启动环境变量

接口

  • /glc/v1/log/add日志添加,POSTapplication/json
    字段system: 字符串,对应页面的分类
    字段date: 字符串,对应页面的日期时间
    字段text: 字符串,对应页面的日志内容

使用logbackjava项目,支持日志收集,确保主次版本和GLC版本一致

<!-- pom坐标 -->
<dependency>
    <groupId>top.gotoeasy</groupId>
    <artifactId>glc-logback-appender</artifactId>
    <version>0.8.0</version>
</dependency>
<!-- logback配置例子1,发送至 glogcenter -->
<appender name="GLC" class="top.gotoeasy.framework.glc.logback.appender.GlcHttpJsonAppender">
    <glcApiUrl>http://127.0.0.1:8080/glc/v1/log/add</glcApiUrl> <!-- 可通过环境变量 GLC_API_URL 设定 -->
    <glcApiKey>X-GLC-AUTH:glogcenter</glcApiKey>                <!-- 可通过环境变量 GLC_API_KEY 设定 -->
    <system>Demo</system>                                       <!-- 可通过环境变量 GLC_SYSTEM 设定 -->
    <layout>
        <pattern><![CDATA[%p %m %n]]></pattern>
    </layout>
</appender>

<!-- logback配置例子2,发送至 rabbitmq -->
<appender name="GLC" class="top.gotoeasy.framework.glc.logback.appender.GlcAmqpAppender">
    <amqpHost>127.0.0.1</amqpHost>                <!-- 可通过环境变量 GLC_AMQP_HOST 设定 -->
    <amqpPort>5672</amqpPort>                     <!-- 可通过环境变量 GLC_AMQP_PORT 设定 -->
    <amqpUser>rabbitmqUsername</amqpUser>         <!-- 可通过环境变量 GLC_AMQP_USER 设定 -->
    <amqpPassword>rabbitmqPassword</amqpPassword> <!-- 可通过环境变量 GLC_AMQP_PASSWORD 设定 -->
    <system>Demo</system>                         <!-- 可通过环境变量 GLC_SYSTEM 设定 -->
    <layout>
        <pattern><![CDATA[%p %m %n]]></pattern>
    </layout>
</appender>

使用golang语言的项目,提供工具包,开箱即用

# 引入工具包
go get github.com/gotoeasy/glang

# 按需设定环境变量
export GLC_API_URL='http://127.0.0.1:8080/glc/v1/log/add'
export GLC_API_KEY='X-GLC-AUTH:glogcenter'
export GLC_SYSTEM=demo
export GLC_ENABLE=true
export GLC_LOG_LEVEL=debug # 日志级别(trace/debug/info/warn/error/fatal)
// 方式1: 通过 cmn.Debug(...)、cmn.Info(...)等方式,打印日志的同时发送至日志中心
// 方式2: 通过 cmn.NewGLogCenterClient()创建客户端对象后使用
//        更多内容详见文档 https://pkg.go.dev/github.com/gotoeasy/glang

import "github.com/gotoeasy/glang/cmn"

func main() {
	cmn.Info("启动WEB服务")
	err := cmn.NewFasthttpServer().Start()
	if err != nil {
		cmn.Fatalln("启动失败", err)
	}
}

更新履历

开发版latest

  • 界面优化
  • 多语言
  • 分词优化
  • 日志审计
  • 集群支持动态删减节点(或是页面管理删除)

版本0.8.5

  • 后端配合前端路由,设定自动跳转改善使用体验

版本0.8.4

  • 代码整理优化,前后端升级依赖包
  • golang编译器升级至1.19.4
  • 运行时基础镜像alpine升级至3.17

版本0.8.3

  • 增加CPU使用限制的配置GLC_GOMAXPROCS,默认使用最大CPU数量,通常非docker启动方式使用
  • 代码优化,升级依赖包

版本0.8.2

  • 优化部分场景下的检索性能
  • 修复一些小问题

版本0.8.1

  • 代码重构改善
  • 支持日志级别配置GLC_LOG_LEVEL,可设定值为debug/info/warn/error,默认info

版本0.8.0

  • 集群支持动态扩增节点,日志自动转发
  • 集群支持自动选举Master
  • 隔日之前的历史日志仓自动检查同步

版本0.7.0

  • 增加日志转发功能,支持多服务集群模式部署,确保服务及数据保存的冗余性

版本0.6.0

  • 升级使用Go1.19
  • 优化执行文件体积,此版本考虑直接运行发布,以适用更多部署场景
  • 支持命令行参数使用-v查看版本
  • 在Linux系统下支持命令行参数使用-d以后台方式启动
  • 在Linux系统下支持命令行参数使用stop停止程序
  • 在Linux系统下支持命令行参数使用restart重启程序
  • logbackjar包,支持通过设定环境变量GLC_ENABLE=false关闭日志发送功能

版本0.5.0

  • 增加用户密码登录功能,可设定是否开启用户密码登录
  • 日志按日分仓存储时,默认自动维护保存最多180天,自动维护时不能手动删除日志仓
  • 改善日志仓管理页面的展示
  • 删除旧版接口/glc/add/glc/searchmaven公共仓库包同步修改并更新版本
  • Docker镜像设定默认时区Asia/Shanghai

版本0.4.0

  • 添加相应版本的maven公共仓库包,java项目日志可推至RabbitMQ
  • 添加RabbitMQ简单模式消费者,开启后能从RabbitMQ获取日志
  • 添加服务接口/glc/v1/log/add,接收JSON格式日志以便后续扩展
  • 添加日志仓管理功能,页面支持查看、删除等操作

版本0.3.0

  • 全面重构,不考虑旧版兼容
  • 控制索引文件数,避免大量日志时打开文件过多而崩溃
  • 降低索引文件的磁盘空间占用,优化索引创建速度
  • 检索页面,显示更友好的查询结果提示
  • glc-logback-appender的设定,可通过配置环境变量来覆盖

版本0.2.0

  • DIY了一个logo
  • 接口/glc/add添加system参数
  • 提供简洁的日志查询界面
  • 当前版设计为接收多个项目的日志,界面栏目为分类

初版0.1.0

  • 使用golang实现,就是快
  • 借助goleveldb做数据保存,结合日志写多读少特点稍加设计,真是快
  • 日志量虽大,却是真心节省内存资源
  • 常用的无条件查询最新日志,快到麻木无感
  • 关键词全文检索,支持中文分词,反向索引以空间换时间,快到麻木无感
  • 提供docker镜像支持容器化部署,方便之极
  • 提供java项目日志收集包,日志都发来发来发来
  • 服务接口/glc/add添加日志
  • 服务接口/glc/search查询日志

About

一个golang实现的日志中心glogcenter,简称GLC,资源占用低,性能高,目标是作为传统ELK的替代方案

License:GNU Lesser General Public License v3.0


Languages

Language:Go 84.8%Language:Vue 12.0%Language:JavaScript 2.3%Language:HTML 0.9%