一、准备工作:定位Java日志文件
在Ubuntu系统中监控Java日志的第一步是确定日志文件的位置。Java应用通常将日志输出到工作目录(如/opt/myapp/logs/
)或通过配置文件(如log4j.properties
、logback.xml
)指定的路径。常见默认路径包括/var/log/
下的应用专属目录(如/var/log/tomcat9/catalina.out
)或项目根目录的logs
文件夹。若不确定,可通过ps aux | grep java
查找应用进程,再结合lsof -p <PID> | grep log
确认日志文件路径。
二、基础命令行监控:快速查看与过滤
Ubuntu提供的命令行工具适合快速查看和筛选Java日志,无需额外安装软件:
tail -f /path/to/java.log
命令,可实时显示日志文件的新增内容(如应用启动、请求处理、错误抛出等),按Ctrl+C
退出。grep "error" /path/to/java.log
筛选包含“error”的日志行(区分大小写),grep -i "error"
则忽略大小写;结合tail
可实现实时搜索(如tail -f /path/to/java.log | grep "error"
)。less /path/to/java.log
,按空格
翻页、Enter
逐行、/keyword
搜索(按n
跳转到下一个匹配项),退出按q
。journalctl -u java-service-name
(如journalctl -u tomcat9
)查看systemd管理的Java服务日志,支持按时间过滤(如journalctl -u tomcat9 --since "2025-10-01"
)。三、日志轮转管理:防止日志膨胀
Java日志文件长期运行会不断增大,占用大量磁盘空间。使用logrotate
工具可自动实现日志的轮转(分割)、压缩、删除:
/etc/logrotate.d/my-java-app
),添加以下内容:/path/to/java.log { daily # 每天轮转一次 rotate 7 # 保留最近7个日志文件 compress # 压缩旧日志(如.gz格式) delaycompress # 延迟压缩(避免压缩正在写入的日志) missingok # 日志文件不存在时不报错 notifempty # 日志为空时不轮转 copytruncate # 复制原日志后清空,避免重启应用 }
logrotate -d /etc/logrotate.d/my-java-app
(模拟运行,不实际修改文件);若无误,手动触发轮转:logrotate -f /etc/logrotate.d/my-java-app
。四、ELK Stack:集中化日志管理与可视化
ELK(Elasticsearch+Logstash+Kibana)是强大的日志分析解决方案,适合大规模Java应用集群:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list sudo apt update && sudo apt install elasticsearch sudo systemctl start elasticsearch
sudo apt install logstash
sudo apt install kibana sudo systemctl start kibana
/etc/logstash/conf.d/java.conf
文件,内容如下:input { file { path => "/path/to/java.log" # Java日志文件路径 start_position => "beginning" # 从文件开头读取(首次配置时) sincedb_path => "/dev/null" # 忽略sincedb记录(测试用) } } filter { grok { # 解析日志格式(根据实际日志调整) match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:logmessage}" } } date { # 转换时间戳格式 match => ["timestamp", "ISO8601"] } } output { elasticsearch { # 发送到Elasticsearch hosts => ["localhost:9200"] index => "java-logs-%{+YYYY.MM.dd}" # 按日期创建索引 } stdout { codec => rubydebug } # 控制台输出(调试用) }
sudo systemctl start elasticsearch logstash kibana
http://<Ubuntu-IP>:5601
,进入“Management”→“Index Patterns”创建java-logs-*
索引模式,然后在“Discover”页面查看和分析Java日志(如按日志级别筛选、统计错误数量)。五、第三方监控工具:增强功能与自动化
Sentry:错误跟踪与告警
专注于Java应用的错误监控,可实时捕获异常并发送告警(邮件、Slack等)。安装步骤:
git clone https://github.com/getsentry/self-hosted.git
cd self-hosted && ./install.sh
config.yml
(设置邮件服务器、SMTP信息等),启动服务:docker-compose up -d
。<dependency>io.sentry:sentry-logback:6.28.0</dependency>
),并在日志框架(如Logback)中配置Sentry appender。Prometheus+Grafana:性能监控与可视化
适合监控Java应用的性能指标(如JVM内存、GC次数、线程数、请求延迟)。步骤:
sudo apt install prometheus
)和Grafana(sudo apt install grafana
),启动服务。io.micrometer:micrometer-registry-prometheus
),并在application.properties
中开启Actuator端点:management.endpoints.web.exposure.include=prometheus management.metrics.tags.application=${spring.application.name}
/etc/prometheus/prometheus.yml
,添加scrape_configs
)。4701
的JVM监控面板),实现可视化。六、高级工具:实时监控与诊断
jconsole
命令,选择目标Java进程即可查看。jvisualvm
命令,支持插件扩展(如Visual GC查看GC详情)。top
命令,但专为Java应用设计,可实时显示CPU、内存、线程等指标。安装:sudo snap install jtop
,运行jtop
即可查看。