浅谈性能测试监控系统,做好关键指标的监控

news2024/11/17 6:39:01

随着业务的增长,服务器部署由单一架构分布式集群架构转变,性能测试过程中指标监控也由单一服务器集群服务器转变。

对于性能测试团队来说,需要建立起适用于测试的多机监控系统,以便后期顺利且高效地进行监控分析调优,从而保证整个测试过程的高可靠性。

因此,小编本期为大家讲讲如何搭建性能测试监控系统,做好关键指标的监控

监控概述

什么是监控

从技术角度看,监控是度量和管理技术系统的工具和过程。但远不止于此,监控可实现从系统和应用程序生成的指标到业务价值的转换。这些指标转换可度量用户体验,为业务和技术人员提供反馈,指示业务的工作状态以及系统的持续改进。

典型互联网架构图

上图为一个典型的互联网架构图。监控时也要着眼于多个层面,从整体架构去看,而不是去看具体某一个点,这样才能更接近问题的本质。

监控分类

监控一般可分为:业务级别监控、系统级别监控、网络监控、程序代码监控、日志监控、用户行为分析监控和其他种类监控。下述为常见监控类型的示例:

  • 业务监控:包含用户访问QPS、 DAU日活、访问状态(http code)、业务接口(登录、注册、聊天、上传、留言、短信、搜索等)、产品转化率、充值额度、用户投诉等等这些宏观概念。

  • 系统监控:主要是跟操作系统相关的基本监控项,如CPU、内存、硬盘、IO、TCP链接、流量等等,常用的系统监控工具有:Nagios-plugins、zabbix、prometheus等。

  • 网络监控:监控网络状态对互联网公司必不可少,但常常被忽略,如:内网之间(物理内网和虚拟内网)、外网的丢包率、延迟等。

  • 日志监控:监控中的重头戏,往往单独设计和搭建,全部种类的日志都有采集的需求(syslog、soft、网络设备、用户行为等),常用的日志管理工具有:Splunk-商业、ELK-开源等。

  • 程序监控:一般需要和开发人员配合,程序中嵌入各种接口以直接获取数据或者特制的日志格式。

监控神器Prometheus简介

Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,常见的Kubernetes容器管理系统通常会搭配Prometheus进行监控。

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

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

Prometheus原理示意

Prometheus的优势

1. 提供多维数据模型:由度量名称和键值标识的时间序列数据;

2. 内置时间序列数据库:TSDB;

3. 查询语言PromQL灵活,可以利用多维数据完成复杂查询;

4. 基于HTTP的Pull(拉取)方式采集时间序列数据(exporter);

5. 支持PushGateway组件收集数据;

6. 通过服务发现或静态配置发现目标;

7. 支持多种图形模式及仪表盘;

8. 支持作为数据源接入Grafana;

9. 更适合云环境的监控,尤其对K8S有着更好的支持。

Prometheus的不足

1. 因其数据采集的精度,如果集群数量太大,单点的监控就会出现性能瓶颈,目前尚不支持集群,只能workaround;

2. 学习成本太大,尤其是其独有的数学命令行(非常强大的同时又极其难学),中文资料极少,本身的各种数学模型的概念很复杂;

3. 对磁盘资源耗费较大,主要取决于监控的集群数量和监控项的多少及保存时间的长短。

小知识:

Prometheus是为短期监视和警报需求而设计的。默认情况下,它在本地数据库中仅保存15天的时间序列数据。

如果希望保留更长时间的数据,建议将所需的数据发送到远程的第三平台(如InfluxDB),Prometheus具有向外部数据存储写入的能力。

Prometheus的组成及架构

Prometheus架构图

