CentOS下Java日志监控报警设置
在CentOS上为Java应用搭建ELK日志监控体系,通过Logstash配置grok解析日志格式,Kibana实现可视化;报警可通过ElasticsearchWatcher检测ERROR日志触发邮件,或采用Prometheus与Alertmanager设置报警规则,实现错误实时通知,快速定位问题与响应,提升运维效率并保障业务高可用性。
在 CentOS 上给 Ja va 应用搭建日志监控与报警体系,几乎是运维的标配需求。但老实说,从零开始配置一套顺手、靠谱的监控方案,中间有不少细节容易踩坑。下面咱们就一步步拆解,把常用的 ELK 栈和报警工具怎么搭、怎么配讲清楚。

1. 安装必要的工具
先装核心工具。目前最主流的做法是 ELK 栈(Elasticsearch + Logstash + Kibana),当然 Fluentd 等替代方案也有不少拥趸。下面以 ELK 为例。
使用ELK Stack
安装 Elasticsearch:
sudo yum install elasticsearch sudo systemctl start elasticsearch sudo systemctl enable elasticsearch安装 Logstash:
sudo yum install logstash sudo systemctl start logstash sudo systemctl enable logstash安装 Kibana:
sudo yum install kibana sudo systemctl start kibana sudo systemctl enable kibana配置 Logstash:编辑
/etc/logstash/conf.d/ja va_app.conf,写入以下内容。注意把日志路径换成你应用的实际位置:input { file { path => "/path/to/your/ja va/app.log" start_position => "beginning" } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{JA VACLASS:class} - %{GREEDYDATA:message}" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "ja va-app-logs-%{+YYYY.MM.dd}" } }启动 Logstash:
sudo systemctl restart logstash配置 Kibana:打开浏览器访问
http://your_server_ip:5601,按提示连接 Elasticsearch 即可。
2. 设置日志级别和格式
日志格式必须和 Logstash 里的 grok 模式匹配,否则解析会出问题。举个例子,如果你用的是 Logback,在 logback.xml 中这样配置 pattern:
%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
这样输出的时间戳、日志级别、类名和消息就能被 grok 准确捕获。如果用的是其他日志框架,记得保持类似的格式。
3. 设置报警
日志收集好了,接下来要解决“出问题怎么通知”的问题。通常有两种路径:一是直接利用 Elasticsearch 自带的 Watcher,二是用 Prometheus + Alertmanager 这套组合拳。
使用 Elasticsearch Watcher
安装 Watcher 插件:
sudo bin/elasticsearch-plugin install watch-stalk创建一个 Watcher 任务。新建文件
/etc/elasticsearch/watcher/watch/ja va_app_monitor.json,内容如下(每分钟扫描一次,发现 ERROR 日志就发邮件):PUT /_watcher/watch/ja va_app_monitor { "trigger": { "schedule": { "interval": "1m" } }, "input": { "search": { "request": { "indices": ["ja va-app-logs-*"], "body": { "query": { "bool": { "must": [ { "range": { "@timestamp": { "gte": "now-1m", "lte": "now" } } }, { "term": { "loglevel": { "value": "ERROR" } } } ] } } } } } }, "condition": { "compare": { "ctx.payload.hits.total": { "gt": 0 } } }, "actions": { "send_email": { "email": { "to": "your_email@example.com", "subject": "Ja va App Error Alert", "body": "Errors found in Ja va app logs." } } } }重启 Elasticsearch 使 Watcher 生效:
sudo systemctl restart elasticsearch
使用 Prometheus 和 Alertmanager
如果你已经在用 Prometheus 生态,那更推荐走这条路——报警规则更灵活,也更容易和现有监控体系打通。
安装 Prometheus:
sudo yum install prometheus sudo systemctl start prometheus sudo systemctl enable prometheus配置 Prometheus:编辑
/etc/prometheus/prometheus.yml,添加 Ja va 应用日志的抓取配置(这里需要应用端暴露 metrics 端点,或通过日志 exporter 桥接,具体视实际情况而定)。安装 Alertmanager:
sudo yum install alertmanager sudo systemctl start alertmanager sudo systemctl enable alertmanager配置 Alertmanager:编辑
/etc/alertmanager/alertmanager.yml,设置通知渠道(邮件、企业微信、Slack 等)。创建报警规则。新建文件
/etc/prometheus/rules/ja va_app_rules.yml:groups: - name: ja va_app_rules rules: - alert: Ja vaAppError expr: rate(ja va_app_logs_total{loglevel="ERROR"}[1m]) > 0 for: 1m labels: severity: error annotations: summary: "Ja va App Error Detected" description: "Errors found in Ja va app logs."重启 Prometheus 加载规则:
sudo systemctl restart prometheus
以上两种方式都能实现“日志里出现错误就立刻报警”的目标。选哪种取决于你的基础设施现状——如果已经用了 ELK,Watcher 更直接;如果 Prometheus 是标配,那 Alertmanager 的集成度更高。根据团队现有的监控生态选就好,关键是把“发现问题→通知到人”这条链路跑通。
