Prometheus结合jmx exporter 的httpserver模式采集tomcat监控实战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus结合jmx exporter 的httpserver模式采集tomcat监控实战相关的知识,希望对你有一定的参考价值。

Prometheus结合jmx

1. 实验环境

本次实验环境见下表

Prometheus结合jmx


如何查看相应的参数

参看操作系统

[root@mufengrow ~]# cat /etc/redhat-release

CentOS Linux release 7.9.2009 (Core)

查看hostname

[root@mufengrow7 ~]# hostname

mufengrow7

查看ip

[root@mufengrow7 ~]# ifconfig |grep inet |awk NR==1print $2

10.0.0.7

2. 安装tomcat8

本次实验使用tomcat8.5.87版本进行演示。

2.1 安装jdk8

为什么要安装jdk8?

因为在tomcat的官网里已经给出了tomcat8运行的环境。

我们登陆tomcat8的下载网页,点击网页中的“README”,通过下图对“README”页面的截图里看出,官方用红色的字体标出tomcat 8.5的运行环境至少也是Java 7以上。鉴于现在的环境都是基于Java 8进行开发,所以我们本次实验的环境也是使用Java 8环境。

Prometheus结合jmx

2.1.1 使用yum的方式安装jdk8

安装jdk8有两种方式,一种是到orcale官网上下载官方编译好的jdk二进制安装包,另一种是使用yum命令安装centos7仓库中的opnjdk8,本次实验使用的是第二种方式。

[root@mufengrow7 ~]# yum install -y java-1.8.0-openjdk

代码注释:

-y:对所有的提问都回答“yes”

小提示:

如果忘记了openjdk8的安装包名称,我们可以使用yum list | grep jdk命令来查看openjdk8的安装包的名称:

[root@mufengrow7 ~]# yum list | grep jdk

openjdk-asmtools-javadoc.noarch          7.0.b10-0.2.20210610.gitf40a2c0.el7

2.1.2 检查jdk的版本

通过下面的命令,我们可以查看刚刚安装的openjdk是不是openjdk8的版本。

[root@mufengrow7 ~]# java -version

openjdk version "1.8.0_362"

OpenJDK Runtime Environment (build 1.8.0_362-b08)

2.2 安装tomcat8.5.87

2.2.1 下载tomcat8.5.87的二进制安装包

本次实验使用的是tomcat的8.5.87版本,所以我们需要到tomcat官方下载tomcatd8.5.87的二进制安装包。

#创建tomcat安装目录

[root@mufengrow7 ~]# mkdir -p /apps

#进入安装目录

[root@mufengrow7 ~]# cd /apps

#使用wget命令下载tomcat8.5.87的二进制安装包

[root@mufengrow7 apps]# wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.87/bin/apache-tomcat-8.5.87.tar.gz

2.2.2 解压tomcat8.5.87的二进制安装包

[root@mufengrow7 apps]# tar zxvf apache-tomcat-8.5.87.tar.gz

2.2.3 创建软连接

在这里创建软连接是为了方便我们以后对tomcat的更新换代。如果嫌麻烦这一步可以忽略。

[root@mufengrow7 apps]# ln -sv /apps/apache-tomcat-8.5.87 /apps/tomcat

‘/apps/tomcat’ -> ‘/apps/apache-tomcat-8.5.87’

2.2.4 创建tomcat启动用户

在生产的环境中,我们一般不会直接使用root用户来启动tomcat,所以我们需要创建一个普通用户来启动tomcat

[root@mufengrow7 apps]# useradd www

2.2.5 修改tomcat文件所属

因为我们需要使用www用户启动tomcat,而此时tomcat文件所属都是root用户,所以我们需要修改tomcat目录的所属。

[root@mufengrow7 apps]# chown -R www.www /apps/apache-tomcat-8.5.87

2.2.6 查看tomcat的帮助

对于不熟悉tomcat的朋友来说,我们先查看一下tomcat的帮助文档,看看tomcat是如何启动的

#进入到tomcat文件夹下的bin目录里

[root@mufengrow7 apps]# cd tomcat/bin/

