在 CentOS 上监控 Java 应用的日志,常见做法可以分为 系统级日志监控、Java 应用日志监控、实时查看与告警。下面按实际运维场景给你一个完整方案。
先确认日志在哪:
| 类型 | 常见路径 |
|---|---|
| Spring Boot | /var/log/app/app.log |
| Tomcat | /opt/tomcat/logs/catalina.out |
| 自定义日志 | /data/logs/xxx/xxx.log |
| 系统日志 | /var/log/messages |
| journald | journalctl |
tail -f(最基础)tail -f /var/log/app/app.log
只看 ERROR:
tail -f app.log | grep ERROR
less(适合大文件)less app.log
常用操作:
Shift + F:实时跟踪(类似 tail -f)/ERROR:搜索q:退出如果 Java 是 systemd 启动的:
journalctl -u your-java-service.service -f
按时间:
journalctl --since "10 min ago"
dmesg | tail -n 50
常见:
推荐:
示例(Logback):
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/app/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/app/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
✅ 好处:
grep -c ERROR app.log
按小时统计:
awk '/ERROR/ {print $1,$2}' app.log | sort | uniq -c
logrotate(防止磁盘满)/etc/logrotate.d/app
示例:
/var/log/app/*.log {
daily
rotate 7
compress
missingok
notifempty
}
Prometheus + Grafana(专业)架构:
Java App → Log Exporter → Prometheus → Grafana
常用:
| 组件 | 作用 |
|---|---|
| Elasticsearch | 存储 |
| Logstash / Fluentd | 采集 |
| Kibana | 展示 |
适合:
jps -l
jstat -gc pid
jstack pid
| 场景 | 命令 |
|---|---|
| 实时看日志 | tail -f app.log |
| 只看 ERROR | `tail -f app.log |
| 磁盘快满 | du -sh /var/log/* |
| Java 崩溃 | dmesg |
| 服务日志 | journalctl -u xxx -f |
| 日志切割 | logrotate |
✅ 中小项目
tail / grep / logrotate
✅ 生产环境
Logback + logrotate + journalctl
✅ 大型系统
ELK / EFK + Prometheus + Grafana
如果你愿意,可以告诉我:
我可以给你一套 完全贴合你环境的监控方案。