1

Pythonを使用してシステム統計を収集しようとしています。ほとんどの場合、これをすでに実行しているliberyまたはgithubプロジェクトを探しています。以下のものを収集・記録できるようにしたいと思っています。

  • CPU使用率または負荷平均
  • ディスクの空き容量
  • ディスクIOスループット
  • RAMの使用(無料、アクティブ、キャッシュ)
  • ネットワークIO
  • 使用帯域幅
  • 稼働時間
  • サーバーの監視に役立つその他のもの。

編集:私は主にLinuxシステムでのサポートを探しています。後でWindowsシステムに移ります。

4

1 に答える 1

2

ここでpsutilモジュールを使用してみてください。示されている例を見てください。ただし、とモジュールDISK IOを使用する必要がある場合があります。wmipywin32

たとえば、DISK QUEUE LENGTHWindowsの場合は、次を使用します。

from win32pdh import *
import time

while True:
    path = MakeCounterPath((None,"PhysicalDisk","_Total",None,0,"Avg. Disk Queue Length"),0)
    query_handle = OpenQuery()
    counter_handle = AddCounter(query_handle, path)
    query_handle = OpenQuery()
    counter_handle = AddCounter(query_handle, path)
    CollectQueryData(query_handle)
    time.sleep(2)
    CollectQueryData(query_handle)
    (counter_type, value) = GetFormattedCounterValue(counter_handle, PDH_FMT_DOUBLE)
    print value
    CloseQuery(query_handle)

Windowsのperfmonアプリのカウンターを使用します。Linuxの場合、DISKIOには複数のツールがあります。

Linuxについては、こちらDISK IOをチェックしてiotop ください

また、Linuxのdiskstatsの例ではこれを使用しており、定期的に解析します/proc/diskstats

def diskstats_parse(dev=None):
    file_path = '/proc/diskstats'
    result = {}

    # ref: http://lxr.osuosl.org/source/Documentation/iostats.txt
    columns_disk = ['m', 'mm', 'dev', 'reads', 'rd_mrg', 'rd_sectors',
                    'ms_reading', 'writes', 'wr_mrg', 'wr_sectors',
                    'ms_writing', 'cur_ios', 'ms_doing_io', 'ms_weighted']

    columns_partition = ['m', 'mm', 'dev', 'reads', 'rd_sectors', 'writes', 'wr_sectors']

    lines = open(file_path, 'r').readlines()
    for line in lines:
        if line == '': continue
        split = line.split()
        if len(split) == len(columns_disk):
            columns = columns_disk
        elif len(split) == len(columns_partition):
            columns = columns_partition
        else:
            # No match
            continue

        data = dict(zip(columns_disk, split))
        if dev != None and dev != data['dev']:
            continue
        for key in data:
            if key != 'dev':
                data[key] = int(data[key])
        result[data['dev']] = data

    return result

これがお役に立てば幸いです。:)

于 2012-12-02T04:42:55.177 に答える