Debian Java 日志管理高效实践
一 架构与组件选型
二 应用内高效配置要点
三 系统级落地与命令行工具
/opt/myapp/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
dateext
}
关键点:使用 copytruncate 避免 Java 进程持有文件句柄导致轮转失败;按日切分并保留 30 天。tail -F /opt/myapp/logs/app.logmultitail /opt/myapp/logs/*.loglnav /opt/myapp/logs/,或 grep -A5 -B5 "ERROR" app.log/etc/filebeat/filebeat.yml 指定日志路径与输出至 Logstash。四 集中式收集与解析配置示例
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/myapp/logs/*.log
output.logstash:
hosts: ["logstash.example.com:5044"]
input {
beats { port => 5044 }
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
}
date { match => [ "timestamp", "ISO8601" ] }
}
output {
elasticsearch {
hosts => ["http://es.example.com:9200"]
index => "java-logs-%{+YYYY.MM.dd}"
}
}
output.elasticsearch:
hosts: ["http://es.example.com:9200"]
setup.kibana:
host: "kibana.example.com:5601"
<configuration>
<appender name="JSON" class="ch.qos.logback.core.FileAppender">
<file>logs/application.log</file>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp><timeZone>UTC</timeZone></timestamp>
<logger/><thread/><level/><message/><exception/>
</providers>
</encoder>
</appender>
<root level="INFO"><appender-ref ref="JSON"/></root>
</configuration>
五 监控告警与安全合规