性能测试

Nginx ,Redis ,mysql ,ES + kibana,RabbitMQ, kafka + zookeeper , rocketmq, MongoDB Memcached wireshark ,HLS等常用媒体流协议,

全链路系统pinPoint、SkyWalking, Nmon、Nagios、prometheus+grafana,visualvm 监控工具

对jvm,能够解析GC日志, 线程分析, 了解JVM内存管理机制、监控和调优

熟悉Android系统框架,对CPU、GPU调度,内存、进程管理,存储性能,手机老化等手机软硬件运行机制、工作原理有深入了解

熟悉高可用,负载均衡的应用的测试

监控平台prometheus+grafana

介绍Prometheus

Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。

输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。

与其他监控系统相比,Prometheus的主要特点是:

一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
一种灵活的查询语言。
不依赖分布式存储,单个服务器节点。
时间集合通过HTTP上的PULL模型进行。
通过中间网关支持推送时间。
通过服务发现或静态配置发现目标。
多种模式的图形和仪表板支持。

Prometheus架构概览

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vUFmA76E-1647763839396)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106140717759.png)]

它的服务过程是这样的Prometheus daemon负责定时去目标上抓取metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。

Prometheus:支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。

Alertmanager:是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

PushGateway:这个组件是支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

Prometheus的数据模型

Prometheus从根本上所有的存储都是按时间序列去实现的,相同的metrics(指标名称) 和label(一个或多个标签) 组成一条时间序列,不同的label表示不同的时间序列。为了支持一些查询,有时还会临时产生一些时间序列存储。

metrics name&label指标名称和标签

每条时间序列是由唯一的”指标名称”和一组”标签(key=value)”的形式组成。

指标名称:一般是给监测对像起一名字,例如http_requests_total这样,它有一些命名规则,可以包字母数字之类的的。通常是以应用名称开头监测对像数值类型单位这样。例如:push_total、userlogin_mysql_duration_seconds、app_memory_usage_bytes。

标签:就是对一条时间序列不同维度的识别了,例如一个http请求用的是POST还是GET,它的endpoint是什么,这时候就要用标签去标记了。最终形成的标识便是这样了:http_requests_total{method=”POST”,endpoint=”/api/tracks”}。

Prometheus四种数据类型

Counter

Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。

例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒后抓取http_response_total{method=”GET”,endpoint=”/api/tracks”} 100。

Gauge

Gauge常规数值,例如 温度变化、内存使用变化。可变大,可变小。重启进程后,会被重置。

例如: memory_usage_bytes{host=”master-01″} 100 < 抓取值、memory_usage_bytes{host=”master-01″} 30、memory_usage_bytes{host=”master-01″} 50、memory_usage_bytes{host=”master-01″} 80 < 抓取值。

Histogram

Histogram(直方图)可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供count和sum全部值的功能。

例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。

Summary

Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。

例如:count=7次,sum=7次的值求值。

它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。

Exporter

​ Exporter 将监控数据采集的端点通过 HTTP 服务的形式暴露给 Prometheus Server,Prometheus Server 通过访问该 Exporter 提供的 Endpoint 端点,即可获取到需要采集的监控数据。RocketMQ-Exporter 就是这样一个 Exporter,它首先从 RocketMQ 集群采集数据,然后借助 Prometheus 提供的第三方客户端库将采集的数据规范化成符合 Prometheus 系统要求的数据,Prometheus 定时去从 Exporter 拉取数据即可

安装运行Prometheus(二进制版)

介绍如何使用Prometheus和Grafana对MySQL服务器性能进行监控

#用到了以下两个exporter:
node_exporter – 用于机器系统数据收集 (port:9100)
mysqld_exporter – 用于MySQL服务器数据收集 (port:9104)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hPgWyTUV-1647763839400)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106143127748.png)]

安装Prometheus

1:首先安装GO
[root@localhost ~]# yum install go
[root@localhost ~]#  go version
go version go1.15.7 linux/amd64
2:下载安装Prometheus

