当前位置: 首页 > article >正文

Tomcat全方位监控实施方案指南

#作者:程宏斌

文章目录

  • 一.二进制部署
    • 1、安装包信息
    • 2、新建配置文件
      • 2.1 配置config.yaml文件
      • 2.2 上传jar包
    • 3、修改配置
      • 3.1 备份
      • 3.2 修改bin目录下的startup.sh文件
    • 4、重启tomcat
    • 5、访问测试
  • 二.docker部署
    • 1、临时方案
      • 1.1、重新启动容器
      • 1.2、创建配置文件
      • 1.3、修改startup.sh并覆盖
      • 1.4、重启tomcat容器
      • 1.5、访问测试
    • 2、永久方案
      • 2.1、重新构建镜像
      • 2.2、修改启动脚本
      • 2.3、重启容器
      • 2.4访问测试

注:
如果一台服务器运行多个tomcat进程,需要监控多个tomcat进程,以下操作在不同的tomcat目录下进行配置,正常配置多个jmx_prometheus_javaagent修改不同端口即可

1、部署插件需要重启中间件,会影响服务
2、启动插件最少需要500M内存,正常的需求使用内存不少于1G,不少于1颗逻辑CPU

网络策略开通:
tomacat插件会暴露一个端口供prometheus访问(文档中提供的开通30018端口,如生产不可以使用30018端口可以再配置文件中修改)

prometheus主机----> 主机ip:端口

一.二进制部署

1、安装包信息

环境:

版本:jmx_prometheus_javaagent-0.3.1.jar 
下载地址:
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

2、新建配置文件

2.1 配置config.yaml文件

在服务器上 tomcat 的bin目录下创建config.yaml文件

---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:- pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'name: os_$1_bytestype: GAUGEattrNameSnakeCase: true- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'name: os_$1type: GAUGEattrNameSnakeCase: true

2.2 上传jar包

将下载好的jar包上传到服务器上 tomcat 的bin 目录下
bin/jmx_prometheus_javaagent-0.3.1.jar

3、修改配置

请先检查端口是否冲突,如冲突可通过修改JAVA_OPTS参数的30018的选项来使用其他端口

3.1 备份

cd 服务器上 tomcat 的bin 目录下
mv startup.sh startup.sh.bak

3.2 修改bin目录下的startup.sh文件

(如果之前是在startup.sh文件添加的,需要去掉“-javaagent:/root/tomcat/apache-tomcat/bin/jmx_prometheus_javaagent-0.3.1.jar=30018:/root/tomcat/apache-tomcat/bin/config.yaml”部分)
在exec “ P R G D I R " / " PRGDIR"/" PRGDIR"/"EXECUTABLE” start "$@"之前添加标红的jar包和config.yaml路径

export JAVA_OPTS="$JAVA_OPTS -javaagent:/root/tomcat/apache-tomcat/bin/jmx_prometheus_javaagent-0.3.1.jar=30018:/root/tomcat/apache-tomcat/bin/config.yaml"
exec "$PRGDIR"/"$EXECUTABLE" start "$@"

4、重启tomcat

根据实际环境重启tomcat

5、访问测试

访问服务器上的30018端口

在这里插入图片描述

二.docker部署

安装包信息
环境:

版本:jmx_prometheus_javaagent-0.3.1.jar
下载地址:
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar

docker运行的tomcat监控方案分为两种:
一种临时方案,就是把所需要的文件以及插件全部cp到容器里的形式来进行监控指标采集。(或者是使用-v参数挂载进去)
另外一种方案为永久方案,需要重新构建tomcat镜像,就是把所需要的文件以及插件全部通过dockerfile构建到镜像里。

1、临时方案

1.1、重新启动容器

需要docker暴露端口供指标访问,所以需要提前确认主机的30018是否占用,如果占有采用其他端口

  1. 关闭之前的tomcat(确认完之前的启动命令,再rm)
    docker stop tomcat
    docker rm tomcat
  2. 重启dcoeker增加端口映射(只是在之前启动命令中加-p选项映射新的端口即可)
    例如:docker run -d -p 8080:8080 -p 30018:30018 --name tomcat tomcat:test 。。。。

1.2、创建配置文件

命名config.yaml,可以完全复制

lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:- pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'name: os_$1_bytestype: GAUGEattrNameSnakeCase: true- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'name: os_$1type: GAUGEattrNameSnakeCase: truedocker cp config.yaml  tomcat:/usr/local/tomcat/bin
docker cp jmx_prometheus_javaagent-0.3.1.jar  tomcat:/usr/local/tomcat/bin

1.3、修改startup.sh并覆盖

进入容器里面修改

1.3.1 备份
cd 容器 tomcat 的bin 目录下
mv startup.sh startup.sh.bak

