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

零基础学习性能测试第二章-linux/jvm/mysql等数据收集环境搭建

目录

  • 零基础搭建性能监控数据收集环境:实战指南
    • 一、监控体系架构全景图
    • 二、一键部署脚本(全自动安装)
    • 三、应用集成配置指南
      • 1. JVM监控集成(Spring Boot示例)
      • 2. MySQL监控配置
      • 3. Linux系统监控
    • 四、Grafana看板快速配置
      • 1. 导入预置看板
      • 2. 创建自定义看板
    • 五、告警规则配置
      • 1. Prometheus告警规则
      • 2. 重启服务生效
    • 六、性能测试数据收集实战
      • 压测期间数据抓取流程
      • 关键性能指标清单
    • 七、避坑指南(血泪经验)
      • 1. 权限问题解决方案
      • 2. 指标采集失败处理
      • 3. 资源占用优化
    • 八、升级生产级监控
      • 1. 高可用部署架构
      • 2. 容器化部署方案
      • 3. 云原生监控方案
    • 九、验证清单

零基础搭建性能监控数据收集环境:实战指南

以下是为零基础设计的Linux/JVM/MySQL全栈监控数据收集方案,通过分步操作和脚本化部署,帮助您快速构建生产级监控系统:


一、监控体系架构全景图

Node Exporter
JMX Exporter
MySQL Exporter
存储指标
可视化
告警
通知
被监控服务器
Prometheus
Grafana
监控看板
Alertmanager
Email/Slack

二、一键部署脚本(全自动安装)

保存为 install_monitoring.sh 并执行:

#!/bin/bash  # 安装Prometheus  
PROM_VERSION="2.45.0"  
wget https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/prometheus-${PROM_VERSION}.linux-amd64.tar.gz  
tar xvf prometheus-*.tar.gz  
mv prometheus-* /opt/prometheus  # 配置Prometheus  
cat <<EOF > /opt/prometheus/prometheus.yml  
global:  scrape_interval: 15s  scrape_configs:  - job_name: 'node'  static_configs:  - targets: ['localhost:9100']  - job_name: 'jvm'  static_configs:  - targets: ['localhost:9404']  - job_name: 'mysql'  static_configs:  - targets: ['localhost:9104']  
EOF  # 安装Node Exporter(系统监控)  
NODE_EXPORTER_VERSION="1.6.1"  
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz  
tar xvf node_exporter-*.tar.gz  
mv node_exporter-* /opt/node_exporter  # 安装JMX Exporter(JVM监控)  
JMX_EXPORTER_VERSION="0.20.0"  
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/${JMX_EXPORTER_VERSION}/jmx_prometheus_javaagent-${JMX_EXPORTER_VERSION}.jar  
cp jmx_prometheus_javaagent-*.jar /opt/jmx_exporter/  
cat <<EOF > /opt/jmx_exporter/config.yml  
rules:  
- pattern: ".*"  
EOF  # 安装MySQL Exporter  
MYSQL_EXPORTER_VERSION="0.15.0"  
wget https://github.com/prometheus/mysqld_exporter/releases/download/v${MYSQL_EXPORTER_VERSION}/mysqld_exporter-${MYSQL_EXPORTER_VERSION}.linux-amd64.tar.gz  
tar xvf mysqld_exporter-*.tar.gz  
mv mysqld_exporter-* /opt/mysqld_exporter  # 创建MySQL监控用户  
mysql -e "CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'StrongPass123!' WITH MAX_USER_CONNECTIONS 3;"  
mysql -e "GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';"  # 配置MySQL Exporter  
echo 'DATA_SOURCE_NAME="exporter:StrongPass123!@(localhost:3306)/"' > /opt/mysqld_exporter/.my.cnf  # 安装Grafana  
wget https://dl.grafana.com/oss/release/grafana-10.1.1.linux-amd64.tar.gz  
tar xvf grafana-*.tar.gz  
mv grafana-* /opt/grafana  # 创建服务文件  
cat <<EOF | sudo tee /etc/systemd/system/prometheus.service  
[Unit]  
Description=Prometheus  [Service]  
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml  
Restart=always  [Install]  
WantedBy=multi-user.target  
EOF  cat <<EOF | sudo tee /etc/systemd/system/node_exporter.service  
[Unit]  
Description=Node Exporter  [Service]  
ExecStart=/opt/node_exporter/node_exporter  
Restart=always  [Install]  
WantedBy=multi-user.target  
EOF  cat <<EOF | sudo tee /etc/systemd/system/mysqld_exporter.service  
[Unit]  
Description=MySQL Exporter  [Service]  
EnvironmentFile=/opt/mysqld_exporter/.my.cnf  
ExecStart=/opt/mysqld_exporter/mysqld_exporter  
Restart=always  [Install]  
WantedBy=multi-user.target  
EOF  # 启动所有服务  
systemctl daemon-reload  
systemctl enable --now prometheus node_exporter mysqld_exporter grafana-server  echo "======= 安装完成 ======="  
echo "Prometheus: http://$(hostname -I | awk '{print $1}'):9090"  
echo "Grafana:    http://$(hostname -I | awk '{print $1}'):3000 (admin/admin)"  