从这个架构图,可以看出Prometheus的主要模块包含:Prometheus Server、Exporters、Pushgateway、PromQL、Alertmanager、Web UI等。下述为各个组件功能的简单介绍:

  • Prometheus Server:定期从静态配置的 targets 或者服务发现(主要是DNS、consul、k8s、mesos等)的targets拉取数据。

  • Exporters:负责向Prometheus Server做数据汇报。不同的数据汇报由不同的Exporters实现,比如监控主机有node-exporters,MySQL有MySQL server exporter,Nginx有nginx-vts-exporter。

  • Pushgatewaypull(被动)模式要求被监控对象能够提供Exporter服务给Prometheus。该模式为官方推荐,但对于某些情况下,比如我们将Prometheus搭建在外网去监控内网应用的情况下,由于内网有诸多安全限制使得无法穿透,这时就要借助push(主动)模式来解决问题。

    push模式需要APP主动推送数据到Pushgateway,Prometheus监控Pushgateway来获取数据。

  • Alertmanager:实现Prometheus的告警功能。

  • WebUI:主要通过Grafana来实现Web UI展示。

Prometheus的数据模型

Prometheus将所有数据存储为时间序列:具有相同度量名称以及标签属于同一个指标。

每个时间序列都由Metric(度量)标准名称和一组键值对(也称为标签)唯一标识,格式为:{=,...}。

时间序列数据

小知识:

Metric(度量)是对软件或者硬件组件属性的度量。为了使度量有用,我们跟踪它的状态,通常随时间记录数据点,这些数据点称为观测值

观测值由值、时间戳以及有描述观察的一系列属性(如源或标记)组成。观测值的集合称为时间序列。

Prometheus的指标类型

Counter(计数器):递增的计数器,代表一种样本数据单调递增的指标,即只增不减,除非监控系统发生了重置。例如,你可以使用Counter类型的指标来表示服务的请求数、已完成的任务数、错误发生的次数等。

计数器示例

Gauge(仪表盘):可以任意变化的数值,通常用于像温度或者内存使用率这种指标数据,也可以表示能随时增加或减少的“总数”,例如:当前并发请求的数量。

仪表盘示例

Histogram(直方图):直方图是对数据分布情况的图形表示,由一系列高度不等的长条图(bar)或线段表示。其对一段时间范围内的数据进行采样,并对所有数值求和、统计数据量,用于展示单个测度得知的分布。

直方图示例

Summary(摘要):与Histogram类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应时间大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。

摘要示例

Prometheus安装方法

Prometheus下载

下载地址:https://prometheus.io/download/

下载命令:

wget https://github.com/prometheus/prometheus/releases/download/v2.21.0/prometheus-2.21.0.linux-amd64.tar.gz

Prometheus安装

解压命令如下:

tar  -zxvf  prometheus-2.21.0.linux-amd64.tar.gz

解压得到以下文件,其中prometheus为二进制可执行文件。

执行结果示例

移动文件至usr/local/目录,命令如下:

mv  prometheus-2.21.0.linux-amd64  /usr/local/prometheus-2.21.0.linux-amd64

软连接命令如下:

ln  -sv  /usr/local/prometheus-2.21.0.linux-amd64  /usr/local/ Prometheus

执行结果示例

Prometheus程序启动

解压后得到prometheus二进制文件(默认配置文件),直接执行即可。启动命令如下:

./prometheus --config.file=prometheus.yml &

查看程序进程及端口号,如下图所示:

程序进程及端口号

启动参数如下:

/usr/local/prometheus/Prometheus
--web.listen-adds=0.0.0.0:9090
--web.read-timeout=5m
--web.max-connections=10
--storage.tsdb.retention=15d
--storage.tsdb.path=data/
--query.max-concurrency-20
--query.timeout-2m

以下为部分参数的解释:

  • --storage.tsdb.retention=15d:用于设置数据保留于内存和磁盘的时间。保留时间太长,硬盘内存吃不消,太短则难以查询历史数据。一般而言,企业中常设置为15天。

  • --storage.tsdb.path="data/":监控数据的存储路径。

  • --web.read-timeout=5m:请求链接的最大等待时间,防止太多空闲链接占用资源。

  • --web.max-connections=10:用于设置最大链接数。

