在 CentOS 上做 Java 日志监控,通常从系统命令快速排查入手,配合日志轮转与日志框架配置保障可运维性,再通过集中式平台实现检索、可视化与告警。
一 快速排查与本地监控
- 定位进程与日志路径:使用命令查看 Java 进程与常见日志位置,例如:
- 进程与参数:ps -ef | grep java
- Tomcat 常见日志:catalina.out
- Spring Boot 可在配置中指定:logging.file.name=logs/application.log
- 实时查看与关键字过滤:
- 实时跟踪:tail -f /path/to/app.log
- 错误检索:grep “ERROR” /path/to/app.log
- 系统服务日志:
- 查看服务日志:journalctl -u your-java-service.service
- 近一小时日志:journalctl --since “1 hour ago”
- 日志轮转与保留:
- 使用 logrotate 管理日志轮转、压缩与清理,配置文件通常位于 /etc/logrotate.d/,避免单文件过大影响检索与磁盘。
二 集中式日志平台方案
- 方案选型与适用场景
- ELK Stack(Elasticsearch + Logstash + Kibana):集中采集、解析、存储与可视化,适合需要复杂检索与仪表盘的场景。
- Graylog:开源聚合平台,支持多输入(如 Syslog、GELF)、权限与告警,部署相对简洁。
- Splunk:商业平台,功能强大,适合大规模与合规审计需求。
- 以 ELK 为例的最小落地步骤
- Logstash 采集文件日志(示例):
- 配置 /etc/logstash/conf.d/java.conf
- input: file 读取 /var/log/java/*.log
- filter: 使用 grok 按日志格式解析,必要时用 date 解析时间字段
- output: 写入 Elasticsearch(如:hosts => [“localhost:9200”],index => “java-logs-%{+YYYY.MM.dd}”)
- 启动服务:systemctl start logstash && systemctl enable logstash
- Kibana 连接 Elasticsearch,创建索引模式并构建可视化与告警面板。
三 远程日志与 Syslog 转发
- 应用侧输出:将日志输出到 stdout 或文件,便于采集器或 Syslog 读取。以 Log4j2 为例可配置 ConsoleAppender 输出到 SYSTEM_OUT。
- 服务端 rsyslog 开启网络接收:
- 编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf,加载模块并开放端口:
- 模块:imudp / imtcp
- 输入:input(type=“imudp” port=“514”)、input(type=“imtcp” port=“514”)
- 转发规则示例:“. @remote_syslog_server_ip:514”
- 应用:重启 rsyslog:systemctl restart rsyslog
- 远程日志服务器:在日志服务器上配置 rsyslog 接收来自业务服务器的日志,并写入本地文件或转发至 Logstash/Elasticsearch 进行索引与可视化。
四 告警与自动化分析
- 告警方式
- Kibana Alerting & Actions:基于索引模式与查询条件触发邮件、Webhook 等通知,适合日志异常模式与阈值告警。
- Graylog 告警:内置规则与通知通道,支持对字段与频次进行条件告警。
- 自动化分析脚本
- 编写 Shell 脚本定期归档与清理历史日志,例如按天备份并清理 30 天前 文件,配合 crontab 定时执行,降低磁盘压力并便于离线分析。
五 实践建议与配置要点
- 统一日志格式:在 Logback/Log4j2 中采用结构化输出(如 JSON),便于 grok/ES 解析与检索。
- 规范路径与权限:为应用日志设置固定绝对路径(如 /var/log/yourapp/),确保采集器与 rsyslog 可读。
- 合理设置日志级别:生产环境常用 INFO/WARN/ERROR,调试期可临时提升,避免产生海量低价值日志。
- 可靠采集与断点续传:文件采集需处理文件轮转与inode复用,确保不丢日志。
- 容量与保留策略:结合 Elasticsearch 冷热分层与 logrotate 保留策略,控制成本与合规要求。