1.3.2 修改bin目录下的startup.sh文件(如果之前是在startup.sh文件添加的,需要去掉“-javaagent:/root/tomcat/apache-tomcat/bin/jmx_prometheus_javaagent-0.3.1.jar=30018:/root/tomcat/apache-tomcat/bin/config.yaml”部分)

在exec "$PRGDIR"/"$EXECUTABLE" start "$@"之前添加标红的jar包和config.yaml路径
export JAVA_OPTS="$JAVA_OPTS -javaagent:/root/tomcat/apache-tomcat/bin/jmx_prometheus_javaagent-0.3.1.jar=30018:/root/tomcat/apache-tomcat/bin/config.yaml"
exec "$PRGDIR"/"$EXECUTABLE" start "$@"

1.4、重启tomcat容器

docker restart tomcat

1.5、访问测试

访问服务器上的30018端口

在这里插入图片描述

2、永久方案

2.1、重新构建镜像

修改之前构建tomcat镜像的Dockerfile文件,把以下内容添加至Dockerfile中,重新构建镜像
/usr/local/tomcat/bin修改为之前tomcat镜像的bin目录

2.2、修改启动脚本

修改bin目录下的startup.sh文件(如果之前是在startup.sh文件添加的,需要去掉“-javaagent:/root/tomcat/apache-tomcat/bin/jmx_prometheus_javaagent-0.3.1.jar=30018:/root/tomcat/apache-tomcat/bin/config.yaml”部分)

在exec "$PRGDIR"/"$EXECUTABLE" start "$@"之前添加标红的jar包和config.yaml路径export JAVA_OPTS="$JAVA_OPTS -javaagent:/root/tomcat/apache-tomcat/bin/jmx_prometheus_javaagent-0.3.1.jar=30018:/root/tomcat/apache-tomcat/bin/config.yaml"
exec "$PRGDIR"/"$EXECUTABLE" start "$@"

2.3、重启容器

启动命令指定的镜像修改为新构建的tomcat镜像,其他参数不变

2.4访问测试

访问服务器上的30018端口
在这里插入图片描述
备注:
如果需要给jmx_prometheus_javaagent 监控的JMX指标暴露页面添加用户名和密码认证,不能直接在 jmx_prometheus_javaagent 配置中实现,因为该Java agent主要用于收集和导出JMX指标,并不涉及认证层面的配置。要为监控页面添加安全认证,你需要在前端代理或者网关层面设置认证,比如使用Nginx、Apache HTTP Server或者Spring Boot的Security功能等。

相关文章:

Tomcat全方位监控实施方案指南

#作者&#xff1a;程宏斌 文章目录 一&#xff0e;二进制部署1、安装包信息2、新建配置文件2.1 配置config.yaml文件2.2 上传jar包 3、修改配置3.1 备份3.2 修改bin目录下的startup.sh文件 4、重启tomcat5、访问测试 二&#xff0e;docker部署1、临时方案1.1、重新启动容器1.2…...

开源PHP在线客服系统源码搭建教程

在当今数字化时代&#xff0c;在线客服系统已成为企业与客户沟通的重要桥梁。开源PHP客服系统因其灵活性、低成本和高可定制性而受到众多企业的青睐。本文将介绍几款优秀的开源PHP客服系统&#xff0c;并提供详细的搭建教程。 演示网站&#xff1a;gofly.v1kf.com 1.1 主流开源…...

centos7升级glibic-2.28

centos7升级glibic-2.28 最近使用trae连接服务器的时候&#xff0c;提示远程系统不兼容: Trae CN需要glibc 2.28或更高版本。检测到的版本: 2.17。下面是升级步骤。centos7默认的glibc不支持node v18及以上。 1、进入/home/download目录(没有download&#xff0c;则新建一个)…...

在Docker里面运行Docker

Docker 凭借其轻量级和可移植的容器,无疑改变了软件开发和部署的世界。但如果我告诉你 Docker 本身可以在另一个 Docker 容器中运行,你会怎么想?没错!这个概念通常被称为“Docker Inside Docker”或“DinD”,它为开发人员和系统管理员开辟了一个全新的可能性领域。在这篇博…...

设计模式复习小结

1.容易忘得设计原则 接口隔离&#xff1a;指接口中的功能太杂则可以拆分一下。防止实现类实现了接口后自动依赖了一些不需要的功能。不同功能拆分成不同的接口。 里氏代换&#xff1a;强调父类能出现的地方&#xff0c;子类一定能正常跑。 迪米特法则&#xff1a;又称最少知…...

To be or Not to be, That‘s a Token——论文阅读笔记——Beyond the 80/20 Rule和R2R