小知识:

1. 可利用Prometheus提供的热更新方法实现配置文件的重新加载,相关命令如下:

kill –HUP  4100  //将某个进程挂起
ps -ef |grep prometheus   //查看Promethues的进程是否在运行

2. 配置文件语法检测的相关命令如下:

./promtool check config prometheus.yml

监控案例讲解

Prometheus使用Exporter工具来暴露主机和应用程序上的指标,官方提供的有node_exporter、mysql_exporter等Exporter 安装包,第三方Exporter 也提供了redis、kafka等中间件的tar包。

下文监控案例以node_exporter作为示范。

部署Agent(node_exporter)

node_exporter为使用Go语言编写的收集器, 用于监控Linux系统,收集Linux资源指标数据。部署方法如下:

步骤一:安装node_exporter。

官方下载地址:https://prometheus.io/download/,从该链接下载node_exporter-1.0.1.linux-amd64.tar.gz,安装命令如下:

tar  -xzvf  node_exporter-1.0.1.linux-amd64.tar.gz
mv  node_exporter-1.0.1.linux-amd64  /usr/local/
ln   -sv  /usr/local/node_exporter-1.0.1.linux-amd64  /usr/local/ node_exporter

解压得到node_exporter-1.0.1.linux-amd64目录,包含了二进制文件node_exporter,执行前需要添加可执行权限

安装node_exporter

步骤二:启动node_exporter。

添加可执行权限,命令如下:

chmod  +x  node_exporter

后台运行服务,命令如下:

nohup ./node_exporter &

运行状态如下图所示:

运行node_exporter

Promethues配置文件解析

Promethues的配置文件如下图所示:

Promethues配置文件

从上图可看出,配置文件promethues包括四大配置模块,分别是:global、alerting、rule_files、scrape_configs,分别表示全局参数模块配置、告警模块配置、规则模块配置、抓取目标模块配置

各模块的参数注解如下图所示:

参数注解

监控数据展示

为了可视化监控数据,本次使用Grafana作为数据展示工具(暂不涉及告警部分)。关于Grafana的详细安装方法,可查看文章“手把手教你打造Jmeter压测可视化监控平台”。

使用Grafana可视化监控数据时,需要先配置数据的来源。数据来源有多种类型:Promethues、InfluxDB、MySQL等,根据采集数据存储的数据库类型进行选择。具体操作步骤如下:

数据验证

1. 访问Promethues管理界面:http://{ip}:9090/,打开Promethues服务发现,操作方法如下图所示:

打开Promethues服务发现

2. 查看监控目标,操作方法如下图所示:

查看监控目标

3. 查看监控目标数据:点击Endpoint列下方地址,查看具体监控数据,如下图所示:

查看监控目标数据

上述操作,表示被监控系统已被纳入到Promethues当中。

添加数据源

访问http://{ip}3000/,打开Grafana管理界面,按照下述步骤添加数据源:

添加数据源

Grafana支持多种数据源,这里选择Promethues。

导入监控模板

通过官网https://grafana.com/grafana/dashboards, 可查找不同类别的dashboards,优先选择评分较高且下载量较多的。

监控模板

在线导入Dashboards(看板),操作方法如下图所示:

导入Dashboards(看板)

选择数据来源,如下图所示:

选择数据来源

查看监控数据

完成数据源和监控模板的导入后,即可查看监控数据,操作方法如下图所示:

查看监控数据

最终的监控数据看板,如下图所示:

监控数据看板

小结

服务资源监控包含中间件监控、压测数据监控、DB监控、日志监控、安全监控、API监控、业务控、客户监控、链路监控、服务资源监控等,文章所讲的只是服务资源监控的一小部分。

只有不断完善监控体系,才能精准地找出系统性能存在的瓶颈与风险,用更少的资源提供更好的服务。

划重点

1. 监控是度量和管理技术系统的工具和过程,且可实现从系统和应用程序生成的指标到业务价值的转换;