三、应用集成配置指南

1. JVM监控集成(Spring Boot示例)

在应用启动命令中添加JMX agent:

java -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.20.0.jar=9404:/opt/jmx_exporter/config.yml \  -jar your-application.jar  

关键指标验证:

curl http://localhost:9404/metrics | grep jvm_memory_used_bytes  

2. MySQL监控配置

确保MySQL启用性能统计:

-- 检查性能模式  
SHOW VARIABLES LIKE 'performance_schema';  
SET GLOBAL performance_schema=ON;  -- 关键性能视图  
SELECT * FROM performance_schema.events_statements_summary_by_digest;  

3. Linux系统监控

Node Exporter 默认监控项:

  • CPU使用率:node_cpu_seconds_total
  • 内存使用:node_memory_MemAvailable_bytes
  • 磁盘IO:node_disk_io_time_seconds_total
  • 网络流量:node_network_receive_bytes_total

四、Grafana看板快速配置

1. 导入预置看板

监控类型看板ID安装命令
主机资源1860grafana-cli dashboards import 1860
JVM监控8563grafana-cli dashboards import 8563
MySQL监控7362grafana-cli dashboards import 7362

2. 创建自定义看板

Linux资源概览看板配置:

{  "panels": [  {  "type": "stat",  "title": "CPU使用率",  "targets": [{  "expr": "100 - (avg by(instance)(rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100",  "format": "percent"  }]  },  {  "type": "gauge",  "title": "内存使用",  "targets": [{  "expr": "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100"  }]  }  ]  
}  

JVM监控看板关键面板:

{  "title": "GC暂停时间",  "type": "timeseries",  "targets": [{  "expr": "sum(jvm_gc_pause_seconds_sum{job=\"jvm\"}) by (gc)"  }]  
}  

MySQL性能看板:

{  "title": "慢查询统计",  "type": "table",  "targets": [{  "expr": "topk(10, mysql_global_status_slow_queries)"  }]  
}  

五、告警规则配置

1. Prometheus告警规则

创建 /opt/prometheus/alerts.yml

groups:  
- name: server-alerts  rules:  - alert: HighCpuUsage  expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100 > 85  for: 5m  labels:  severity: critical  annotations:  summary: "高CPU使用率 ({{ $labels.instance }})"  description: "CPU使用率超过85% 当前值: {{ $value }}%"  - alert: JvmFullGcFrequent  expr: increase(jvm_gc_pause_seconds_count{gc="PS MarkSweep"}[1h]) > 5  labels:  severity: warning  annotations:  summary: "JVM频繁Full GC"  - alert: MysqlSlowQueries  expr: rate(mysql_global_status_slow_queries[5m]) > 10  labels:  severity: warning  annotations:  summary: "MySQL慢查询激增"  

prometheus.yml 中添加:

rule_files:  - "alerts.yml"  

2. 重启服务生效

systemctl restart prometheus  

六、性能测试数据收集实战

压测期间数据抓取流程

在这里插入图片描述

关键性能指标清单

监控对象关键指标PromQL查询
LinuxCPU使用率100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100
内存可用率node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100
JVM堆内存使用jvm_memory_used_bytes{area="heap"}
GC暂停时间jvm_gc_pause_seconds_sum
线程数jvm_threads_current
MySQL连接数mysql_global_status_threads_connected
查询吞吐量rate(mysql_global_status_questions[5m])
缓冲池命中率1 - (mysql_global_status_innodb_buffer_pool_reads / mysql_global_status_innodb_buffer_pool_read_requests)