本周又在同一方向上刷到两篇文章&#xff0c;可以说&#xff0c;……同学们确实卷啊&#xff0c;要不卷卷开放场域的推理呢&#xff1f; 这两篇都在讲&#xff1a;如何巧妙的利用带有分支能力的token来提高推理性能或效率的。 第一篇叫 Beyond the 80/20 Rule: High-Entropy Mi…...

【基础】每天掌握一个Linux命令 - awk

目录 【基础】每天掌握一个Linux命令 - awk一、工具概述二、安装方式Ubuntu/Debian系统&#xff1a;CentOS/RHEL系统&#xff1a;macOS系统&#xff1a; 三、核心功能四、基础用法基本语法常用选项内置变量基本操作示例1. 打印文件所有内容2. 打印每行的第一个字段3. 指定分隔符…...

《UE5_C++多人TPS完整教程》学习笔记37 ——《P38 变量复制(Variable Replication)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P38 变量复制&#xff08;Variable Replication&#xff09;》 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09…...

AWS API Gateway配置日志

问题 访问API Gateway接口出现了403问题&#xff0c;具体报错如下&#xff1a; {"message":"Missing Authentication Token"}需要配置AWS API Gateway日志&#xff0c;看请求过程是什么样子的。 API Gateway 先找到API Gateway的的日志角色&#xff0c…...

Towards Open World Object Detection概述(论文)

论文&#xff1a;https://arxiv.org/abs/2103.02603 代码&#xff1a;https://github.com/JosephKJ/OWOD Towards Open World Object Detection 迈向开放世界目标检测 Abstract 摘要 Humans have a natural instinct to identify unknown object instances in their environ…...

轻松备份和恢复 Android 系统 | 4 种解决方案

我们通常会在 Android 手机上存储大量重要的个人数据&#xff0c;包括照片、视频、联系人、信息等等。如果您不想丢失宝贵的数据&#xff0c;可以备份 Android 数据。当您需要访问和使用这些数据时&#xff0c;可以将其恢复到 Android 设备。如果您想了解 Android 备份和恢复&a…...

具备强大的数据处理和分析能力的智慧地产开源了

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 AI是新形势下数…...

RK3588和FPGA桥片之间IO电平信号概率性不能通信原因

1.GPIO管脚配置问题 RK3588对IO进行配置的时候&#xff0c;如果配置为多功能复用&#xff0c;没有明确IO功能&#xff0c;可能引起信号接收不稳定&#xff0c; 需要在驱动中设备树中配置管脚为GPIO功能&#xff0c;确保没有功能复用的干扰。 2.上下拉电阻阻值设置不当 GPIO引脚…...

【iSAQB软件架构】软件架构中构建块的视图:黑箱、灰箱和白箱及其交互机制

在软件架构描述中&#xff0c;黑箱视图&#xff08;Black-box&#xff09;、灰箱视图&#xff08;Gray-box&#xff09;和白箱视图&#xff08;White-box&#xff09; 是不同抽象层级的构建模块表示方式&#xff0c;用于满足不同受众和设计阶段的需求。以下是基于ISAQB标准的清…...

.net jwt实现

.NET 中实现 JWT 认证&#xff1a;详细指南 在现代的 Web 应用开发中&#xff0c;安全认证是至关重要的一环。JSON Web Token&#xff08;JWT&#xff09;作为一种广泛使用的认证机制&#xff0c;为 API 提供了安全、便捷的身份验证方式。本文将详细介绍如何在 ASP.NET Core 项…...

LangChain【7】之工具创建和错误处理策略

文章目录 一 LangChain 自定义工具概述二创建自定义工具的三种方法2.1 方法一&#xff1a;tool 装饰器2.1.1 同步方法案例2.1.2 工具描述方式1&#xff1a;传参2.1.3 工具描述方式2&#xff1a;文档字符串 2.2 方法二&#xff1a;StructuredTool类2.2.1 StructuredTool创建自定…...

如何在电脑上轻松访问 iPhone 文件

我需要将 iPhone 下载文件夹中的文件传输到 Windows 11 电脑上。我该怎么做&#xff1f;我可以在 Windows 11 上访问 iPhone 下载吗&#xff1f; 由于 iOS 和 Windows 系统之间的差异&#xff0c;在 PC 上访问 iPhone 文件似乎颇具挑战性。然而&#xff0c;只要使用正确的工具…...

Eureka REST 相关接口

可供非 Java 应用程序使用的 Eureka REST 操作。 appID 是应用程序的名称&#xff0c;instanceID 是与实例关联的唯一标识符。在 AWS 云中&#xff0c;instanceID 是实例的实例 ID&#xff1b;在其他数据中心&#xff0c;它是实例的主机名。 对于 XML/JSON&#xff0c;HTTP 的…...