(https://prometheus.io/download/)

$ wget https://github.com/prometheus/prometheus/releases/download/v2.3.0/prometheus-2.24.1.linux-amd64.tar.gz
$ tar zxvf prometheus-2.24.1.linux-amd64 -C /usr/local/
$ ln -sv prometheus-2.24.1.linux-amd64/ /usr/local/prometheus
$ cd /usr/local/prometheus
**3: 修改配置文件prometheus.yml **

(替换你要监控的IP地址)

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    static_configs:
    - targets: ['192.168.0.200:9090']
      labels:
        instance: prometheus
  - job_name: 'linux'
    static_configs:
    - targets: ['192.168.0.200:9100']
      labels:
        instance: db
  - job_name: 'mysql'
    static_configs:
    #数据库主机的IP,端口则是对应的 mysqld_exporter的监听端口
    - targets: ['192.168.0.200:9104']
      labels:
        instance: 192.168.0.200
  - job_name: 'java' # (java-jvm)
    scrape_interval: 30s
    static_configs:
    - targets: ['192.168.0.200:3010']

192.168.0.200 是我们数据库主机的IP,端口则是对应的exporter的监听端口

4: 启动Prometheus
cd /usr/local/prometheus
nohup ./prometheus --config.file=prometheus.yml &
level=info ts=2021-11-06T06:49:17.279Z caller=main.go:326 msg="No time or size retention was set so using the default time retention" duration=15d
level=info ts=2021-11-06T06:49:17.295Z caller=main.go:364 msg="Starting Prometheus" version="(version=2.24.1, branch=HEAD, revision=e4487274853c587717006eeda8804e597d120340)"
level=info ts=2021-11-06T06:49:17.295Z caller=main.go:371 fd_limits="(soft=65536, hard=65536)"
level=info ts=2021-11-06T06:49:17.295Z caller=main.go:372 vm_limits="(soft=unlimited, hard=unlimited)"
level=info ts=2021-11-06T06:49:17.304Z caller=web.go:530 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2021-11-06T06:49:17.306Z caller=main.go:738 msg="Starting TSDB ..."

#重启prometheus
#/etc/init.d/prometheus-server restart

Prometheus内置了一个web界面,我们可通过http://monitor_host:9090进行访问 (http://192.168.0.200:9090)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0k97ZNh8-1647763839401)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106145414664.png)]

在Status->Targets页面下,我们可以看到我们配置的两个Target,它们的State为DOWN

5:下载并安装exporter

node_exporter – 用于机器系统数据收集 (port:9100)
mysqld_exporter – 用于MySQL服务器数据收集 (port:9104)

搜索需要的exporter:

https://github.com/prometheus/?q=exporter&type=&language=&sort=

$ wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/ node_exporter-1.0.1.linux-amd64.tar.gz
$ wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

安装运行node_exporter

https://grafana.com/api/dashboards/8919/revisions/24/download (导入 linux node 仪表盘)

$ tar xvf node_exporter-1.0.1.linux-amd64.tar.gz -C /usr/local/
$ cd /usr/local/node_exporter
$ nohup ./node_exporter &
level=info ts=2021-11-06T07:06:27.290Z caller=node_exporter.go:191 msg="Listening on" address=:9100
level=info ts=2021-11-06T07:06:27.290Z caller=tls_config.go:170 msg="TLS is disabled and it cannot be enabled on the fly." http2=false

安装运行mysqld_exporter

https://grafana.com/grafana/dashboards/7362 (导入 Mysql仪表盘)

mysqld_exporter需要连接到Mysql,所以需要Mysql的权限,我们先为它创建用户并赋予所需的权限.

mysql> grant all on cactidb.* to dbuser@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
解决方法:
先刷新一下权限表。
mysql> flush privileges;
CREATE USER 'mysql_monitor'@'192.168.0.200' IDENDIFIED BY 'mysql_monitor';
mysql> GRANT REPLICATION CLIENT,PROCESS ON *.* TO 'mysql_monitor'@'192.168.0.200' identified by 'mysql_monitor';
mysql> GRANT SELECT ON *.* TO 'mysql_monitor'@'192.168.0.200';

创建.my.cnf文件并运行mysqld_exporter

$ cat /usr/local/mysqld_exporter/.my.cnf
[client]
user=mysql_monitor
password=mysql_monitor
ip=192.168.0.200
port=3306

$ tar xvf mysqld_exporter-0.10.0.linux-amd64.tar.gz -C /usr/local/
$ cd /usr/local/mysqld_exporter
[root@localhost mysqld_exporter]# nohup ./mysqld_exporter --config.my-cnf="./.my.cnf" &
INFO[0000] Starting mysqld_exporter (version=0.12.1, branch=HEAD, revision=48667bf7c3b438b5e93b259f3d17b70a7c9aff96)  source="mysqld_exporter.go:257"
INFO[0000] Build context (go=go1.12.7, user=root@0b3e56a7bc0a, date=20190729-12:35:58)  source="mysqld_exporter.go:258"
INFO[0000] Enabled scrapers:                             source="mysqld_exporter.go:269"
INFO[0000] Listening on :9104                            source="mysqld_exporter.go:283"

安装运行Grafana

Grafana安装配置

$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-7.3.7-1.x86_64.rpm
$ sudo yum localinstall grafana-7.3.7-1.x86_64.rpm
查看配置文件grafana.ini

/etc/grafana/grafana.ini , 修改dashboards.json段落下两个参数的值

[dashboards]
# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
;versions_to_keep = 20
default_home_dashboard_path = /var/lib/grafana/dashboards
安装仪表盘(Percona提供)
$ git clone https://github.com/percona/grafana-dashboards.git
$ cp -r grafana-dashboards/dashboards /var/lib/grafana

运行以下命令为Grafana打个补丁,不然图表不能正常显示:

$ sed -i 's/expr=\(.\)\.replace(\(.\)\.expr,\(.\)\.scopedVars\(.*\)var \(.\)=\(.\)\.interval/expr=\1.replace(\2.expr,\3.scopedVars\4var \5=\1.replace(\6.interval, \3.scopedVars)/' /usr/share/grafana/public/app/plugins/datasource/prometheus/datasource.js
$ sed -i 's/,range_input/.replace(\/"{\/g,"\\"").replace(\/}"\/g,"\\""),range_input/; s/step_input:""/step_input:this.target.step/' /usr/share/grafana/public/app/plugins/datasource/prometheus/query_ctrl.js

运行Grafana服务

$ systemctl daemon-reload
$ systemctl enable grafana-server
$ systemctl start grafana-server
$ systemctl status grafana-server

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G6bbNW1F-1647763839402)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106161102751.png)]

