一、准备工作:定位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.gitcd self-hosted && ./install.shconfig.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即可查看。