告別沉重的 ELK,這套輕量級(jí)的日志系統(tǒng)值得你擁有
在軟件開發(fā)中,日志系統(tǒng)扮演著至關(guān)重要的角色。它不僅幫助開發(fā)者調(diào)試程序,還能在生產(chǎn)環(huán)境中監(jiān)控應(yīng)用狀態(tài)。本文將講解如何使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一個(gè)輕量級(jí)、簡(jiǎn)單、易用的 Java 日志系統(tǒng)。
一、系統(tǒng)組件概覽
1.什么是 Loki?
Loki 是由 Grafana Labs 開源的一款高可用、高擴(kuò)展性、多租戶的日志聚合系統(tǒng)。它受到 Prometheus 的啟發(fā),采用了類似的機(jī)制,使用標(biāo)簽(labels)對(duì)日志進(jìn)行特征標(biāo)記,然后進(jìn)行歸集統(tǒng)計(jì)。Loki 的設(shè)計(jì)理念是經(jīng)濟(jì)高效且易于操作,它不會(huì)為日志內(nèi)容建立全文索引,而是對(duì)日志數(shù)據(jù)進(jìn)行壓縮存儲(chǔ),并且只對(duì)日志數(shù)據(jù)的元數(shù)據(jù)(如時(shí)間戳、labels 等)建立索引。這樣的設(shè)計(jì)使得 Loki 在存儲(chǔ)成本和查詢效率方面具有優(yōu)勢(shì)。
2.什么是 Loki4j?
Loki4j 是一個(gè)專為 Java 應(yīng)用程序設(shè)計(jì)的日志 appender,它使得 Java 應(yīng)用能夠直接將日志發(fā)送到 Loki 服務(wù)器。Loki4j 特別適用于 Spring Boot 環(huán)境,因?yàn)樗梢詿o縫集成到使用 Logback 或 Log4j2 的系統(tǒng)中,為 Java 開發(fā)者提供了一個(gè)簡(jiǎn)單而強(qiáng)大的日志管理解決方案。
3.什么是 Grafana?
Grafana 是一個(gè)功能強(qiáng)大的開源數(shù)據(jù)可視化和監(jiān)控平臺(tái)。它支持多種數(shù)據(jù)源,包括 Loki,允許用戶創(chuàng)建動(dòng)態(tài)且高度定制的儀表板,以直觀展示日志數(shù)據(jù)。Grafana 的靈活性和豐富的功能使其成為監(jiān)控和分析日志數(shù)據(jù)的理想選擇。
二、搭建步驟
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 項(xiàng)目中,我們將使用 Loki4j 來發(fā)送日志到 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 目錄下創(chuàng)建 logback.xml 文件,并添加以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 引入Spring應(yīng)用名稱 -->
<springProperty name="name" source="spring.application.name"/>
<!-- 控制臺(tái)輸出器 -->
<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),首次登錄賬號(hào)密碼都是 admin,登錄之后修改密碼,添加 Loki 作為數(shù)據(jù)源,并配置它指向運(yùn)行中的 Loki 服務(wù)。
4. 運(yùn)行 Spring Boot 應(yīng)用
運(yùn)行你的 Spring Boot 應(yīng)用,現(xiàn)在所有的日志都會(huì)發(fā)送到 Loki,并且可以在 Grafana 中查看。
5. 查看日志
在 Grafana 中,你可以創(chuàng)建儀表板來展示日志數(shù)據(jù)。選擇 Loki 作為數(shù)據(jù)源,然后使用 Loki 的查詢語(yǔ)法來過濾和展示日志。
下面做一個(gè)簡(jiǎn)單查看日志的操作,點(diǎn)擊 explore ,數(shù)據(jù)源選loki,在Label filters選項(xiàng)中選擇標(biāo)簽(application)和值(muqing-api),點(diǎn)右上角Run query搜索查看日志。
三、結(jié)語(yǔ)
通過上述步驟,我們成功搭建了一個(gè)簡(jiǎn)單的 Java 日志系統(tǒng),它結(jié)合了 Loki 的強(qiáng)大日志聚合能力、Loki4j 的便捷日志發(fā)送功能、Grafana 的可視化展示。本文講解了如何快速的搭建一個(gè)簡(jiǎn)單的日志系統(tǒng),實(shí)際開發(fā)中還有許多因素需要考慮,比如安全性等方面。