监控tomcat,Prometheus监控栈:Prometheus+Grafana+Alertmanager
一、软件环境介绍
之前学习了以springboot的方式部署javaweb,还有些公司运行的iavaweb业务版本比较低,采用传统的tomcat的程序来进行部署。所以学习prometheus监控tomcat程序也非常有必要。
主机清单
| 职责 | ip地址 | 备注 |
|---|---|---|
| Prometheus服务器 | 192.168.92.11 | docker-compose模式的prometheus |
| 待监控Linux | 192.168.28.12 | 待准备组件:tomcat9.0 |
二、prometheus监控tomcat
docker安装(略)
docker-compose安装(略)
2.1待监控Linux安装tomcat9
test中,创建docker-compose目录
mkdir /data/docker-compose -p
cd /data/docker-compose
创建docker-compose.yaml
version: '3.3' #指定Docker-Compose 文件格式版本
services:
tomcat: #服务名:tomcat
image: tomcat:9.0 #使用官方tomcat:9.0 镜像
restart: always #容器退出时自动重启(适合生产环境)
container_name: tomcat #固定容器名为 "tomcat"
environment:
TZ: "Asia/Shanghai" #TZ: 设置时区为上海时区
JAVA_OPTS: "-Xms64m -Xmx128m" #JAVA_OPTS:JVM参数,-Xms64m:初始堆内存64MB,-Xmx128m:最大堆内存128MB
volumes:
- /data/tomcat/webapps:/usr/local/tomcat/webapps #将宿主机的 /data/tomcat/webapps 目录挂载到容器的 webapps 目录
ports: #宿主机的8080端口 → 容器的8080端口
- "8080:8080"
运行docker-compose
docker-compose up -d
查看docker的信息
docker images
docker ps -a
访问tomcat程序,能看到以下提示说明tomcat9部要完毕
http://192.168.92.12:8080/

如果不想碰到404错误,在tomcat的webapps目录创建一个index.jsp即可
cd /data/tomcat/webapps
mkdir ROOT
cd ROOT
cat > index.jsp << 'EOF'
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP page</title>
</head>
<body>
<% out.println("hello,tomcat"); %>
</body>
</html>
EOF
2.2开启tomcat监控
需要向Tomcat内添加jmx_prometheus_javaagent包,并暴露一个端口6060给外部访问来获取数据
同时需要创建一个配置文件simple-config.yml
。上传javaagent包到服务器
mkdir /data/tomcat/prom-jvm-demo -p
cd /data/tomcat/prom-jvm-demo
#jmx prometheus javaagent-1.3.0.jar上传到/data/tomcat/prom-jvm-demo文件夹里面
。创建simple-config.yml到服务器
lowercaseOutputLabelNames: true #输出标签名转为小写。
lowercaseOutputName: true #输出指标名转为小写。
whitelistObjectNames: ["java.lang:type=OperatingSystem"] #它告诉JMX Exporter:只采集 java.lang:type=OperatingSystem 这一个 MBean 的属性。
rules:
- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
name: os_$1
type: GAUGE
attrNameSnakeCase: true
。修改docker-compose.yaml,把tomcat的内部数据通过6060端口暴露出来
tomcat:
image: tomcat:9.0 #指定基础镜像为官方Tomcat 9.0。
restart: always #容器退出时总是自动重启,确保服务高可用。
container_name: tomcat #为容器指定一个固定的名称tomcat,便于管理。
environment:
TZ: "Asia/Shanghai" #设置容器时区为上海时间,解决日志时间错乱问题。
JAVA_OPTS: "-Xms64m -Xmx128m" #初始化堆内存64MB,最大堆内存128MB,生产环境需调大。
CATALINA_OPTS: "-javaagent:/jmx-exporter/jmx_prometheus_javaagent-1.3.0.jar=6060:/jmx-exporter/simple-config.yml"
volumes: #目录挂载,将宿主机的目录映射到容器内,实现数据持久化和配置传入。
- /data/tomcat/prom-jvm-demo:/jmx-exporter #将宿主机的./data/tomcat/prom-jvm-demo目录挂载到容器的/jmx-exporter路径。
- /data/tomcat/webapps:/usr/local/tomcat/webapps #将宿主机目录挂载到Tomcat的webapps目录,实现Web应用(WAR包)的持久化部署。
ports:
- "8080:8080" #将容器的Tomcat应用端口(8080)映射到宿主机的8080端口。用于访问Web应用。
- "6060:6060" #将容器的JMX监控指标端口(6060)映射到宿主机的6060端口。供Prometheus抓取指标。
重启docker-compose
docker-compose down
docker-compose up -d
测试是否可以访问到tomcat的监控数据
http://192.168.92.12:6060/metrics

