SpringBoot 应用整合 ELK 实现日志收集

发布于 2024-07-25 08:51:54 字数 6582 浏览 16 评论 0

ELK:Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统

各服务作用

  • Elasticsearch:用于存储收集到的日志信息;
  • Logstash:用于收集日志,SpringBoot 应用整合了 Logstash 以后会把日志发送给 Logstash,- Logstash 再把日志转发给 Elasticsearch;
  • Kibana:通过 Web 端的可视化界面来查看日志

安装部署

  1. 安装 docker 与 Docker Compose
  2. 安装 Elasticsearch
    docker pull elasticsearch:6.4.0
  3. 安装 Logstash
    docker pull logstash:6.4.0
  4. 安装 Kibana
    docker pull kibana:6.4.0

编写 docker-compose.yml

在 SpringBoot 项目中的 scr/main/docker/docker-compose.yml 编写
version: '3'
services:
elasticsearch:
image: elasticsearch:6.4.0
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch" #设置集群名称为 elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用 jvm 内存大小
ports:
- 9200:9200
kibana:
image: kibana:6.4.0
container_name: kibana
links:
- elasticsearch:es #可以用 es 这个域名访问 elasticsearch 服务
depends_on:
- elasticsearch #kibana 在 elasticsearch 启动之后再启动
environment:
- "elasticsearch.hosts=http://es:9200" #设置访问 elasticsearch 的地址
ports:
- 5601:5601
logstash:
image: logstash:6.4.0
container_name: logstash
volumes:
- ./:/configdir
command: logstash -f /configdir/logstash-springboot.conf
logstash.conf #挂载 logstash 的配置文件
depends_on:
- elasticsearch #kibana 在 elasticsearch 启动之后再启动
links:
- elasticsearch:es #可以用 es 这个域名访问 elasticsearch 服务
ports:
- 4560:4560

编写 logstash-springboot.conf

在 SpringBoot 项目中的 scr/main/docker/logstash-springboot.conf 编写:
input {
tcp {
mode => "server"
host => "192.168.31.13"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "es:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}

执行

cmd 切换到 docker 文件夹下,执行

docker-compose up -d

安装 json_lines 插件

# 进入 logstash 容器
docker exec -it logstash /bin/bash
# 进入 bin 目录
cd /bin/
# 安装插件
logstash-plugin install logstash-codec-json_lines
# 退出容器
exit
# 重启 logstash 服务
docker restart logstash

访问

浏览器打开

http://localhost:5601/app/kibana#/management?_g=()   

image

SpringBoot 应用集成 Logstash

pom.xml 添加引用

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

resource 中新增 logback-spring.xml

<?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"/>
<!--应用名称-->
<property name="APP_NAME" value="mall-admin"/>
<!--日志文件保存路径-->
<property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
<contextName>${APP_NAME}</contextName>
<!--每天记录日志到文件 appender-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--输出到 logstash 的 appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的 logstash 日志收集端口-->
<destination>192.168.31.13:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>

编写日志

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);

@GetMapping("/test")
public String test() {
LOGGER.debug("TestController:{}", "Hello World!!!ELK-debug");
LOGGER.error("TestController:{}", "Hello World!!!ELK-error");
LOGGER.warn("TestController:{}", "Hello World!!!ELK-warn");
LOGGER.info("TestController:{}", "Hello World!!!ELK-info");
// int i = 1 /0;
return "Hello World!!!ELK";
}

}

运行 SpringBoot 应用

运行 SpringBoot 项目,浏览器访问 http://192.168.31.13:8901/test

在 kibana 中查看日志信息

创建 index pattern

image

image

查看日志

image

注意 ipd 地址 192.168.31.13 需改为自己的本机 ip

总结

搭建了 ELK 日志收集系统之后,如果要查看 SpringBoot 应用的日志信息,就不需要查看日志文件了,直接在 Kibana 中查看即可

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

分開簡單

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文