2. 监控神器Prometheus是一套开源的监控&报警&时间序列数据库的组合,其基本原理是通过HTTP协议周期性抓取被监控组件的状态;

3. Prometheus的主要模块包含:Prometheus Server、Exporters、 Pushgateway、PromQL、Alertmanager、Web UI等;

4. Prometheus将所有数据存储为时间序列:具有相同度量名称以及标签属于同一个指标。


绵薄之力【资源分享】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源免费分享~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java程序员拿下高薪offer需要具备哪些能力?这份Java面试专题汇总助你拿下心仪offer!!

背景今天这篇文章的灵感来自一个粉丝的亲身经历,想必也是求职浪潮中很多朋友的经历,内卷大环境找不到满意工作的人太多了,之前也有很多人问过我怎么才能找到不错的工作,甚至是进大厂,所以今天就借这位粉丝的经历来聊聊…

对JAVA 中“指针“理解

对于Java中的指针,以下典型案例会让你对指针的理解更加深刻。 首先对于: 系统自动分配对应空间储存数字 1,这个空间被变量名称b所指向即: b ——> 1 变量名称 空间 明…

linux下yum安装consul实现动态配置管理

一、yum安装consul #安装yum-utils yum install -y yum-utils#配置consul的下载仓库 yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo#必须上面步骤,不然会找不到仓库 yum -y install consul#查看版本 consul -v 二、启动…

基于深度学习的三维重建(二):pytorch的简单操作及DataLoader、Dataset类简介

目录 1.numpy举几个demo 2.pytorch基础 2.1 tensor介绍 3.简单版DataSet & DataLoader 4.模型构建 5.深度学习模型demo:手写文字识别 5.1 构建网络 5.2 前向传播过程 5.3 训练部分 5.4 测试部分 5.5 模型导出 5.6 模型测试 6.pytorch可视化工具ten…

MySQL数据库调优————索引数据结构

B-TREE B-TREE数据结构 B-TREE特性 根节点的子结点个数2 < X < m&#xff0c;m是树的阶 假设m 3&#xff0c;则根节点可有2-3个孩子 中间节点的子节点个数m/2 < y < m 假设m 3&#xff0c;中间节点至少有2个孩子&#xff0c;最多3个孩子 每个中间节点包含n个关…

《MySql学习》 行锁对业务的影响

一. 行锁介绍 行锁由各个存储引擎分别实现&#xff0c;MyISAM存储引擎是不支持行锁的&#xff0c;这也是MySQL使用InnoDB作为默认存储引擎的一个重要原因&#xff0c;锁更细的InnoDB能支持更多的并发业务。但需要注意的是&#xff0c;行锁在InnoDB的实现是给索引加的锁&#x…

智慧养殖无线通讯解决方案

一、方案概述农植畜禽/水产养殖智能监控系统可以在远端设备实现对如温度、湿度、气体浓度、光照度等传感设备的自动调节与控制功能。管理者可随时通过电脑了解养殖场各环节的运行状况&#xff0c;并根据养殖现场内外环境因子的变化情况将命令下发到现场执行设备。为动植物营造舒…

docker-compose安装SonarQube

前言SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码&#xff0c; 潜在bug&#xff0c; 代码规范&#xff0c;安全性漏洞等问题&#xff0c; 并通过SonarQube web UI展示出来。一、docker-compose配置#v…

【Python】编写代码实现指定下标值顺序进行正序和倒序排序算法编程

&#x1f389;&#x1f389; 在本次python文章中&#xff0c;主要通过定义一个排序方法&#xff0c;实现一组数列能够按照另一组数列指定的位置进行重新排序输出&#xff0c;默认正序排序&#xff0c;可通过True表示逆序输出 目录1、知识点2、数列和元组1&#xff09;错误遍历方…

全网多种方式解决Knife4j文档请求异常