#查看tomcat的文件

[root@mufengrow7 bin]# ll

total 892

-rw-r----- 1 www www  36717 Feb 28 03:32 bootstrap.jar

-rw-r----- 1 www www  16840 Feb 28 03:32 catalina.bat

-rwxr-x--- 1 www www  25294 Feb 28 03:32 catalina.sh #tomcat的启动文件

-rw-r----- 1 www www   1664 Feb 28 03:32 catalina-tasks.xml

-rw-r----- 1 www www   2123 Feb 28 03:32 ciphers.bat

-rwxr-x--- 1 www www   1997 Feb 28 03:32 ciphers.sh

-rw-r----- 1 www www  25765 Feb 28 03:32 commons-daemon.jar

-rwxr-x--- 1 www www   1904 Feb 28 03:32 startup.sh

-rw-r----- 1 www www  52826 Feb 28 03:32 tomcat-juli.jar

-rw-r----- 1 www www 437622 Feb 28 03:32 tomcat-native.tar.gz

-rw-r----- 1 www www   4574 Feb 28 03:32 tool-wrapper.bat

-rwxr-x--- 1 www www   5540 Feb 28 03:32 tool-wrapper.sh

-rw-r----- 1 www www   2026 Feb 28 03:32 version.bat

-rwxr-x--- 1 www www   1908 Feb 28 03:32 version.sh

#查看帮助

[root@mufengrow7 bin]# ./catalina.sh --help

Using CATALINA_BASE:   /apps/tomcat

Using CATALINA_HOME:   /apps/tomcat

Using CATALINA_TMPDIR: /apps/tomcat/temp

Using JRE_HOME:        /usr

Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar

Using CATALINA_OPTS:  

Usage: catalina.sh ( commands ... )

为了更直观一些,我们把catalina.sh常用的参数用表格来展示:

Prometheus结合jmx

2.2.7 启动tomcat

我们使用www用户启动tomcat,测试tomcat是否能成功启动

[root@mufengrow7 bin]# su - www -c "/apps/tomcat/bin/catalina.sh start"

Using CATALINA_BASE:   /apps/tomcat

Using CATALINA_HOME:   /apps/tomcat

Using CATALINA_TMPDIR: /apps/tomcat/temp

Using JRE_HOME:        /

Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar

Using CATALINA_OPTS:  

Tomcat started.

代码注释:

-:使用该用户的shell类型。

-c:向www用户传递一个shell命令。

(注意:一定要使用绝对路径,不能使用相对路径。原因是转换成www用户后,该用户的家目录是在“/home/www”里,而不是在tomcat的目录下。在“/home/www”里没有“catalina.sh”这个文件。使用相对路径的结果只会显示找不到“catalina.sh”这个文件。)

2.2.8 验证tomcat的启动情况

我们使用ps命令来查看tomcat的进程状态,使用ss命令来查看tomcat的端口

#使用ps命令来查看tomcat的进行状态,通过查看下面的结果,我们得知现在的tomcat的确是使用了“www”用户进行启动

[root@mufengrow7 bin]# ps -ef | grep tomcat | grep -v grep

www        2117      1  0 13:00 ?        00:00:02 //bin/java -Djava.util.logging.config.file=/apps/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/apps/tomcat -Dcatalina.home=/apps/tomcat -Djava.io.tmpdir=/apps/tomcat/temp org.apache.catalina.startup.Bootstrap start

#我们都知道tomcat的启动后的默认端口为8080,所以通过命令来查找8080端口确认tomcat的端口是否有启动

[root@mufengrow7 bin]# ss -tnl | grep 8080

LISTEN     0      100       [::]:8080                  [::]:*

代码注释:

-ef:在-ef里可以分出两个选项-e和-f

-e:显示所有执行程序的进程(除会话领导者与终端关联的进程)

-f:显示UID,PPIP,C与STIME栏位

-v:得出的结果取反

3. JMX exporter简介

3.1 什么是jmx exporter

jmx exporter是prometheus官方提供的用于采集JMV数据的exporter,而且新出jmx exporter有两种监控方式,分别为“java agent”模式和“http server”模式。

