Prometheus 监控平台不能正常显示 jvm 监控数据解决办法

本贴最后更新于 411 天前,其中的信息可能已经斗转星移

最近遇到一个麻烦事情,就是使用Prometheus的收集器jmx_exporter收集java项目资源使用情况的时候,收集器部署成功了,单独访问收集器界面,可以正常访问,但是很慢,配置到Prometheus中,就是显示不出来。

通过这个现象,初步怀疑是jmx_exporter收集器收集数据过慢,这个原因。

那会不会是我配置有问题呢?

jmx_exporter收集Prometheus配置

仔细对比了自己的配置过程与官方帮助,发现是一致的。配置过程没有问题。难道是jvm_exporter的jar包有问题?

然后,我又反复确认和查看官方帮助,这个jar包支持jdk版本大于等于7。看来,这些都不是问题,哪问题出在哪呢?

于是,我又去查看tomcat的启动日志,只是看到在"[localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[/opt/apache-tomcat-8.5.56/webapps/app]的部署已在[45,113]毫秒内完成" 在这个信息的时候,特别的卡,等了很长时间。没有找到其他有用的信息。

我只好找一个springboot开发的项目,在jdk8的环境中,再次搭建一套监控收集器,看Prometheus中能否正常显示。结果,还是一样,收集器自身的地址访问很慢,但是,能显示数据,放到Prometheus中,就不显示了。

只是,这次比较奇怪的事情是,启动命令中,使用了收集器,启动就变得特别慢,特别是在开始的时候,等了很久还没有启动springboot。待出现springboot的图标时,就出现一行警告提示:“[main] o.s.boot.StartupInfoLogger : InetAddress.getLocalHost().getHostName() took 54830 milliseconds to respond. Please verify your network configuration.” 这是一行警告,本来没有什么关系的,但是,看到这个时间,差不多55秒,这我能忍受吗?于是,我就百度了一下“InetAddress.getLocalHost().getHostName()”,搜索的结果,告诉我,这是java代码中,获取主机名称的代码,而且获取的是系统/etc/hosts文件中的主机名。我用的机器,配置了主机名,通过 hostname 命令,可以获得到,但是,/etc/hosts中,并没有配置主机名。于是,我就修改了一下hosts文件:

vim /etc/hosts
127.0.0.1   localhost centos7 localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost centos7 localhost.localdomain localhost6 localhost6.localdomain6

在第一个localhost后面,添加了我的主机名。

修改后,奇迹出现了,刷新jmx_exporter自己的界面,立马显示了数据,这个能快速显示了,应该Prometheus监控平台就能出现数据了。于是,我去grafafa中查看jvm的监控面板,果真有数据了。

至此,这个问题,得以解决。

很多时候,就是这样,遇到一个问题,开始时,一头雾水,完全不知道问题出在哪?需要坚持不懈,一步一步,注意细节,分析,才有可能解决。

回帖
请输入回帖内容 ...