告别沉重的ELK,这套轻量级的日志系统值得你拥有
👉 这是一个或许对你有用的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
《项目实战(视频)》:从书中学,往事上“练” 《互联网高频面试题》:面朝简历学习,春暖花开 《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题 《精进 Java 学习指南》:系统学习,互联网主流技术栈 《必读 Java 源码专栏》:知其然,知其所以然
👉这是一个或许对你有用的开源项目
国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。
功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:
Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud 视频教程:https://doc.iocoder.cn 【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本
在软件开发中,日志系统扮演着至关重要的角色。它不仅帮助开发者调试程序,还能在生产环境中监控应用状态。本文将讲解如何使用 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 的灵活性和丰富的功能使其成为监控和分析日志数据的理想选择。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro 视频教程:https://doc.iocoder.cn/video/
搭建步骤
1. 安装 Loki 和 Grafana
首先,我们需要安装 Loki 和 Grafana。本文通过 Docker 来快速部署它们。
> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
>
> * 项目地址:<https://github.com/YunaiV/yudao-cloud>
> * 视频教程:<https://doc.iocoder.cn/video/>
# 安装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进行讲解,它是一个支持任何格式、可独立部署、灵活度更高的服务。
个人观点,仅供参考。
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,“长按”或“扫描”下方二维码噢:
星球的内容包括:项目实战、面试招聘、源码解析、学习路线。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
微信扫码关注该文公众号作者