访问Grafana网页界面

通过http://monitor_host:3000访问Grafana网页界面(默认登陆帐号/密码为admin/admin) http://192.168.0.200:3000 修改为:admin / 123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWn25yEU-1647763839403)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106163013961.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z0kKhtkp-1647763839403)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106162941008.png)]

压测时指标监控

压测执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNo0vzOK-1647763839404)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106164714634.png)]

系统命令监控

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItIuIaV0-1647763839405)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106164620522.png)]

应用服务器主机监控

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wOjyjw21-1647763839405)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106164859953.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5MgqpxJp-1647763839406)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106164930563.png)]

mysql服务器指标监控

https://grafana.com/grafana/dashboards/7362 (导入 Mysql仪表盘)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T89aEH3v-1647763839407)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106165043855.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7SSZs3wE-1647763839407)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106165127282.png)]

JVM监控

JMX Exporter下载

https://github.com/prometheus/jmx_exporter /jmx_prometheus_javaagent-0.16.1.jar

它是Prometheus官方组件,作为一个JAVA Agent来提供本地JVM的metrics,并通过http暴露出来。这也是官方推荐的一种方式,可以获取进程的信息,比如CPU和内存使用情况。Jmx_exporter是以代理的形式收集目标应用的jmx指标,这样做的好处在于无需对目标应用做任何的改动。
运行JMX exporter的方式:

java -javaagent:/usr/local/jmx_exporter/jmx_prometheus_javaagent-0.12.0.jar=3010:/usr/local/jmx_exporter/simple-config.yml  -jar springboot.jar

下载 jmx_prometheus_javaagent-0.16.1.jar 目前最新版是0.16.1,下载链接为:

https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.1/jmx_prometheus_javaagent-0.16.1.jar

JMX Exporter配置

新建配置文件simple-config.yml

[root@localhost jmx_exporter]# cd /usr/local/jmx_exporter/
[root@localhost jmx_exporter]# vi simple-config.yml
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
blacklistObjectNames: []
rules:
  - pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'
    name: os_$1_bytes
    type: GAUGE
    attrNameSnakeCase: true
  - pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
    name: os_$1
    type: GAUGE
    attrNameSnakeCase: true

使用JMX Exporter插件收集数据,需要改成这样:

修改prometheus.yml

修改配置文件,增加一个job_name

最后一行增加

