您的位置:首页 > 编程语言 > Python开发

collectd+python监控磁盘io信息

2017-05-17 15:04 316 查看
python代码

import subprocess
import collectd
import time

NAME = 'io_info'
VERBOSE = True

def get_stats():
value = []
io_value = [[]]
subprocess.Popen("iostat -d -m -x 1 2 | grep -E 'dm-2' | tail -n1 | awk '{print $6,$7,$10,$13,$14}' > /tmp/io_info" ,shell=True)
with open('/tmp/io_info', 'r') as f:
lines = f.readlines()
for line in lines:
value=line.split( )
#print value
time.sleep(5)
io_value_read_Mb = float(value[0])
io_value_write_Mb = float(value[1])
io_value_await = float(value[2])
io_value_svctm = float(value[3])
io_value_util = float(value[4])

io_value[0] = ["read_Mb"]
io_value[0].append(io_value_read_Mb)

io_value.append(["write_Mab"])
io_value[1].append(io_value_write_Mb)

io_value.append(["util"])
io_value[2].append(io_value_util)

io_value_wait = io_value_await - io_value_svctm
io_value.append(["wait"])
io_value[3].append(io_value_wait)

return io_value

def log(t, message):
""" Log messages to collectd logger
"""
if t == 'err':
collectd.error('{0}: {1}'.format(NAME, message))
elif t == 'warn':
collectd.warning('{0}: {1}'.format(NAME, message))
elif t == 'verb':
if VERBOSE:
collectd.info('{0}: {1}'.format(NAME, message))
else:
collectd.info('{0}: {1}'.format(NAME, message))

def configure_callback(conf):
""" Config data from collectd
"""
log('verb', 'configure_callback Running')
global NAME, VERBOSE
for node in conf.children:
if node.key == 'Name':
NAME = node.values[0]
elif node.key == 'Verbose':
if node.values[0] == 'False':
VERBOSE = False
else:
log('warn', 'Unknown config key: {0}'.format(node.key))

def read_callback():
""" Prepare data for collectd
"""
log('verb', 'read_callback Running')

stats = get_stats()

if not stats:
log('verb', 'No statistics received')
return

for metric, percent in stats:
log('verb', 'Sending value: {0} {1}'.format(metric, percent))
value = collectd.Values(plugin=NAME)
value.type = 'percent'
value.type_instance = metric
value.values = [ str(percent) ]
value.dispatch()

collectd.register_config(configure_callback)
collectd.warning('Initialising {0}'.format(NAME))
collectd.register_read(read_callback)


collectd配置文件代码

<Plugin python>
ModulePath "/etc/collectd/plugins"
Import "io_info"
<Module "io_info">
Name "io_info"
Verbose False
</Module>
</Plugin>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python collectd