1. 基础命令行监控:快速定位问题
tail -f
实时追踪:最常用的实时监控方法,直接输出日志文件的最新内容。例如,监控/var/log/java-app.log
的实时更新,可使用命令tail -f /var/log/java-app.log
。若需同时监控多个文件,可依次列出路径,如tail -f /var/log/java-app.log /var/log/tomcat/catalina.out
。grep
过滤关键信息:结合tail -f
使用,快速筛选出错误、警告等关键日志。例如,提取所有ERROR
级别的日志,命令为tail -f /var/log/java-app.log | grep "ERROR"
;提取包含特定关键词(如“Timeout”)的日志,可使用tail -f /var/log/java-app.log | grep "Timeout"
。less +F
交互式查看:类似tail -f
,但支持向前/向后滚动查看历史日志,适合需要偶尔翻查过往记录的场景。命令为less +F /var/log/java-app.log
,按Ctrl+C
退出实时模式,按q
退出less
。journalctl
查看系统日志:若Java应用作为systemd服务运行(如通过systemctl start my-java-app
启动),可通过journalctl
查看其日志。常用命令:journalctl -u my-java-app.service
(查看指定服务的日志)、journalctl -u my-java-app.service -f
(实时查看)、journalctl --since "1 hour ago"
(查看过去1小时的日志)。2. 日志轮转管理:避免日志膨胀
logrotate
配置自动轮转:通过logrotate
工具定期分割、压缩、删除旧日志,防止单个日志文件过大占用磁盘空间。配置文件通常位于/etc/logrotate.d/
目录下,示例配置(针对java-app.log
):/var/log/java-app.log {
daily # 每天轮转
rotate 7 # 保留最近7个日志文件
maxsize 10M # 当文件大小超过10MB时立即轮转
missingok # 若日志文件不存在也不报错
notifempty # 若日志为空则不轮转
compress # 压缩旧日志(使用gzip)
create 0644 root root # 创建新日志文件并设置权限
}
保存后,logrotate
会根据配置自动执行(默认每天一次),无需手动干预。3. 专业日志分析工具:深度监控与可视化
yum
安装Elasticsearch、Logstash、Kibana(如sudo yum install elasticsearch logstash kibana
);logstash.conf
文件,定义输入(读取Java日志文件)、过滤(可选,如解析日志格式)、输出(发送到Elasticsearch);systemctl start elasticsearch
)、Logstash(systemctl start logstash
)、Kibana(systemctl start kibana
);http://服务器IP:5601
,创建索引模式(如java-logs-*
)并设置可视化 dashboard。/etc/td-agent/td-agent.conf
):<source>
@type tail
path /var/log/java-app.log
pos_file /var/log/td-agent/java.log.pos
tag java.log
<parse>
@type none # 若日志无结构化格式,设为none
</parse>
</source>
<match java.log>
@type elasticsearch
host localhost
port 9200
logstash_format true
flush_interval 10s
</match>
启动Fluentd:systemctl start td-agent
,日志将自动发送到Elasticsearch。4. 日志级别与框架配置:精准控制日志输出
DEBUG
/INFO
/WARN
/ERROR
),减少无关日志的输出。例如,Logback配置(src/main/resources/logback.xml
):<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/var/log/java-app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO"> <!-- 生产环境建议设为INFO或WARN,减少DEBUG日志 -->
<appender-ref ref="FILE" />
</root>
</configuration>
Log4j 2配置(src/main/resources/log4j2.xml
)类似,通过<Root level="INFO">
调整级别。5. 自动化监控与告警:主动发现问题
check_error.sh
脚本:#!/bin/bash
ERROR_COUNT=$(grep -c "ERROR" /var/log/java-app.log)
if [ $ERROR_COUNT -gt 0 ]; then
echo "Java应用日志中发现 $ERROR_COUNT 条ERROR记录" | mail -s "Java日志异常告警" admin@example.com
fi
通过crontab -e
设置每5分钟执行一次:*/5 * * * * /path/to/check_error.sh
。micrometer-registry-prometheus
依赖),暴露/actuator/prometheus
端点,Prometheus通过scrape_configs
配置抓取指标。