轻量级日志管理系统SpringBoot3+Loki+grafana的使用实例

目录

文章目录

  • 目录
  • 1、简介
  • 2、SpringBoot3应用发送日志到Loki
    • 2.1、基本介绍
    • 2.2、添加依赖
    • 2.3、配置文件application.yml
    • 2.4、创建logback配置
    • 2.5、添加日志示例
    • 2.6、运行SpringBoot3
  • 3、在grafana中查看日志
    • 3.1、登录grafana
    • 3.2、查询日志
    • 3.3、查询我们的SpringBoot发送过来的日志
    • 3.4、按日志级别查询
    • 3.5、按主机查询

1、简介

通过集成日志工具Loki+Promtail使得能够自动化采集日志。

Grafana作为可视化终端,通过链接Loki数据源,能够对采集的日志进行搜索和分析。

其中:

  • Loki: 日志聚合工具,类似ELK中Elasticsearch

  • Promtail: 日志收集工具,类比ELK中的Logstash

  • Grafana:可视化工具,类比ELK中Kibana

效果图
在这里插入图片描述

2、SpringBoot3应用发送日志到Loki

2.1、基本介绍

通过在SpringBoot3中配置logback,主要的配置是使用logback-spring.xml文件配置日志发送到loki

2.2、添加依赖

       <!-- logstash-logback-encoder --><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.4</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></dependency><!-- loki-logback-appender --><dependency><groupId>com.github.loki4j</groupId><artifactId>loki-logback-appender</artifactId><version>1.5.0</version></dependency>

2.3、配置文件application.yml

这里注意是配置一个 spring.application.name 在logback中使用,发送到Loki中以后方便标识

spring:application:name: Taxsoft_SpringBoot3_Loki

2.4、创建logback配置

在项目的资料目录创建: src\main\resources\logback-spring.xml

(1)指定loki服务器URL地址http://localhost:3100

(2)Loki不索引日志的内容,而只索引元数据标签。有一些静态标签,如应用程序名称、日志级别或主机名。我们可以在format.label字段中设置它们。

(3)设置一些动态标签,因为我们启用了Logback标签功能。

(4)设置日志格式模式。

为了简化LogQL(Loki查询语言)的潜在转换,我们将使用JSON表示法。

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--  配置App日志的名称  --><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} %-5level %logger{36} %X{X-Request-ID} - %msg%n</pattern></encoder></appender><!-- 配置loki4j   --><appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender"><!-- 1、 指定loki服务器URL--><http><url>http://172.23.1.235:3100/loki/api/v1/push</url></http><format><!-- 2、 配置标签 --><label><pattern>app=${name},host=${HOSTNAME},level=%level</pattern><!-- 3、读取标记--><readMarkers>true</readMarkers></label><message><!-- 4、格式--><pattern>{"level":"%level","class":"%logger{36}","thread":"%thread","message": "%message","requestId": "%X{X-Request-ID}","datetime": "%d{yyyy-MM-dd HH:mm:ss.SSS}"}</pattern></message></format></appender><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="LOKI"/></root></configuration>

2.5、添加日志示例

除了静态标签,我们还可以发送动态数据,例如仅针对当前请求的特定数据。假设我们有一个管理人员的服务,我们希望记录请求中目标人员的id。正如我之前提到的,使用Loki4j,我们可以使用Logback标记。在经典的Logback中,标记主要用于过滤日志记录。使用Loki,我们只需要定义LabelMarker对象:

(1)该对象包含动态字段的键/值映射。

(2)然后我们将对象传递到当前日志行。

和以前的使用方式一样

我这里写了一个控制器

package com.ts.controller;import com.github.loki4j.slf4j.marker.LabelMarker;
import lombok.extern.java.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;//@Log
@RestController
public class MainController {private static final Logger log = LoggerFactory.getLogger(MainController.class);@RequestMapping("/")public String index() {log.info("这是一条info信息消息");log.error("This is an error message");return "Hello";}@RequestMapping("/test")public String test() {log.warn("这是一条警告信息。。。。");//动态标签//动态字段的键/值映射LabelMarker marker = LabelMarker.of("personId", () ->String.valueOf(1001));//将对象传递到当前日志行log.info(marker,"用户已成功更新");return "Test LabelMarker";}
}

2.6、运行SpringBoot3

启动SpringBoot3,然后访问 我们添加日志的路径: http://localhost:8080/

  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v3.2.3)15:59:10.491 INFO  com.ts.Springboot3LokiApplication  - Starting Springboot3LokiApplication using Java 20.0.1 with PID 15984 (D:\IdeaProjects\springboot3_loki\target\classes started by Somken in D:\IdeaProjects\springboot3_loki)
