分布式应用:Zabbix监控Tomcat
目录
一、理论
1.Zabbix监控Tomcat
二、实验
1.Zabbix监控Tomcat
三、问题
1.获取软件包失败
2.tomcat 配置 JMX remote monitor不生效
3.Zabbix客户端日志报错
一、理论
1.Zabbix监控Tomcat
(1)环境
zabbix服务端:192.168.204.214
zabbix客户端:192.168.204.215
原理:

(2)客户端安装tomcat(yum方式)
yum install tomcat -ySystemctl start tomcatcd /var/lib/tomcat/webappsmkdir testcd test
(3)添加动态网页内容
vim index.jsp # 添加动态页面内容:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html><head><title>test</title></head><body><% out.println("动态页面:test tomcat01");%></body></html>#页面输出内容为test tomcat01,tomcat02服务器上则将01改为02方便查看实验效果#创建动态资源页面
(3)修改配置
vim /etc/tomcat/server.xml
#修改主配置文件内容125行,原有内容不需要更改,对比此段内容添加即可<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"xmlNamespaceAware="false"><Context docBase="/var/lib/tomcat/webapps/test"path="" reloadable="true" />#指定自己的tomcat页面访问文件路径
(4)重新启动
systemctl restart tomcat
(5)服务端器安装zabbix-java-gateway
wget https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-java-gateway-4.0.14-1.el7.x86_64.rpm
(6)安装zabbix-java-gateway
yum -y localinstall zabbix-java-gateway-4.0.14-1.el7.x86_64.rpm
(7)编辑gateway配置文件
vim /etc/zabbix/zabbix_java_gateway.conf
去掉LISTEN_IP、LISTEN_PORT(监听端口)、START_POLLERS(进程数)的注释符号
LISTEN_IP定义被监控机器的地址,不指定默认监听全部机器 编辑server配置文件
vim /etc/zabbix/zabbix_server.conf
定义以下3个配置参数:
JavaGateway=192.168.204.214JavaGatewayPort=10052StartJavaPollers=5
启动zabbix-java-gateway服务:
systemctl start zabbix-java-gateway
重启zabbix-server服务:
systemctl restart zabbix-server
(4)查看监听端口
netstat -lntp |grep java
(5)开启JMX
客户端器编辑tomcat配置文件
vim /usr/libexec/tomcat/server
添加以下内容:
CATALINA_OPTS="$CATALINA_OPTS \-Dcom.sun.management.jmxremote \-Dcom.sun.management.jmxremote.port=8008 \-Dcom.sun.management.jmxremote.ssl=false \-Djava.rmi.server.hostname=192.168.204.215 \-Dcom.sun.management.jmxremote.authenticate=false"
hostname定义客户端地址,端口8008(默认12345)
(6)脚本、重启tomcat:
脚本
vim /opt/tomcat.sh#!/bin/bash
a=`netstat -natp |grep 8080|awk '{print $6}'|grep 'LISTEN'`
if [[ $a = 'LISTEN' ]];thenecho "0" #表示tomcat启动中
elseecho "1" #表示tomcat未启动
fi#添加权限
chmod 777 /opt/tomcat.sh
添加可识别配置文件
vim zabbix_agent2.confUserParameter=tomcat.status,source /opt/tomcat.sh
#实现对脚本的监控chmod +s /bin/nestat
#加上权限,避免netstat在服务端报错
验证
zabbix_get -s '192.168.204.215' -p 10050 -k 'tomcat.status'
重启
systemctl restart tomcat
(7)查看监听端口9999
netstat -lntp |grep 8008
(8)进入zabbix前端页面添加主机
与普通情况添加监控主机不同,监控B机器的tomcat需要配置JMX接口 模板链接JMX相关的两个模板:
Template App Apache Tomcat JMX
Template App Generic Java JMX
当JMX图标变绿即表示配置成功
二、实验
1.Zabbix监控Tomcat
(1)安装

(2) 启动

(3)设置文件

(4)监听端口
(5)安装zabbix-java-gateway
下载

安装zabbix-java-gateway
(6) 编辑gateway配置文件

去掉LISTEN_IP、LISTEN_PORT(监听端口)、START_POLLERS(进程数)的注释符号
LISTEN_IP定义被监控机器的地址,不指定默认监听全部机器
(7) 编辑server配置文件
定义以下3个配置参数:


(8)启动zabbix-java-gateway服务

(9) 重启zabbix-server服务

(10)查看监听端口
(11)开启JMX
客户端器编辑tomcat配置文件


重启 监听端口

(12)脚本、重启tomcat
脚本


赋权


重启
![]()

(13)验证
授权

验证
0是tomcat启动中

(14)进入zabbix前端页面添加主机
进入zabbix前端页面添加主机
与普通情况添加监控主机不同,监控B机器的tomcat需要配置JMX接口 模板链接JMX相关的两个模板:
Template App Apache Tomcat JMX
Template App Generic Java JMX
当JMX图标变绿即表示配置成功:


监控项



监控JVM


(15)自定义监控tomcat



