性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据

Python结合InfluxDBGrafana图表实时采集Linux多主机性能数据

 


 

 

实现功能

无需在被监控主机上安装代理,一键对Linux远程服务器不同主机执行性能监控、性能数据采集命令,并实时展示

 

支持跨堡垒机收集实时性能数据(注:定制化开发,非通用)

 

支持docker容器(因为程序实现是从docker容器内部获取性能数据,所以目前仅支持CPU,内存,I/O)

 

使用前提

可以用Xshell等工具远程连接Linux主机

 

Linux主机支持sar命令

 

dokcer容器内部挂载了docker容器自身的cgroup系统

 

注:目前不支持嵌套cgroup下子cgroup的性能数据监控

 

测试环境

Win7 64

 

Python 3.4.0

 

CentOS 6 64位(内核版本2.6.32-642.el6.x86_64

 

influxdb-1.5.2.x86_64.rpm

网盘下载地址:

https://pan.baidu.com/s/1jAbY4xz5gvzoXxLHesQ-PA

 

 

grafana-5.1.2-1.x86_64.rpm

下载地址:

https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.3-1.x86_64.rpm

下载地址:https://pan.baidu.com/s/1wtnPH-iYxaXc6FnL1i0ZVg

 

 

influxdb-5.0.0-py2.py3-none-any.whl

下载地址:

https://pypi.org/project/influxdb/#files

下载地址:https://pan.baidu.com/s/1DQ0HGYNg2a2-VnRSBdPHmg

 

paramiko 1.15.2

下载地址:

https://pypi.python.org/pypi/paramiko/1.15.2

https://pan.baidu.com/s/1i4SJ1CL

 

cryptography-1.0-cp34-none-win_amd64.whl

(如果paramiko可以正常安装完,则不需要安装该类库)

下载地址:

https://pypi.python.org/pypi/cryptography/1.0

https://pan.baidu.com/s/1jIRBJvg

 

安装好后,找到nt.py(本例中路径为:

Lib\site-packages\pycrypto-2.6.1-py3.4-win-amd64.egg\Crypto\Random\OSRNG\nt.py),修改

import winrandom

from Crypto.Random.OSRNG import winrandom

如下

#import winrandom

from Crypto.Random.OSRNG import winrandom

 

以解决ImportError: No module named 'winrandom'错误

 

说明:具体文件路径可能还得根据实际报错情况来确定,如下

............()

"D:\ProgramFiles\python33\lib\site-packages\Crypto\Random\OSRNG\nt.py", line 28, in

   import winrandom

ImportError: No module named 'winrandom'

 

 

 

VS2010

因操作系统而异,可能需要安装VS2010,以解决包依赖问题

 

 

环境搭建

参考CentOS下结合InfluxDBGrafananux图表实时展示JMeter相关性能数据

grafna 数据源数据库配置:db_目标ip地址


使用方法

influxDB主机配置

monitor\conf\influxDB.conf

[INFLUXDB]

influxdb_host = 10.203.25.106

influxdb_port = 8086

 

主机登录信息配置

(用于远程ssh登录)

monitor\conf\host_config.conf

[10.203.36.1]

host = 10.203.36.1

username = xxxx

password = xxxx

port = 22

remark = 鉴权微服务

 

[10.203.36.33]

host = 10.203.36.33

username = xxxx

password = xxxx

port = 22

remark = 发货微服务

 

[10.202.27.5]

host = 10.202.27.5

username = xxxx

password = xxxx

port = 22

remark = 堡垒机

 

 

[10.202.27.6]

host = 10.202.27.6

username = xxxx

password = xxxx

port = 22

remark = 堡垒机

 

 

说明:

[需要监控的Linux服务器IP]

host = 需要监控的Linux服务器IP

username = 远程登录用户名

password = 用户密码

port = 22

remark = 补充说明

 

堡垒机-目标机配置

bastion_host_config.conf

[10.202.27.5]

ip1 = 10.203.33.18

ip2 = 10.203.33.19

ip3 = 10.203.33.20

 

[10.202.27.6]

ip4 = 10.203.33.21

ip5 = 10.203.32.49

ip6 = 10.203.33.4

 

说明:

[堡垒机ip]

自定义名称 = 需要通过堡垒机访问的目标ip

 

注意:不同堡垒机节点下的目标ip不能重复

 

堡垒机连接目标机,账号密码,登录用户选取等信息配置

monitor\conf\account.conf

[ACCOUNT]

user_id = 01367522

pwd = xxx

login_user_choice = 1

 

dokcer容器cpu, cpuacct,memory,blkio系统路径配置

[CGROUPPATH]

cpu_path=/sys/fs/cgroup/cpu

cpuacct_path=/sys/fs/cgroup/cpuacct

memory_path=/sys/fs/cgroup/memory

blkio_path=/sys/fs/cgroup/blkio/

 

#cpu_path=/cgroup/cpu/docker/docker/$CONTAINERID

#cpuacct_path=/cgroup/cpuacct/docker/docker/$CONTAINERID

#memory_path=/cgroup/memory/docker/docker/$CONTAINERID

#blkio_path=/cgroup/blkio/docker/docker/$CONTAINERID

 

#cpu_path=/cgroup/cpu/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8

#cpuacct_path=/cgroup/cpuacct/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8

#memory_path=/cgroup/memory/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8

#blkio_path=/cgroup/blkio/docker/d74ac2610ed325498767bc708197148d414bf6a7719f15c013dc2b6460690dd8

 

说明:

系统路径支持简单的参数化,目前仅支持容器ID(大写的$CONTAINERID),如上

一次仅支持一组配置

 

配置单台目标机器上不要采集的性能指标维度(可选)

monitor\conf\host_filter.conf

[HOSTFILTER]

10.203.36.1 = onecpu, disk

#10.203.36.33 =

10.203.36.4 =

 

[HOSTFILTER]

待监控目标ip = 指标维度1,指标维度2,维度之间用逗号分隔

 

维度说明:

onecpu  不采集单个cpu的性能数据信息

queue   采集系统负载队列长度和负载均值性能数据信息

proc    采集任务创建和系统上下文切换信息

mem     不采集内存性能数据信息

swap    不采集swap交换统计信息

swapspace 不采集swap空间使用率信息

deviotps 不采集磁盘设备I/O性能数据信息

netdev  不采集网络设备(一般指网卡)的性能数据信息

enetdev 不采集网络设备(一般指网卡)的出错数据信息

disk    不采集单个磁盘的性能数据信息

paging  不采集分页信息

 

如果不需要过滤,可不配置,或者如上设置ip等于空,或者用#注释

 

 

待监控主机配置

monitor\conf\target_host_for_monitor.conf

# #代表注释

10.203.36.1

10.203.36.33

 

# 堡垒机

10.202.27.5

 

# 需要通过堡垒机访问的目标ip

ip1 = 10.203.33.18

 

 

注意:

1、每一行代表需要监控的ip

如果ip不需要通过堡垒机访问,那么这个ip必须在monitor\conf\host_config.conf有对应的配置才会被监控,不想监控则注释;

如果ip需要通过堡垒机访问,那么这个ip必须在monitor\conf\bastion_host_config.conf下有对应的配置,且这里必须配置对应堡垒机IP,才会被监控

 

 

 

运行程序

数据收集:

 

python main.py

 

或者

python main.py 2 20

 

python main.py 2 10+45+10

 

python main.py 210 + 45 + 10

 

python main.py 2 20onecpu netdev enetdev disk paging

 

python main.py 采集频率(默认1/s)采集时间(秒,默认1s)不监控维度

 

说明:为了方便,采集时间可以写成加减运算表达式,省去“心算”,方便算术能力不好的人,比如我~~

 

如果需要设置不监控维度(每个维度之间用逗号相隔,目前仅支持以下维度),则一定要“显示”的指定采集频率和采集时间

 

onecpu  不采集单个cpu的性能数据信息

queue   采集系统负载队列长度和负载均值性能数据信息

proc    采集任务创建和系统上下文切换信息

mem     不采集内存性能数据信息

swap    不采集swap交换统计信息

swapspace 不采集swap空间使用率信息

deviotps 不采集磁盘设备I/O性能数据信息

netdev  不采集网络设备(一般指网卡)的性能数据信息

enetdev 不采集网络设备(一般指网卡)的出错数据信息

disk    不采集单个磁盘的性能数据信息

paging  不采集分页信息

 

注意:

1、这里的维度过滤是针对所有待监控目标机的,针对单台机器的过滤项是在这个基础上做的进一步过滤

 

2、如果逻辑CPU个数,磁盘设备,网卡设备过多的情况下,如果不过滤对应指标,可能会因为采集的数据量过大,解析耗时加长,无法及时显示所要的数据(特别是CPU,单台机器有几十个逻辑CPU的情况下,延迟会很严重)

 

实践测试记录:公司服务器,1秒钟采集一次,采集1个小时,统一加过滤项,如下方式运行

 

python main.py1 3600  onecpu netdev enetdev paging

 

44台机器同时采集(总的会开启88个线程),可以做到实时显示

 

3docker容器监控,不支持维度过滤,即IO,CPU,内存要么监控,要么不监控

 

 

数据清理:

pythondropDB.py

 

根据提示,可删除单个数据库,或者一次性删除所有数据库的数据

 

效果展示

 

加群获取更多相关文档

 

源码获取地址:https://gitee.com/ishouke/PMonitor


 

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
23天前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
40 4
|
21天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
74 13
|
1月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
36 6
|
27天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
61 1
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
38 4
|
1月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
30 1
|
1月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
37 1
|
2月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
37 1
|
2月前
|
测试技术 PHP 开发工具
php性能监测模块XHProf安装与测试
【10月更文挑战第13天】php性能监测模块XHProf安装与测试
35 0