一、背景:
在性能测试的时候经常需要观察对应服务器的cpu、内存等指标,或者有些性能测试需要监控数据库的一些信息
二、监控服务器工具:
1、使用jmeter时可以自带监控服务的功能
缺点:只能在运行jmeter的时候才能实现监控功能
2、使用linux命令实时观察
缺点:没办法记录下来,只能看到当前的情况
3、编写脚本将服务器的cpu内存等信息写入文档
缺点:一堆数字不利于分析
4、使用grafana+Prometheus(普罗米修斯)实现监控功能
缺点:暂时没发现什么缺点
三、工具介绍
1、grafana:
Grafana 是什么?Grafana是一个 跨平台的开源的度量分析和可视化工具,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring)Grafana 支持的数据源 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
Grafana 不对数据源作假设,它支持很多各种各种数据源,它都可以帮助生成仪表。同时在市面上,Grafana 市场占有量稳居第一。因此,如果你搞定了 Grafana,它几乎是一个会陪伴你到各个公司的一件称心应手的兵器;
2、Prometheus:
Prometheus是一个开源的系统监控和警报工具
结合:Prometheus负责监控和数据的采集,然后传递给grafana,由grafana将数据可视化。
四、工具的优点
1、Grafana的特点
展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
通知 提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
2、Prometheus的特点
相对比传统监控系统,Prometheus 具有以下优点:
1 易于管理
Prometheus优秀的设计使得其本身非常易于管理,不会因为Prometheus增加管理成本。
Prometheus 核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等)。唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。
Prometheus 基于 Pull 模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建我们的监控系统。也可以通过中间网关支持push模型
对于一些复杂的情况,还可以使用 Prometheus 服务发现(Service Discovery)的能力动态管理监控目标。
2 可监控服务的内部运行状态
Pometheus 鼓励用户监控服务的内部状态,基于 Prometheus 丰富的 Client 库,用户可以轻松的在应用程序中添加对 Prometheus 的支持,从而让用户可以获取服务和应用内部真正的运行状态。
3 强大的数据模型
所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB)。所有的样本除了基本的指标名称以外,还包含一组用于描述该样本特征的标签。
如下所示:
http_request_status{code='200',content_path='/api/path',environment='produment'} =>[value1@timestamp1,value2@timestamp2...]
http_request_status{code='200',content_path='/api/path2',environment='produment'} =>[value1@timestamp1,value2@timestamp2...]
每一条时间序列由指标名称(Metrics Name)以及一组标签(Labels)唯一标识。每条时间序列按照时间的先后顺序存储一系列的样本值。
http_request_status:指标名称(Metrics Name)
{code='200',content_path='/api/path',environment='produment'}:表示维度的标签,基于这些 Labels 我们可以方便地对监控数据进行聚合 ,过滤,裁剪。
[value1@timestamp1,value2@timestamp2...]:按照时间的先后顺序 存储的样本值。
4 强大的查询语言 PromQL
Prometheus 内置了一个强大的数据查询语言 PromQL。 通过 PromQL 可以实现对监控数据的查询、聚合。同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警当中。
5 高效
对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效地处理这些数据,对于单一 Prometheus Server 实例而言它可以处理:
数以百万的监控指标
每秒处理数十万的数据点
6 可扩展
可以在每个数据中心、每个团队运行独立的 Prometheus Sevrer。Prometheus 对于联邦集群的支持,可以让多个 Prometheus 实例产生一个逻辑集群,当单实例 PrometheusServer 处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)可以对其进行扩展。
7 易于集成
使用 Prometheus 可以快速搭建监控服务,并且可以非常方便地在应用程序中进行集成。目前支持:Java,JMX,Python,Go,Ruby,.Net,Node.js 等等语言的客户端 SDK,基于这些 SDK 可以快速让应用程序纳入到 Prometheus 的监控当中,或者开发自己的监控数据收集程序。
同时这些客户端收集的监控数据,不仅仅支持 Prometheus,还能支持 Graphite 这些其他的监控工具。同时 Prometheus 还支持与其他的监控系统进行集成:Graphite, Statsd, Collected,Scollector, muini, Nagios 等。 Prometheus 社区还提供了大量第三方实现的监控数据采集支持:JMX,CloudWatch,EC2,MySQL,PostgresSQL,Haskell,Bash,SNMP,Consul,Haproxy,Mesos,Bind,CouchDB,Django,Memcached,RabbitMQ,Redis,RethinkDB,Rsyslog 等等。
8 可视化
Prometheus提供了强大的可视化能力,不仅自身提供了独立的可视化解决方案,且可以和很多流行的可视化工具进行整合。
Prometheus Server 中自带的 Prometheus UI,可以方便地直接对数据进行查询,并且支持直接以图形化的形式展示数据。同时 Prometheus 还提供了一个独立的基于Ruby On Rails 的 Dashboard 解决方案 Promdash。
最新的 Grafana 可视化工具也已经提供了完整的 Prometheus 支持,基于 Grafana 可以创建更加精美的监控图标。
基于 Prometheus 提供的 API 还可以实现自己的监控可视化 UI。
9 开放性
通常来说当我们需要监控一个应用程序时,一般需要该应用程序提供对相应监控系统协议的支持,因此应用程序会与所选择的监控系统进行绑定。为了减少这种绑定所带来的限制,对于决策者而言要么你就直接在应用中集成该监控系统的支持,要么就在外部创建单独的服务来适配不同的监控系统。
而对于 Prometheus 来说,使用 Prometheus 的 client library 的输出格式不止支持Prometheus 的格式化数据,也可以输出支持其它监控系统的格式化数据,比如 Graphite。因此你甚至可以在不使用 Prometheus 的情况下,采用 Prometheus 的 client library 来让你的应用程序支持监控数据采集。
五、Prometheus的使用原理
1、 Prometheus架构和生态圈组件
2、架构解析:
2.1采集层
采集层分为两类,一类是生命周期较短的作业,还有一类是生命周期较长的作业。
短作业:直接通过 API,在退出时间指标推送给 Pushgateway。
长作业:Retrieval 组件直接从 Job 或者 Exporter 拉取数据。Prometheus提供了各种常用的exporter,方便我们使用Prometheus对服务进行监控。
2.2存储计算层
Prometheus Server,里面包含了存储引擎和计算引擎。
Retrieval 组件为取数组件,它会主动从 Pushgateway 或者 Exporter 拉取指标数据。
Service discovery,可以动态发现要监控的目标。
TSDB(Time Series Database时间序列数据库),数据核心存储与查询。
HTTP server,对外提供 HTTP 服务。
2.3应用层
应用层主要分为两种,一种是 AlertManager,另一种是数据可视化。
AlertManager
对接 Pagerduty,是一套付费的监控报警系统。可实现短信报警、5 分钟无人 ack 打电话通知、仍然无人 ack,通知值班人员 Manager...
Email,发送邮件... ...
数据可视化
Prometheus build-in WebUI
Grafana
其他基于 API 开发的客户端
六、监控服务器信息
1、前提
安装grafana、Prometheus(推荐使用docker方式安装) ,及准备数据采集工具node_exporter
安装包:
链接: https://pan.baidu.com/s/18uc3IFowHa3DC9uKSO2WYQ?pwd=wejv 提取码: wejv 复制这段内容后打开百度网盘手机App,操作更方便哦
2、运行node_exporter
2.1、将node_exporter放在需要监控的服务器上随便一个目录即可,并进行解压
2.2、运行node_exporter,进行数据采集
nohup ./node_exporter #这个执行是会默认使用9100端口运行 nohup ./node_exporter --web.listen-address=:port
2.3、运行后可以使用该方法查看采集的数据http:{IP}:{port}/metrics#ip 是你监控的服务器的ip,port是运行node_exporter时指定的端口,如果没有指定端口那么就是默认的9100
3、配置prometheus及运行
3.1、配置prometheus.yml
让prometheus接收到采集的数据,{IP}:{port},{IP}:{port}#ip 是你监控的服务器的ip,port是运行node_exporter时指定的端口,如果没有指定端口那么就是默认的9100
3.2、运行prometheus
3.2.1、可以通过docker去安装prometheus,这样通过docker进行启停比较方便,装在linux或者windows上都有可以
3.2.2、直接运行,运行后会唤起终端,不能关闭
4、grafana查看结果
4.1、访问grafana
grafana:http://192.168.4.192:3000/login #ip是你安装grafana的服务器ip,端口默认3000
4.2、添加数据源
输入prometheus运行的服务地址,端口默认9090
4.3、添加仪表盘
DashBoard 仪表盘,数据展示的窗口。就像汽车仪表盘一样可以展示很多信息,包括车速,水箱温度等。Grafana的 DashBoard 就是以各种图形的方式来展示从 Datasource 拿到的数据。)
4.3.1、可以自己编写仪表盘
4.3.2、导入已有的仪表盘(16098)
https://grafana.com/grafana/dashboards/?search=node+export
七、监控mysql
1、运行mysqld_exporter
1.1、将mysqld_exporter放在需要监控的服务器上随便一个目录即可,并进行解压
链接: https://pan.baidu.com/s/1pccTuiv2kvMFl3d4rQ4QRA?pwd=v2dm 提取码: v2dm 复制这段内容后打开百度网盘手机App,操作更方便哦
2、配置mysqld_exporter
:
创建一个配置文件config.my.cnf
,并使用MySQL的用户和密码。
[client]
user=exporter_user #mysql的用户
password=exporter_password #mysql的密码
3、运行mysqld_exporter,进行数据采集
nohup ./mysqld_exporter --config.my-cnf=config.my.cnf#这个执行是会默认使用9104端口运行
运行后可以使用该方法查看采集的数据http:{IP}:{port}/metrics#ip 是你监控的服务器的ip,port是运行mysqld_exporter时指定的端口,如果没有指定端口那么就是默认的9104
4、配置prometheus及运行
4.1、配置prometheus.yml,
让prometheus接收到采集的数据,{IP}:{port},{IP}:{port}#ip 是你监控的服务器的ip,port是运行mysqld_exporter时指定的端口,如果没有指定端口那么就是默认的9104
4.2、运行prometheus
4.2.1、可以通过docker去安装prometheus,这样通过docker进行启停比较方便,装在linux或者windows上都有可以
4.2.2、直接运行,运行后会唤起终端,不能关闭
5、grafana查看结果
5.1、访问grafana
grafana:http://192.168.4.192:3000/login #ip是你安装grafana的服务器ip,端口默认3000
5.2、添加数据源
输入prometheus运行的服务地址,端口默认9090
6、添加仪表盘
(DashBoard 仪表盘,数据展示的窗口。就像汽车仪表盘一样可以展示很多信息,包括车速,水箱温度等。Grafana的 DashBoard 就是以各种图形的方式来展示从 Datasource 拿到的数据。)
6.1、可以自己编写仪表盘
6.2、导入已有的仪表盘(mysql相关的)(7362)
https://grafana.com/grafana/dashboards/?search=node+export
实现MySQL的监控。这些监控指标可以包括但不限于:
-
数据库连接状态:可以监控当前活动的连接数、最大连接数、等待连接的线程数等,以评估数据库的连接使用情况。
-
性能指标:包括查询执行时间、查询次数、缓存命中率等,这些指标可以帮助分析数据库的性能瓶颈。
-
内存使用情况:可以监控数据库的内存使用情况,包括缓存使用、内存池使用等,以评估数据库的内存压力。
-
磁盘使用情况:监控数据库所在磁盘的空间使用情况,包括数据文件、日志文件等的使用情况,以评估存储压力。
-
错误和异常:可以监控数据库错误日志,包括连接错误、查询错误等,以及时发现并解决潜在问题。
-
系统资源使用情况:通过监控CPU、网络等系统资源的使用情况,评估数据库服务器的整体负载情况
八、其他
以上只是其中一个小功能,如果需要监控其他的东西可以网上找到对应的数据源和仪表盘即可实现监控