性能测试
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即可
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_tps | broker 每秒生产消息数量 |
rocketmq_broker_qps | broker 每秒消费消息数量 |
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.namesrvAddr | 127.0.0.1:9876 | MQ 集群的 nameSrv 地址 |
rocketmq.config.webTelemetryPath | /metrics | 指标搜集路径 |
server.port | 5557 | HTTP 服务暴露端口 |
以上的运行选项既可以在下载代码后在配置文件中更改,也可以通过命令行来设置。
编译出来的 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监控
# 性能场景问题分析