01流行性能监控工具
- Linux自带命令:Vmstat,Top
- 机器监控工具: Nmon
- 物理机监控:Collectd + InfluxDB + Grafana
- Docker +Mysql+ Redis一体化监控∶Prometheus + Grafana(node exporter, mysqld_exporter,redis_exporter,自定义exporter,全家桶)
- 全链路Tracing 监控:Zipkin
系统级分析/调试工具
02InfluxDB + Grafana 搭建
2.1 ubuntu docker方式部署
2.1.1 influxDB部署
- 安装docker:先切到顶级目录
sudo su
cd ../..
# 关闭docker sudo systemctl stop docker # 卸载旧版本: sudo apt-get purge docker-ce # 安装新版本 sudo apt update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" sudo apt-cache madison docker-ce # 根据终端显示的版本选择一个 sudo apt install docker-ce=5:19.03.1~3-0~ubuntu-bionic systemctl start docker sudo systemctl start docker sudo systemctl enable docker sudo docker info # 安装nvidia-docker 看业务 sudo apt update sudo apt install nvidia-docker2
-
下载influxDB镜像:
docker pull influxdb
-
启动influxDB容器:
docker start container id
-
将新influxDB容器命名为jmeterdb,执行docker创建容器命
docker run -d -p 8086:8086 -p 8083:8083 --name=jmeterdb influxdb
-
执行如下命令进入容器内部:
docker exec -it jmeterdb bash
-
在容器内部创建jmeter数据库,用于收集JMeter发送的压测数据
-
执行
influx
命令进入命令台 -
执行类sql语句创建jmeter数据库:
create database jmeter;
-
创建完jmeter数据库之后执行如下命令验证数据库已经创建成功:
show databases;
-
docker基础命令
列出已下载docker镜像: | docker images 列出运行中的docker容器: | docker ps 列出运行中+已停止docker容器: | docker ps -a 停止容器: | docker stop [docker container id] 启动容器: | docker start [docker container id] 删除容器: | docker rm [docker container id]
2.1.2 Grafana 配置
- 部署方法:Docker 部署
- 下载镜像:
docker pull grafana/grafana
- 启动镜像:
docker run -d -p 3000:3000 --name=jmeterGraf grafana/grafana
- 访问Grafana的控制台链接,验证它已经运行正常
- 默认用户名/密码:admin / admin,登录之后请跳过修改密码
- 在Grafana中添加数据源
- 选择Add data source
- 找到InfluxDB
- 单击选择该DB
- 配置InfluxDB数据源
- 输入URL :http://[hostname or IP]:8086
- Access:browser
- Database:jmeter
- 其余参数保持默认 - 在Grafana内导入
JMeter Dashboard
- 输入
Home Dashboard
页面,选择Import
- 网上下载
jmeter_dashboard.json
文件 - 将json文本复制/粘贴到
paste JSON
文本框中 - 单击Load按钮导入
- 在
DB name
中选择InfluxDB
- 单击
Import
按钮完成Dashboard
导入 - 打开导入的
JMeter Dashboard
查看结果
2.2 centos docker方式部署
2.2.1 安装docker
2.2.2 influxDB部署
- InfluxDB是一个用Go语言开发的开源分布式时序数据库,特别适合处理和分析资源监控数据,用于存储压测数据
1. 下载镜像:docker pull influxdb:1.7.10
2. 新建容器网络:docker network create grafana
3. 运行容器:
docker run -d --name=influxdb --network grafana -p 8086:8086 -v ${PWD}/influxdb/:/var/lib/influxdb/ influxdb:1.7.10
4. 创建数据库
- 方式1:
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE jmeter"
- 方式2:
- 进入容器:docker exec -it influxdb influx
- 执行语句:create database jmeter;
5. 创建数据库
- show databases;
- use jmeter;
- show measurements;
- select * from jmeter limit 3;
2.2.2 Grafana 配置
- 官网:https://hub.docker.com/r/grafana/grafana
- 度量分析与可视化图标展示工具,可以支持不用种类的数据源,用于将存储于InfluxDB中的数据以图表的形式展示出来
1. 下载Grafana镜像:docker pull grafana/grafana:6.6.2
2. 运行容器:
docker run -d --name grafana --network grafana -p 3000:3000 grafana/grafana:6.6.2
- 查看容器ip:
docker exec -it influxdb sh cat /etc/hosts
3. 默认登陆账号: admin,密码: admin。
4. 配置数据源
URL: http://influxdb:8086
Database: jmeter
Min time interval: 5
5. 导入dashboard
- 进入grafana官网:https://grafana.com/grafana/dashboards/
- 复制id
- 导入到grafana
2.3 jmeter配置
在JMeter中添加Backend Listener组件,用于收集数据并发送给influxdb
- 在
Backend Listener implementation
中选择
InfluxdbBackendListenerClient
(注意:必须使用jmeter 5.0以上版本,否则需要单独装插件才可以看到这个组件) - 在
influxdbURL
中将实际的influxdb hostname填写进去 - 在application中填写
应用名称
- 在
testTitle
中填写测试标题
- 其余配置保持不变
- 运行JMeter,然后在influxdb中检验是否已经能够接受到数据
- 在influxdb命令台中使用查询语句,检查是否已经能够收到数据
2.4 执行jmeter脚本
- 方式1:gui运行
- 命令行方式运行
jmeter.sh -n -t /home/centos7/Desktop/jmeter_scripts/HTTP请求.jmx
2.5 报告查看
1. 查看结果树
2. 聚合报告
2. grafana报告
03Prometheus + Grafana
3.1 安装java和配置环境变量
参考链接1:https://www.jb51.net/article/184780.htm
参考链接2:https://blog.csdn.net/slw213106/article/details/121854308
3.1.1 查看CentOS自带JDK是否已安装
- yum list installed |grep java
3.1.2 卸载CentOS系统自带Java环境
- 卸载JDK相关文件输入:yum -y remove java-1.8.0-openjdk*
- 卸载tzdata-java输入:yum -y remove tzdata-java.noarch
3.1.3 yum方式安装jdk
-
查看yum库中的Java安装包:yum -y list java*
-
将java-1.8.0的所有相关Java程序都安装上:yum -y install java-1.8.0-openjdk*
3.1.4 查看刚安装的Java版本信息
- java -version
- javac -version
3.1.5 查看java安装路径
[root@centos7 centos7]# which java
/usr/bin/java
[root@centos7 centos7]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 Oct 23 23:26 /usr/bin/java -> /etc/alternatives/java
[root@centos7 centos7]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Oct 23 23:26 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.345.b01-1.el7_9.x86_64/jre/bin/java
3.1.6 配置环境变量(可跳过)
- ls /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.345.b01-1.el7_9.x86_64/
- vi /etc/profile
#set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.345.b01-1.el7_9.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
3.2 安装docker
1. 查看是否已安装docker:yum list installed |grep docker
2. 设置 stable 镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3. 更新 yum 软件包索引
yum makecache fast
4. 列出docker ce的版本
yum list docker-ce.x86_64 --showduplicates | sort -r
4. 安装docker ce版本(默认最新版本)
yum install docker-ce
5. 启动docker
systemctl start docker
docker info # 查看镜像信息
3.3 配置node_exporter
3.3.1 下载:
wget -c https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
3.3.2 解压:
tar zxvf node_exporter-0.18.1.linux-amd64.tar.gz
mv node_exporter-0.18.1.linux-amd64 /usr/local/
/usr/local/node_exporter-0.18.1.linux-amd64/node_exporter --help
3.3.3 启动
/usr/local/node_exporter-0.18.1.linux-amd64/node_exporter &
3.3.4 查看启动进程和端口号
- ps -ef |grep node_exporter
- netstat -naop |grep 9100 或 netstat -lnp |grep 9100
- kiss -9 pid # 杀进程(第二列值)
3.4 安装和配置promethus
3.4.1 下载
wget -c https://github.com/prometheus/prometheus/releases/download/v2.15.1/prometheus-2.15.1.linux-amd64.tar.gz
3.4.2 解压
tar zxvf prometheus-2.15.1.linux-amd64.tar.gz
mv prometheus-2.15.1.linux-amd64 /usr/local/
3.4.3 修改prometheus.yml配置
- vi /usr/local/prometheus-2.15.1.linux-amd64/prometheus.yml
- job_name: 'centos7'
static_configs:
- targets: ['192.168.88.133:9100']
3.4.4 启动prometheus
- 进入prometheus目录:
cd /usr/local/prometheus-2.15.1.linux-amd64/
- 启动:
./prometheus --config.file="prometheus.yml" &
3.4.6 prometheus启动常见报错
1. 报错信息:“opening storage failed: lock DB directory: resource temporarily unavailable”
- 解决方案:直接删除lock目录
rm -rf /data/lock
2. 报错信息:“error starting web server: listen tcp 0.0.0.0:9090: bind: address already in use”
- 解决方案:
- 安装lsof:yum install lsof -y
- 获取9090端口pid:lsof -i:9090
- 强制杀死进程:kill -9 pid
3.5 安装&配置grafana
3.5.1 安装grafana
1. docker 方式安装
-
拉取镜像并启动容器
docker run -d --name=grafana -p 3000:3000 grafana/grafana
-
访问:http://192.168.88.133:3000/login
- 初始账号密码:admin/admin
- 初始账号密码:admin/admin
2. 本地安装
# yum localinstall grafana-6.5.2-1.x86_64.rpm
# /sbin/chkconfig --add grafana-server # 配置开机启动
# systemctl daemon-reload # 重载所有修改过的配置文件
# systemctl start grafana-server # 启动grafana-server
# systemctl status grafana-server # 查看状态
# sudo systemctl enable grafana-server.service # 设置开机启动
# rpm -e --nodeps # 删除grafana
3.5.2 配置grafana数据源
1. 点击Add data source
2. 配置数据源
3.5.3 导入dashboard
- ID:11074/8919
3.6 安装redis
3.6.1 docker方式(本文采用此方式)
docker search redis
docker run -d --name redis -p 6379:6379 redis # 拉取镜像并启动容器
docer exec -it redis redis-cli # 进入容器并连接
3.6.2 源码包方式
1. 下载
wget -c http://download.redis.io/releases/redis-5.0.7.tar.gz
2. 解压
tar zxvf redis-5.0.7.tar.gz
3. 编译
cd redis-5.0.7
make
3.7 安装nginx
# docker search nginx
# docker pull nginx
# docker run -d -p 80:80 --name d7group-nginx -v /usr/local/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/dockerfile/nginx/logs:/var/log/nginx:rw f7bb5701a33c
安装centos image
docker pull centos:7.2.1511
3.8 安装mysql
3.8.1 下载镜像
docker pull mysql
3.8.2 启动镜像
docker run --name mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf/conf.d:/etc/mysql/conf.d \
-p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
3.8.3 用户授权
1. 登录已启动的MySQL容器
docker exec -it mysql bash
2. 使用启动命令中-e MYSQL_ROOT_PASSWORD设置的密码,登录MySQL
mysql -uroot -p
3. 执行权限命令
- 方案1:
create user root@'192.168.88.133' identified by '123456'; grant all privileges on databas_name.* to root@'192.168.88.133'; ALTER USER 'root'@'192.168.88.133' IDENTIFIED WITH mysql_native_password BY '123456';
- 方案2:
alter user 'root'@'%' identified by '123456'; # 修改root用户密码 alter user 'root'@'%' identified with mysql_native_password by '123456'; # 创建用户 grant all on *.* to 'root'@'%'; # 并给root用户分配权限 flush privileges; # 配置生效
3.8.4 连接校验
3.9 安装tomcat
1. 解压:tar zxvf tomcat.tar.gz
2. 编辑application.yaml文件修改mysql和redis
- vi vi /usr/local/tomcat/blog/ROOT/WEB-INF/classes/application.yaml
3. 修改dockerfile文件
- vi /usr/local/tomcat/tomcat8/Dockerfile
4. 构建tomcat imagess
5. 启动容器
docker run -d -p 9004:8080 -p 9995:9995 --name 7dgroup-tomcat -v /usr/local/tomcat/blog/ROOT/:/apache-tomcat-8.5.9/webapps/ROOT/ -v /usr/local/tomcat/blog/logs:/apache-tomcat-8.5.9/logs:rw -e CATALINA_OPTS="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9995
-Djava.rmi.server.hostname=192.168.88.135 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.rmi.port=9995" 5bd17a80d903
5. 进入容器
docker exce -it 58221ba31525 /bin/bash
3.10 创建influxdb
3.10.1 docker方式
1. 拉取镜像
docker pull influxdb
2. 启动容器
docker run -d --name=influxdb -p 8086:8086 -v /usr/local/influxdb/:/var/lib/influxdb/ influxdb:1.8.6
3. 进入容器
docker exec -it influxdb influx
4.
创建数据库:create database jmeter;
3.10.2 RPM方式
# yum localinstall influxdb-1.7.9.x86_64.rpm
# systemctl start influxdb #启动grafana-server
# systemctl status influxdb #查看状态