我们在面试测试工程师的过程中都会被问到怎么开展性能测试,一部分同学会回答通过loadrunner、jmeter这些工具去执行压测,查看qps、响应时间等指标来衡量压测结果,另一部分同学可能会回答出通过一些top的命令来分析。然而,在我们的真实压测过程之中,使用命令在服务器上监控时往往会遇到一些问题,例如环境中有很多台机器,要监控的服务器资源项很多,在这个时候再通过命令行去进行监控可能会出现很多的遗漏。那么我们该如何解决这个问题呢?
这个时候不得不拿出来一个更专业的监控利器来帮助我们更好的去做性能测试,这个利器就是Prometheus。Prometheus是由SoundCloud使用Go语言开发的开源监控报警系统和时序列数据库(TSDB)。
下面我们来详细介绍一下
1
Prometheus特征
多维数据模型
PromQL
单服务节点完全自主,不依赖分布式存储
通过Http的pull方式进行数据拉取
可以通过网关进行时序列数据推送
通过服务发现或静态配置来发现目标服务对象
支持多种图形化工具来展示数据
2
Prometheus架构图
3
基本工作原理
Prometheus通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
4
部署步骤
1、安装Prometheus server端
server端可以用编译包或docker进行部署,本文会分别介绍这两种方式。
编译包安装:
解压缩Prometheus包后查看包含的内容:
[root@besttest-1 prometheus-2.18.1.linux-amd64]# lsconsole_libraries consoles data LICENSE NOTICE prometheus prometheus.yml promtool tsdbconsole_libraries consoles data LICENSE NOTICE prometheus prometheus.yml promtool tsdb
其中的prometheus就是prometheus的server执行文件,prometheus.yml则是我们的配置文件。
# 配置文件global: scrape_interval: 15s # 控制Prometheus多久取一次数据 evaluation_interval: 15s # 控制Prometheus多久检查一次规则rule_files: # 加载的规则,当前我们暂时没有做任何规则 # - "first_rules.yml" # - "second_rules.yml" scrape_configs: # 监视资源列表 - job_name: 'prometheus' # 如果有多个job,需要将job_name和下面的配置一起添加 static_configs: - targets: ['localhost:9090'] # 资源地址,如有多个则在这个[]中添加,通过,分隔 - job_name: 'prometheus2' static_configs: - targets: ['localhost:9091']
启动prometheus时默认会使用9090端口,因此启动后直接访问网页地址+端口号就可以访问,本文中示例服务器ip为192.168.5.128,则访问地址为http://192.168.5.128:9090,当然如果需要指定端口可以增加配置如下示例,就可以访问到Prometheus的页面上。
# 修改端口并启动,如不需要修改端口号则不需要加-web.listen-address这个参数./prometheus --config.file=prometheus.yml --web.listen-address=0.0.0.0:9090
看到 Server is ready to receive web requests,就代表我们的服务已经启动了,如果需要后台运行,可以使用nohup的方式启动。
同时还可以访问http://192.168.5.128:9090/metrics访问抓取到全部指标数据
默认情况下,我们的prometheus会主动抓取自己的/metrics数据,这个时候我们可以访问页面中的的Graph来查看数据,如下图所示为查询cpu的使用情况;
点击上方的status->taget可以查看当前已连接的节点。
接下来我们看下docker部署的方式,docker部署需要先行准备好一份配置文件,如上编译包中的配置相同即可。本文示例中配置文件保存在/data目录下,大家记得使用docker部署的时候需要替换一下路径;
docker run -idt --name=prometheus \ -p 9090:9090 \ -v /data/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --web.enable-lifecycle
其余操作与编译包部署的一样,访问地址即可
2、部署node_exporter节点
前面我们的prometheus服务端已经部署完成,现在开始我们要为我们的服务端提供更多的节点接入了,此处我们使用的是node_exporter来进行介入。同样可以使用包和docker进行部署,下面先从包开始介绍;
解压缩node_exporter包,并启动node_exporter
# 启动命令./node_exporter
从上面的启动内容中,我们可以看到node_exporter默认帮我们监听了9100端口,接下来,让我们修改一下前面prometheus的配置,在下面的targets中添加上node_exporter的节点ip+端口。
# 配置文件global: scrape_interval: 15s # 控制Prometheus多久取一次数据 evaluation_interval: 15s # 控制Prometheus多久检查一次规则rule_files: # 加载的规则,当前我们暂时没有做任何规则 # - "first_rules.yml" # - "second_rules.yml"scrape_configs: # 监视资源列表 - job_name: 'prometheus' # 如果有多个job,需要将job_name和下面的配置一起添加 static_configs: - targets: ['192.168.5.128:9090','192.168.5.127:9100'] # 资源地址,如有多个则在这个[]中添加,通过,分隔
添加完以后,刷新我们前面的服务端的targets页面,如本文环境访问:http://192.168.5.128:9090/targets
访问前面的数据图表查看,此时获取出的数据已经包含了所有节点的数据。
接下来介绍一下docker部署node_exporter的方法:
docker run -d --name=node-exporter -p 9100:9100 prom/node-exporter
其余操作与前面的一致,到此我们的服务端和子节点的部署已经完成了,剩下的就是如何让我们能更完善的看到数据图表,此时就要引出我们今天要介绍的另外一部分核心 Grafana了。
3、Grafana的使用
Grafana是用于可视化大型测量数据的开源程序,它提供了强大和优雅的方式去创建、共享、浏览数据。并且支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等。
部署方式我们通过docker来执行部署在prometheus的server端上
docker run -d -p 3000:3000 grafana/grafana
如果通过安装包的话,执行下面的命令即可
wget https://dl.grafana.com/oss/release/grafana-6.7.3.linux-amd64.tar.gztar -zxvf grafana-6.7.3.linux-amd64.tar.gz
安装并启动好以后,访问http://部署机器ip:3000/。默认的用户名密码都是admin,当第一次访问的时候会要求修改密码,按照规则修改管理员密码即可进入。
修改过密码以后,会进入到欢迎的界面中,并且有一个步骤对我们的配置提供帮助。
点击add data source 添加数据源,如下图所示,显示了我们可以添加的数据源,由于我们现在要展示的是prometheus的数据,则选择prometheus。
选择以后,进入配置页面中,settings中的配置,name是当前数据源的名称,url配置我们前面prometheus的server端地址,此处为http://192.168.5.128:9090,Scrape interval是向prometheus去获取数据的时间周期,默认为15s,query timeout为查询超时设置,设置好以后点击 Save & Test 按钮保存
接下来为我们添加用户,点击左侧的serverAdmin 按钮中的Users来添加用户
,在Configuration中的Users可以设置用户的权限
数据源配置好了,用户也配置好了,接下来就是我们最后一步了,引入并配置一个好看的DashBoard。我们可以自己自定义一个DashBoard,也可以从Grafana的官网上已有的模版导入到我们的Grafana中来使用。官网的Dashboards地址:https://grafana.com/grafana/dashboards?orderBy=name&direction=asc,此次我们打开模板为:https://grafana.com/grafana/dashboards/8919
在图中可以看到 Get this dashboard: 8919 ,这个8919 就是当前这个模板的id,复制下来这个id后回到我们的Grafana中的Import模块,输入id 8919后,点击其他空白处后展示出导入操作,可以修改导入到DashBoard的名字,最下面的Prometheus Data Source选项选择我们前面配置的数据源。
点击import后,就可以进入到我们的监控页面了,上方job是我们前面配置JobName,主机名是我们targets中的机器的hostname。
到此,我们的环境监控大盘已经部署完成了,剩下要做的就是当你要将哪些机器加入到监控大盘中的时候,在前面的配置中添加即可。
通过这个环境监控大盘的曲线图可以很好的帮助我们完成压测过程中的监控,在我们的压测过程之中可以通过点选右上角的按钮选择刷新时间和展示的监控时间,可以让我们看到更细粒度的监控数据,从而更好的了解到压测时服务器资源的使用率。
当然prometheus不仅仅能帮我们完成监控,他还可以为我们提供针对环境指标的报警功能,后续会一一给大家讲解。
安大叔高级性能测试实战班
5.16(本周六)开课
报名咨询请添加下方微信
扫码联系我
课程大纲:高级性能测试&全栈测试课程简介
发送 监控大盘 可以获取软件包噢