#cd /usr/local/prometheus
  - job_name: 'java'
    scrape_interval: 30s
    static_configs:
    - targets: ['192.168.0.200:3010']

重启prometheus

/etc/init.d/prometheus-server restart
#或者重启prometheus

启动java应用

#注意:3010是代理端口,可以随意指定
nohup java   -javaagent:/usr/local/jmx_exporter/jmx_prometheus_javaagent-0.16.1.jar=3010:/usr/local/jmx_exporter/simple-config.yml  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:gc.log -Dcom.sun.management.jmxremote.port=6969 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar springboot_demo-0.0.1-SNAPSHOT.jar &

查看应用是否启动:

http://192.168.0.200:9090/classic/targets

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z5NpkJzJ-1647763839408)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106184901787.png)]

导入Dashboard(jvm)

模板下载链接为:

https://grafana.com/grafana/dashboards/8563/revisions

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HqJ8jVDq-1647763839409)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106184501838.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ucVcafFt-1647763839410)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106184539319.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PXODPiQp-1647763839410)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211106184610493.png)]

Micrometer定制收集指标

Micrometer则比较灵活,可以定制自己想要的指标,而不仅仅是JVM,还可以是自己应用的指标

可以到这篇文章了解一下: https://www.cnblogs.com/rolandlee/p/11343848.html

这里使用Grafana模板是4701 : https://grafana.com/grafana/dashboards/4701

添加Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.2.2</version>
</dependency>
<dependency>
    <groupId>io.github.mweirauch</groupId>
    <artifactId>micrometer-jvm-extras</artifactId>
    <version>0.2.0</version>
</dependency>

application.properties配置

(注意,这里没有配置management.endpoints.web.base-path,所以默认的请求路径是/usr/local/prometheus,而Promethus的路径 是/usr/local/prometheusprometheus)

server.port=8699  
#spring.application.name=JVM-micrometer
management.metrics.tags.application=JVM-micrometer
#prometheus配置
management.metrics.export.prometheus.enabled=true
management.metrics.export.prometheus.step=1ms
management.metrics.export.prometheus.descriptions=true

management.endpoint.prometheus.enabled=true
management.endpoints.web.exposure.include=health,info,env,prometheus,metrics,httptrace,threaddump,heapdump,springmetrics

配置Prometheus的prometheus.yml

- job_name: 'actuator-demo'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
metrics_path: '/usr/local/prometheus'
static_configs:
- targets: ['localhost:8699'] 

Grafana上Import4701即可

img

RocketMQ监控

当前 RocketMQ Exporter 已被 Prometheus 官方收录,其地址为 https://github.com/apache/rocketmq-exporter

RocketMQ-Exporter 的具体实现:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IoDKG8ck-1647763839412)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211107142559298.png)]

  • 监控指标
监控指标含义
rocketmq_broker_tpsbroker 每秒生产消息数量
rocketmq_broker_qpsbroker 每秒消费消息数量
rocketmq_producer_tps某个 topic 每秒生产的消息数量
rocketmq_producer_put_size某个 topic 每秒生产的消息大小 (字节)
rocketmq_producer_offset某个 topic 的生产消息的进度
rocketmq_consumer_tps某个消费组每秒消费的消息数量
rocketmq_consumer_get_size某个消费组每秒消费的消息大小 (字节)
rocketmq_consumer_offset某个消费组的消费消息的进度
rocketmq_group_get_latency_by_storetime某个消费组的消费延时时间
rocketmq_message_accumulation(rocketmq_producer_offset-rocketmq_consumer_offset)消息堆积量(生产进度 - 消费进度)

rocketmq_message_accumulation 是一个聚合指标,需要根据其它上报指标聚合生成

  • 告警指标
告警指标含义
sum(rocketmq_producer_tps) by (cluster) >= 10集群发送 tps 太高
sum(rocketmq_producer_tps) by (cluster) < 1集群发送 tps 太低
sum(rocketmq_consumer_tps) by (cluster) >= 10集群消费 tps 太高
sum(rocketmq_consumer_tps) by (cluster) < 1集群消费 tps 太低
rocketmq_group_get_latency_by_storetime > 1000集群消费延时告警
rocketmq_message_accumulation > value消费堆积告警

RocketMQ-Exporter 使用示例

1 启动 NameServer 和 Broker

