告別沉重的 ELK,這套輕量級的日志系統值得你擁有
在軟件開發中,日志系統扮演著至關重要的角色。它不僅幫助開發者調試程序,還能在生產環境中監控應用狀態。本文將講解如何使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一個輕量級、簡單、易用的 Java 日志系統。
一、系統組件概覽
1.什么是 Loki?
Loki 是由 Grafana Labs 開源的一款高可用、高擴展性、多租戶的日志聚合系統。它受到 Prometheus 的啟發,采用了類似的機制,使用標簽(labels)對日志進行特征標記,然后進行歸集統計。Loki 的設計理念是經濟高效且易于操作,它不會為日志內容建立全文索引,而是對日志數據進行壓縮存儲,并且只對日志數據的元數據(如時間戳、labels 等)建立索引。這樣的設計使得 Loki 在存儲成本和查詢效率方面具有優勢。
2.什么是 Loki4j?
Loki4j 是一個專為 Java 應用程序設計的日志 appender,它使得 Java 應用能夠直接將日志發送到 Loki 服務器。Loki4j 特別適用于 Spring Boot 環境,因為它可以無縫集成到使用 Logback 或 Log4j2 的系統中,為 Java 開發者提供了一個簡單而強大的日志管理解決方案。
3.什么是 Grafana?
Grafana 是一個功能強大的開源數據可視化和監控平臺。它支持多種數據源,包括 Loki,允許用戶創建動態且高度定制的儀表板,以直觀展示日志數據。Grafana 的靈活性和豐富的功能使其成為監控和分析日志數據的理想選擇。
二、搭建步驟
1. 安裝 Loki 和 Grafana
首先,我們需要安裝 Loki 和 Grafana。本文通過 Docker 來快速部署它們。
# 安裝Loki
docker run -d --name loki -p 3100:3100 grafana/loki:latest -config.file=/etc/loki/local-config.yaml
# 安裝Grafana
docker run -d --name grafana -p 3000:3000 grafana/grafana:latest
2. 配置 Loki4j
在 Spring Boot 項目中,我們將使用 Loki4j 來發送日志到 Loki。
首先,添加 Loki4j 依賴到你的pom.xml文件中:
<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender</artifactId>
<version>1.4.1</version>
</dependency>
然后,配置 Logback,在 src/main/resources 目錄下創建 logback.xml 文件,并添加以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 引入Spring應用名稱 -->
<springProperty name="name" source="spring.application.name"/>
<!-- 控制臺輸出器 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [thread %thread] %-5level %logger{35}.%method - %msg%n</pattern>
</encoder>
</appender>
<!-- Loki輸出器 -->
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
<http>
<url>http://localhost:3100/loki/api/v1/push</url>
</http>
<format>
<label>
<pattern>application=${name},level=%level</pattern>
<readMarkers>true</readMarkers>
</label>
<message>
<pattern>
{"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", "level": "%level", "logger": "%logger{36}.%method", "method":"%M", "line":"%line", "thread": "%thread", "message": "%msg%n"}
</pattern>
</message>
<sortByTime>true</sortByTime>
</format>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="LOKI"/>
</root>
</configuration>
3. 配置 Grafana
打開 Grafana 的 Web 界面(地址為http://localhost:3000),首次登錄賬號密碼都是 admin,登錄之后修改密碼,添加 Loki 作為數據源,并配置它指向運行中的 Loki 服務。
4. 運行 Spring Boot 應用
運行你的 Spring Boot 應用,現在所有的日志都會發送到 Loki,并且可以在 Grafana 中查看。
5. 查看日志
在 Grafana 中,你可以創建儀表板來展示日志數據。選擇 Loki 作為數據源,然后使用 Loki 的查詢語法來過濾和展示日志。
下面做一個簡單查看日志的操作,點擊 explore ,數據源選loki,在Label filters選項中選擇標簽(application)和值(muqing-api),點右上角Run query搜索查看日志。
三、結語
通過上述步驟,我們成功搭建了一個簡單的 Java 日志系統,它結合了 Loki 的強大日志聚合能力、Loki4j 的便捷日志發送功能、Grafana 的可視化展示。本文講解了如何快速的搭建一個簡單的日志系統,實際開發中還有許多因素需要考慮,比如安全性等方面。