博客/工程

使用Prometheus JMX导出器和Grafana监视Java应用程序

2020年6月25日4分钟

我们都知道普罗米修斯是一个用于收集和查询指标的流行系统,特别是在Kubernetes和临时实例的云原生世界中。

但是人们忘记了Java从1995年就开始运行企业软件了,而Prometheus相对来说还是个新人。它是2012年才创建的!尽管Java在Prometheus诞生之前就已经有了自己的度量收集器,但我们的新环境中没有一个使用它的(度量)语言。

你怎样才能弥补这种差距呢?

这是普罗米修斯JMX出口商的工作。导出器连接到Java的本机度量收集系统Java Management Extensions (JMX),并将度量转换为Prometheus可以理解的格式。

在这篇文章中,我将使用Kafka作为一个你想要监视的Java应用程序的例子。我将构建JMX导出器,部署Kafka,并将其指标引入Grafana进行监视。

注意:本教程假设您有一个Java开发环境,其中包括maven并且已经部署了一个Grafana实例。

你还需要下载一份Kafka的拷贝。Kafka二进制文件是为许多环境预先构建的。上的下载链接Kafka快速入门页面下载Kafka,但还没有开始。

如果您想比较Java的本机JMX输出与Prometheus导出器捕获的数据,请安装jconsole

构建JMX导出器

JMX导出器可用Github上.为了构建它,你需要克隆存储库并使用maven进行构建:

Git克隆https://github.com/prometheus/jmx_exporter.git CD jmx_export MVN包

一旦完成,你将需要得到构建的二进制文件的名称,因为它将在稍后启动Kafka时使用:

ls jmx_prometheus_javaagent /目标/ jmx * jar

运行卡夫卡

现在构建了JMX导出器,您可以将其添加到Kafka将在其中运行的Java环境中。

Kafka需要Zookeeper,所以你需要先启动Zookeeper。(它应该包含在Kafka下载中。根据你下载的Kafka版本不同,你的路径可能会略有不同。)

kafka_2.12-2.4.1 / bin / zookeeper-server-start.sh kafka_2.12-2.4.1 / config /动物园管理员。性能及

(一定要在结尾加上“&”,这样Zookeeper才能在后台运行!否则,你需要打开另一个终端来运行Kafka。)

可选:启动jconsole

如果您想比较Java的原生jconsole度量视图和Prometheus/Grafana视图,可以启动jconsole。当你运行Kafka时,它会自动填充到jconsole窗口中。

<Java监控和管理控制台>

设置Java环境

JMX export构建为JAR文件,需要将其加载到Java环境中才能正常工作。幸运的是,Java允许您在运行Java应用程序之前向环境中添加依赖项,这使得这一点很容易(如果不是很明显的话)。

您将包括本机JMX库和JMX export,并使用上述二进制文件的全名。(我的是“jmx_export /jmx_prometheus_javaagent/target/jmx_prometheus_javaagent-0.12.1”,但如果您下载了不同版本的代理代码,您的可能会有所不同。)

您还可以更改将在其上公开指标的端口。在本例中我使用的是8080,但是如果您的环境中正在使用8080,您可以随意更改它。

出口EXTRA_ARGS = " -Dcom.sun.management。jmxremote \ -Dcom.sun.management.jmxremote。authenticate=false \ -Dcom.sun.management.jmxremote。ssl=false \ -Djava.util.logging.config.file=logging。properties \ -javaagent:./jmx_export /jmx_prometheus_javaagent/target/jmx_prometheus_javaagent-0.12.1- snapshot .jar=8080:jmx_export /example_configs/kafka-2_0_0.yml

开始卡夫卡

现在我们可以运行Kafka本身了。这将自动拉入我们上面指定的额外库。

kafka_2.12-2.4.1 / bin / kafka-server-start.sh kafka_2.12-2.4.1 / config /服务器。性能及

假设你做的一切都是正确的,你应该看到卡夫卡启动!

< Kafkacaption >

如果出现错误,请仔细检查JMX导出器和Kafka配置的路径。

观察指标

现在您应该能够通过访问来查看度量标准http://localhost:8080(或者你使用的任何端口):

查看指标
查看指标

现在你知道了!

想监视通过JMX公开指标的其他Java应用程序吗?您可以使用相同的过程。当然,一旦度量标准在Prometheus中,就很容易将它们拉到Grafana中进行可视化和警报JMX仪表板可以在Grafana.com上找到。