文章目录1. 复现问题2. 分析问题3. 解决问题4. 其他方法解决此异常5. 其他说明1. 复现问题 今天在本地启动项目后&#xff0c;刷新Knife4j接口文档&#xff0c;却报出如下错误&#xff1a; 即Knife4j文档请求异常。 2. 分析问题 报出Knife4j文档请求异常错误时&#xff0c;赶…

生活不一定很酷,但是一定要全力以赴

题记&#xff1a;努力是为了让自己不平庸 当看到这个话题“竞赛那些事”&#xff0c;我还是有所触动的&#xff0c;我本身就是一个不喜欢安逸&#xff0c;喜欢折腾的人&#xff0c;纵使不能把日子过成诗&#xff0c;也要折腾成向往的样子。 我的记忆在脑海中不停翻着页&#x…

黑马redis学习记录:分布式锁

一、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xff0c;让程序串行…

Linux_基本权限

Linux入门第二篇已送达&#xff01; Linux_基本权限shell外壳权限Linux的用户分类角色划分Linux的文件文件类型查看权限目录的权限默认权限粘滞位shell外壳 为了保护操作系统&#xff0c;用户的指令不能由操作系统直接进行执行&#xff0c;需要一个中间者&#xff0c;比如Linu…

MySQL优化篇-MySQL压力测试

备注:测试数据库版本为MySQL 8.0 MySQL压力测试概述 为什么压力测试很重要&#xff1f;因为压力测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。压力测试可以观察系统在不同压力下的行为&#xff0c;评估系统的容量&#xff0c;掌握哪些是重要的变化…

基于ThinkPHP6.0+Vue+uni-app的多商户商城系统好用吗?

likeshop多商户商城系统适用于B2B2C、多商户、商家入驻、平台商城场景。完美契合平台自营联营加盟等多种经营方式使用&#xff0c;系统拥有丰富的营销玩法&#xff0c;强大的分销能力&#xff0c;支持官方旗舰店&#xff0c;商家入驻&#xff0c;平台抽佣商家独立结算&#xff…

重生之我是赏金猎人-SRC漏洞挖掘(八)-记一次移花接木的GetShell

0x00&#xff1a;前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎亲们点个star 作者&#xff1a;RGM78sec 某天测厂商业务时&#xff0c;发现其中有一个提供音乐播放业务的资产&#xff0c;正好里面有我想听的歌&#xff0c;于是就有了这篇文章 0x01&#xff1a;…

天翼云服务器如何限制端口仅限部分ip地址访问

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 最近买了个服务器&#xff0c;没错&#xff0c;是天翼云的。 客户没有钱&#xff0c;买大厂的太贵舍不得&#xff0c;那就买个普通的吧&#xff0c;经媒人介绍&#xff0c;觉得天翼…

vue小案例

vue小案例 组件化编码流程 1.拆分静态组件&#xff0c;按功能点拆分 2.实现动态组件 3.实现交互 文章目录vue小案例组件化编码流程1.父组件给子组件传值2.通过APP组件给子组件传值。3.案例实现4.项目小细节1.父组件给子组件传值 父组件给子组件传值 1.在父组件中写好要传的值&a…

5min完成linux环境Jenkins的安装

5min搞定linux环境Jenkins的安装安装Jenkinsstep1: 使用wget 命令下载Jenkinsstep2、创建Jenkins日志目录并运行jekinsstep3、访问jenkins并解锁jenkins&#xff0c;安装插件以及创建管理员用户step4、到此&#xff0c;就完成了Finish、以上步骤中遇到的问题1、 jenkins启动不了…

Python爬虫(5)-selenium用显式等待、隐式等待、强制等待,解决反复爬取网页时无法定位元素问题

之前的文章有关于更多操作方式详细解答&#xff0c;本篇基于前面的知识点进行操作&#xff0c;如果不了解可以先看之前的文章 Python爬虫&#xff08;1&#xff09;一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫&#xff08;2&#xff09;-Selenium控制浏览…