要使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统,您可以按以下步骤进行。这个系统将利用 Loki 作为日志存储和聚合系统,Loki4j 作为 Java 的日志插件,Grafana 用于日志的可视化。
1.工具介绍:
- Loki:类似于 Prometheus 的日志系统,但 Loki 并不索引日志的内容,而是通过标签(label)进行索引,使用 PromQL 进行查询,轻量级且高效。
- Loki4j:一个适用于 Java 项目的日志库,可以将 Spring Boot 项目的日志直接推送到 Loki。
- Grafana:用于可视化 Loki 中存储的日志,并提供查询、分析和展示日志的功能。
- Spring Boot:作为 Java 应用框架,用于生成日志并集成 Loki4j 进行日志传输。
2.系统架构:
- Spring Boot 应用程序通过 Loki4j 生成和发送日志。
- Loki 作为日志聚合和存储系统接收日志。
- Grafana 用于展示和可视化 Loki 中存储的日志。
3. 使用步骤
3.1.步骤 1:搭建 Loki 和 Grafana
可以通过 Docker 容器运行 Loki 和 Grafana,以便简化配置。
3.1.1.准备Loki和Grafanan的镜像
配置docker-compose.yml信息
version: '3.0'
services:
loki:
image: loki:latest
container_name: base_software_loki
ports:
- "3100:3100"
networks:
- monitoring
grafana:
image: grafana:latest
container_name: base_software_grafana
ports:
- "3200:3000"
networks:
- monitoring
depends_on:
- loki
volumes:
es_data:
driver: local
networks:
monitoring:
driver: bridge
3.1.2 创建两个容器
docker-compose up -d
启动后,可以通过浏览器访问 http://localhost:3000,默认的用户名和密码均为 admin
。
3.1.3 配置 Grafana 数据源
- 登录 Grafana。
- 添加 Loki 作为数据源:
- 进入 Configuration > Data Sources。
- 点击 Add data source,选择 Loki。
- 在 URL 中填写
http://127.0.0.1:3100
。 - 保存并测试连接。
3.2.步骤 2:配置 Spring Boot 项目
在 Spring Boot 项目中使用 Loki4j 来将日志发送到 Loki。
3.2.1 添加依赖
在 Spring Boot 的 pom.xml
文件中添加 Loki4j 依赖:
<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender-jdk8</artifactId>
<version>1.4.2</version>
</dependency>
3.2.2 配置 logback-spring.xml
Loki4j 使用 Logback 作为日志框架。你需要配置 src/main/resources/logback-spring.xml
文件来使用 Loki4j 将日志发送到 Loki:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 彩色控制台控制 -->
<substitutionProperty name="log.pattern" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) ${PID:-} %clr(---){faint} %clr(%-80.80logger{79}){cyan} %clr(:){faint} %m%n%wEx"/>
<substitutionProperty name="log.pattern.no" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) ${PID:-} %clr(---){faint} %clr(%-80.80logger{79}){cyan} %clr(:){faint} %m%n%wEx"/>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<springProperty scope="context" name="LOG_FILE_DIR" source="loki.log-file-dir" defaultValue="log"/>
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<springProp