注意:jmx exproter在“0.17.0”版本开始更新了“http server”模式。

3.2 什么是 “java agent”监控模式?

“java agent”监控模式是jmx exproter的最初的形式,该模式是将jmx exporter的这个jar包集成在tomcat内,在tomcat启动时jmx exporter也会一起启动,然后变成一个展示JVM数据的代理。最后由prometheus采集代理展示出来的数据。

想知道怎么使用jmx exporter的“java agent”模式采集tomcat的数据,我们可以看“云原生系列之使用prometheus监控tomcat之使用java agent模式监控”这篇文章

3.3 什么是 “http server”监控模式?

“http server”监控模式,顾名思义就是让jmx exporter变成一个采集JVM数据的server。然后jmx exporter会通过http来采集远程的tomcat服务的数据

3.4 在哪里下载jmx exporter?

我们登陆prometheus官方的下载页面,会发现并没有jmx exporter的下载链接。

prometheus官方下载页面:https://prometheus.io/download/

没有提供jmx rxporter的下载链接,为什么上面会说jmx exproter是prometheus官方提供的exporer呢?是不是博主在骗大家呢?

其实不是,在官方的下载页面里有一个Exporters and integrations链接,里面就有prometheus官方推荐exporter,我们的jmx exporter也在这个网页里面

Prometheus结合jmx

点击进入页面,找到jmx exporter,点击连接就可以进入jmx exporter的github页面。从下面的截图可以看出jmx exporter后面还加了一个“offcial”的官方提示。

Prometheus结合jmx

Jmx exporter的github地址为:https://github.com/prometheus/jmx_exporter

3.5 jmx exporter的启动环境

通过浏览jmx exporter的github页面我们可以看到jmx exporter的启动环境,通过下图可以我们可以知道jmx exporter支持两种启动环境。一种是java 6的启动环境另一种是java 7以上的启动环境。

Prometheus结合jmx

4. 安装JMX exporter

4.1 下载jmx exporter

在jmx exporter的github里点击右方的“Releases”后选择版本进行下载

我们这次下载最新版本的jmx exporter,进入到“Releases”页面,找到最新的“1.18.0”版本,选择“jmx_prometheus_httpserver-0.18.0.jar”进行下载。

Prometheus结合jmx

Prometheus结合jmx

下载jmx exporter的命令如下:

#进入到tomcat的bin目录下

[root@mufengrow7 ~]# cd /apps/tomcat/bin/

#使用weget命令进行下载

[root@mufengrow7 bin]# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_httpserver/0.18.0/jmx_prometheus_httpserver-0.18.0.jar

这里可能会有朋友问到,为什么jmx exporter的jar包要放在这里呢?

原因有两个:

tomcat使用的jar包基本都是放在这里的,所以我也就下载到这里。

由于本次演示,只会启动一个tomcat,放在这里比较好管理,如果有多个tomcat的话,那就把jmx exporter下载到一个公共目录,供所有的tomcat一起使用。

可能还有朋友会问到,既然jmx exporter是通过http与tomcat进行通信,那么jmx exproter是否能不与tomcat安装在同一台服务器上呢?

答案是可以的,只要安装jmx epxorter的服务器可以与安装了tomcat的服务器进行通讯就行。

4.2 添加config.yaml文件

我们在jmx exproter的github页面的提示中可以看到启动jmx exporter的时候需要有一个config.yaml的文件,然后在上面的“java agent”里提示了该文件在哪里可以找到范例。

Prometheus结合jmx

接着我们进入到存放config.yaml范例的文件夹

Prometheus结合jmx

找到tomcat.yaml文件,点击进去

Prometheus结合jmx

在看到文件内容后将内容全部复制。注意我们需要在前面添加一个“hostPort”

[root@mufengrow7 bin]# vim config.yaml

---

hostPort: 10.0.0.17:38081 #这里为远程监控的地址加端口。在启动此jar包后会通过该端口与tomcat进行通信

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+/$%~_-|!.]*), J2EEApplicatinotallow=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+&@#/%=~_|]), cnotallow=([-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: ".*"

