Ubuntu服务器上JSP项目如何实现监控与报警
导读:Ubuntu服务器上JSP项目的监控与报警实践 一、监控分层与总体架构 系统层:关注CPU、内存、磁盘、网络等基础资源,使用top/htop、free -m、df -h、iftop等命令或工具做实时与趋势观测。 应用服务器层:针对Tomc...
Ubuntu服务器上JSP项目的监控与报警实践
一、监控分层与总体架构
- 系统层:关注CPU、内存、磁盘、网络等基础资源,使用top/htop、free -m、df -h、iftop等命令或工具做实时与趋势观测。
- 应用服务器层:针对Tomcat/JVM,使用JConsole、VisualVM、Java Mission Control(JMC)观察堆内存、线程、类加载、GC等关键指标。
- 日志层:集中分析Tomcat logs/catalina.out、localhost*.log、error.log,及时捕捉异常堆栈与错误码。
- 业务与性能层:用Apache JMeter做压测与吞吐/响应基线;必要时引入New Relic、Datadog等 APM 做全链路监控。
- 告警层:小规模用crontab+Shell做阈值告警;中大型用Prometheus+Alertmanager或Zabbix、Nagios做规则化告警与可视化。
二、快速落地步骤
- 基础资源与日志巡检
- 资源:实时查看CPU/内存/磁盘/网络(如 top/htop、free -m、df -h、iftop),建立日常巡检与基线。
- 日志:重点扫描catalina.out、localhost*.log、error.log,对 ERROR/Exception 关键字设置告警。
- JVM与应用性能观测
- 本地/远程连接JConsole、VisualVM、JMC观察CPU、堆、线程、GC;对长暂停或频繁 Full GC 及时优化。
- 压测与容量评估:用JMeter建立线程组与HTTP 请求,添加聚合报告监听器,获取响应时间、吞吐量、错误率等指标,为阈值设定提供依据。
- 轻量告警方案(适合中小规模)
- 采用crontab+Shell脚本定时采集指标,超过阈值即通过企业微信/飞书/钉钉机器人 Webhook 推送告警;脚本需记录执行日志并做滚动。
- 平台化方案(适合团队/多实例)
- 部署Prometheus采集系统与 Tomcat/JVM 指标,配置Alertmanager路由与通知(邮件/企业微信/钉钉/短信);用Grafana做可视化大盘。
三、告警规则与阈值示例
- 系统资源(Shell脚本阈值示例,单位与判定可按需调整)
- CPU 使用率≥80% 持续1分钟 → 告警
- 内存使用率≥80% → 告警
- 根分区磁盘使用率≥80% → 告警
- 说明:阈值应结合业务高峰与历史基线设定,避免误报与漏报。
- 服务可用性
- Tomcat/JSP 页面探测失败(HTTP 状态码非2xx或超时)→ 告警
- 建议对关键接口设置SLA阈值(如 P95/P99 响应时间)。
- JVM 运行时
- Full GC 次数/分钟异常升高、老年代使用率持续高位、线程死锁/阻塞 → 告警
- 日志异常
- ERROR/Exception 关键字出现 → 告警(可结合日志采集器做去重与频率抑制)。
四、工具选型与适用场景
| 工具 | 类型 | 适用场景 | 关键能力 |
|---|---|---|---|
| JConsole / VisualVM / JMC | JVM 监控 | 单机/小集群问题定位 | 堆/线程/GC/CPU 采样、内存泄漏分析 |
| Apache JMeter | 压测与基线 | 上线前/容量评估 | 线程组、HTTP 请求、聚合报告(吞吐/响应) |
| Prometheus + Alertmanager + Grafana | 平台化监控告警 | 多实例/生产环境 | 指标采集、规则告警、可视化大盘 |
| Zabbix / Nagios | 传统监控平台 | 有成熟监控体系的团队 | 主机/服务监控、告警路由、插件生态 |
| New Relic / Datadog | 云端 APM | 快速接入与全链路 | APM、错误追踪、分布式追踪 |
| crontab + Shell | 轻量脚本告警 | 小规模/初期项目 | 阈值检测、Webhook 推送、低成本落地 |
五、落地配置示例
- 轻量 Shell 告警脚本片段(阈值与通知可按需修改)
- 采集 CPU 使用率(示例阈值80%)
- util=$(vmstat | awk ‘{ if(NR==3)print $13+$14} ’)
- if [ $util -ge 80 ];
then
- curl -H “Content-Type: application/json” -d ‘{ “msg_type”:“text”,“content”:“[PROD] CPU 使用率过高: '”$util"’%"} ’ “$WEBHOOK_URL”
- fi
- 采集内存使用率(示例阈值80%)
- read total used available < < < $(free -m | awk ‘NR==2{ printf “%.1f %.1f %.1f”, $2/1024, ($2-$NF)/1024, $NF/1024} ’)
- usage=$(awk “BEGIN { printf "%.2f", ${ used} /${ total} *100} ”)
- if [ $(echo “$usage >
= 80” | bc) -eq 1 ];
then
- curl -H “Content-Type: application/json” -d ‘{ “msg_type”:“text”,“content”:“[PROD] 内存使用率过高: '”$usage"’%"} ’ “$WEBHOOK_URL”
- fi
- 采集根分区磁盘使用率(示例阈值80%)
- used=$(df -h | awk ‘$NF==“/”{ print $5} ’ | tr -d ‘%’)
- if [ “$used” -ge 80 ];
then
- curl -H “Content-Type: application/json” -d ‘{ “msg_type”:“text”,“content”:“[PROD] 根分区磁盘使用率过高: '”$used"’%"} ’ “$WEBHOOK_URL”
- fi
- 调度建议:crontab 每5分钟执行一次,脚本输出写入日志并做滚动。
- 采集 CPU 使用率(示例阈值80%)
- Prometheus 告警规则示例(检测实例宕机)
- 规则文件 rules.yml:
- groups:
- name: instance
rules:- alert: InstanceDown
expr: up == 0
for: 1m
labels: severity: page
annotations:
summary: “Instance { { $labels.instance } } down”
description: “{ { $labels.instance } } of job { { $labels.job } } has been down for more than 1 minute.”
- alert: InstanceDown
- name: instance
- groups:
- prometheus.yml 加载规则并对接 Alertmanager:
- rule_files: [“rules.yml”]
- alerting:
- alertmanagers: [{ static_configs: [{ targets: [“localhost:9093”]} ]} ][5,8]
- 规则文件 rules.yml:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu服务器上JSP项目如何实现监控与报警
本文地址: https://pptw.com/jishu/781900.html