三、问题
1.获取软件包失败
(1)报错
(2)原因分析
证书过期
(3)解决方法
命令结尾附加
--no-check-certificate
成功

2.tomcat 配置 JMX remote monitor不生效
(1)原因分析
centos 7 上的 tomcat 配置 JMX remote monitor,由于tomcat安装方法的不同,jmx 配置方法也有所不同
(2)解决方法
①配置 $CATALINA_OPTS
打开tomcat启动文件 /usr/libexec/tomcat/server,在变量 $FLAGS 赋值语句下面添加:
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=8008 \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=192.168.204.215 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=/usr/share/tomcat/conf/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=/usr/share/tomcat/conf/jmxremote.access"
配置分析:
-Dcom.sun.management.jmxremote: 启用 jmxremote 功能;
-Dcom.sun.management.jmxremote.port=8008:jmxremote 监听端口,用于客户端连接,样例设为 8008;
-Dcom.sun.management.jmxremote.ssl=false:是否启用 SSL 连接,样例设为 false;
-Dcom.sun.management.jmxremote.authenticate=true:开启用户认证连接;
-Dcom.sun.management.jmxremote.password.file=/usr/share/tomcat/conf/jmxremote.password:认证用户密码文件,样例设为 /usr/share/tomcat/conf/jmxremote.password;
-Dcom.sun.management.jmxremote.access.file=/usr/share/tomcat/conf/jmxremote.access:认证用户权限配置文件,样例设为 /usr/share/tomcat/conf/jmxremote.access。如果不启用用户认证,将选项 Dcom.sun.management.jmxremote.authenticate 的值设为false,也无需再设置选项 Dcom.sun.management.jmxremote.password.file 和 Dcom.sun.management.jmxremote.access.file。
②JMX 远程连接的用户认证文件
从 jre 的安装目录找到 jmxremote.access 和 jmxremote.password.template,复制到 $CATALINA_OPTS 中设置的认证文件位置,将 jmxremote.password.template 重命名为 jmxremote.password。
cp /usr/lib/jvm/jre/lib/management/jmxremote.access /usr/share/tomcat/conf/
cp /usr/lib/jvm/jre/lib/management/jmxremote.password.template /usr/share/tomcat/conf/jmxremote.password
jmxremote.access 文件末尾添加认证用户名和用户权限,示例中 jmxuser 为用户名,readwrite 为该用户的 jmx 权限:
jmxuser readwrite
jmxremote.password 文件末尾添加认证用户名和用户密码,示例中 jmxuser 为用户名,与 jmxremote.access 中一致,jmxpassword 为该用户的 jmx 远程连接密码:
jmxuser jmxpassword
③最后,更改文件权限和属主:
cd /usr/share/tomcat/conf/
chmod 600 jmxremote.password jmxremote.access
chown tomcat.tomcat jmxremote.password jmxremote.access
④firewalld 设置
可以直接关闭 firewalld:
systemctl stop firewalld
systemctl disable firewalld
或者针对 JMX 监听的端口(包括两个随机端口和选项 -Dcom.sun.management.jmxremote.port 指定的固定端口)设置开放规则。首先查看java 监听的端口:
ss -lnp | grep java
任何开放端口:
firewall-cmd --add-port=8008/tcp --add-port=<random-port-1>/tcp --add-port=<random-port-2>/tcp
重启 tomcat 后随机端口会变,这时候又要重新设置端口规则。
重启 tomcat,JMX 连接
使用 JDK 自带的 jconsole 或 VisualVM 连接 JVM Remote。

3.Zabbix客户端日志报错
(1)报错

