指标是集合网络搜索得到的汇总并且现在在使用的,现在记录一下

数据平台:Prometheus v2.18.1

展示平台:Grafana

指标来源: 日志类的是mtail

其他都是通过jmx_exporter采集的

couter 指的是Prometheus 的指标类型之一,详情请看官网

使用jmx——exporter 版本0.13.0 当前最新版

使用的mtail 版本是mtail_v3.0.0-rc35_linux_amd64

使用的Grafana 版本是6.2.0

使用的tomcat-jmx.yml

---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
rules:
- pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):'
name: tomcat_$3_total
labels:
port: "$2"
protocol: "$1"
help: Tomcat global $3
type: COUNTER
- pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount):'
name: tomcat_servlet_$3_total
labels:
module: "$1"
servlet: "$2"
help: Tomcat servlet $3 total
type: COUNTER
- pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):'
name: tomcat_threadpool_$3
labels:
port: "$2"
protocol: "$1"
help: Tomcat threadpool $3
type: GAUGE
- pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions):'
name: tomcat_session_$3_total
labels:
context: "$2"
host: "$1"
help: Tomcat session $3 total
type: COUNTER
- pattern: 'java.lang<type=GarbageCollector, name=PS \w+><>CollectionCount'
- pattern: 'Catalina<type=Connector, port=\d+><>acceptCount'
- pattern: 'java.lang<type=Runtime><>Uptime‘
#- pattern: ".*" #让所有的jmx metrics全部暴露出来

tomcat 总览页面指标

错误类型指标

topk(5,sum (apache_http_requests_total{status_code=~"4.*"})by (app,customer,env,infra)/sum (apache_http_requests_total)by (app,customer,env,infra)*100)
Legend:4xx百分比
topk(5,sum (apache_http_requests_total{status_code=~"5.*"})by (app,customer,env,infra)/sum (apache_http_requests_total)by (app,customer,env,infra)*100)
Legend:5xx百分比

说明 就是拿到错误代码(4xx,5xx)的counter 算一下比值,如果占比很大的话,那就要关注了

topk(5,tomcat_errorcount_total{protocol=~"http.*"})

说明 tomcat后台本身记录的一个错误总数,需要配合accesslog 看下后台的5xx错误数量仅错误计数指标无法深入了解 Tomcat 正在生成的错误类型,但它可以提供需要调查的潜在问题的高级别视图。您需要通过访问日志中的其他信息来补充此指标,以便更清楚地了解用户遇到的错误类型

请求和吞吐量

topk(5,sum(apache_http_request_time_millseconds_bucket_sum{status_code=~"2.*"}) by (app,customer,env,infra) /sum(apache_http_request_time_millseconds_bucket_count{status_code=~"2.*"}) by  (app,customer,env,infra))
by (app,customer,env,infra) 解释一下 这是用于我在grafana 过滤的label 可以修改为自己适配的

说明 平均响应时间,总的响应时间/总的请求次数 只要访问成功的 过滤了一下 返回的状态码2xx开头的

topk(5,rate(tomcat_processingtime_total{protocol=~"http.*"}[5m]))

说明 tomcat处理请求的响应时间累加值 counter类型

topk(5,rate(tomcat_maxtime_total{protocol=~"http.*"}[5m]))

说明 最大处理时间表示服务器处理一个请求所需的最长时间(从可用线程开始处理请求到返回响应为止)。每当服务器检测到比当前maxTime更长的请求处理时间时,其值就会更新。该指标不包含有关请求,其状态或URL路径的详细信息,因此,为了更好地理解单个请求和特定类型请求的最大处理时间,您需要分析访问日志。单个请求的处理时间激增可能表明JSP页面未加载或相关的进程(例如数据库查询)花费的时间太长而无法完成。由于其中一些问题可能是由于Tomcat之外的操作引起的,因此,与组成基础结构的所有其他服务一起监视Tomcat服务器非常重要。这有助于确保您不会忽略其他对运行应用程序也至关重要的操作或过程

topk(5,rate(tomcat_requestcount_total{protocol=~"http.*"}[5m]))

说明 访问请求总数对其进行rate计算,得到平秒每秒变化率

这里解释rate函数的原理

topk(5,rate(tomcat_bytesreceived_total{protocol=~"http.*"}[5m]))
topk(5,rate(tomcat_bytessent_total{protocol=~"http.*"}[5m]))

说明 tomcat 实例发送和接收的流量

线程池

topk(5,rate(tomcat_threadpool_currentthreadsbusy{protocol=~"http.*"}[5m]))

