首页 > 其他分享 >性能测试监控--Prometheus

性能测试监控--Prometheus

时间:2023-11-29 17:45:34浏览次数:44  
标签:node exporter -- prometheus Prometheus 监控

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

 

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

 

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

 


 

1 监控概述

1.1 什么是监控

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

 

典型互联网架构图

 

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

 

1.2 监控分类

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

 

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

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

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

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

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

 

2 监控神器Prometheus简介

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

 

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

 

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

 

Prometheus原理示意

 

2.1 Prometheus的优势

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

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

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

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

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

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

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

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

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

 

2.2 Prometheus的不足

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

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

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

 


小知识:

 

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

 

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


 

2.3 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展示。

 

2.4 Prometheus的数据模型

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

 

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

 

时间序列数据

 


小知识:

 

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

 

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


 

2.5 Prometheus的指标类型

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

 

计数器示例

 

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

 

仪表盘示例

 

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

 

直方图示例

 

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

 

摘要示例

 

3 Prometheus安装方法

3.1 Prometheus下载

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

 

下载命令:

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

 

3.2 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

 

执行结果示例

 

3.3 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

 

4 监控案例讲解

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

 

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

 

4.1 部署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

 

4.2 Promethues配置文件解析

 

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

 

Promethues配置文件

 

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

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

 

参数注解

 

5 监控数据展示

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

 

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

 

5.1 数据验证

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

 

打开Promethues服务发现

 

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

 

查看监控目标

 

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

 

查看监控目标数据

 

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

 

5.2 添加数据源

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

 

添加数据源

 

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

 

5.3 导入监控模板

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


作者:shawyen

来源:金蝶云社区

原文链接:https://vip.kingdee.com/article/302832414688994048?productLineId=29&isKnowledge=2

著作权归作者所有。未经允许禁止转载,如需转载请联系作者获得授权。

标签:node,exporter,--,prometheus,Prometheus,监控
From: https://www.cnblogs.com/gaoyanbing/p/17865449.html

相关文章

  • D2. Xor-Subsequence (hard version)
    D2.Xor-Subsequence(hardversion)Itisthehardversionoftheproblem.Theonlydifferenceisthatinthisversion$a_i\le10^9$.Youaregivenanarrayof$n$integers$a_0,a_1,a_2,\ldotsa_{n-1}$.Bryapwantstofindthelongestbeautifulsub......
  • Jmeter 中的公式与注意事项
    一、jmeter中的常用计算公式1.Ramp-Up时间:NumberofThreads(线程数) /Ramp-Up,表示每个请求间的间隔时间,当Ramp-Up为0时表示同时并发2.TPS=完成的事务数据/完成这些事务数所费时间(当使用了事务控制器);TPS=完成的请求数/完成这些请求数所费时间(未使用事务控制器)3.QPS= ......
  • 大型数据库实验八--Flink初级编程实践
    ......
  • 微前端 qiankun
    三个项目,一个管理端,两个微前端文档地址 https://qiankun.umijs.org/zh普通项目管理端安装qiankun   npmiqiankun-S管理端main.jsimportVuefrom'vue'importAppfrom'./App.vue'Vue.config.productionTip=false//引入qiankunimport{ registerMicroApps......
  • 每日总结20231129
    代码时间(包括上课)5h代码量(行):100行博客数量(篇):1篇相关事项:1、今天是周三,今天只有一节课,就是软件构造,这节课是实验课,这周是第十三周了,马上也迎来了这学期的末尾,大作业的题目也发布了。2、今天下午洗了洗澡,刷了刷抖音,然后把衣服洗了,又发了篇博客。3、今天晚上打算把大数据的最后......
  • MyBatis的缓存
    MyBatis的缓存机制能够有效地提高查询性能,提供两种缓存机制,分别是一级缓存(LocalCache)和二级缓存(ClobalCache)。一级缓存(LocalCache):范围:一级缓存是在SqlSession级别的缓存,即在同一个SqlSession中执行的SQL语句将会共享缓存。生命周期:一级缓存的生命周期与SqlSession的生命......
  • 绑定给类的方法,对象来调用;与绑定给对象的方法,类来调用的区别
    绑定给类的方法,类来调用,对象可以调用吗?#首先创建一个类,和绑定给类的方法indexclassMyClass:@classmethoddefindex(cls):print("helloindex")实例化对象:obj=MyClass()使用对象调用绑定给类的方法:obj.index()#返回hello......
  • SecureCRT汉化版安装、使用以及常见问题
    SecureCRT8.5是一款支持SSH(SSH1和SSH2)的终端仿真程序,适用于Windows、MAC和Linux的SecureCRT的客户端程序。简单来说,就是可以在Windows环境下登录UNIX或Linux服务器主机的软件。通过高级会话管理提高了工作效率,并提供了一系列节省时间和简化重复性任务的方法,为组织中的每个人......
  • React 受控和非受控组件
    无论你做什么,都要相信自己可以做到,因为你的潜力是无限的。把父组件的状态变成属性传递给子组件,子组件接受这个属性,听命于父组件。这个子组件就是叫做受控组件。在受控与非受控组件有两种理解方案,第一:狭义上的受控与非受控,就是我们在表单中的受控与非受控组件。第二:广义上的受控......
  • 学习笔记1 :Java基础
    1、JVM(1)Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境。(2)JVM包括:一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域(3)跨平台:JVM在执行字节码时,把字节码解释成具体平台上的机器指令执行。一套代码,一次编译,多平台运行。但是,不同平台需要不......