4.3 启动jmx exproter

4.3.1 修改 jmx exporter 和 config.yaml 所属

[root@mufengrow7 bin]# chown -R www.www jmx_prometheus_httpserver-0.18.0.jar config.yaml

4.3.2 启动jmx exporter

我们使用www用户启动jmx exporter

[root@mufengrow7 bin]# su - www -c "/usr/bin/nohup /usr/bin/java -jar /apps/tomcat/bin/jmx_prometheus_httpserver-0.18.0.jar 18080 /apps/tomcat/bin/config.yaml &"

[root@mufengrow7 bin]# /usr/bin/nohup: appending output to ‘nohup.out’

代码注释:

-jar:使用jar包启动

-:使用该用户的shell

-c:执行shell命令

18080:jmx exporter暴露出来的端口,prometheus通过这个端口采集jmx exporter的数据

4.3.3 查看jmx exporter启动情况

我们通过ps命令看出jmx exporter正常运行

[root@mufengrow7 bin]# ps -ef | grep jmx | grep -v grep

www        2681      1  2 14:22 ?        00:00:00 /usr/bin/java -jar /apps/tomcat/bin/jmx_prometheus_httpserver-0.18.0.jar 18080 /apps/tomcat/bin/config.yaml

代码注释:

-ef:这里可以拆分为-e和-f两个选项

-e:显示所有执行程序的进程(除会话领导者与终端关联的进程)

-f:显示UID,PPIP,C与STIME栏位

-v:得出的结果取反

5. tomcat启动远程服务

5.1 关闭tomcat

[root@mufengrow7 bin]# ./shutdown.sh

Using CATALINA_BASE:   /apps/tomcat

Using CATALINA_HOME:   /apps/tomcat

Using CATALINA_TMPDIR: /apps/tomcat/temp

Using JRE_HOME:        /usr

Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar

Using CATALINA_OPTS:

5.2 修改tomcat的配置文件

[root@mufengrow7 bin]# vim catalina.sh

......

# Copy CATALINA_BASE from CATALINA_HOME if not already set

