Grafana Tomcat插件(Telegraf):将JVM内存查询结果转为百分比
问题解答
一、将空闲内存数值转换为百分比显示
1. 修改InfluxDB查询语句
要把空闲内存(free)转换为占总内存(total)的百分比,调整查询为:
SELECT mean("free") / mean("total") * 100 AS "free_memory_percent" FROM "tomcat_jvm_memory" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval) fill(null)
如果需要显示内存使用率(已用内存占比),则用:
SELECT (mean("total") - mean("free")) / mean("total") * 100 AS "used_memory_percent" FROM "tomcat_jvm_memory" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval) fill(null)
2. Grafana面板设置
编辑对应面板,在「显示选项」中:
- 单位选择「百分比(0-100)」,数值会自动带上%符号
- 可添加阈值(比如空闲内存<20%时标红),直观展示告警状态
二、基于给定Tomcat指标构建优质Grafana仪表板
按JVM内存、连接器性能两大核心模块拆分,搭配合适的面板类型:
模块1:JVM内存监控
1. 整体内存概览(折线/面积图)
- 同时展示:空闲内存百分比、总内存(total)、最大内存(max)
查询示例(总内存):SELECT mean("total") FROM "tomcat_jvm_memory" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval) fill(null) - 作用:快速判断内存分配是否合理,是否接近最大限制
2. 内存池详情(堆叠柱状图)
- 监控各内存池(如新生代、老年代)的
used、committed、max指标
查询示例:SELECT mean("used") FROM "tomcat_jvm_memorypool" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval), "pool" fill(null) - 作用:定位内存泄漏、GC频繁的具体内存池
模块2:Tomcat连接器性能监控
1. 流量监控(折线图)
- 计算每秒收发流量,避免原始累计值无法直观判断趋势:
同理替换-- 每秒接收流量 SELECT non_negative_derivative(mean("bytes_received"), 1s) AS "recv_bytes_per_sec" FROM "tomcat_connector" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval) fill(null)bytes_sent得到每秒发送流量,单位设置为「字节/秒」或自动转换为KB/MB
2. 线程状态监控(柱状图)
- 展示
current_thread_busy(繁忙线程数)、current_thread_count(总线程数)、max_threads(最大线程数) - 作用:判断线程池是否饱和,若繁忙线程接近最大线程数,需调整Tomcat线程池配置
3. 请求与错误统计
- 每秒请求数:用导数计算累计请求的实时速率
SELECT non_negative_derivative(mean("request_count"), 1s) AS "requests_per_sec" FROM "tomcat_connector" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval) fill(null) - 错误率:计算错误请求占总请求的比例,用单值面板展示并设置阈值(如>1%告警)
SELECT (non_negative_derivative(mean("error_count"), 1s) / non_negative_derivative(mean("request_count"), 1s)) * 100 AS "error_rate" FROM "tomcat_connector" WHERE ("host" = '$host') AND $timeFilter GROUP BY time($__interval) fill(null) - 请求耗时:展示
processing_time(平均处理时间)和max_time(最大处理时间),定位慢请求
仪表板优化建议
- 添加变量:除现有
$host外,新增$pool变量关联tomcat_jvm_memorypool的pool标签,支持多内存池快速切换 - 配置告警:针对内存使用率>90%、线程繁忙率>80%、错误率>1%等关键指标设置告警规则
- 布局分组:将JVM内存、连接器性能模块分区排列,保持时间范围、变量同步,提升可读性
内容的提问来源于stack exchange,提问作者user5820327
相关产品推荐
相关产品推荐