七、避坑指南(血泪经验)

1. 权限问题解决方案

MySQL访问被拒绝:

GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';  
FLUSH PRIVILEGES;  

文件权限问题:

sudo chown -R prometheus:prometheus /opt/prometheus  

2. 指标采集失败处理

检查Exporter状态:

curl http://localhost:9100/metrics  # Node Exporter  
curl http://localhost:9404/metrics  # JMX Exporter  
curl http://localhost:9104/metrics  # MySQL Exporter  

Prometheus调试:

systemctl status prometheus  
journalctl -u prometheus -f  # 查看实时日志  

3. 资源占用优化

降低采集频率:

# prometheus.yml  
global:  scrape_interval: 30s  # 从15s调整为30s  

过滤无用指标:

scrape_configs:  - job_name: 'node'  metric_relabel_configs:  - source_labels: [__name__]  regex: '(node_netstat_.*|node_time_.*)'  action: drop  

八、升级生产级监控

1. 高可用部署架构

远程写入
远程写入
Prometheus主
VictoriaMetrics/Thanos
Prometheus备
Grafana

2. 容器化部署方案

# Docker Compose示例  
version: '3'  
services:  prometheus:  image: prom/prometheus  volumes:  - ./prometheus.yml:/etc/prometheus/prometheus.yml  node-exporter:  image: prom/node-exporter  grafana:  image: grafana/grafana  ports:  - "3000:3000"  

3. 云原生监控方案

# Kubernetes部署  
helm install prometheus prometheus-community/kube-prometheus-stack \  --set prometheus.service.type=NodePort \  --set grafana.service.type=NodePort  

九、验证清单

  1. Node Exporter指标可见:http://IP:9100/metrics
  2. JMX Exporter指标可见:http://IP:9404/metrics
  3. MySQL Exporter指标可见:http://IP:9104/metrics
  4. Prometheus成功抓取目标:http://IP:9090/targets
  5. Grafana看板数据正常显示
  6. 测试告警触发机制(如强制CPU满载)
  7. 压测期间指标变化符合预期

部署完成标志:在Grafana中可同时查看Linux系统负载、JVM内存使用和MySQL查询吞吐量的实时数据,并在CPU超过85%时收到告警通知。

通过本方案,您可以在30分钟内完成全栈监控环境的搭建,并立即应用于性能测试工作。实际执行时建议先在小规模测试环境验证,再推广到生产环境。

http://www.dtcms.com/a/288663.html

相关文章:

  • Golang基础语法-数据类型
  • Go语言--语法基础6--基本数据类型--map类型
  • Java学习第六十部分——JVM
  • An End-to-End Attention-Based Approach for Learning on Graphs NC 2025
  • 04 51单片机之数码管显示
  • Shell脚本-uniq工具
  • 两个路由器通过不同的网段互联
  • 从TPACK到TPACK - AI:人工智能时代教师知识框架的重构与验证
  • EPLAN 电气制图(十): 继电器控制回路绘制(下)放料、放灰
  • 基于单片机的IC卡门禁系统设计
  • 最大子数组和问题-详解Kadane算法
  • 每日一题7.20
  • OSS文件上传(一):简单上传
  • feignClient 调用详细流程
  • Valgrind Memcheck 全解析教程:6个程序说明基础内存错误
  • 判断一个数是否为质数方法
  • VSCode使用Jupyter完整指南配置机器学习环境
  • c#:TCP服务端管理类
  • 正点原子stm32F407学习笔记10——输入捕获实验
  • 2025 年科技革命时刻表:四大关键节点将如何重塑未来?
  • 内网后渗透攻击过程(实验环境)--3、横向攻击
  • SQL 调优第一步:EXPLAIN 关键字全解析
  • 【已解决】GitHub SSH 连接失败解决方案:Permission Denied (publickey) 错误修复指南
  • [Linux]进程 / PID
  • 30天打牢数模基础-决策树讲解
  • Linux入门篇学习——NFS 服务器的搭建和使用和开发板固件烧录
  • Spring Boot 第一天知识汇总
  • 【Java项目安全基石】登录认证实战:Session/Token/JWT用户校验机制深度解析
  • 相似度计算
  • 「Java案例」利用方法求反素数