Aimless

pythonでサーバのリソースを取得する。

Server

GrowthForecastでサーバのリソース状況をグラフ化するために、リソースの使用状況を取得してGrowthForecastにPostするスクリプトをpythonで書きました。

  • psutilマジ便利。
  • psutil.hogehogeにおいて複数の値を含んでいる戻り値(以下のpsutil.virtual_memory()など)から、特定の項目を綺麗に取得する方法がわからない。今回は正規表現で抽出しましたが、何か違う気がする。
>>> import psutil
>>> 
>>> 
>>> psutil.virtual_memory()
vmem(total=2100154368, available=1049169920, percent=50.0, used=1940869120, free=159285248, active=654180352, inactive=894349312, buffers=324390912, cached=565493760)

 psutilにはネットワークやプロセスの情報も取得できるようなので、ほかにもグラフ化できそうなものがないか確認しようと思います。

#!~/.virtualenvs/py3.3/bin/python
#! -*- coding: utf-8 -*-

import psutil
import requests
import re
import socket
import math

# GrowthForecastを更新する$
def update_gf(name, category, value):

    gf_url = 'http://127.0.0.1:5125/api/'+name+'/'+category+'/value'
    result = requests.post(gf_url, {'number': value})
    print(result.content)

# 後続で利用する正規表現を事前に定義する
memory_regex = re.compile('percent=(.+?),\s')
disk_regex = re.compile('percent=(.+?)\)')
util_regex = re.compile('_util')

# ホスト名と各種情報を取得する
hostname = socket.gethostname()
dict = {
        'cpu_util' : psutil.cpu_percent(),
        'memory_util' : memory_regex.search(str(psutil.virtual_memory())).group(1),
        'root_disk_util' : disk_regex.search(str(psutil.disk_usage('/'))).group(1),
        'home_disk_util' : disk_regex.search(str(psutil.disk_usage('/home'))).group(1)
        }

# 辞書の中身を利用してGrowthForecastを更新する
for key,value in dict.items():
    # 小数点が表示されるパーセント物(util=使用率)は100倍してグラフのData adjustmentで1/100する
    if util_regex.search(key) is None:
        update_gf(hostname, key, int(value))
    else:
        update_gf(hostname, key, math.floor(float(value))*100)

4 Mar 2014