Log Bull 是一个注重易用性的日志收集系统。它可以通过 .sh 脚本、Docker 和 Docker Compose 进行部署。该项目在 Apache 2.0 许可证下完全开源。Log Bull 是一个注重易用性的日志收集系统。它可以通过 .sh 脚本、Docker 和 Docker Compose 进行部署。该项目在 Apache 2.0 许可证下完全开源。

ELK、Loki 和 Graylog 太过庞大,所以我构建了 Log Bull

2025/10/16 23:31

大约五年来,我一直面临着收集日志的任务,通常是来自小型到中型的代码库。从代码发送日志并不是问题:Java和Go几乎开箱即用就有这方面的库。但部署一些东西来收集它们却是一个头痛的问题。我明白这是一个可解决的任务(甚至在ChatGPT之前,现在更是如此)。不过,所有的日志系统主要都是针对大型企业世界及其需求而设计的,而不是针对那些只有几根棍子、胶水和"昨天"截止日期的小团队或单个开发人员。

每次启动ELK对我来说都是一个挑战:一堆设置,一个不简单的部署,当我进入UI时,我的眼睛被标签页弄得眼花缭乱。使用Loki和Graylog会稍微容易一些,但仍然有比我需要的多得多的功能。同时,在项目之间分离日志并向系统添加其他用户,使他们看不到不应该看到的内容,也不是最明显的过程。

所以大约一年前,我决定制作自己的日志收集系统。一个尽可能易于使用和启动的系统。它可以通过单个命令部署在服务器上,无需任何配置或界面中不必要的标签页。这就是Log Bull的由来,现在它是开源的:一个为拥有中型项目的开发人员设计的日志收集系统。

目录:

  • 关于项目
  • 如何部署Log Bull?
  • 如何发送日志?
  • 如何查看日志?
  • 结论

关于项目

Log Bull是一个强调易用性的日志收集系统(最少的配置,最少的功能,启动时零配置)。该项目完全在Apache 2.0许可下开源。我的主要优先事项是创建一个解决方案,使初级开发人员能够轻松弄清楚如何启动系统,如何向其发送日志,以及如何在大约15分钟内查看它们。

项目的主要特点:

  • 通过.sh脚本或Docker命令用单个命令部署。
  • 您可以创建多个隔离的项目来收集日志(并向其中添加用户)。
  • 极其简单的界面,配置最少,启动时完全不需要配置(零配置)。
  • 支持Python、Java、Go、JavaScript(TS \ NodeJS)、PHP、C#的库。计划支持Rust和Ruby。
  • 免费、开源且自托管。
  • 搜索日志不需要了解LogQL、Kibana DSL或其他查询语言。

https://www.youtube.com/watch?v=8H8jF8nVzJE&embedable=true

该项目用Go开发,基于OpenSearch构建。

项目网站 - https://logbull.com

项目GitHub - https://github.com/logbull/logbull

P.S. 如果您觉得这个项目有用并且有GitHub账户,请给它一个星标⭐️。最初的星星很难收集。我将非常感谢您的支持!

如何部署Log Bull?

部署项目有三种方式:通过.sh脚本(我推荐的方式)、通过Docker和通过Docker Compose。

方法1:通过脚本安装

该脚本将安装Docker,将项目放在/opt/logbull文件夹中,并配置系统重启时自动启动。安装命令:

sudo apt-get install -y curl && \ sudo curl -sSL https://raw.githubusercontent.com/logbull/logbull/main/install-logbull.sh \ | sudo bash 

方法2:通过Docker Compose启动

创建docker-compose.yml文件,内容如下:

services:   logbull:     container_name: logbull     image: logbull/logbull:latest     ports:       - "4005:4005"     volumes:       - ./logbull-data:/logbull-data     restart: unless-stopped     healthcheck:       test: ["CMD", "curl", "-f", "http://localhost:4005/api/v1/system/health"]       interval: 5s       timeout: 5s       retries: 30 

然后运行命令docker compose up -d。系统将在4005端口启动。

方法3:通过Docker命令启动

在终端中运行以下命令(系统也将在4005端口启动):

docker run -d \   --name logbull \   -p 4005:4005 \   -v ./logbull-data:/logbull-data \   --restart unless-stopped \   --health-cmd="curl -f http://localhost:4005/api/v1/system/health || exit 1" \   --health-interval=5s \   --health-retries=30 \   logbull/logbull:latest 

如何发送日志?

我设计这个项目时考虑到了便利性,主要是为了开发人员。这就是为什么我为大多数流行的开发语言创建了库。我这样做是基于这样的想法:Log Bull可以作为处理器连接到任何流行的库,而无需更改当前的代码库。

我强烈建议查看网站上的示例,因为那里有一个用于选择语言的交互式面板:

代码示例选择器

让我们以Python为例。首先,您需要安装库(尽管您也可以通过HTTP发送;有cURL的示例):

pip install logbull 

然后从代码发送:

import time from logbull import LogBullLogger  # Initialize logger logger = LogBullLogger(     host="http://LOGBULL_HOST",     project_id="LOGBULL_PROJECT_ID", )  # Log messages (printed to console AND sent to LogBull) logger.info("User logged in successfully", fields={     "user_id": "12345",     "username": "john_doe",     "ip": "192.168.1.100" })  # With context session_logger = logger.with_context({     "session_id": "sess_abc123",     "user_id": "user_456" })  session_logger.info("Processing request", fields={     "action": "purchase" })  # Ensure all logs are sent before exiting logger.flush() time.sleep(5) 

如何查看日志?

所有日志都会立即显示在主屏幕上。您可以:

  • 减小消息的大小(通过将行截断到约50-100个字符)。

  • 展开发送字段的列表(user_id, order_id等)。

  • 点击一个字段并将其添加到过滤器中。带条件的日志搜索:

    带条件的日志搜索

    常规日志视图

    仅查看消息文本(您可以剪切额外的字段):

您还可以收集条件组(例如,消息包含某些文本,但排除特定的服务器IP地址)。

结论

我希望我的日志收集系统对那些不想或不能(由于项目资源有限)实施"重量级"解决方案(如ELK)的开发人员有所帮助。我已经在生产项目中使用Log Bull,一切进展顺利。我欢迎在GitHub上提供反馈、改进建议和问题。

免责声明:本网站转载的文章均来源于公开平台,仅供参考。这些文章不代表 MEXC 的观点或意见。所有版权归原作者所有。如果您认为任何转载文章侵犯了第三方权利,请联系 service@support.mexc.com 以便将其删除。MEXC 不对转载文章的及时性、准确性或完整性作出任何陈述或保证,并且不对基于此类内容所采取的任何行动或决定承担责任。转载材料仅供参考,不构成任何商业、金融、法律和/或税务决策的建议、认可或依据。
分享文章