(2)原因分析
因为使用了netstat -p参数。
权限问题,zabbix_agentd是zabbix用户启动的,默认不能执行netstat -p等命令,导致从服务器取到的自动发现脚本为空
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
(3)解决方法
为了方便普通用户执行一些特权命令,SUID/SGID程序允许普通用户以root身份暂时执行该程序,并在执行结束后再恢复身份。
chmod +s /bin/netstat
![]()
成功
相关文章:
分布式应用:Zabbix监控Tomcat
目录 一、理论 1.Zabbix监控Tomcat 二、实验 1.Zabbix监控Tomcat 三、问题 1.获取软件包失败 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客户端日志报错 一、理论 1.Zabbix监控Tomcat (1)环境 zabbix服务端:192.168.204.214 …...
《起风了》C++源代码
使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件,直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …...
Grafana展示k8s中pod的jvm监控面板/actuator/prometheus
场景 为保障java服务正常运行,对服务的jvm进行监控,通过使用actuator组件监控jvm情况,使用prometheus对数据进行采集,并在Grafana展现。 基于k8s场景 prometheus数据收集 配置service的lable,便于prometheus使用labl…...
实例038 设置窗体在屏幕中的位置
实例说明 在窗体中可以设置窗体居中显示,本例通过设置窗体的Left属性和Top属性可以准确设置窗体的位置。运行本例,效果如图1.38所示。 技术要点 设置窗体在屏幕中的位置,可以通过设置窗体的属性来实现。窗体的Left属性表示窗体距屏幕左侧的…...
合成数据及其在AI领域中的作用
什么是合成数据? 合成数据是由人工创建而非从现实生活中获得的数据,它从机器学习对数据的需求发展而来。最初,为了精确训练AI模型,必须获得涵盖所有可能场景的训练数据。如果某个场景没有发生或未被获得,就没有相应的…...
Java内存区域(运行时数据区域)和内存模型(JMM)
Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分。 而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之间的抽象关系,即 JMM 定义了 …...
【HDFS】hdfs的count命令的参数详解
Usage: hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] [-s] <paths...
Lombok注解在JSON化中,JSON生成额外生成字段问题
问题描述: 定义如下对象 Dataclass A{private String A;public String getC() {return "abab";}} 执行如下逻辑 Autowiredprivate ObjectMapper objectMapper;Testpublic void test4() throws Exception {A a new A();a.setA("a");System.ou…...
docker中的jenkins之流水线构建
docker中的jenkins之流水线构建项目 1、用node这种方式(因为我用pipeline方式一直不执行,不知道为什么) 2、创建项目 创建两个参数,一个是宿主端口号,一个是docker中的端口号 3、使用git项目中的Jenkinsfile 4、编写…...
ES中倒排索引机制
在ES的倒排索引机制中有四个重要的名词:Term、Term Dictionary、Term Index、Posting List。 Term(词条):词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词&a…...
一生一芯4——使用星火应用商店在ubuntu下载QQ、微信、百度网盘
星火应用商店可以非常方便的完成一些应用的下载,下面是官方网址 http://spark-app.store/download 我使用的是intel处理器,无需下载依赖项,直接点击软件本体 我这里下载amd64,根据自己的处理器下载对应版本 sudo apt install ./spark-stor…...
编程练习(1)
目录 一.选择题 第一题: 第二题: 第三题: 第四题: 第五题: 编辑 二.编程题 第一题: 第二题: 1.暴力方法: 2.数组法: 一.选择题 第一题: 解析&…...
pytorch安装VAE项目详解
安装VAE项目 一、 基本环境二、代码来源三、搭建conda环境四、下载数据集五、启动项目六、其他相关问题 一、 基本环境 工具版本号OSwin 11pycharm2020.1GPU3050 二、代码来源 github地址为: https://github.com/AntixK/PyTorch-VAE/blob/8700d245a9735640dda458d…...
SQL-每日一题【1517. 查找拥有有效邮箱的用户】
题目 表: Users 编写一个解决方案,以查找具有有效电子邮件的用户。 一个有效的电子邮件具有前缀名称和域,其中: 前缀 名称是一个字符串,可以包含字母(大写或小写),数字,下划线 _ &…...
Python web实战之Django 的 WebSocket 支持详解
关键词:Python, Django, WebSocket, Web 如何使用 Django 实现 WebSocket 功能?本文将详细介绍 WebSocket 的概念、Django 的 WebSocket 支持以及如何利用它来创建动态、响应式的 Web 应用。 1. WebSocket 简介 1.1 什么是 WebSocket? 在 W…...
CDN(内容分发网络)
CDN的全称是 Content Delivery Network, 即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞&a…...
前端高频面试题 Day01
文章目录 1. Map 和 Object 的不同API 不同以任意类型为 keyMap 是有序结构Map 很快WeakMap总结 2. Set 和数组的区别Set 元素不能重复API 不一样Set 是无序的,而数组是有序的 —— 这一点很少有人提到,却很关键!!!Wea…...
『C语言初阶』第八章 -隐式类型转换规则
前言 今天小羊又来给铁汁们分享关于C语言的隐式类型转换规则,在C语言中类型转换方式可分为隐式类型转换和显式类型转换(强制类型转换),其中隐式类型转换是由编译器自动进行,无需程序员干预,今天小羊课堂说的就是关于隐式类型转换…...
Fortinet数据中心防火墙及服务ROI超300%!Forrester TEI研究发布
近日,专注网络与安全融合的全球网络安全领导者 Fortinet(NASDAQ:FTNT)联合全球知名分析机构Forrester发布总体经济影响独立分析报告,详细阐述了在企业数据中心部署 FortiGate 下一代防火墙(NGFW)…...
【vue】简洁优雅的火花线、趋势线
来由 在github发现个好看易用的vue趋势线组件,特此记录。 效果 趋势图生成后效果如上,线条为渐变色,可设置是否平滑。具体线条走势,根据数据动态生成。 使用 安装 npm i vuetrend -S 引入 import Vue from "vue"…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...
C#中用于控制自定义特性(Attribute)
我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中,Attribute(特性)是一种用于向程序元素(如类、方法、属性等)添加元数据的机制。Attr…...
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
Nginx1.24编译时,报LuaJIT2.x错误, configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...
Excel 怎么让透视表以正常Excel表格形式显示
目录 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总...
(12)-Fiddler抓包-Fiddler设置IOS手机抓包
1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求,比如 iPhone、iPad 和 MacBook 等苹…...


