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


    基于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(本例中路径为:

    Libsite-packagespycrypto-2.6.1-py3.4-win-amd64.eggCryptoRandomOSRNG t.py),修改

    import winrandom

    from Crypto.Random.OSRNG import winrandom

    如下

    #import winrandom

    from Crypto.Random.OSRNG import winrandom

     

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

     

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

    ............(略)

    "D:Program Filespython33libsite-packagesCryptoRandomOSRNG t.py", line 28, in <module>

        import winrandom

    ImportError: No module named 'winrandom'

     

     

     

    VS2010

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

     

     

     

     

    环境搭建

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

     

     

     

    使用方法

    influxDB主机配置

    monitorconfinfluxDB.conf

    [INFLUXDB]

    influxdb_host = 10.203.25.106

    influxdb_port = 8086

     

    主机登录信息配置

    (用于远程ssh登录)

    monitorconfhost_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不能重复

     

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

    monitorconfaccount.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),如上

    一次仅支持一组配置

     

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

    monitorconfhost_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等于空,或者用 #注释

     

     

    待监控主机配置

    monitorconftarget_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必须在monitorconfhost_config.conf有对应的配置才会被监控,不想监控则注释;

    如果ip需要通过堡垒机访问,那么这个ip必须在 monitorconfastion_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

  • 相关阅读:
    设计模式总结:单例模式(以及多线程、无序写入、volatile对单例的影响)
    android的WebView进度条
    三角形类内置成员函数(看看吧。。)
    VGA接口之显示彩色条
    Java I/O流操作(二)缓冲流
    oracle 单引号 双引号 连接符
    2013腾讯编程马拉松初赛(3月22)赛题及第2题代码(C++)
    Java I/O流操作(一)入门篇和System和Properties类介绍
    POJ 3264 Balanced Lineup
    成都行(二)
  • 原文地址:https://www.cnblogs.com/shouke/p/10420815.html
Copyright © 2020-2023  润新知