说明 currentThreadsBusy(ThreadPool)和activeCount(Executor)指标可以告诉您当前连接器池中有多少个线程正在处理请求。当您的服务器收到请求时,如果现有线程不足以覆盖工作负载,则Tomcat将启动更多工作线程,直到达到您为池设置的最大线程数为止。这是由代表maxThreads为连接器的线程池和maximumPoolSize为遗嘱执行人。任何后续请求都将放入队列,直到线程可用。

如果队列已满,则服务器将拒绝任何新请求,直到线程可用为止。重要的是要注意繁忙线程的数量,以确保未达到为maxThreads设置的值,因为如果持续达到此上限,则可能需要调整为连接器分配的最大线程数。

使用监视工具,可以通过将当前线程数与繁忙线程数进行比较来计算空闲线程数。空闲线程数与忙碌线程数是微调服务器的好方法。如果服务器的空闲线程过多,则可能无法有效地管理线程池。在这种情况下,您可以降低minSpareThreads连接器的值,该值设置池中应始终可用的最小线程数(活动或空闲)。根据应用程序的流量调整此值将确保繁忙线程和空闲线程之间有适当的平衡

topk(5,sum(tomcat_threadpool_currentthreadcount{protocol=~"http.*"}-tomcat_threadpool_currentthreadsbusy{protocol=~"http.*"})by (instance,port,infra,env,customer,app))

说明 现有线程减去忙碌线程=空闲线程,此值设定要是看当前设定的sparethread 默认值是否合适

topk(5,jvm_memory_bytes_init{area="heap"})
topk(5,jvm_memory_bytes_max{area="heap"})
jvm 堆内存初始化值和最大值 放在总览主要是想看每个tomcat 分配的初始值和最大值
topk(5,rate(jvm_memory_bytes_committed{area="heap"}[5m]))
保证可用于JVM的内存量。此数量根据内存使用量而变化,并增加到为JVM设置的最大值
此值为5分钟内的变化的值
topk(5,jvm_memory_bytes_used{area="heap"})
JVM当前使用的内存量(例如,应用程序,垃圾回收)

Ok 总览页面的指标就到这里,如果其他的补充请帮忙在评论补充,多谢

下钻的指标

每个tomcat应用的dashboard

process_max_fds{infra="$infra",env="$env",customer="$customer",app="$app",job="tomcat"}
infra="$infra",env="$env",customer="$customer",app="$app"这些是我为了区分每个tomcat应用设置的label
实际可以去掉

说明 系统最大的文件描述符

process_open_fds{infra="$infra",env="$env",customer="$customer",app="$app",job="$job"}

说明 使用的文件描述符,用完了会报错的,系统每打开一个文件或者建立一个连接都会耗一个fd,按照道理应该能判断并发高低。没压过,到时看看

rate(process_cpu_seconds_total{infra="$infra",env="$env",customer="$customer",app="$app"}[5m])

说明 平均增长速率 of process cpu seconds total in 5 min