15:59:10.498 INFO  com.ts.Springboot3LokiApplication  - No active profile set, falling back to 1 default profile: "default"
15:59:11.243 INFO  o.s.b.w.e.tomcat.TomcatWebServer  - Tomcat initialized with port 8080 (http)
15:59:11.252 INFO  o.a.coyote.http11.Http11NioProtocol  - Initializing ProtocolHandler ["http-nio-8080"]
15:59:11.254 INFO  o.a.catalina.core.StandardService  - Starting service [Tomcat]
15:59:11.254 INFO  o.a.catalina.core.StandardEngine  - Starting Servlet engine: [Apache Tomcat/10.1.19]
15:59:11.298 INFO  o.a.c.c.C.[Tomcat].[localhost].[/]  - Initializing Spring embedded WebApplicationContext
15:59:11.299 INFO  o.s.b.w.s.c.ServletWebServerApplicationContext  - Root WebApplicationContext: initialization completed in 757 ms
15:59:11.618 INFO  o.a.coyote.http11.Http11NioProtocol  - Starting ProtocolHandler ["http-nio-8080"]
15:59:11.629 INFO  o.s.b.w.e.tomcat.TomcatWebServer  - Tomcat started on port 8080 (http) with context path ''
15:59:11.637 INFO  com.ts.Springboot3LokiApplication  - Started Springboot3LokiApplication in 1.912 seconds (process running for 2.551)
15:59:54.368 INFO  o.a.c.c.C.[Tomcat].[localhost].[/]  - Initializing Spring DispatcherServlet 'dispatcherServlet'
15:59:54.369 INFO  o.s.web.servlet.DispatcherServlet  - Initializing Servlet 'dispatcherServlet'
15:59:54.370 INFO  o.s.web.servlet.DispatcherServlet  - Completed initialization in 1 ms
15:59:54.405 INFO  com.ts.controller.MainController  - 这是一条info信息消息
15:59:54.405 ERROR com.ts.controller.MainController  - This is an error message

提示:只有访问过了这个方法,才能产生日志

3、在grafana中查看日志

3.1、登录grafana

打开grafana:http://172.23.1.235:3000/
在这里插入图片描述

登录进去以后界面如下
在这里插入图片描述

3.2、查询日志

点击左侧的 ”explore“ 探索 按钮
在这里插入图片描述
在这里插入图片描述

3.3、查询我们的SpringBoot发送过来的日志

在这里插入图片描述

3.4、按日志级别查询

在这里插入图片描述

3.5、按主机查询

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/435267.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

828华为云征文|针对Flexus X实例云服务器的CPU和内存性能测评

目录 一、Flexus X实例云服务器简介 1.1 产品摘要 1.2 产品优势 1.3 本次测评服务器规格 二、CPU性能测试 2.1 操作说明 2.2 操作步骤 2.2 结果分析 三、测试内存负载 3.1 操作说明 3.2 操作步骤 3.3 结果分析 四、测试终评 一、Flexus X实例云服务器简介 1.1 产品…

PostgreSQL数据库与PostGIS在Windows中的部署与运行

本文介绍在Windows电脑中&#xff0c;下载、安装、部署并运行PostgreSQL与PostGIS数据库服务的方法。 PostgreSQL是一种功能强大的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以其稳定性、可靠性和丰富的功能而闻名&#xff1b;其支持多种高级特性&…

今天推荐一个文档管理系统 Dorisoy.Pan

Dorisoy.Pan 是一个基于 .NET 8 和 WebAPI 构建的文档管理系统&#xff0c;它集成了 Autofac、MediatR、JWT、EF Core、MySQL 8.0 和 SQL Server 等技术&#xff0c;以实现一个简单、高性能、稳定且安全的解决方案。 这个系统支持多种客户端&#xff0c;包括网站、Android、iO…

Mybatis缓存机制(图文并茂!)

目录 一级缓存 需求我们在一个测试中通过ID两次查询Monster表中的信息。 二级缓存 案例分许(和上述一样的需求) EhCache第三方缓存 在了解缓存机制之前&#xff0c;我们要先了解什么是缓存&#xff1a; ‌缓存是一种高速存储器&#xff0c;用于暂时存储访问频繁的数据&…

Dubbo快速入门(一):分布式与微服务、Dubbo基本概念

文章目录 一、分布式与微服务概念1.大型互联网架构目标2.集群和分布式&#xff08;1&#xff09;集群 (Cluster)&#xff08;2&#xff09;分布式计算 (Distributed Computing)&#xff08;3&#xff09;集群与分布式的关系&#xff08;4&#xff09;实践中的应用案例 3.架构演…

了解独享IP的概念及其独特优势

在网络世界中&#xff0c;IP地址是用来识别和定位设备的标识符。独享IP是一种服务模式。使用代理服务器时&#xff0c;用户拥有一个不与其他用户共享的专用独立IP地址。与共享IP相比&#xff0c;独享IP为用户提供了更高的独立性和隐私保护。下面详细介绍独享IP的定义、工作原理…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求&#xff0c;关于SQL高可用优化&#xff0c;需要优化项目中的SQL&#xff0c;提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

【LLM大模型】Ollama 运行 GGUF 模型