要验证 RocketMQ 的 Spring-Boot 客户端,首先要确保 RocketMQ 服务正确的下载并启动。可以参考 RocketMQ 主站的快速开始来进行操作。确保启动 NameServer 和 Broker 已经正确启动。

2 编译 RocketMQ-Exporter

用户当前使用,需要自行下载 git 源码编译

git clone https://github.com/apache/rocketmq-exporter 
cd /usr/local/rocketmq-exporter/rocketmq-exporter-master
mvn clean install  #或者在windows下面编译后提取jar包

3 配置和运行

RocketMQ-Exporter 有如下的运行选项

选项默认值含义
rocketmq.config.namesrvAddr127.0.0.1:9876MQ 集群的 nameSrv 地址
rocketmq.config.webTelemetryPath/metrics指标搜集路径
server.port5557HTTP 服务暴露端口

以上的运行选项既可以在下载代码后在配置文件中更改,也可以通过命令行来设置。
编译出来的 jar 包就叫 rocketmq-exporter-0.0.1-SNAPSHOT.jar,可以通过如下的方式来运行。

#\rocketmq-exporter-master\src\main\resources\rocketmq-exporter\applicatin.yml文件
server:
  port: 5557
spring:
  application:
    name: rocketmq-exporter
  http:
    encoding:
      charset: UTF-8
      enabled: true
      force: true
logging:
  config: classpath:logback.xml
rocketmq:
  config:
    webTelemetryPath: /metrics
    rocketmqVersion: 4_8_0
    namesrvAddr: 127.0.0.1:9876
    enableCollect: true
# cd  /usr/local/rocketmq-exporter/rocketmq-exporter-master/target
java -jar rocketmq-exporter-0.0.1-SNAPSHOT.jar [--rocketmq.config.namesrvAddr="127.0.0.1:9876" ...]
[root@localhost target]# nohup java -jar rocketmq-exporter-0.0.2-SNAPSHOT.jar &
[2021-11-07 15:06:48.750]  INFO cluster name= DefaultCluster, broker name = [localhost.localdomain]
broker name = localhost.localdomain, master broker address= 192.168.0.200:10911
[2021-11-07 15:06:48.750]  INFO MetricsCollectTask init finished....cost:455
[2021-11-07 15:06:49.878]  INFO Starting ProtocolHandler ["http-nio-5557"]
[2021-11-07 15:06:49.972]  INFO Tomcat started on port(s): 5557 (http) with context path ''
[2021-11-07 15:06:49.982]  INFO Started RocketMQExporterApplication in 7.795 seconds (JVM running for 9.238)
#prometheus.yml
- job_name: 'rocketmq'
scrape_interval: 30s
static_configs:
- targets: ['192.168.0.200:5557']

#重启prometheus
#[root@localhost prometheus]# nohup ./prometheus --config.file=prometheus.yml &

http://192.168.0.200:9090/targets

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lAoW08C-1647763839413)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211107152521736.png)]

Grafana导入 rockemq面板:

地址为 https://grafana.com/dashboards/10477/revisions

测试:rocketmq 生成发送消息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBTN6X3o-1647763839413)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211107153259953.png)]

测试 rocketmq 消费消息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RE7IdcqG-1647763839414)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211107153512621.png)]

查看 rockemq: dashboard:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eL9zE3ED-1647763839415)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211107153637183.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKUuzI2c-1647763839416)(C:\Users\d\AppData\Roaming\Typora\typora-user-images\image-20211107153708641.png)]

Redis监控

性能场景问题分析

q’
scrape_interval: 30s
static_configs:

  • targets: [‘192.168.0.200:5557’]

#重启prometheus
#[root@localhost prometheus]# nohup ./prometheus --config.file=prometheus.yml &


http://192.168.0.200:9090/targets

[外链图片转存中...(img-5lAoW08C-1647763839413)]

Grafana导入 rockemq面板:

地址为 https://grafana.com/dashboards/10477/revisions

测试:rocketmq 生成发送消息

[外链图片转存中...(img-dBTN6X3o-1647763839413)]

测试 rocketmq 消费消息

[外链图片转存中...(img-RE7IdcqG-1647763839414)]

查看 rockemq: dashboard:

[外链图片转存中...(img-eL9zE3ED-1647763839415)]

[外链图片转存中...(img-cKUuzI2c-1647763839416)]



## Redis监控





# 性能场景问题分析









Logo

更多推荐