前言
本文中的是prometheus已经安装好,如果你还未安装,可以参考上一篇文章:prometheus安装及使用入门
个人主页:我是沐风晓月
个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家
座右铭: 先努力成长自己,再帮助更多的人,一起加油进步
欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信
本次实验环境见下表
操作系统 | 服务器IP | hostname |
---|---|---|
centos7.9 | 10.0.0.7 | mufengrow7 |
如何查看相应的参数
[root@mufengrow ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@mufengrow7 ~]# hostname
mufengrow7
[root@mufengrow7 ~]# ifconfig |grep inet |awk 'NR==1{print $2}'
10.0.0.7
我是沐风晓月,更多内容关注csdn首页:https://blog.csdn.net/wisdom_futrue
本次实验使用tomcat8.5.87版本进行演示。
为什么要安装jdk8?
因为在tomcat的官网里已经给出了tomcat8
运行的环境。
我们登陆tomcat8的下载网页,点击网页中的“README”,通过下图对“README”页面的截图里看出,官方用红色的字体标出tomcat 8.5
的运行环境至少也是Java 7以上。鉴于现在的环境都是基于Java 8进行开发,所以我们本次实验的环境也是使用Java 8
环境。
安装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
通过下面的命令,我们可以查看刚刚安装的openjdk是不是openjdk8的版本。
[root@mufengrow7 ~]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
代码注释:
-verson
:显示java的版本
本次实验使用的是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
代码注释:
--no-check-certificate
:下载文件不验证安全证书
[root@mufengrow7 apps]# tar zxvf apache-tomcat-8.5.87.tar.gz
代码注释:
zxvf
:这里可以拆分为“z”,“x”,“v”,"f"四个选项
z
:解压的文件包含gzip属性
x
:从归档中解压文件
v
:列出解压的文件
f
:指定解压的文件
在这里创建软连接是为了方便我们以后对tomcat的更新换代。如果嫌麻烦这一步可以忽略。
[root@mufengrow7 apps]# ln -sv /apps/apache-tomcat-8.5.87 /apps/tomcat
‘/apps/tomcat’ -> ‘/apps/apache-tomcat-8.5.87’
代码注释:
-sv
:这里可以拆分为“s”,“v”两个选项
s
:创建软链接
v
:显示创建链接的详细过程
在公司的环境中,我们一般不会直接使用root
用户来启动tomcat,所以我们需要创建一个普通用户来启动tomcat
[root@mufengrow7 apps]# useradd www
因为我们需要使用www
用户启动tomcat,而此时tomcat文件所属都是root
用户,所以我们需要修改tomcat目录的所属。
[root@mufengrow7 apps]# chown -R www.www /apps/apache-tomcat-8.5.87
代码注释:
-R
:递归修改文件所属
对于不熟悉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
常用的参数用表格来展示:
参数 | 描述 |
---|---|
debug | 以调试的方式启动tomcat |
run | 前台启动tomcat |
start | 后台启动tomcat |
stop | 停止tomcat,在5秒内等待进程的结束 |
stop -force | 停止tomcat,如果5秒后进程不结束就直接把进程kill掉强制结束进程 |
configtest | 检查server.xml文件的语法 |
version | 查看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”这个文件。)
我们使用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
:得出的结果取反
jmx exporter是prometheus官方提供的用于采集JMV数据的exporter,而且新出jmx exporter有两种监控方式,分别为“java agent”模式和“http server”模式。
注意:jmx exproter在“0.17.0”版本开始更新了“http server”模式。
“java agent”监控模式是jmx exproter的最初的形式,该模式是将jmx exporter的这个jar包集成在tomcat内,在tomcat启动时jmx exporter也会一起启动,然后变成一个展示JVM数据的代理。最后由prometheus采集代理展示出来的数据。
想知道怎么使用jmx exporter的“java agent”模式采集tomcat的数据,我们可以看“云原生系列之使用prometheus监控tomcat之使用java agent模式监控”这篇文章
“http server”监控模式,顾名思义就是让jmx exporter变成一个采集JVM数据的server。然后jmx exporter会通过http来采集远程的tomcat服务的数据
我们登陆prometheus官方的下载页面,会发现并没有jmx exporter的下载链接。
prometheus官方下载页面:https://prometheus.io/download/
没有提供jmx rxporter的下载链接,为什么上面会说jmx exproter是prometheus官方提供的exporer呢?是不是博主在骗大家呢?
其实不是,在官方的下载页面里有一个Exporters and integrations链接,里面就有prometheus官方推荐exporter,我们的jmx exporter也在这个网页里面
点击进入页面,找到jmx exporter,点击连接就可以进入jmx exporter的github页面。从下面的截图可以看出jmx exporter后面还加了一个“offcial”的官方提示。
Jmx exporter的github地址为:https://github.com/prometheus/jmx_exporter
通过浏览jmx exporter的github页面我们可以看到jmx exporter的启动环境,通过下图可以我们可以知道jmx exporter支持两种启动环境。一种是java 6
的启动环境另一种是java 7
以上的启动环境。
在jmx exporter的github里点击右方的“Releases”后选择版本进行下载
![](https://img-blog.csdnimg.cn/img_convert/b585b8f395ed73e2586c013babf448fe.png
我们这次下载最新版本的jmx exporter,进入到“Releases”页面,找到最新的“1.18.0”版本,选择“jmx_prometheus_httpserver-0.18.0.jar”进行下载。
下载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的服务器进行通讯就行。
我们在jmx exproter的github页面的提示中可以看到启动jmx exporter的时候需要有一个config.yaml的文件,然后在上面的“java agent”里提示了该文件在哪里可以找到范例。
接着我们进入到存放config.yaml范例的文件夹
找到tomcat.yaml文件,点击进去
在看到文件内容后将内容全部复制。注意我们需要在前面添加一个“hostPort”
[root@mufengrow7 bin]# vim config.yaml
---
hostPort: 10.0.0.17:38081 #这里为远程监控的地址加端口。在启动此jar包后会通过该端口与tomcat进行通信
lowercaseOutputLabelNames: true
lowercaseOutputName: true
rules:
- pattern: 'Catalina<>(\w+):'
name: tomcat_$3_total
labels:
port: "$2"
protocol: "$1"
help: Tomcat global $3
type: COUNTER
- pattern: 'Catalina<>(requestCount|maxTime|processingTime|errorCount):'
name: tomcat_servlet_$3_total
labels:
module: "$1"
servlet: "$2"
help: Tomcat servlet $3 total
type: COUNTER
- pattern: 'Catalina<>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):'
name: tomcat_threadpool_$3
labels:
port: "$2"
protocol: "$1"
help: Tomcat threadpool $3
type: GAUGE
- pattern: 'Catalina<>(processingTime|sessionCounter|rejectedSessions|expiredSessions):'
name: tomcat_session_$3_total
labels:
context: "$2"
host: "$1"
help: Tomcat session $3 total
type: COUNTER
- pattern: ".*"
[root@mufengrow7 bin]# chown -R www.www jmx_prometheus_httpserver-0.18.0.jar config.yaml
我们使用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的数据
我们通过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
:得出的结果取反
[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:
[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
:监控是否开启用户和密码。
[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.
本文首发于csdn,作者:我是沐风晓月,可以关注我的博客一起学习和成长。
浏览器访问:
http://10.0.0.7:18080/metrics
通过下图的浏览器访问jmx exporter的WEB页面,可以看出jmx exproter已经在采集数据
修改的方式如图:
其中job_name、prometheus读取配置文件的方式、目标的ip和端口都可以根据需求自行修改。
[root@mufengrow7 prometheus]# ./promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: prometheus.yml is valid prometheus config file syntax
这里通过重启prometheus的方式让prometheus重新读取配置文件
[root@mufengrow7 prometheus]# systemctl restart prometheus.service
我们到prometheus的网页端,查看prometheus采集数据的目标是否有tomcat,通过下图,我们知道prometheus已经连接上jmx exporter了。
我们到prometheus的“Graph”页面,查询prometheus是否采集到jmx exporter的数据
导入grafana模板可以参考“云原生系列之使用prometheus监控tomcat之使用java agent模式监控”这篇文章。
但需要注意的是:在grafana官网里搜索的模板几乎没有为“http server”模式定制dashboard模板,大部分都是使用“java agent”。
jmx exporter的“http server”的监控方式,出现的时间不是很久。而且在jxm exporter的github页面上,官方还是推荐使用“java agent”这种方式运行jmx exporter,而不是使用“http server”这种方式。
在grafana官网上搜索开源的dashboard,但是基本上所有的jmx exporter都是使用“java agent”的。如果一定要使用“http server”的模式,那么可能需要自己手动创建dashboard了。
所以博主对jmx exporter的监控还是推荐使用“java agent”模式
好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
博客主页:mufeng.blog.csdn.net
本文由沐风晓月原创,首发于CSDN博客
全力以赴,持续学习,不负如来不负卿
喜欢的话记得点赞收藏哦