2.3 prometheus服务器添加tomcat监控的地址
192.168.92.11的prometheus上,修改prometheus的配置文件
#进入docker-prometheus目录
cd /data/docker-prometheus
#修改prometheus.yml
vi prometheus/prometheus.yml
添加待监控的tomcat服务器
- job_name: 'tomcat'
scrape_interval: 5s
metrics_path: '/metrics'
static_configs:
- targets: ['192.168.92.12:6060']
labels:
instance: 'tomcat9服务器'
保存配置后,让配置生效
curl -X POST http://localhost:9090/-/reload
刷新访问http://192.168.92.11:9090/targets?search=,确认新监控的tomcat服务器是否生效

2.4 grafana中对tomcat进行监控
copy id to clipboard->grafana的dashboards中import dashboard https://grafana,com/grafana/dashboards/8878-jym-dashboard-for-prometheus:operator/


这个 "JVM dashboard (for Prometheus Operator)" 是通用的 JVM 监控面板,不是专门针对 Tomcat 的
由于 Spring Boot 服务 DOWN,导致整个面板无法正确显示 JVM 数据,要把springboot的jar包运行起来,但是tomcat也是8080端口,所以springboot这里,192.168.92.11prometheus服务器的prometheus.yml的springboot部分为:
- job_name: 'springBoot'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['192.168.92.12:8082']
labels:
instance: 'springboot服务器'
192.168.92.12,test服务器启动springboot的jar包命令为:
java -jar oshi-app-0.0.1-SNAPSHOT.jar --server.port=8082
然后grafana仪表盘就不会报错了

监控消息队列,Prometheus监控栈:Prometheus+Grafana+Alertmanager
一、软件环境介绍
消息队列是什么?
。MessageQueue 消息队列
一个持久化存储消息的队列容器,称之为broker.
支持消息的发送(生产者)和订阅(消费者)。
。消息队列主要作用、适用场景?
1.同步业务转化为异步业务
2.跨系统对接(eg,有数据存放在mysql中,又缓存到redis中,希望保证redis和mysql数 据一致性)
3.削峰、限流(更多适用于商品的秒杀场累:有限额余额,规避1个商品被多个用户争抢到;访问人的人特别多,争抢资源的人特别多)
。主要的消息队列产品
1.rabbitmg
2.actiemq
3.kafka apache开源基金会消息队列中间产品,使用ava语言开发,依赖Zookeeper服务注册与发现
4.rocketmq
。rabbitmg是什么?
erlang开发、适合中小型企业使用。带有图形界面管理平台,比较易用、直观
主机清单
| 职责 | ip地址 | 备注 |
|---|---|---|
| Prometheus服务器 | 192.168.92.11 | docker-compose模式的prometheus |
| 待监控Linux | 192.168.92.12 | 待准备组件:rabbitmg:3.7.15-management |
二、prometheus监控rabbitmq
docker安装(略)
docker-compose安装(略)
2.1待监控Linux安装rabbitmg
test中,创建docker-compose目录
mkdir /data/docker-compose -p
cd /data/docker-compose
创建docker-compose.yaml
version: '3.3' #Docker Compose 文件格式版本
services: #定义服务的根节点
rabbitmq: #服务名称:rabbitmq
image: rabbitmq:3.7.15-management #使用的Docker镜像(带管理界面的RabbitMQ)
container_name: rabbitmq #指定容器名称(非随机生成)
restart: always #重启策略:容器退出时总是重启
volumes: #宿主机路径:容器内路径
- /data/rabbitmq/data:/var/lib/rabbitmq
- /data/rabbitmq/log:/var/log/rabbitmq
ports: #端口映射(宿主机端口:容器端口)
- "5672:5672" #AMQP协议端口,应用程序连接 RabbitMQ 的端口
- "15672:15672" #管理界面端口,浏览器访问管理界面(默认账号密码:guest/guest)
运行docker-compose
docker-compose up -d
查看docker 的信息
docker images
docker ps -a
宿主机访问rabbitmq的管理界面
http://192.168.92.12:15672
#用户名和密码都是guest