Ollama 默认直接支持很多模型&#xff0c;只需要简单的使用 ollama run命令&#xff0c;示例如下&#xff1a; ollama run gemma:2b就可安装、启动、使用对应模型。 通过这样方式直接支持的模型我们可以通过https://ollama.com/library 找到。 在https://huggingface.co/mod…

Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版

CleanMyMac X 4.15.6 for mac中文版下载是一款功能更加强大的系统优化清理工具&#xff0c;软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉&#xff0c;节省宝贵的磁盘空间。CleanMyMac X 4.15.6 for mac 软件与最新macOS系统更加兼容&#xff0c;流畅地…

启动 Ntopng 服务前需先启动 redis 服务及 Ntopng 常用参数介绍

启动Ntopng服务之前需要先启动redis服务&#xff0c;因为Ntopng服务依赖于redis服务的键值存储。 服务重启 服务启动 Ntopng常用参数&#xff1a; -d 将 Ntopng 进程放入后台执行。默认情况下&#xff0c;Ntop 在前台运行。 -u 指定启动Ntopng执行的用户&#xff0c;默认为…

算法:852.山脉数组的峰顶索引

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;二分算法&#xff09; 题目的提示已经非常明显了&#xff0c;使用O(logN)的算法&#xff0c;那就是二分算法。 如何寻找二段性&#xff1f; 观察数据&#xff0c;可以发现&#xff0c;需要找的峰顶索引的左右两侧数…

LLM工程师启航:生成式AI简明教程

编者按&#xff1a; 大模型发展了近两年&#xff0c;Baihai IDP公众号也分享了近百篇LLM各环节的技术洞察&#xff0c;有前沿探讨、有落地实践、有应用经验。但回头来看&#xff0c;我们似乎从来没有认真、从0开始探讨过LLM的基本原理。 最近&#xff0c;一些企业客户和伙伴来询…

SLF4J报错log4j又报错

项目场景&#xff1a; 搭建一个spirngboot项目&#xff0c;启动运行时&#xff0c;SLF4J报错 解决后 ~ log4j又报错了。 问题描述 首先是SLF4J报错了&#xff0c;解决完SL4J报错问题后&#xff0c;再次启动项目&#xff0c;log4j又报错了 。。。 报错信息&#xff1a; SLF4J…

安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 =》关于平板电脑 =》版本号 在这里显示了系统的一些信息,但是这里面的信息并不包含序列号之类的信息,我们修改下系统设置,在这里增加上相关的序列号。 2.问题分析…

excel导出图片---HSSFWorkbook--SXSSFWorkbook

1 概述 平时在工作中&#xff0c;excel导出图片经常会用到&#xff0c;但奈何HSSFWorkbook导出数据数量有限制问题&#xff0c;所以企业里大多都用SXSSFWorkbook格式&#xff0c;很少用HSSFWorkbook。所以今天以这两种格式分别记录下&#xff0c;图片的导出过程。 2 HSSFWork…

解决Qt每次修改代码后首次运行崩溃,后几次不崩溃问题

在使用unique_ptr声明成员变量后&#xff0c;我习惯性地在初始化构造列表中进行如下构造&#xff1a; 注意看&#xff0c;我将m_menuBtnGroup的父类指定为ui->center_menu_widget&#xff0c;这便是导致崩溃的根本原因&#xff0c;解决办法便是先用this初始化&#xff0c;后…

YOLOV8在清微智能芯片的部署与实现(一)

现在以YOLOV8 为例&#xff0c;进行演示 文章目录 1. YOLOV8浮点模型训练1.1 准备数据集1.1.1 下载业务数据集1.1.2 下载开源数据集1.1.3 自定义数据集1.1.4 将数据转换为yolo训练数据格式 1.2 yolov8项目准备1.3 训练模型 2. YOLOV8浮点模型推理2.1 模型推理2.2 模型val.py评…

uni-app进行微信小程序开发,快速上手

准备工作 IDE https://www.dcloud.io/hbuilderx.html 微信小程序开发工具 下载 / 稳定版更新日志 (qq.com) 安装流程 打开HBuilderX 点击这个logo打开终端 然后 下载一下终端插件 初始化一个demo 通过vue-cli命令行创建项目 uni-app官网 (dcloud.net.cn) &#xff08;官…

【RocketMQ】SpringBoot整合RocketMQ

&#x1f3af; 导读&#xff1a;本文档详细介绍了如何在Spring Boot应用中集成Apache RocketMQ&#xff0c;并实现消息生产和消费功能。首先通过创建消息生产者项目&#xff0c;配置POM文件引入RocketMQ依赖&#xff0c;实现同步消息发送&#xff0c;并展示了如何发送普通字符串…

02-指针代码示例

视频地址&#xff1a; 数组作为函数参数_哔哩哔哩_bilibili 指针是一个变量,用来存放其他变量的地址. 一、语法角度说: 需要用整形变量的指针,去存储一个整形变量的地址. 二、代码部分: (一) 1.指针赋值 int main(int argc, const char* argv[]) {int a;int* p;//这里要…