性能测试工具 prometheus 和 skywalking 监控搭建

豆豆 · 2021年07月23日 · 最后由 豆豆 回复于 2022年10月16日 · 8545 次阅读

一、背景

业务发展到如今,系统应用各种技术。Redis,MySQL,kafka,MongoDB,zookeeper 等技术的加入,系统的稳定性,健康程度是怎么样的目前是没有一个全盘的感知的。只是阿里云独立单独的自带监控,不能满足总体的监控和压测监控的需求。

二、目的

压测环境的搭建,压测过程中重要的一环就是各个环节的监控。搭建监控系统满足监控压测服务器集群,方便后续的压测监控。为后续的性能调优提供对应的数据支撑。除此之外对于系统的全盘监控,为后续做对应的一些警报也是起到相应的支持。

三、环境

备注:如果项目是 k8s 的集群可以用 docker 搭建,其他可以用源码进行搭建。当前为了快速先用 docker 搭建。但是有的 exporter 是用的源码不影响。

启动 docker

#root权限
systemctl start docker.service

依赖镜像

docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana
docker pull influxdb:1.8.1

四、安装过程

配置

mkdir ~/opt/prometheus
cd /opt/prometheus/
vim prometheus.yml

yml 配置内容

global:
  scrape_interval:     60s
  evaluation_interval: 60s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['192.168.30.79:9090']
        labels:
          instance: prometheus

  - job_name: linux1
    static_configs:
      - targets: ['192.168.30.79:9100']
        labels:
          instance: node1

  - job_name: linux2
    static_configs:
      - targets: ['192.168.30.79:9110']
        labels:
          instance: node2

  - job_name: mysql
    static_configs:
      - targets: ['192.168.30.79:9104']
        labels:
          instance: db1

  - job_name: redis
    static_configs:
      - targets: ['192.168.30.79:9121']
        labels:
          instance: redis

  - job_name: rabbitmq
    static_configs:
      - targets: ['192.168.30.79:9099']
        labels:
          instance: rabbitmq

docker 启动 Prometheus

docker run  -d \
  -p 9090:9090 \
  -v /home/opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  prom/prometheus
  --config.file=/etc/prometheus/prometheus.yml \   
  --web.enable-lifecycle        #热更新配置。不需要重启容器。

部署 node-exporter

docker run -d -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  prom/node-exporter

部署 grafana

docker run -d -p 3000:3000 grafana/grafana
默认账号密码  admin/admin 新修改密码:123456

部署 influxdb

docker run -itd -p 8083:8083 -p 8086:8086 --name influxdb influxdb:1.8.1
登录influxdb,并创建数据库
docker exec -it influxdb /bin/bash 
influx
create database jmeter;

打开 jmeter,添加后端监听器 ,配置 influxdb 数据库,将压测的数据写入数据库中
measurement 填写前面创建的数据库:jmeter

grafna 导入 dashboards 模版 5496

五、访问链接

prometheus 链接:http://192.168.30.79:9090/targets
grafana 链接:http://192.168.30.79:3000/ 默认账号密码 admin/admin 新修改密码:123456

六、需要监控的内容

6.1 接入 MySQL

接入后需要修改 prometheus.yml 文件。并且 docker 部署的需要重启容器(后续需要做追加方式不需要每次修改 yml 文件都需要重启容器)。

#官网下载对应的压缩包
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

#解压包到指定位置
tar zxvf  mysqld_exporter-0.12.1.linux-amd64.tar.gz

#移动到指定的文件夹
mv  mysqld_exporter-0.12.1.linux-amd64 ./opt/mysqld_exporter

# 启动mysqld_exporter
nohup ./mysqld_exporter --config.my-cnf=./.my.cnf &

# 确认是否正常启动(默认端口9104)
netstat -lnptu | grep 9104

在 mysqld_exporter 目录下创建 .my.cnf 文件。

#.my.cnf文件配置内容
[client]
host=192.168.30.79
port=3306
user=dev
password=XXXX

6.2 接入 node_exporter

接入后需要修改 prometheus.yml 文件。并且 docker 部署的需要重启容器(后续需要做追加方式不需要每次修改 yml 文件都需要重启容器)。

#官网下载对应的压缩包
 wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz

#解压包到当前目录
tar zxvf  node_exporter-1.1.2.linux-amd64.tar.gz