2.2 rabbitmq开启监控,待监控Linux安装rabbitmq_exporter
二进制安装或者docker安装(或者docker-compose安装),此处选用docker-compose安装 test机器上,修改docker-compose.yaml文件
cd /data/docker-compose
vi docker-compose.yaml
yaml文件增加rabbitmg_exporer组件
version: '3.3'
services:
rabbitmq-exporter:
image: kbudde/rabbitmq-exporter
container_name: rabbitmq-exporter
restart: always
environment:
RABBIT_URL: "http://192.168.92.12:15672" #RabbitMQ管理界面地址
RABBIT_USER: "guest" #RabbitMQ用户名
RABBIT_PASSWORD: "guest" #RabbitMQ密码
PUBLISH_PORT: "9419" #exporter监听的端口
OUTPUT_FORMAT: "JSON" #输出格式
ports: #端口映射(宿主机端口:容器端口)
- "9419:9419"
启动docker-compose.yaml
docker-compose up -d
访问rabbitmg_exporter http://192.168.92.12:9419/metrics
2.3prometheus服务器添加rabbitmg_exporter的地址
192.168.92.11的prometheus上,修改prometheus的配置文件
#进入docker-prometheus目录
cd /data/docker-prometheus
#修改prometheus.yml
vi prometheus/prometheus.yml
添加待监控的rabbitmg_exporter
- job_name: 'rabbitmq-exporter'
static_configs:
- targets: ['192.168.92.12:9419']
labels:
instance: 'rabbitmq服务器'
保存配置后,让配置生效
#prometheus中执行
curl -X POST http://localhost:9090/-/reloadd
刷新访问http://192.168.92.11:9090/targets?search=,确认新监控的rabbitmg服务器是否生效

2.4 rabbitmq监控指标
磁盘空间监控
rabbitmq_node_disk_free_limit:磁盘总大小(阈值限制)
rabbitmq_node_disk_free:当前可用磁盘空间
监控意义:当可用磁盘空间低于阈值时,RabbitMQ 会进入磁盘告警状态,停止接收新消息
内存使用监控
rabbitmq_node_mem_used:使用内存大小
rabbitmq_node_mem_limit:内存总大小(上限限制)
监控意义:当内存使用超过限制时,RabbitMQ 会进入内存告警状态,影响消息处理性能
Socket 连接监控
rabbitmq_sockets_used:使用的sockets的数量
rabbitmq_sockets_available:可用的sockets总数
监控意义:监控连接数使用情况,预防连接耗尽导致客户端无法连接
文件描述符监控
rabbitmq_fd_used:使用文件描述符的数量
rabbitmq_fd_available:可用的文件描述符总数
监控意义:文件描述符耗尽会导致 RabbitMQ 无法打开新文件和网络连接,造成服务中断
关键告警阈值
磁盘使用率 > 85%:警告
磁盘使用率 > 90%:严重告警
内存使用率 > 80%:警告
内存使用率 > 90%:严重告警
Socket 使用率 > 75%:警告
FD 使用率 > 80%:警告
2.5 grafana中对nginx进行监控
copy id to clipboard->grafana的dashboards中Import dashboard
https:/gralana.com/grafana/dashboards/4279-rabbitmg-monitomng/