[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

#添加以下内容,注意tomcat8添加“CATALINA_OPTS”内容是必须写在同一行

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -DJava.rmi.server.hostname=10.0.0.7 -Dcom.sun.management.jmxremote.port=38081 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

......

代码注释:

-Dcom.sun.management.jmxremote:开启jmx远程监控。

-DJava.rmi.server.hostname:监控所在的服务器ip地址。(被监控的ip,一般为本机ip地址)

-Dcom.sun.management.jmxremote.port:开启监控的端口号。(被监控的端口,也就是jmx exporter通过哪个端口与tomcat进行通信,采集tomcat的数据。端口设置根据上面config.yaml的设置进行修改)

-Dcom.sun.management.jmxremote.ssl:是否开启ssl连接。

-Dcom.sun.management.jmxremote.authenticate:监控是否开启用户和密码。

5.3 启动tomcat

[root@mufengrow7 bin]# su - www -c "/apps/tomcat/bin/catalina.sh start"

Using CATALINA_BASE:   /apps/tomcat

Using CATALINA_HOME:   /apps/tomcat

Using CATALINA_TMPDIR: /apps/tomcat/temp

Using JRE_HOME:        /

Using CLASSPATH:       /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar

Using CATALINA_OPTS:    -Dcom.sun.management.jmxremote -DJava.rmi.server.hostname=10.0.0.7 -Dcom.sun.management.jmxremote.port=38081 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

Tomcat started.

查看jmx exporter采集的数据

浏览器访问:

​http://10.0.0.7:18080/metrics​

通过下图的浏览器访问jmx exporter的WEB页面,可以看出jmx exproter已经在采集数据

Prometheus结合jmx

6. 配置prometheus采集jmx exporter数据

6.1 修改prometheus配置文件

修改的方式如图:

Prometheus结合jmx

其中job_name、prometheus读取配置文件的方式、目标的ip和端口都可以根据需求自行修改。

6.2 检查prometheus语法

[root@mufengrow7 prometheus]# ./promtool check config prometheus.yml

Checking prometheus.yml

SUCCESS: prometheus.yml is valid prometheus config file syntax

6.3 让prometheus重新读取配置文件

这里通过重启prometheus的方式让prometheus重新读取配置文件

[root@mufengrow7 prometheus]# systemctl restart prometheus.service

7. 查看prometheus的监控数据

7.1 查看prometheus与jmx exporter的连接是否正常

我们到prometheus的网页端,查看prometheus采集数据的目标是否有tomcat,通过下图,我们知道prometheus已经连接上jmx exporter了。

Prometheus结合jmx

7.2 在prometheus里查询jmx exporter监控的数据

我们到prometheus的“Graph”页面,查询prometheus是否采集到jmx exporter的数据

查看jmx exporter版本

Prometheus结合jmx

8. 导入grafana模板

导入grafana模板可以参考“云原生系列之使用prometheus监控tomcat之使用java agent模式监控”这篇文章。

但需要注意的是:在grafana官网里搜索的模板几乎没有为“http server”模式定制dashboard模板,大部分都是使用“java agent”。

9. 总结

9.1 jmx exporter使用“http server”模式采集tomcat数据的步骤

安装jdk8环境

下载jmx exporter的jar包,添加config.yaml文件。(注意:文件里应该添加hostPort字段)

安装tomcat,修改“catalina.sh”文件,添加“CATALINA_OPTS”内容,让jmx exporter能以http的方式采集tomcat的数据

启动jmx exporter和tomccat

验证exproter采集的数据prometheus是否能连接jmx exporter

9.2 对jmx exporter的监控方式的选择

官方更推荐使用“java agent”方式

jmx exporter的“http server”的监控方式,出现的时间不是很久。而且在jxm exporter的github页面上,官方还是推荐使用“java agent”这种方式运行jmx exporter,而不是使用“http server”这种方式。




集群监控JMX exporter+Prometheus+Grafana监控Hadoop集群

下载jmx_exporter的jar包

https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

创建配置文件namenode.yaml(datanode.yaml)放在任意位置,内容为你想要的metrics

 

参考配置:

---
startDelaySeconds: 0
hostPort: master:1234 #master为本机IP(一般可设置为localhost);1234为想设置的jmx端口(可设置为未被占用的端口)
#jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false

 

其他参数参考:

NameDescription
startDelaySeconds start delay before serving requests. Any requests within the delay period will result in an empty metrics set.
hostPort The host and port to connect to via remote JMX. If neither this nor jmxUrl is specified, will talk to the local JVM.
username The username to be used in remote JMX password authentication.
password The password to be used in remote JMX password authentication.
jmxUrl A full JMX URL to connect to. Should not be specified if hostPort is.
ssl Whether JMX connection should be done over SSL. To configure certificates you have to set following system properties:
-Djavax.net.ssl.keyStore=/home/user/.keystore
-Djavax.net.ssl.keyStorePassword=changeit
-Djavax.net.ssl.trustStore=/home/user/.truststore
-Djavax.net.ssl.trustStorePassword=changeit
lowercaseOutputName Lowercase the output metric name. Applies to default format and name. Defaults to false.
lowercaseOutputLabelNames Lowercase the output metric label names. Applies to default format and labels. Defaults to false.
whitelistObjectNames A list of ObjectNames to query. Defaults to all mBeans.
blacklistObjectNames A list of ObjectNames to not query. Takes precedence over whitelistObjectNames. Defaults to none.
rules A list of rules to apply in order, processing stops at the first matching rule. Attributes that aren\'t matched aren\'t collected. If not specified, defaults to collecting everything in the default format.
pattern Regex pattern to match against each bean attribute. The pattern is not anchored. Capture groups can be used in other options. Defaults to matching everything.
attrNameSnakeCase Converts the attribute name to snake case. This is seen in the names matched by the pattern and the default format. For example, anAttrName to an_attr_name. Defaults to false.
name The metric name to set. Capture groups from the pattern can be used. If not specified, the default format will be used. If it evaluates to empty, processing of this attribute stops with no output.
value Value for the metric. Static values and capture groups from the pattern can be used. If not specified the scraped mBean value will be used.
valueFactor Optional number that value (or the scraped mBean value if value is not specified) is multiplied by, mainly used to convert mBean values from milliseconds to seconds.
labels A map of label name to label value pairs. Capture groups from pattern can be used in each. name must be set to use this. Empty names and values are ignored. If not specified and the default format is not being used, no labels are set.
help Help text for the metric. Capture groups from pattern can be used. name must be set to use this. Defaults to the mBean attribute decription and the full name of the attribute.
type The type of the metric, can be GAUGECOUNTER or UNTYPEDname must be set to use this. Defaults to UNTYPED.

 

修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh 

NameNode节点添加:

export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false   -Dcom.sun.management.jmxremote.port=1234 $HADOOP_NAMENODE_OPTS "

DataNode节点添加:

export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false   -Dcom.sun.management.jmxremote.port=1235 $HADOOP_DATANODE_OPTS "

提示:

端口1234(1235)要与之前设置的jmx端口保持一致

 

修改

$HADOOP_HOME/bin/hdfs

export HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -javaagent:/home/hadoop/jmx_prometheus_javaagent-0.3.1.jar=9200:/home/hadoop/namenode.yaml"

 

export HADOOP_DATANODE_OPTS="$HADOOP_DATANODE_OPTS -javaagent:/home/hadoop/jmx_prometheus_javaagent-0.3.1.jar=9300:/home/hadoop/datanode.yaml"

提示:9200(9300)为jmx_exporter提供metrics数据端口,后续Prometheus从此端口获取数据

 

访问http://master:9200/metrics就能获得需要的metrics数据:

# HELP jvm_buffer_pool_used_bytes Used bytes of a given JVM buffer pool.
# TYPE jvm_buffer_pool_used_bytes gauge
jvm_buffer_pool_used_bytes{pool="direct",} 1181032.0
jvm_buffer_pool_used_bytes{pool="mapped",} 0.0
# HELP jvm_buffer_pool_capacity_bytes Bytes capacity of a given JVM buffer pool.
# TYPE jvm_buffer_pool_capacity_bytes gauge
jvm_buffer_pool_capacity_bytes{pool="direct",} 1181032.0
jvm_buffer_pool_capacity_bytes{pool="mapped",} 0.0
# HELP jvm_buffer_pool_used_buffers Used buffers of a given JVM buffer pool.
...

 

下载Prometheus

https://prometheus.io/download/

解压

修改配置文件 prometheus.yml

添加

  - job_name: hadoop-master

    static_configs:
      - targets: [\'localhost:9200\']

  - job_name: hadoop-slave1

    static_configs:
      - targets: [\'slave1:9300\']

 

运行

./prometheus

 

 http://master:9090/targets查看是否添加成功

成功则增加master,slave1

如下图

通过点击http://localhost:9200/metrics可以看到metrics数据

 

下载Grafana

https://grafana.com/grafana/download?platform=linux

 

安装相应版本grafana

启动grafana

systemctl start grafana-server

 

启动后,即可通过http://master:3000/来访问了(默认账号密码是admin/admin)

如下图

 

关联Grafana和Prometheus

点击Data Sources 

 

点击Add data source,填写数据保存

 

添加一个dashboard,如下图进入dashboard导入页面

 

点击Upload .json File,导入模版(可从https://grafana.com/dashboards下载)

 

导入成功后可以看到类似如下效果,完成!

 

 



 

以上是关于Prometheus结合jmx exporter 的httpserver模式采集tomcat监控实战的主要内容,如果未能解决你的问题,请参考以下文章

容器化 Prometheus 无法抓取 JMX-exporter

集群监控JMX exporter+Prometheus+Grafana监控Hadoop集群

JMX_exporter 在 Prometheus 和 Grafana 中显示错误

配置 jmx-prometheus-exporter docker 容器以读取 jmx 本地应用程序的指标

Spring boot Actuator vs prometheus Jmx exporter

有没有办法配置要使用 jmx_exporter/prometheus 捕获的 kafka-connect jmx 指标?