#移动到指定的文件夹
mv node_exporter-1.1.2.linux-amd64 ./opt/node_exporter

#使用nohup后台运行,并指定端口
 nohup ./node_exporter --web.listen-address=":9110" &

#确认是否正常启动(默认端口9100,修改为了9110)
netstat -lnptu | grep 9110

6.3 接入 redis_exporter

接入后需要修改 prometheus.yml 文件。

#下载对应的压缩包(没有官网的包在Git上找了最多star的包)
wget https://github.com/oliver006/redis_exporter/releases/download/v1.23.1/redis_exporter-v1.23.1.linux-amd64.tar.gz

#解压包到当前目录
tar -zxvf redis_exporter-v1.23.1.linux-amd64.tar.gz

#移动到指定的文件夹
mv redis_exporter-v1.23.1.linux-amd64 ./opt/redis_exporter

#使用nohup后台运行,并指定端口
nohup  ./redis_exporter --redis.addr=8.136.194.137:6379 --web.listen-address=":9121" &

#确认是否正常启动
netstat -lnptu | grep 9121

6.4 接入 rabbitmq_exporter

接入后需要修改 prometheus.yml 文件。

#下载对应的压缩包(没有官网的包在Git上找了最多star的包)
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC8/rabbitmq_exporter-1.0.0-RC8.linux-amd64.tar.gz

#解压包到当前目录
tar -zxvf rabbitmq_exporter-1.0.0-RC8.linux-amd64.tar.gz

#移动到指定的文件夹
mv rabbitmq_exporter-1.0.0-RC8.linux-amd64 ./opt/rabbitmq_exporter

#使用nohup后台运行,并指定端口
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://8.136.194.137:15672 nohup ./rabbitmq_exporter >/dev/null 2>&1 &


#确认是否正常启动
netstat -lnptu | grep 9099

6.5 安装 Skywalking 全链路监控平台

需要用到的端口有 8088 11800 12800 9200 9300
安装 docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0\
/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
修改权限:chmod +x /usr/local/bin/docker-compose
验证是否安装成功
docker-compose --version

安装 skywalking-ui、skywalking-oap 和 elasticsearch
docker-compose.yml

mkdir /home/opt/skywalking

上传docker-compose.yml到 /home/opt/skywalking

cd /home/opt/skywalking
docker-compose up -d

初始化 elasticsearch

修改虚拟内存区域大小,否则会因为过小而无法启动:
        sysctl -w vm.max_map_count=262144

修改/mydata/elasticsearch/data目录的权限,重新启动
        chmod 777 -R /mydata/elasticsearch/data/
        docker restart elasticsearch

安装中文分词器IKAnalyzer,并重新启动:
        docker exec -it elasticsearch /bin/bash
        #此命令需要在容器中运行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
        docker restart elasticsearch

访问地址:http://192.168.30.79:8088/

安装 skywalking-agent.jar:
下载地址:http://skywalking.apache.org/downloads/

wget https://archive.apache.org/dist/skywalking/8.3.0/apache-skywalking-apm-8.3.0.tar.gz
tar -zxvf apache-skywalking-apm-8.3.0.tar.gz

根据应用的运行环境,选择相应的方法来指定SkyWalking Agent的路径:
Linux Tomcat 7 / Tomcat 8:
在tomcat/bin/catalina.sh第一行添加以下内容:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS

JAR File 或 Spring Boot:
java -javaagent:/opt/apache-skywalking-apm-bin/agent\
/skywalking-agent.jar -Dskywalking.agent.service_name=\
bryanttest -Dskywalking.collector.backend_service=127.0.0.1:11800 \
-jar /usr/local/SpringBootDemo-master/target/spring-boot-demo-0.0.1-SNAPSHOT.jar

说明:
-javaagent 指定agent包位置。这里我将包解压到/opt目录了,因此路径为:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar
-Dskywalking.agent.service_name 指定服务名
-Dskywalking.collector.backend_service 指定skywalking oap地址,由于在本机,地址为:127.0.0.1:11800

七、成果展示

备注:skywalking 部分是 bryant 进行编写和补充完善的。感谢 bryant。

共收到 2 条回复 时间 点赞

上传的 docker-compose 文件呢?

玄月指光 回复

哈哈哈,没有 docker-compose 文件。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册