Docker上搭建 ELK7
docker 搭建 elk7 (elasticsearch7、kibana7、logstash7)
文章目录
说明
以下基于 Centos7 ,需先自行安装 Docker 和 Docker Compose
搭建 ELK7
👇 是我自己搭建学习的脚本 ,有需要点击下载即可
搭建文件脚本
压缩包文件目录如下
1. elk 存放根目录
创建 elasticsearch 的存放路径
## 创建 elk 目录,创建指令如下
mkdir [dir]
## 创建完毕,进
入创建的目录下,准备编写 docker-compose.yaml
cd [dir]
使用
pwd查看是否进入目录中
2. 编写 docker-compose.yaml
完整的 docker-compose.yaml
version: '3.7'
services:
elasticsearch:
image: elasticsearch:7.17.10
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true # 防止内存交换,提升性能
- "ES_JAVA_OPTS=-Xms1g -Xmx1g" # 设置 JVM 堆内存大小,建议根据系统资源调整
networks:
- elk-net
ports:
- "9200:9200"
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
logstash:
image: logstash:7.17.10
networks:
- elk-net
ports:
- "5044:5044" # Logstash 的 Beats 输入端口
- "9600:9600" # Logstash 的 HTTP API 端口
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline # 挂载 Logstash 配置目录
depends_on:
- elasticsearch # 确保 Elasticsearch 在 Kibana 之前启动
- kibana
kibana:
image: kibana:7.17.10
networks:
- elk-net
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
- I18N_LOCALE=zh-CN # 设置 Kibana 的语言为中文
depends_on:
- elasticsearch # 确保 Elasticsearch 在 Kibana 之前启动
# 设置网络,使当前 yaml处于同一个网络下
networks:
elk-net:
driver: bridge
3. 创建数据卷目录
数据卷: 我们在使用过程成会可能会产生一些数据,
本地部署的时候,数据会直接在本地的规定的路径下生成数据文件容器化部署产生的数据在容器中,如果没有挂载本地,电脑重启 | 容器重启 就会导致数据丢失- 因此在启动程序的时候通常要进行数据挂载,避免执行的重启操作后数据丢失
## 在 elk 目录下创建数据卷目录
## -p 能一次创建多个 目录
# logstash
mkdir -p logstash/pipeline
# elasticsearch
mkdir -p elasticsearch/data
后续目录如下
- 编写 logstash.conf
在
elk-20250215/logstash/pepeline/下创建logstash.conf

input {
tcp {
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "%{index_name}" # 动态选择索引
}
stdout { codec => rubydebug } # 输出到控制台,便于调试
}

4. 启动和停止 docker-compose.yaml
## 启动脚本
docker compose up -d
## 停止脚本
docker compose down
- 启动
- 出现 Started 的状态代表服务启动成功
- 如果是第一次启动,如果没有对应的镜像,自动拉取镜像,拉取完毕后再执行启动操作
- 查看镜像是否启动
## 查看镜像服务启动
docker ps | grep 7.17

- 停止服务
- 出现 Removed 的状态代表服务启动成功
5. 访问页面
访问相应的页面,测试镜像服务是否成功启动
开放出来的端口,要根据docker-compose.yaml配置的映射关系来访问
生成环境中为保证安全,通常会将一些固定端口改成其他端口
elasticsearch
elasticsearch 映射的端口号是 9200 -> 9200 , 所以外部访问的端口为 9200

kibana

logstash

ELK 7 实现 SpringBoot 日志推送
引入依赖
在 pom.xml 的依赖中引入 logstash
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.0</version>
</dependency>
编写logback配置信息
文件名称
logback-spring.xml
存放路径src/main/resources
- logback-spring.xml
配置文件中的 destination 指向的是自己服务器的 logstash 的端口
endcoder 的 customFields 可自定义参数
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="PROJECT_NAME" value="spring-rabbitmq-start"/>
<property name="LOG_BASE" value="./logs"/>
<property name="LOG_BACK_DIR" value="${LOG_BASE}/${PROJECT_NAME}_logs"/>
<!-- INFO日志 -->
<appender name="INFO_ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_BACK_DIR}/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_BACK_DIR}/info_%d{yyyyMMddHH}_%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>120</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ERROR日志 -->
<appender name="ERROR_ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_BACK_DIR}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_BACK_DIR}/error_%d{yyyyMMdd}_%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>10</maxHistory>
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<!-- 配置 Logback 输出到 Logstash -->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.188.153:5044</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"application": "spring-rabbitmq-start" }</customFields>
</encoder>
</appender>
<!-- 配置 Console 输出日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%X{rpcId}] [%level]%C[%M]%L[%.-5120msg][%X{callChain}]%n</pattern>-->
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 配置日志级别 -->
<logger name="org.springframework" level="WARN"/>
<logger name="java.sql.Connection" level="INFO"/>
<logger name="java.sql.ResultSet" level="INFO"/>
<logger name="org.quartz.core.QuartzSchedulerThread" level="WARN"/>
<logger name="org.mybatis.spring.SqlSessionUtils" level="WARN"/>
<root level="INFO">
<appender-ref ref="ERROR_ROLLING"/>
<appender-ref ref="INFO_ROLLING"/>
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="CONSOLE"/> <!-- 添加控制台输出 -->
</root>
</configuration>
修改logstash.yaml(可选)
filter 中的信息可按照需求自行修改
input {
tcp {
port => 5044
codec => json_lines
}
}
filter {
## 项目名称
if [application] == "spring-rabbitmq-start" {
# 添加条件过滤器,检查日志级别(假设字段为 `level`)
if [level] == "ERROR" {
mutate { add_field => { "index_name" => "spring-rabbitmq-start-error-%{+YYYY.MM.dd}" } }
} else if [level] == "INFO" {
mutate { add_field => { "index_name" => "spring-rabbitmq-start-info-%{+YYYY.MM.dd}" } }
} else if [level] == "WARN" {
mutate { add_field => { "index_name" => "spring-rabbitmq-start-warn-%{+YYYY.MM.dd}" } }
} else {
mutate { add_field => { "index_name" => "spring-rabbitmq-start-other-%{+YYYY.MM.dd}" } }
}
} else {
mutate { add_field => { "index_name" => "logstash-logs-%{+YYYY.MM.dd}" } }
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "%{index_name}" # 动态选择索引
}
stdout { codec => rubydebug } # 输出到控制台,便于调试
}
启动Springboot服务测试
服务启动
通过 kibana 查看日志日否录入
- 新增的
spring-rabbitmq-start-info-2025.02.21就是刚推送的日志- 通过对应的查询语句查询记录
因为时区的不同可能会存在8小时的时间差
kibana 查看时间是否正常
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐














所有评论(0)