性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据
基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据
by:授客 QQ:1033553122
实现功能
无需在被监控主机上安装代理,一键对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:\Program
Files\python33\lib\site-packages\Crypto\Random\OSRNG\nt.py",
line 28, in
import
winrandom
ImportError: No module named 'winrandom'
VS2010
因操作系统而异,可能需要安装VS2010,以解决包依赖问题

环境搭建
参考CentOS下结合InfluxDB及Grafananux图表实时展示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 2
’10
+ 45 + 10’
python main.py 2 20
onecpu 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.py
1 3600 onecpu netdev enetdev
paging
44台机器同时采集(总的会开启88个线程),可以做到实时显示
3、docker容器监控,不支持维度过滤,即IO,CPU,内存要么监控,要么不监控
数据清理:
python
dropDB.py
根据提示,可删除单个数据库,或者一次性删除所有数据库的数据
效果展示



加群获取更多相关文档

源码获取地址:https://gitee.com/ishouke/PMonitor
性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机或Docker容器性能数据的更多相关文章
- 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据
基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据 by:授客 QQ:1033553122 实现功能 测试环境 环境搭建 使用前提 使用方法 运行程序 效果展 ...
- 性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程
基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程 By: 授客 QQ:1033553122 1. 测试环境 2. 实现功能 3. 使用前提 4. ...
- 性能测试 CentOS下结合InfluxDB及Grafana图表实时展示JMeter相关性能数据
CentOS下结合InfluxDB及Grafana图表实时展示JMeter相关性能数据 by:授客 QQ:1033553122 实现功能 1 测试环境 1 环境搭建 2 1.安装influxdb ...
- 基于Centos7.4搭建prometheus+grafana+altertManger监控Spring Boot微服务(docker版)
目的:给我们项目的微服务应用都加上监控告警.在这之前你需要将 Spring Boot Actuator引入 本章主要介绍 如何集成监控告警系统Prometheus 和图形化界面Grafana 如何自定 ...
- 性能测试监控:Jmeter +InfluxDB +collectd +Grafana
虚拟机ip 192.168.180.128 Influxdb Influxdb是一个开源的分布式时序.时间和指标数据库,使用go语言编写,无需外部依赖. 它有三大特性: 时序性(Time Series ...
- [工具开发] 分享两个基于Heapster 和 Influxdb 的 Grafana 监控仪表盘模板
Info Collector: Heapster - /heapster- --metric-resolution=30s- --sink=influxdb:http://influxdb.defau ...
- [置顶]
cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台
通过cadvisor+influxdb+grafana三者有机结合,打造跨主机容器监控. 优点 1.跨主机监控,可扩展 2.容器自发现 3.历史数据长期保存 4.自定义配置程度高 缺点 1.不能自动隐 ...
- docker容器监控:cadvisor+influxdb+grafana
cadvisor+influxdb+grafana可以实现容器信息获取.存储.显示等容器监控功能,是目前流行的docker监控开源方案. 方案介绍 cadvisor Google开源的用于监控基础设施 ...
- pycharm使用docker容器的python解释器,
上一篇是pycharm调用docker的镜像的python解释器. 此篇介绍pycharm 调用docker的容器的python解释器. 这两个思路还是不一样的,第一个是用pycham界面的选择pyt ...
随机推荐
- 机器学习入门09 - 特征组合 (Feature Crosses)
原文链接:https://developers.google.com/machine-learning/crash-course/feature-crosses/ 特征组合是指两个或多个特征相乘形成的 ...
- Emmet/Zen Coding 快速入门说明
快速参考 以下是支持的特性: ele creates an HTML element tag 展开一个HTML元素标签 # creates an id attribute 作用于元素标签,展开一个id ...
- 一文总结 Linux 虚拟网络设备 eth, tap/tun, veth-pair
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Linux 虚 ...
- 访问iis出现500.21错误
上图是错误的界面 刚开始接手了一个项目,然后想发布到iis上访问使用效果,结果出现了上面的问题,最开始以为是 .net Framework版本的问题,每个版本都试过了,结果问题并没有完全解决. 下面 ...
- Git+Hexo搭建个人博客详细过程
通过Git+Hexo搭建的个人博客地址:https://liangh.top/ 1.安装Node.js.配置好Node.js环境.安装Git和配置好Git环境,打开cmd命令行,成功界面如下 2.安装 ...
- 【Guava】使用Guava的RateLimiter做限流
一.常见的限流算法 目前常用的限流算法有两个:漏桶算法和令牌桶算法. 1.漏桶算法 漏桶算法的原理比较简单,请求进入到漏桶中,漏桶以一定的速率漏水.当请求过多时,水直接溢出.可以看出,漏桶算法可以强制 ...
- sql server 性能调优之 资源等待之网络I/O
一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果集填充到输出缓存里(ouput cache),同时网络层会开 ...
- [深度学习工具]·极简安装Dlib人脸识别库
[深度学习工具]·极简安装Dlib人脸识别库 Dlib介绍 Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具.它广泛应用于工业界和学术界,包 ...
- [NewLife.XCode]扩展属性(替代多表关联Join提升性能)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...
- shiro 获取请求头中的 rememberMe
前言: 上一篇提到了, 将 sessionId 放到请求头中去, 那rememberMe是否也可以放到请求头中去呢. 其实不管是sessionId还是rememberMe, shiro都会默认往coo ...