当前位置: 首页 > 科技观察

JavaWeb应用服务器之一:Tomcat监控选型与实践

时间:2023-03-12 13:30:44 科技观察

监控选型TomcatManager和Psi-probe是很好的可视化监控工具,可以查看Tomcat的状态信息(比如单位时间内的请求数,线程状态,ETC。)。在生产环境中,随着Tomcat实例的不断增加,在不同的实例上维护Manager控制台会有些繁琐。同时,为了与企业监控系统、运维仪表盘等集成,需要选择兼容性和适应性更好的监控工具。在企业微服务普及和CI/CD需求旺盛的今天,要求我们的服务易于开发和维护,同时具备扩展性强、交付速度快的特点。在这个环境下,Tomcat+Prometheus+Grafana可以很好的适配现有的企业架构,并且可以和其他中间件服??务监控很好的融合。Prometheus作为新一代云原生监控系统,鼓励用户对服务内部状态进行监控,让用户了解服务和应用的真实运行状态。容器环境下Tomcat+Prometheus+Grafana的示意图如下:在实际部署中,可以简单分为以下几个步骤:1、下载jmx_prometheus_javaagent(https://github.com/prometheus/jmx_exporter)。如果是容器环境,可以把jmx_prometheus_javaagent和Tomcat放到运行镜像中。2、Tomcat启动时JAVA_OPTS添加Javaagent和Tomcatconfig.yaml(https://github.com/prometheus/jmx_exporter/blob/master/example_configs/Tomcat.yml)配置,例如:JAVA_OPTS="-javaagent:/var/tomcat/jmx_prometheus_javaagent-0.3.1.jar=port:/vat/tomcat/conf/config.xml”(port为实际端口)。3.Prometheus添加Tomcat的job_name。结合书上指出的监控指标《SRE: Google运维解密》监控系统需要能够有效支持白盒监控和黑盒监控,通过白盒监控可以了解其内部的实际运行状态,通过监控指标的观察可以预测可能出现的问题,从而优化潜在的不确定因素。HTTP探针、TCP探针等黑盒监控,可以快速通知相关人员处理系统或服务故障。监测的四大黄金指标可以帮助我们更好地衡量服务层面的终端用户体验、服务中断、业务影响等方面。关注四种类型的指标:错误、延迟、流量和饱和度。通过对黑盒和白盒监控的理解,结合监控的四大黄金指标,可以从以下几个方面考虑Tomcat的重要监控指标:监控实践错误错误监控重点关注当前应用中出现的错误或系统询问。对于Tomcat错误监控,主要的监控指标是Tomcat错误请求数和占总请求数的比例。这些大多是显性错误。对于隐性错误(比如状态码响应200,但实际业务流程失败),通常需要根据不同的业务场景,在服务中添加钩子和业务逻辑监控。图1:Tomcat实例在1000+qps下的请求数与错误数的比例当然,我们也可以使用ELK等工具对Tomcat上游代理或者LB进行整体错误状态码统计,这样我们可以更好地定位错误。并考虑在出现5xx错误时如何“快速失败”,以减少该错误对系统性能的影响。图2:Tomcat上游代理收集的状态代码统计信息延迟监控主要关注服务请求所需的时间。对于Tomcat延迟监控,主要的监控指标是Tomcat实例的响应时间。同时,我们还可以在黑盒监控中使用HTTP语义检测,采集Tomcat对应域名的全链路延迟,发送指定的GET、POST、HEAD等请求,匹配状态码和返回内容服务器。图3:某产品线下多个Tomcat实例整体响应时间汇总图4:Tomcat上游代理采集的平均请求时间和Tomcat平均响应时间衡量服务的承载能力。对于Tomcat流量监控,我们需要关注Tomcat实例收发的流量。图5:Tomcat实例发送和接收的流量饱和度饱和度监控侧重于系统或应用程序对资源的利用情况,强调最能影响服务状态的受限资源。不同的系统或应用对饱和度监控的需求不同,但共同点是在业务性能大幅下降时作为决定性的状态指标。对于Tomcat饱和度监控,可以从堆内存、线程数、GC次数、耗时等入手。告警发生前后,通过查看各指标的变化曲线,可以快速定位问题原因。Tomcat线程池Tomcat线程池初始配置的集合,可以根据不同的业务场景和不同实例的压力进行调整,比如maxThreads、acceptCount等。图6:JVM监控相关线程池的默认配置对某个Tomcat实例的监控,对于TomcatJVM的监控,我们通常需要关注堆内存的使用情况,GC的次数和时间,以及JVM线程数的监控。JVM堆内存监控JavaHeap是JVM管理的最大的一块内存,所有线程共享,用于存放对象实例。因此,堆内存使用至关重要。图7:Tomcat实例堆内存使用GC次数和耗时通过查看GC次数和单位时间耗时,我们可以针对不同的业务场景选择不同的垃圾收集器,从而进一步提升性能。图8:Tomcat实例默认垃圾收集器的总GC时间曲线图9:Tomcat实例默认垃圾收集器的总GC时间曲线运行情况。图10:某Tomcat实例的JVM线程相关统计写在***中通过对Tomcat重要监控指标的收集和监控,帮助我们更方便的完成日常巡检,提高故障前发现问题的能力,以及改善故障发生的时间。定位效率,从而更好地提高稳定性。附件:jmx_prometheus_javaagent:https://github.com/prometheus/jmx_exporterTomcatjmx_exporter:https://github.com/prometheus/jmx_exporter/blob/master/example_configs/Tomcat.yml本期作者:蒲公英京东云应用研发部Tomcat是一个开源的轻量级Web应用服务器,广泛应用于云服务平台和企业应用系统,是最流行的JavaWeb应用服务器之一。因此,对Tomcat的监控就显得尤为重要,可以让我们了解Tomcat在不同场景下的运行状态,从而更好地进行调优。