企业级Java项目整合ELK日志收集分析可视化
三种方案
一、准备工作 - 规范 Java 应用日志输出
①、使用 SLF4J 门面 + Logback 实现
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.9</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.11</version>
</dependency>
②、配置JSON 格式输出(强烈推荐)
需要额外添加 logstash-logback-encoder 依赖来支持 JSON 输出:
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.4</version>
</dependency>
logback-spring.xml 配置示例
<configuration><appender name="JSON" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/app.json.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/app.json.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy><encoder class="net.logstash.logback.encoder.LogstashEncoder"><!-- 添加自定义字段,便于在Kibana中区分应用和環境 --><customFields>{"application": "user-service", "environment": "production"}</customFields><!-- 包含上下文信息,如线程名 --><includeContext>true</includeContext><!-- 设置日志输出时间格式 --><timestampPattern>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampPattern></encoder></appender><root level="INFO"><appender-ref ref="JSON" /></root>
</configuration>
二、部署 ELK/EFK 服务端组件
①、安装 Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.11.1-linux-x86_64.tar.gz
cd elasticsearch-8.11.1/
配置 (config/elasticsearch.yml):
cluster.name: production-cluster
node.name: node-1
network.host: 0.0.0.0 # 允许远程访问
http.port: 9200
discovery.type: single-node # 如果是单节点测试,生产环境需配置多节点集群
xpack.security.enabled: false # 测试可先关闭安全配置,生产环境必须开启!
启动
./bin/elasticsearch -d # 后台运行
②、安装 Logstash(用于集中处理)
下载并安装:
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.11.1-linux-x86_64.tar.gz
tar -xzf logstash-8.11.1-linux-x86_64.tar.gz
cd logstash-8.11.1/
创建配置文件 (config/logstash.conf):
# 输入:监听5044端口,接收来自Filebeat的数据
input {beats {port => 5044}
}# 过滤器:解析和丰富数据
filter {# 如果Filebeat发送的是JSON日志,直接解析JSON内容json {source => "message"remove_field => ["message"] # 解析后可移除原始message字段}# 你可以添加更多处理,例如解析时间戳、Grok匹配非JSON日志、添加字段等date {match => ["timestamp", "ISO8601"]target => "@timestamp"}
}# 输出:发送到Elasticsearch
output {elasticsearch {hosts => ["http://your-elasticsearch-ip:9200"]index => "%{[@metadata][beat]}-%{[environment]}-%{+YYYY.MM.dd}" # 示例:filebeat-production-2023.12.01# user => "elastic"# password => "your_password"}# 可选: stdout { codec => rubydebug } # 用于调试,会在控制台打印输出
}
启动
./bin/logstash -f config/logstash.conf --config.reload.automatic &
③、安装 Kibana
下载并安装
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.1-linux-x86_64.tar.gz
tar -xzf kibana-8.11.1-linux-x86_64.tar.gz
cd kibana-8.11.1/
配置 (config/kibana.yml):
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://your-elasticsearch-ip:9200"]
# elasticsearch.username: "kibana_system"
# elasticsearch.password: "your_password"
启动
./bin/kibana &
验证: 访问 http://:5601
三、在应用服务器部署与配置 Filebeat
①、下载并安装 Filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.1-linux-x86_64.tar.gz
tar -xzf filebeat-8.11.1-linux-x86_64.tar.gz
cd filebeat-8.11.1-linux-x86_64/
②、配置 Filebeat (filebeat.yml)
filebeat.inputs:
- type: filestreamenabled: truepaths:- /path/to/your/java/app/logs/*.json.log # 指向你的JSON日志路径json.keys_under_root: true # 重要:尝试解码JSON行json.overwrite_keys: true # 用解析后的JSON字段覆盖Filebeat的默认字段fields:environment: production # 添加环境标签application: user-service # 添加应用名标签fields_under_root: true # 将这些标签提升到顶级字段# 输出:发送到Logstash进行处理
output.logstash:hosts: ["your-logstash-server-ip:5044"]
③、启动 Filebeat
sudo ./filebeat -e -c filebeat.yml &
四、在 Kibana 中查看日志
①、配置索引模式(Index Pattern)
在 Kibana 左侧菜单进入 Management > Stack Management。
进入 Data Views,点击 Create data view。
输入索引模式名称,例如 filebeat-*。
选择 @timestamp 作为时间字段。
创建。
②、查看和分析日志
进入 Analytics > Discover。
选择你刚创建的 filebeat-* 数据视图。
你现在可以看到所有被收集的日志了。你可以:
使用 KQL(Kibana Query Language) 搜索特定日志,例如 application: “user-service” and level: “ERROR”。
筛选特定时间范围。
点击任意日志条目查看其完整的结构化 JSON 字段。
企业级进阶配置
权限与安全:启用 Elasticsearch 和 Kibana 的 xpack.security,配置 TLS 加密通信。
索引生命周期管理 (ILM):配置策略自动管理索引(如热节点保留7天,冷节点保留30天后删除),节省成本和存储空间。
告警:使用 Kibana 的告警功能,对特定的错误日志(如 ERROR 日志过多)触发告警,通知到邮件、Slack 等。
仪表板:在 Dashboard 中创建可视化图表,监控错误趋势、不同级别的日志数量等。