elastic
kb-elastic.
在 Spring Boot 项目中,我们通常使用 Logback 作为日志框架,并且可以通过 logback.xml(或 logback-spring.xml) 配置日志的存储路径和格式。
下面是 完整的步骤,确保 Spring Boot 的日志正确地记录到 /var/logs/myapp.log
。
一、在 Spring Boot 项目中配置 Logback
Spring Boot 默认使用 Logback 作为日志框架,直接修改 logback-spring.xml
(推荐)或者 logback.xml
。
1. 创建 logback-spring.xml
配置文件
在 Spring Boot 项目的 src/main/resources/
目录下,新建 logback-spring.xml
,并添加如下配置:
<configuration>
<!-- 定义日志存储路径 -->
<property name="LOG_PATH" value="/var/logs/myapp.log" />
<!-- 定义日志文件存储策略(滚动日志) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}</file>
<!-- 归档日志策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 以日期切割日志(每天一个文件) -->
<fileNamePattern>/var/logs/myapp-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保留最近 30 天的日志 -->
<maxHistory>30</maxHistory>
<!-- 限制单个日志文件大小,超过后滚动(可选) -->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level | %logger{36} | %msg%n</pattern>
</encoder>
</appender>
<!-- 控制台日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level | %logger{36} | %msg%n</pattern>
</encoder>
</appender>
<!-- 日志级别设置 -->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
2. 确保 /var/logs/
目录存在并赋予权限
Linux 服务器上的 /var/logs/
目录可能需要手动创建,并确保 Spring Boot 进程有权限写入。
(1)创建日志目录
sudo mkdir -p /var/logs
(2)更改目录权限(给当前用户 myuser
权限)
sudo chown -R myuser:myuser /var/logs
chmod -R 755 /var/logs
注意: myuser
是 Spring Boot 运行的用户,请替换成你的实际 Linux 用户。
3. 运行 Spring Boot 项目并验证
(1)启动 Spring Boot 项目
java -jar myapp.jar
或者:
nohup java -jar myapp.jar > /dev/null 2>&1 &
nohup
方式让应用在后台运行,防止 SSH 断开后终止应用。
(2)检查日志文件
tail -f /var/logs/myapp.log
如果一切配置正确,日志会实时写入 /var/logs/myapp.log
🎉。
4. 处理 Spring Boot 进程权限问题
如果你使用 systemd
作为服务管理,你可以创建 myapp.service
来确保 Spring Boot 以正确的权限运行。
(1)创建 myapp.service
sudo nano /etc/systemd/system/myapp.service
(2)添加以下内容
[Unit]
Description=My Spring Boot Application
After=network.target
[Service]
User=myuser
Group=myuser
ExecStart=/usr/bin/java -jar /home/myuser/myapp.jar
SuccessExitStatus=143
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
(3)重新加载 systemd
配置
sudo systemctl daemon-reload
(4)启动 Spring Boot 应用
sudo systemctl start myapp
(5)设置开机自启
sudo systemctl enable myapp
总结
步骤 | 说明 |
1. 配置 | 指定日志文件路径 |
2. 确保 Linux 目录权限 | 确保 Spring Boot 进程能写入 |
3. 启动 Spring Boot 并检查日志 | 运行 |
4. 处理权限问题(可选) | 使用 |
这样,你的 Spring Boot 日志就可以正确地存储到 /var/logs/myapp.log
,并且可以结合 ELK(Elasticsearch + Logstash + Kibana) 进行日志分析 🔥🚀!
你要的是ELK 在企业项目中的完整搭建流程,并且要和实际项目日志收集关联起来。
那么,我们以一个 Spring Boot 企业项目 作为示例,详细描述如何集成 ELK 进行日志管理。
一、ELK 在企业项目中的搭建流程
1. 确定项目日志管理需求
在企业项目中,我们通常需要:
-
收集日志(应用服务器日志、数据库日志、Nginx 日志等)
-
存储日志(支持全文搜索、索引管理)
-
分析日志(排查错误、性能分析、安全监控)
-
告警通知(服务异常时触发通知)
假设我们要监控的是一个Spring Boot 项目,并且该项目运行在 Linux 服务器上,产生的日志存储在 /var/logs/myapp.log
。
2. 服务器环境准备
假设环境如下:
二、搭建 ELK 日志管理系统
在 ELK 服务器(192.168.1.101
)上安装 Elasticsearch、Logstash 和 Kibana。
1. 安装 Elasticsearch(日志存储)
# 下载并解压 Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.0.0-linux-x86_64.tar.gz
cd elasticsearch-8.0.0
# 修改配置文件 config/elasticsearch.yml
echo "
cluster.name: elk-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
" >> config/elasticsearch.yml
# 启动 Elasticsearch
./bin/elasticsearch -d
测试是否启动成功
curl -X GET "http://localhost:9200"
2. 安装 Kibana(日志可视化)
# 下载并解压 Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.0.0-linux-x86_64.tar.gz
tar -xzf kibana-8.0.0-linux-x86_64.tar.gz
cd kibana-8.0.0
# 修改配置文件 config/kibana.yml
echo "
server.port: 5601
server.host: '0.0.0.0'
elasticsearch.hosts: ['http://localhost:9200']
" >> config/kibana.yml
# 启动 Kibana
./bin/kibana &
测试 Kibana 是否可用
-
访问
http://192.168.1.101:5601
3. 安装 Logstash(日志收集)
# 下载并解压 Logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.0.0-linux-x86_64.tar.gz
tar -xzf logstash-8.0.0-linux-x86_64.tar.gz
cd logstash-8.0.0
创建 Logstash 配置文件 /etc/logstash/conf.d/logstash.conf
input {
beats {
port => 5044 # 监听 Filebeat 发送的日志
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \| %{LOGLEVEL:level} \| %{GREEDYDATA:message}" }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "myapp-logs-%{+YYYY.MM.dd}"
}
}
启动 Logstash
./bin/logstash -f /etc/logstash/conf.d/logstash.conf &
三、在 Spring Boot 项目中集成日志采集
1. 配置 logback.xml
在 Spring Boot 项目的 src/main/resources/logback-spring.xml
中,添加 JSON 格式日志输出:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/logs/myapp.log</file>
<encoder>
<pattern>{"timestamp":"%date","level":"%level","message":"%msg"}%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE" />
</root>
</configuration>
Spring Boot 启动后,日志将自动写入 /var/logs/myapp.log
2. 在应用服务器上安装 Filebeat
在 Spring Boot 服务器 192.168.1.102
上安装 Filebeat
# 下载并解压 Filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.0.0-linux-x86_64.tar.gz
tar -xzf filebeat-8.0.0-linux-x86_64.tar.gz
cd filebeat-8.0.0
修改 Filebeat 配置 /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/logs/myapp.log
json.keys_under_root: true # 解析 JSON 日志
json.add_error_key: true
output.logstash:
hosts: ["192.168.1.101:5044"]
启动 Filebeat
./filebeat -e
四、使用 Kibana 查询和分析日志
-
打开 Kibana → 访问
http://192.168.1.101:5601
-
添加索引模式:
-
进入
Management
→Index Patterns
-
添加
myapp-logs-*
-
-
在 Discover 页面查看日志
-
选择
myapp-logs-*
索引 -
设定时间范围,查看
INFO
、ERROR
级别日志
-
五、创建 Kibana 监控和告警
-
创建告警规则
-
进入
Observability
→Alerts
-
添加规则 "level: ERROR"
-
触发邮件/Webhook 告警
-
六、企业优化(高可用 & 安全)
-
Elasticsearch 集群化部署
-
添加多节点,提升查询效率
-
-
使用 Nginx 代理 Kibana
-
通过
nginx.conf
配置反向代理,提高安全性
-
-
启用 X-Pack
-
开启用户认证,防止未经授权访问
-
总结
-
安装 ELK(Elasticsearch + Kibana + Logstash)
-
配置 Spring Boot 日志输出
-
安装 Filebeat 采集日志
-
使用 Kibana 可视化日志
-
设置告警规则,监控异常
这样,你的企业项目就可以高效管理日志,实时监控应用运行状态! 🚀