Prometheus监控栈 监控tomcat和消息队列

监控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/


相关推荐
计算机毕设指导62 小时前
基于微信小程序的博物馆文创系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
Edward1111111113 小时前
tomcat_servlet
java·servlet·tomcat
一周困⁸天.13 小时前
Prometheus
prometheus
ZYMFZ15 小时前
Prometheus 监控平台详解与部署
prometheus
胡小禾17 小时前
Tomcat10连接模型
tomcat
我爱学习好爱好爱1 天前
Prometheus监控栈 监控Springboot2+Vue3+redis项目
数据库·redis·prometheus
武子康1 天前
Java-218 RocketMQ Java API 实战:同步/异步 Producer 与 Pull/Push Consumer
java·大数据·分布式·消息队列·rocketmq·java-rocketmq·mq
阿干tkl1 天前
Tomcat文件上传及下载
java·tomcat
Overt0p2 天前
抽奖系统(4)
java·spring boot·tomcat