⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 源话编程(gh_289d0f98fdae) 「源话编程」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

在软件开发中,日志系统扮演着至关重要的角色。它不仅帮助开发者调试程序,还能在生产环境中监控应用状态。本文将讲解如何使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统。

系统组件概览

什么是 Loki?

Loki 是由 Grafana Labs 开源的一款高可用、高扩展性、多租户的日志聚合系统。它受到 Prometheus 的启发,采用了类似的机制,使用标签(labels)对日志进行特征标记,然后进行归集统计。

Loki 的设计理念是经济高效且易于操作,它不会为日志内容建立全文索引,而是对日志数据进行压缩存储,并且只对日志数据的元数据(如时间戳、labels 等)建立索引。这样的设计使得 Loki 在存储成本和查询效率方面具有优势。

什么是 Loki4j?

Loki4j 是一个专为 Java 应用程序设计的日志 appender,它使得 Java 应用能够直接将日志发送到 Loki 服务器。Loki4j 特别适用于 Spring Boot 环境,因为它可以无缝集成到使用 Logback 或 Log4j2 的系统中,为 Java 开发者提供了一个简单而强大的日志管理解决方案。

什么是 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 的可视化展示。本文讲解了如何快速的搭建一个简单的日志系统,实际开发中还有许多因素需要考虑,比如安全性等方面。

后续还会针对 Loki 的另一个日志收集器Promtail进行讲解,它是一个支持任何格式、可独立部署、灵活度更高的服务。

个人观点,仅供参考。

文章目录
  1. 1. 系统组件概览
    1. 1.1. 什么是 Loki?
    2. 1.2. 什么是 Loki4j?
    3. 1.3. 什么是 Grafana?
  2. 2. 搭建步骤
    1. 2.1. 1. 安装 Loki 和 Grafana
    2. 2.2. 2. 配置 Loki4j
    3. 2.3. 3. 配置 Grafana
    4. 2.4. 4. 运行 Spring Boot 应用
    5. 2.5. 5. 查看日志
  3. 3. 结语