Debian下Tomcat的监控与告警如何设置
导读:Debian下Tomcat监控与告警实操指南 一 监控体系与组件选型 指标监控:开启 JMX 并使用 Prometheus JMX Exporter 暴露指标,配合 node_exporter 采集主机资源,使用 Grafana 可视化与...
Debian下Tomcat监控与告警实操指南
一 监控体系与组件选型
- 指标监控:开启 JMX 并使用 Prometheus JMX Exporter 暴露指标,配合 node_exporter 采集主机资源,使用 Grafana 可视化与 Alertmanager 发送告警。
- 日志监控:优化 conf/logging.properties,启用 AccessLogValve,用 Filebeat/Logstash 采集到 Elasticsearch,在 Kibana 做可视化与告警。
- 可用性监控:对 /health 或 /manager/status 做 HTTP 探针(黑盒),结合 Nginx/HAProxy 健康检查与摘除。
- 传统方案:使用 Zabbix 模板监控 Tomcat/JMX,或 jmxtrans → InfluxDB → Grafana 链路。
- 日志路径与实时查看:Tomcat 常用日志位于 /var/log/tomcat/(如 catalina.out、localhost..log),可用
tail -f实时查看。
二 指标监控与告警落地 Prometheus JMX Exporter
- 启用 JMX(示例为单实例,生产请启用认证/SSL):在 bin/catalina.sh 的 Execute The Requested Command 之前加入
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Djava.rmi.server.hostname=< 服务器IP> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
重启 Tomcat 后用jconsole连接 :1099 验证。 - 部署 JMX Exporter:将 jmx_exporter 的 jar 放到 $CATALINA_HOME/lib/,新增 $CATALINA_HOME/bin/setenv.sh:
export CATALINA_OPTS="$CATALINA_OPTS -javaagent:$CATALINA_HOME/lib/jmx_prometheus_javaagent-< version> .jar=< exporter_port> :/etc/tomcat/jmx-exporter.yml"
示例 /etc/tomcat/jmx-exporter.yml:rules: - pattern: "Catalina< type=GlobalRequestProcessor, name=\"http-nio-8080\"> " name: tomcat_global_request_processor labels: { connector: "http-nio-8080" } help: Tomcat global request processor - pattern: "Catalina< type=ThreadPool, name=\"http-nio-8080\"> " name: tomcat_threads labels: { connector: "http-nio-8080" } help: Tomcat thread pool - pattern: "java.lang< type=Memory> " name: jvm_memory help: JVM memory pools - Prometheus 采集与告警规则:
常用指标计算示例:scrape_configs: - job_name: 'tomcat' static_configs: - targets: ['< IP> :< exporter_port> '] - job_name: 'node' static_configs: - targets: ['< IP> :9100'] groups: - name: tomcat_alerts rules: - alert: HighHeapMemoryUsage expr: jvm_memory_used_bytes{ area="heap"} / jvm_memory_max_bytes{ area="heap"} > 0.90 for: 5m labels: { severity: critical } annotations: summary: "Tomcat堆内存使用率过高" description: "堆内存使用率 { { $value | humanizePercentage } } " - alert: HighErrorRate expr: sum(rate(tomcat_global_request_processor_error_count_total{ connector=~".+"} [5m])) / sum(rate(tomcat_global_request_processor_request_count_total{ connector=~".+"} [5m])) > 0.05 for: 2m labels: { severity: critical } annotations: summary: "Tomcat请求错误率过高" description: "5分钟错误率 { { $value | humanizePercentage } } " - alert: ThreadPoolBusyHigh expr: tomcat_threads_current_threads_busy / tomcat_threads_max_threads > 0.90 for: 3m labels: { severity: warning } annotations: summary: "Tomcat线程池繁忙率过高" description: "连接器 { { $labels.connector } } 繁忙率 { { $value | humanizePercentage } } "- 错误率:
rate(tomcat_global_request_processor_error_count_total[5m]) / rate(tomcat_global_request_processor_request_count_total[5m]) - 活跃线程占比:
tomcat_threads_current_threads_busy / tomcat_threads_max_threads - 吞吐与耗时:对累计型指标用
rate()/irate()计算速率与分位耗时。
- 错误率:
三 日志监控与告警落地 ELK Kibana
- 优化 Tomcat 日志:在 conf/logging.properties 启用异步与保留天数,例如
1catalina.org.apache.juli.AsyncFileHandler.level=INFO、1catalina.org.apache.juli.AsyncFileHandler.maxDays=30;
在 conf/server.xml 配置 AccessLogValve 输出响应时间与线程信息:
< Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t \"%r\" %s %b %D %T %I" />
日志默认目录 /var/log/tomcat/。 - Filebeat/Logstash → Elasticsearch → Kibana:
Filebeat 采集 /var/log/tomcat/,输出到 Logstash;Logstash 解析 access log(提取 %D/%T、状态码、URI 等),写入 Elasticsearch;Kibana 建立索引模式(如 tomcat-logs-*),在 Stack Management → Rules 中创建告警(如 5xx 比例、慢请求比例、错误关键字)。 - 快速验证:
tail -f /var/log/tomcat/catalina.out与tail -f /var/log/tomcat/localhost_access_log.*观察实时日志。
四 可用性与基础资源监控
- 主机层面:用 node_exporter 采集 CPU、内存、磁盘、网络;结合告警规则(如 CPU> 80% 持续5分钟、磁盘可用< 10GB、Load 过高)。
- 服务层面:对 HTTP 200/503 做黑盒探测(如 blackbox_exporter 或 Nginx/HAProxy 健康检查),异常时自动摘除实例。
- 传统监控:使用 Zabbix 的 Tomcat 模板或 jmxtrans → InfluxDB → Grafana 构建可视化与阈值告警。
五 关键告警阈值与落地建议
- 阈值参考(按“持续时长 + 严重度”设计):
- JVM 堆内存使用率:> 70% 警告、> 90% 严重(持续≥5分钟)
- 线程池繁忙率:> 70% 警告、> 90% 严重(持续≥2–3分钟)
- HTTP 错误率:> 1% 警告、> 5% 严重(持续≥2分钟)
- 95分位响应时间:> 2s 警告(持续≥3分钟)
- Full GC:单次> 2s 严重
- 落地要点:
- 采用“基线法/阶梯式告警”,高峰期适度上调阈值,维护窗口静默告警;
- 为告警附加上下文(实例、连接器、阈值、样本时间窗),减少排障时间;
- 避免告警风暴:合理分组、抑制重复、设置依赖关系。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian下Tomcat的监控与告警如何设置
本文地址: https://pptw.com/jishu/763362.html