C语言字符数组输入输出方法大全(附带实例)

在 C语言中&#xff0c;字符数组是一种特殊的数组&#xff0c;用于存储和处理字符串。理解字符数组的输入和输出操作对于初学者来说至关重要&#xff0c;因为这是处理文本数据的基础。 字符数组的定义与初始化 在讨论输入输出之前&#xff0c;我们先来回顾一下字符数组的定义…...

短视频矩阵SaaS系统:开源部署与核心功能架构指南

一、系统架构概述 短视频矩阵系统是基于SaaS&#xff08;软件即服务&#xff09;模式的多平台内容管理解决方案&#xff0c;通过开源技术实现账号聚合、智能创作、跨平台分发及数据闭环。系统采用微服务架构&#xff0c;支持高并发场景下的弹性扩展。 二、核心功能模块开发逻辑…...

每日算法 -【Swift 算法】电话号码字母组合

&#x1f680; LeetCode 字符串数字映射&#xff08;Swift&#xff09;——电话号码字母组合 在日常刷题或面试中&#xff0c;我们经常会遇到字符串 回溯组合的问题。这道经典题——电话号码的字母组合 就是典型代表。本文将带你用 Swift 实现这道题&#xff0c;思路清晰&…...

深入解析YUM与DNF:RPM包管理器的架构演进与功能对比

在Linux系统管理中&#xff0c;软件包管理器是连接用户与底层RPM&#xff08;Red Hat Package Manager&#xff09;包的核心工具。作为RPM生态的两大代表性工具&#xff0c;YUM&#xff08;Yellowdog Updater Modified&#xff09;与DNF&#xff08;Dandified YUM&#xff09;的…...

解决cocos 2dx/creator2.4在ios18下openURL无法调用的问题

由于ios18废弃了旧的openURL接口&#xff0c;我们需要修改CCApplication-ios.mm文件的Application::openURL方法&#xff1a; //修复openURL在ios18下无法调用的问题 bool Application::openURL(const std::string &url) {// NSString* msg [NSString stringWithCString:…...

精益数据分析(94/126):30/10/10用户参与法则与定价策略的科学制定

精益数据分析&#xff08;九十四&#xff09;&#xff1a;30/10/10用户参与法则与定价策略的科学制定 在创业过程中&#xff0c;如何衡量用户参与度是否健康&#xff1f;又该如何制定科学的定价策略实现营收最大化&#xff1f;今天&#xff0c;我们将深入解析Union Square Ven…...

oss:上传图片到阿里云403 Forbidden

访问图片出现403Forbidden问题&#xff0c;我们可以直接登录oss账号&#xff0c;查看对应权限是否开通&#xff0c;是否存在跨域问题...

Windows系统中如何使用符号链接将.vscode等配置文件夹迁移到D盘(附 CMD PowerShell 双版本命令)

在日常开发和使用中&#xff0c;很多应用程序都会在 Windows 用户目录&#xff08;如 C:\Users\你的用户名\&#xff09;下创建一些以点开头的隐藏配置文件夹&#xff0c;例如&#xff1a; .vscode — Visual Studio Code 的设置和插件数据.cursor — Cursor 编辑器的缓存和设…...

4. 数据类型

4.1 数据类型分类 分类 数据类型 说明 数值类型 BIT(M) 位类型。M指定位数&#xff0c;默认值1&#xff0c;范围1 - 64 TINYINT [UNSIGNED] 带符号的范围 -128 ~ 127&#xff0c;无符号范围0 ~ 255&#xff0c;默认有符号 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 带符号是…...

MySQL基础(二)SQL语言、客户端工具

目录 三、SQL语言 3.1 概念 3.2 基本操作 四、客户端工具 三、SQL语言 3.1 概念 SQL&#xff08;Structured Query Language&#xff09;结构化查询语言。SQL用于对存储数据&#xff0c;更新&#xff0c;查询和管理关系型数据库的程序设计语言。 通常执行对数据库的增删改…...

【贪心、DP、线段树优化】Leetcode 376. 摆动序列

贪心算法&#xff1a;选 “关键转折点” 初始状态&#xff1a;把数组第一个元素当作起点&#xff0c;此时前一个差值符号设为平坡&#xff08;即差值为0&#xff09;。遍历数组&#xff1a;从第二个元素开始&#xff0c;依次计算当前元素和前一个元素的差值。差值符号判断&…...

CppCon 2015 学习:C++ in the audio industry

实时编程&#xff08;real-time programming&#xff09;&#xff1a;音频处理对延迟极度敏感&#xff0c;要求代码必须非常高效且稳定。无锁线程同步&#xff08;lock-free thread synchronization&#xff09;&#xff1a;避免阻塞&#xff0c;提高性能&#xff0c;尤其是在多…...