为你的SpringBoot服务赋一个高大上的线上日志系统(ELK)

本文介绍了如何利用ELK(Elasticsearch + Logstash + Kibana)搭建一个高效率的日志系统,通过Docker容器部署ELK,并详细讲解了SpringBoot应用的日志配置,最终能在Kibana中方便地查看和搜索日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

日志是一个完整系统必不可少的组件,你会将日志输出到什么地方呢?控制台 or 文件?这些都是比较简单直接的方式,但恐怕都不是好的办法。因为日志数据量巨大,后期问题排查就要抓耳挠腮了。还有,每次抓取日志都远程要到服务器上,既不方便也不符合码农极客精神的追求。所以我们需要的是一个既可以高效搜索又可以随时随地抓取的日志系统,目前业界比较流行的方案是 ELK(Elasticsearch + Logstash + Kibana)。

ELK搭建

以下 ELK 安装部署都是采用 Docker 容器的方式,不了解 Docker 的朋友需要先去熟悉一下!

ELK镜像拉取

docker pull elasticsearch
docker pull logstash
docker pull kibana

此命令会从 Docker 仓库拉取 ELK 的最新镜像,目前版本是 7.10.2

ELK容器创建

1、Elasticsearch 容器创建运行

docker run --name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \ # 单节点模式
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ # 初始内存和最大内存
-d elasticsearch

2、Kibana 容器创建运行

docker run --name kibana \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://部署ES服务IP地址:9200 \
-d kibana

3、Logstash 容器创建运行

创建 /usr/local/docker/logstash/logstash.conf 配置文件,内容为

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
  }
}
output {
  elasticsearch {
    hosts => ["部署ES服务IP地址:9200"]
    action => "index"
    codec => json
    index => "today-log-%{+YYYY.MM.dd}"
  }
}
docker run --name logstash \
-p 4560:4560 \
-v /usr/local/docker/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \ # 挂载logstash的配置文件
-d logstash

至此,ELK 的安装部署已经全部完成,看看它们的运行情况吧

docker ps

在这里插入图片描述

SpringBoot输出日志

1、Logstash 依赖

<dependency>
	<groupId>net.logstash.logback</groupId>
	<artifactId>logstash-logback-encoder</artifactId>
	<version>5.3</version>
</dependency>

2、创建 src/main/resource/logback-spring.xml 输出日志到 Logstash

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
    <!--引用默认日志配置-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!--使用默认的控制台日志输出实现-->
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>部署Logstash服务的IP地址:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <!--自定义日志输出格式-->
                <pattern>
                    <pattern>
                        {
                        "project": "today",
                        "level": "%level",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger",
                        "message": "%message",
                        "stack_trace": "%exception{20}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
    
    <root level="INFO">
        <appender-ref ref="LOGSTASH"/>
    </root>
    
</configuration>

访问 Kibana 查看日志

启动 SpringBoot 服务后浏览器访问 Kibana,地址为

http://部署Kibana服务IP:5601

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值