大約五年來,我一直面臨著收集日誌的任務,通常是來自小型到中型的代碼庫。從代碼發送日誌不是問題:Java和Go幾乎開箱即用就有這方面的庫。但部署一些東西來收集它們卻是一個頭痛的問題。我明白這是一個可解決的任務(甚至在ChatGPT之前,現在更是如此)。不過,所有的日誌系統主要都是針對大型企業世界及其需求而設計的,而不是針對只有幾根棍子、膠水和"昨天"截止日期的小團隊或單個開發者。
每次啟動ELK對我來說都是一個挑戰:一堆設置,非平凡的部署,當我進入UI時,我的眼睛被標籤頁弄得眼花繚亂。使用Loki和Graylog會稍微容易一些,但仍然有比我需要的多得多的功能。同時,在項目之間分離日誌並向系統添加其他用戶,使他們看不到不應該看到的內容,也不是最明顯的過程。
所以大約一年前,我決定製作自己的日誌收集系統。一個盡可能易於使用和啟動的系統。它可以通過單個命令部署在服務器上,無需任何配置或界面中不必要的標籤頁。這就是Log Bull的由來,現在它是開源的:一個為擁有中型項目的開發者設計的日誌收集系統。
目錄:
Log Bull是一個強調易用性的日誌收集系統(最小配置,最少功能,啟動時零配置)。該項目完全在Apache 2.0許可下開源。我的主要優先事項是創建一個解決方案,使初級開發人員能夠輕鬆弄清楚如何啟動系統,如何向其發送日誌,以及如何在大約15分鐘內查看它們。
項目的主要特點:
https://www.youtube.com/watch?v=8H8jF8nVzJE&embedable=true
該項目用Go開發,基於OpenSearch構建。
項目網站 - https://logbull.com
項目GitHub - https://github.com/logbull/logbull
P.S. 如果您覺得這個項目有用並且有GitHub帳戶,請給它一個星標⭐️。最初的星標很難收集。我將非常感謝您的支持!
有三種方式部署項目:通過.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上提供反饋、改進建議和問題報告。

複製連結X (Twitter)LinkedInFacebook電子郵件
Stripe 收購加密貨幣支付團隊