tomcat_requestcount_total{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app"}

说明 请求总计数

jvm相关

jvm_threads_state{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 线程状态

rate(jvm_gc_collection_seconds_count{infra="$infra",env="$env",customer="$customer",app="$app"}[5m])

说明 rate gc 次数变化 for 5min

jvm_threads_deadlocked{infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_threads_deadlocked_monitor{infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_threads_current JVM当前活跃线程数
jvm_threads_peak 从JVM启动开始曾经活着的最大线程数
jvm_threads_started_total 从JVM启动开始总共启动过的线程次数
jvm_threads_daemon JVM当前活跃的守护线程数
jvm_threads_deadlocked 等待获取对象监视器或可拥有的同步器处于死锁状态的 JVM 线程的周期
jvm_threads_deadlocked_monitor 等待获取对象监视器的 JVM 线程处于死锁状态的循环

说明 看上面

rate(jvm_gc_collection_seconds_sum{infra="$infra",env="$env",customer="$customer",app="$app"}[5m])/rate(jvm_gc_collection_seconds_count{infra="$infra",env="$env",customer="$customer",app="$app"}[5m])

说明 rate for 平均gc使用时间 5min

jvm_memory_bytes_init{area="heap",infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_memory_bytes_max{area="heap",infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_memory_bytes_used{area="heap",infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_memory_bytes_committed{area="heap",infra="$infra",env="$env",customer="$customer",app="$app"}

说明 commited保证可用于JVM的内存量。此数量根据内存使用量而变化,并增加到为JVM设置的最大值usedJVM当前使用的内存量(例如,应用程序,垃圾回收)

还有一个参考的dashboard 到时验证看看 哪个比较有效 指标就如下

tomcat_serverinfo{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 版本信息

tomcat_threadpool_maxthreads{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}

说明 tomcat 可用的最大线程数 理论上的并发最大值

tomcat_threadpool_minsparethreads{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}

说明 最小空闲线程,此值太大会影响性能,因为不用,也建立线程会使用系统资源

catalina_connector_acceptcount{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 socket 获取连接的队列最大长度 参考linux 内核的backlog去理解,此值优先级未确认,是否会覆盖内核的设定backlog值??有待补充

tomcat_threadpool_acceptorthreadcount{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}

说明 用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核 CPU 一般配置为 2。

tomcat_threadpool_pollerthreadcount{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}

说明 表示用于polling IO事件的线程个数,默认为1。在多核CPU架构下,我们可以设置为2来提高polling的能力,官方不建议设置大于2的值,因为锁的竞争会导致性能下降,事实上一个线程也足够快速

increase(tomcat_bytesreceived_total{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}[$__interval])
increase(tomcat_bytessent_total{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}[$__interval])

说明 流量发送和接受的字节数

increase(tomcat_requestcount_total{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}[$__interval])
increase(tomcat_errorcount_total{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}[$__interval])

说明 请求吞吐量和错误数指标判断请求激增的情况下与错误数量的对比

tomcat_threadpool_currentthreadcount{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}
tomcat_threadpool_currentthreadsbusy{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}
tomcat_threadpool_connectioncount{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}
tomcat_threadpool_keepalivecount{protocol=~"http.*",infra="$infra",env="$env",customer="$customer",app="$app",protocol="$protocol"}

说明 tomcat 的各种线程状态数量

sum(increase(tomcat_session_expiredsessions_total{infra="$infra",env="$env",customer="$customer",app="$app"}[$__interval])) by (instance)
sum(increase(tomcat_session_rejectedsessions_total{infra="$infra",env="$env",customer="$customer",app="$app"}[$__interval])) by (instance)

说明 session 相关

topk(5,rate(tomcat_servlet_requestcount_total{infra="$infra",env="$env",customer="$customer",app="$app"}[$__interval]))

说明 Top 5 servlet request count

topk(5, increase(tomcat_servlet_errorcount_total{infra="$infra",env="$env",customer="$customer",app="$app"}[$__interval]))

说明 Top 5 servlet error count

topk(5, rate(tomcat_servlet_processingtime_total{infra="$infra",env="$env",customer="$customer",app="$app"}[$__interval]) / rate(tomcat_servlet_requestcount_total{infra="$infra",env="$env",customer="$customer",app="$app"}[$__interval]))

说明 Top 5 servlets average processing time per request in last 5 minutes

下钻子页面JVMdashboard

up{infra="$infra",env="$env",customer="$customer",app="$app",job="$job"}

说明 判断采集任务是否存话

time() - process_start_time_seconds{infra="$infra",env="$env",customer="$customer",app="$app",job="$job"}

说明 已启动时间

java_lang_operatingsystem_availableprocessors{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 CPU数量

java_lang_operatingsystem_systemloadaverage{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 系统负载

java_lang_operatingsystem_openfiledescriptorcount{infra="$infra",env="$env",customer="$customer",app="$app"}

说明

process_start_time_seconds{infra="$infra",env="$env",customer="$customer",app="$app",job="$job"}*1000

说明

java_lang_operatingsystem_freephysicalmemorysize{infra="$infra",env="$env",customer="$customer",app="$app"}

说明

label_join(jvm_info{infra="$infra",env="$env",customer="$customer",app="$app"}, "jdk", ", ", "vendor", "runtime", "version")

说明

java_lang_operatingsystem_systemcpuload{infra="$infra",env="$env",customer="$customer",app="$app"}
java_lang_operatingsystem_processcpuload{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 进程和系统使用的cpu负载

jvm_memory_bytes_max{area="$memarea",infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_memory_bytes_used{area="$memarea",infra="$infra",env="$env",customer="$customer",app="$app"} / jvm_memory_bytes_max >= 0
area="$memarea" 用于repeat功能使用的,参考我那篇grafana复制的博文吧[点击这里](https://www.cnblogs.com/muzhifei/p/13109639.html)

说明

jvm_memory_pool_bytes_used{pool="$mempool",infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_memory_pool_bytes_committed{pool="$mempool",infra="$infra",env="$env",customer="$customer",app="$app"}
同样的是复制

说明 内存池的使用情况

jvm_classes_loaded{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 已加载的类

rate(jvm_gc_collection_seconds_sum{infra="$infra",env="$env",customer="$customer",app="$app"}[$__interval])

说明 gc耗时的平均每秒增长值

rate(jvm_gc_collection_seconds_count{infra="$infra",env="$env",customer="$customer",app="$app"}[5m])

说明 gc垃圾回收次数的平均每秒增长值

jvm_threads_deadlocked{infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_threads_peak{infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_threads_current{infra="$infra",env="$env",customer="$customer",app="$app"}
jvm_threads_daemon{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 jvm thread 信息

java_lang_operatingsystem_committedvirtualmemorysize{infra="$infra",env="$env",customer="$customer",app="$app"}
java_lang_operatingsystem_freephysicalmemorysize{infra="$infra",env="$env",customer="$customer",app="$app"}

说明 Committed virtual memory 等同于/proc/$pid/status/vmsizeFree physical memory 就是系统的剩余内存grafana 单位计算不正确估计是直接除以1000的

beta版 tomcat 应用监控指标的更多相关文章

  1. 【巨杉数据库SequoiaDB】巨杉数据库 v5.0 Beta版 正式发布

    2020年疫情的出现对众多企业运营造成了严重的影响.面对突发状况,巨杉利用长期积累的远程研发协作体系,仍然坚持进行技术创新,按照已有规划­­推进研发工作,正式推出了巨杉数据库(SequoiaDB) v ...

  2. [App Store Connect帮助]六、测试 Beta 版本(1)TestFlight Beta 版测试概述(iOS、Apple TVOS、watchOS)

    TestFlight Beta 版测试让您可以分发您 App 的 Beta 版构建版本给测试员并收集反馈.您可以在您的 App Store Connect 帐户中一次为至多 100 个 App 启用 ...

  3. 无意间做了个 web 版的 JVM 监控端(前后端分离 React+Spring Boot)

    之前写了JConsole.VisualVM 依赖的 JMX 技术,然后放出了一个用纯 JMX 实现的 web 版本的 JConsole 的截图,今天源码来了. 本来就是为了更多的了解 JMX,第一步就 ...

  4. Home 安转beta版软件

    今天想装测试版的cocoapods,用 brew install cocoapods 后,总是安装稳定版,就是1.1.0,不是最新的beta版,发现用下面这个命令可以装最新beta版 brew ins ...

  5. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  6. alpha版、beta版、rc版的意思

    很多软件在正式发布前都会发布一些预览版或者测试版,一般都叫“beta版”或者 “rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思. alpha版:内部测试版.α是希腊字母 ...

  7. Beta版

    Beta版使用说明 各文件介绍:本软件是基于visual studio 2010 平台,使用C#语言开发的windows窗体游戏.该游戏共有七个界面,分别是开始界面,游戏说明界面,模式选择界面,经典模 ...

  8. 一起买beta版本文档报告汇总

    一起买beta版本文档报告汇总 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 一.Beta版本冲 ...

  9. 解压版Tomcat配置

    解压版Tomcat配置(本例Tomcat6):   一 配置Tomcat 1 下载Tomcat Zip压缩包,解压.      如果增加tomcat的用户名和密码,则修改/conf/tomcat-us ...

随机推荐

  1. Spring IoC createBean 方法详解

    前言 本篇文章主要分析 Spring IoC 的 createBean() 方法的流程,以及 bean 的生命周期. 下面是一个大致的流程图: 正文 AbstractAutowireCapableBe ...

  2. [A*算法]基于Unity实现A*算法(二)

    写在前面:上一篇当时是非常简单的了解一下A*,昨天还有一些问题没解决,就暂时把自己查阅的文坛摘抄了过来(毕竟人家写的比我要好的多 :> ) 今天终于解决了,就又写了这一篇,正好我自己再梳理一遍, ...

  3. 苏浪浪 201771010120 《面向对象程序设计(java)》第七章学习总结

    第七周 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: ( ...

  4. 19-6 通过t-sql实现约束

    ------------------------------------------------------------------------ --通过t-sql语句来创建约束 ---------- ...

  5. Vue踩坑日记

    1.错误:找不到模块'eslint-config-standard' https://github.com/standard/eslint-config-standard/issues/84 我遇到了 ...

  6. yum CentOS7安装mysql

    配置阿里云yum源 [root@bogon ~]# cd /etc/yum.repos.d/ [root@bogon yum.repos.d]# mkdir repo_bak [root@bogon ...

  7. PHP时间操作

    PHP中对日期进行处理常用的几个函数如下: date(format,timestamp): 把时间戳格式化为更易读的日期和时间 format : 必需,规定输出日期字符串的格式 timestamp : ...

  8. C#常见异常

    SystemException 其他用户可处理的异常的基本类 ArgumentException 方法的参数是非法的 ArgumentNullException 一个空参数传递给方法,该方法不能接受该 ...

  9. 谈谈对ThreadLocal类的理解

    源码中对于ThreadLocal类的解释是: /** * This class provides thread-local variables. These variables differ from ...

  10. S32K142学习记录_SDK手动导入

    这几天和一位工程师讨论ADC+PDB学到了很多,当然很多的时候都是我在听, 毕竟新手,顺便其中提出自己的疑问,讨论会让你学到很多 有空会将讨论整理出来 因为demo板还没有到,只能看着大佬的程序对着手 ...