• 随着业务的上量,日志的增加,最先达到硬件资源瓶颈的也许就是硬盘,传统的手工观察磁盘监控曲线图直观,大方,但是多机器的时候就有点累了;而且单纯靠人测算的很有误差。

手工计算

这里写图片描述

脚本 根据一天数据计算

这里写图片描述

脚本 根据三天数据计算

这里写图片描述

脚本如下

#!/usr/bin/env python
#-*- coding:utf8 -*-

import requests
import time
import json
import scipy
from scipy import stats

# reference
# http://www.bkjia.com/Pythonjc/834245.html
# http://blog.csdn.net/cskchenshengkun/article/details/45790411
# http://www.168seo.cn/python/2379.html

# 定义获得指定取件的数值
def getData(start,end,endpoint,counter,incr=0):
    d = {
        "start": start,
        "end": end,
        "cf": "AVERAGE",
        "endpoint_counters": [
            {
                "endpoint": "%s"%endpoint,
                "counter": "%s"%counter,
            },
            ],
        }

    query_api = "http://xxx:9966/graph/history"
    r = requests.post(query_api, data=json.dumps(d))
    #print r.text
    a = json.loads(r.text)
    #print a
    valueinterval = (a[0]['Values'][1]['timestamp'] - a[0]['Values'][0]['timestamp'])/60
    print valueinterval
    list = []
    for b in a[0]['Values']:
        if b['value'] > 0:
            list.append(b['value']/valueinterval)
        else:
            #print b['value']
            pass
    # 如果incr是1,那么再加一步骤,做个differ
    if incr == 1:
       list1 = [] 
       for i in range(1,len(list)):
           differValue = list[i] - list[i-1]
           if differValue > 0:
               list1.append(differValue)
       #print list
       #print list1
       list = list1
    return list

# 求 调和平均数
def getAvg(day,endpoint,metric,incr=0):
    end = int(time.time())
    start = end - 3600 * 24 * day
    list = getData(start,end,endpoint,metric,incr)
    #print "主机:%s 指标:%s的增长率是:"%(endpoint,metric),
    #print "调和平均数:%s"%(stats.hmean(list))
    return stats.hmean(list)
    #return stats.gmean(list)

# 获取过去一天的数据
def userDefine(day,ips,metric,incr=0):
    result = []
    for ip in ips:
        value = getAvg(day,ip,metric,incr)
        result.append(value)
    return result

ips = []
ips.append("10.0.100.85")
day = 3

result1 = []
metric = "df.bytes.used.percent/fstype=ext4,mount=/"
result1=userDefine(day,ips,metric,1)

result2 = []
metric = "df.bytes.used/fstype=ext4,mount=/"
result2=userDefine(day,ips,metric,1)

print ips

print result1

print result2

print """ 
| 主机 | 磁盘占用/分钟(%) | 磁盘占用/小时(%)| 磁盘占用/天(%)| 磁盘新增占用/分钟(Byte)| 磁盘新增占用/分钟(KByte) |磁盘新增占用/小时(KByte) | 存储7天需要(GByte) | 目前量可以维持几天 |
| -- | -- |-- |-- |-- |-- | -- |-- | -- |"""
for i in range(0,len(ips)):
    print """| %s | %s | %s | %s | %s | %s | %s | %s | %s |"""%(ips[i],round(result1[i],5),round(result1[i],5)*60,round(result1[i],5)*1440,round(result2[i],2),round(result2[i],2)*60,round(result2[i],2)*1440, round(result2[i]*1440*7/1000/1000/1000,0),round(80/result1[i]/1440))

哈哈,多了一个武器,下次再测算就方便多了。

Copyright © opschina.org 2017 with zzlyzq@gmail.com all right reserved,powered by Gitbook该文件修订时间: 2017-07-11 11:32:48

results matching ""

    No results matching ""