Spring Cloud Alibaba 2025.0.0 整合 ELK 实现日志
Spring Cloud Alibaba 2025.0.0 整合 ELK 实现日志实战微服务
环境准备
确保已安装以下组件:
- JDK 17+
- Spring Boot 3.x
- Spring Cloud Alibaba 2025.0.0
- Elasticsearch 8.x
- Logstash 8.x
- Kibana 8.x
- Docker(可选,用于快速部署ELK)
Spring Cloud Alibaba 2025.0.0 整合 ELK 实现日志实战微服务
引入依赖
在项目的pom.xml中添加必要的依赖:
xml
<!-- Spring Cloud Alibaba Nacos 服务发现(可选) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2025.0.0</version>
</dependency>
<!-- Logback 日志依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<!-- Logstash 日志收集 -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.4</version>
</dependency>
Spring Cloud Alibaba 2025.0.0 整合 ELK 实现日志实战微服务
配置 Logback 输出到 Logstash
在src/main/resources下创建logback-spring.xml,配置日志输出到 Logstash:
xml
<configuration>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:5044</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"service":"your-service-name"}</customFields>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
配置 Logstash 管道
创建 Logstash 配置文件logstash.conf,将日志转发到 Elasticsearch:
plaintext
input {
tcp {
port => 5044
codec => json_lines
}
}
filter {
# 可添加自定义过滤规则(如解析特定字段)
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "microservice-logs-%{+YYYY.MM.dd}"
}
}
启动 ELK 服务
通过 Docker 快速启动 ELK 服务:
bash
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.12.0
docker run -d -p 5044:5044 -v /path/to/logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash:8.12.0
docker run -d -p 5601:5601 kibana:8.12.0
配置 Kibana 可视化
- 访问
http://localhost:5601打开 Kibana 控制台。 - 进入 Stack Management > Index Patterns ,创建索引模式
microservice-logs-*。 - 在 Discover 中查看实时日志数据,或通过 Dashboard 创建可视化图表。
高级配置(可选)
-
日志字段增强:在 Logback 配置中添加自定义字段(如链路追踪ID):
xml<encoder class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"traceId":"%mdc{traceId}"}</customFields> </encoder> -
日志过滤:在 Logstash 中通过 Grok 解析复杂日志格式:
plaintextfilter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{DATA:thread} %{DATA:class} - %{GREEDYDATA:log}" } } }
验证日志链路
- 启动 Spring Boot 应用,生成测试日志。
- 在 Kibana 中搜索日志,确认字段(如
service、traceId)已正确显示。
注意事项
-
Elasticsearch 8.x 默认开启安全认证,需在 Logstash 配置中添加用户名和密码:
plaintextoutput { elasticsearch { hosts => ["http://localhost:9200"] user => "elastic" password => "your-password" } } -
生产环境建议使用 Filebeat 替代 Logstash TCP 输入,降低资源消耗。
