最近遇到一个麻烦事情,就是使用Prometheus的收集器jmx_exporter收集java项目资源使用情况的时候,收集器部署成功了,单独访问收集器界面,可以正常访问,但是很慢,配置到Prometheus中,就是显示不出来。
通过这个现象,初步怀疑是jmx_exporter收集器收集数据过慢,这个原因。
那会不会是我配置有问题呢?
jmx_exporter收集Prometheus配置
- 下载最新的jmx_exporter
- 下载tomcat.yml文件
- 把下载的两个文件,放到tomcat的bin文件夹下,或微服务项目jar包同路径
- 如果是tomcat部署的java项目,则修改tomcat的bin文件夹中的catalina.sh文件,增加
JAVA_OPTS="-javaagent:./jmx_prometheus_javaagent-0.17.2.jar=12345:tomcat.yml"
,然后启动tomcat;如果是springboot的微服务项目,则java -javaagent:./jmx_prometheus_javaagent-0.17.2.jar=12345:tomcat.yml -jar xxx.jar
仔细对比了自己的配置过程与官方帮助,发现是一致的。配置过程没有问题。难道是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的监控面板,果真有数据了。
至此,这个问题,得以解决。
很多时候,就是这样,遇到一个问题,开始时,一头雾水,完全不知道问题出在哪?需要坚持不懈,一步一步,注意细节,分析,才有可能解决。
欢迎来到testingpai.com!
注册 关于