7

Go 轻量级,高性能,低成本日志系统,适合小团队及个人项目

 3 years ago
source link: https://www.v2ex.com/t/798852
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Go

Go 轻量级,高性能,低成本日志系统,适合小团队及个人项目

  hopingtop · 1 天前 · 1411 次点击

提到日志系统最先想到的就是 ELK 。但是对于小团队或者个人使用,它的成本是否太高昂了???

如果只是针对 Go 语言的项目,或许还有另外一种比较低成本的解决方案。

额外成本只有 Mongodb, 就能做到快捷的 日志收集 /查看 /报警 /统计

Qelog https://github.com/bbdshow/qelog

关于写入性能:

1.取决于 Mongodb 的批量写入上限

2.不同的模块是写入到不同的分片集合,所以在容量索引建立都有极大的优势

3.客户端实现的 异步,日志批量压缩写入,节约 IO

PS: 不严谨测试 单点( 4C/8G 本地 Mongodb )可做到 13W+/s 日志写入

对于集群部署,写入能力取决于背后集群配置了多少 Mongodb 节点。理论可一直横向扩展

关于读取性能

1.我们都知道 Mongodb 使用不当比较占用资源,特别是贪婪内存模型,导致吃了内存就不在下降了,通过存储使用优化,索引优化,查询限制优化,我们不必担心多用户查询导致 Mongodb 的内存上升。

2.因为时时写入,所以日志几乎没有读取延迟

关于管理后台:

1.部署 Admin 进程,就可直接使用。写入权限取决于是否创建模块名(内网没有过多的权限拦截)。

2.只有简单的登录权限,没有其他的权限限制,因为定位,所以没必要搞复杂的权限模型。

目前该项目已经有上百 TB 的写入数据了,稳定性是可以保证,即便日志服务异常挂掉,也不影响使用进程的运行状态,Client 端也会重新 Push 日志。

关于设计和功能和使用帮助请看 https://github.com/bbdshow/qelog 谢谢

如果您觉得对你的项目有帮助,可以收藏一下,在使用过程中有问题就可以提 Issue

极少发帖,有不足之处还请谅解

第 1 条附言  ·  13 小时 46 分钟前

Qelog & Loki 对比

Loki优势

  1. Client端丰富,支持多种写入源,有多种扩展组件
  2. 支持本地文件存储(也仅建议用于测试环境)
  3. 文档齐全,社区较活跃
  4. 报警可以根据指标报警,但是配置又比较复杂
  5. 支持查询Cache
  6. 具有一定的普适性

Loki不足:

  1. 学习成本高,要熟悉 Prometheus 与 Grafana 或者单独学习 Lable|LogQL|Alert Rule 等一些规则。 Qelog 没有其他的额外学习成本, qezap包(基于Uber-Zap)能使用就行了,常用功能都已封装好
  2. 配置复杂 主要体现在storage、ruler、table_manager 等等,有太多的配置项需要参考学习,具体可点击查看, Qelog只用在部署的时候设置一次配置,且极其简单,最主要一点就是配置 mongo group 所携带的URI连接信息需要注意一下。对于日志的管理配置等都是可以通过后台点点点就能操作的。
  3. 远端存储支持的DB(Cassandra,GCS,S3)非普适性,多数为专有云供应商提供,在国内使用,国内云不一定支持。自有搭建运维可能会存在问题。
  4. Label使用有较多的限制,需要参考 最佳实践 去实施,那么对于已有项目的迁移会是一大挑战,同时又是一部分学习成本
  5. 针对普通报警方式,依托Prometheus Alart Rule,配置不方便,随时改变报警规则不方便,报警携带内容有限。 Qelog 采用日志即报警的设计策略,缺少Loki这种指标报警的功能,但是配置极其简单,根据项目+日志等级+关键字,就可构成报警规则,报警内容会携带日志本身的信息。同时支持报警频率/开关/报警方式设置
  6. 存储周期,存储分片和索引大小问题,存储周期是所有项目共享删除周期,比如项目1需要保存6个月,项目2因为日志量很大只需要保存1个月,这时就会有问题。分片同理。同时当租户过多,日志量增长很快,不确定是否索引会快速膨胀,导致存储和写入查询都存在压力。 Qelog 采用租户隔离,享有自有的存储周期、分片规则、索引存储。更灵活,可快捷针对每个租户定制。如果一个日志量很大的项目,可以分3天一个集合,只保存1个月的数据,那么日志就会分布在 mongodb 11个集合中,每个集合分摊的存储数据较少,这样对于Mongodb存储优化,索引增长都有好处,同时集合过期会自动删除,彻底释放mongodb之前占有的磁盘空间。同时后台会有当前库容量的存储统计展示,可以随时根据磁盘空间对日志的空间占用进行手动管理。保存磁盘的高效利用。
  7. 日志展示不够友好,目前Loki是依托Grafana展示日志,例如 tail -f 一行行显示。 Qelog 提供友好的日志显示页面,针对复杂日志还有JSON结构格式化,让问题和查看更加清晰。拥有独立的后台,在日志系统使用过程中更有优势。

Qelog不足:

  1. 目前Client端单一
  2. 日志不会有指标(例如:一小时内 500X 出现多少次)的提现,只有ClientIP、日志等级分布条数。因为定位暂时不会考虑Loki那种复杂指标
  3. 后台没有多租户权限隔离,只要知道后台密码任何租户的日志都可查询
  4. 查询条件没有 Loki 那么灵活,但是在绝大数场景下是足够使用的。

第 2 条附言  ·  13 小时 43 分钟前

以上的总结,只针对中小团队 /个人项目的背景总结。
如果针对日志系统有很多精力与人力付出设计架构等。建议选择更通用的方案!

第 3 条附言  ·  9 小时 13 分钟前

后台示例地址 http://qelog.hoping.top:31086/admin 账号:admin 密码:111111

qelog 这个服务就接入了自己,这样在你们点击的时候就会有日志。方便有内容查看
本人不怎么会前端,所有各位大佬将就看到吧

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK