Debian Java应用的监控与日志实践
一 日志框架与本地配置
<!-- Logback + JSON -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.4</version>
</dependency>
<!-- Logback 配置片段:JSON 控制台 -->
<configuration>
<appender name="JSON_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp><timeZone>UTC</timeZone></timestamp>
<version/>
<logLevel/>
<threadName/>
<loggerName/>
<message/>
<stackTrace/>
</providers>
</encoder>
</appender>
<root level="INFO"><appender-ref ref="JSON_CONSOLE"/></root>
</configuration>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
二 集中式日志采集与解析
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/app/logs/*.log
output.elasticsearch:
hosts: ["http://es.example.com:9200"]
setup.kibana:
host: "kibana.example.com:5601"
# Logstash 配置片段
input { beats { port => 5044 } }
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log_level} %{GREEDYDATA:msg}" }
}
}
output {
elasticsearch {
hosts => ["http://es.example.com:9200"]
index => "java-logs-%{+YYYY.MM.dd}"
}
}
三 JVM与应用性能监控
java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar yourapp.jar
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/app/gc.log
四 落地检查清单