Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1cde979a3d | |||
| f72fabaae7 | |||
| 70bd09276d | |||
| 64256add50 | |||
| c115a9e38e | |||
| cb042301c5 | |||
| 10a8fab4b7 | |||
| 20ff95c0fe |
5
ioping/fs-telegraf-ioping.conf
Normal file
5
ioping/fs-telegraf-ioping.conf
Normal file
@ -0,0 +1,5 @@
|
||||
[[inputs.exec]]
|
||||
commands = ["/usr/local/sbin/telegraf-ioping.py"]
|
||||
timeout = "50s"
|
||||
interval = "1m"
|
||||
data_format = "influx"
|
||||
143
ioping/telegraf-ioping.py
Normal file
143
ioping/telegraf-ioping.py
Normal file
@ -0,0 +1,143 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
################################################################################
|
||||
# Module import section
|
||||
################################################################################
|
||||
import argparse
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
################################################################################
|
||||
# Global variables and defaults
|
||||
################################################################################
|
||||
iointerfaces_allowed = ['async',
|
||||
'cached',
|
||||
'direct',
|
||||
'sync',
|
||||
'dsync']
|
||||
|
||||
ioping_arguments = {'location': '',
|
||||
'cmd': 'ioping --batch',
|
||||
'count': '10',
|
||||
'interval': '1s',
|
||||
'options': ''}
|
||||
|
||||
|
||||
################################################################################
|
||||
# Global functions
|
||||
################################################################################
|
||||
# Function to run the shell command and capture outputs and returncode
|
||||
def capture_ioping_results():
|
||||
if ioping_arguments['location'] == '':
|
||||
return 1, '', 'No ioping_locationectory given.'
|
||||
|
||||
cmd = '%s %s --count %s --interval %s %s' % (ioping_arguments['cmd'],
|
||||
ioping_arguments['options'],
|
||||
ioping_arguments['count'],
|
||||
ioping_arguments['interval'],
|
||||
ioping_arguments['location'])
|
||||
ioping_arguments['cmd'] = cmd
|
||||
ioping_output = subprocess.run(cmd.split(),
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
encoding='utf-8')
|
||||
return ioping_output.returncode, ioping_output.stdout, ioping_output.stderr
|
||||
|
||||
|
||||
# Function to output the ioping capture on an interactive shell
|
||||
def ioping_output_shell():
|
||||
returncode, stdout, stderr = capture_ioping_results()
|
||||
print("%s\n" % (ioping_arguments['cmd']))
|
||||
|
||||
if returncode == 0:
|
||||
print(stdout)
|
||||
else:
|
||||
print(stderr)
|
||||
|
||||
return returncode
|
||||
|
||||
|
||||
# Function to ouptut the ioping capure for telegraf
|
||||
def ioping_output_telegraf():
|
||||
returncode, stdout, stderr = capture_ioping_results()
|
||||
|
||||
if not returncode == 0:
|
||||
print(stderr)
|
||||
return returncode
|
||||
|
||||
ioping_statistic_keys = ['statistics_count',
|
||||
'runtime',
|
||||
'iops',
|
||||
'transfer_speed',
|
||||
'min_request_time',
|
||||
'avg_request_time',
|
||||
'max_request_time',
|
||||
'std_deviation_request_time',
|
||||
'total_requests',
|
||||
'total_running_time']
|
||||
|
||||
try:
|
||||
ioping_statistics = dict(zip(ioping_statistic_keys, stdout.split()))
|
||||
except Exception as e:
|
||||
print(e)
|
||||
returncode = 1
|
||||
|
||||
ioping_statistics_string = ",".join(f'{key}={value}' for key,value in ioping_statistics.items())
|
||||
print("ioping,location=%s %s" %(ioping_arguments['location'], ioping_statistics_string))
|
||||
|
||||
return returncode
|
||||
|
||||
def get_parser():
|
||||
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('-c', '--count',
|
||||
help = 'stop after <count> requests',
|
||||
default = '10')
|
||||
parser.add_argument('-i', '--interval',
|
||||
help = 'interval between requests',
|
||||
default = '1s')
|
||||
parser.add_argument('-l', '--location',
|
||||
help = 'directory|file|device to test. Best would be a directory to not shred anything accidentially',
|
||||
default = '/tmp')
|
||||
parser.add_argument('-m', '--mode',
|
||||
help = 'Which output to use: shell|telegraf',
|
||||
default = 'telegraf')
|
||||
parser.add_argument('-n', '--iointerface',
|
||||
help = 'Which ionterface to use: async|cached|direct|sync|dsync',
|
||||
default = '')
|
||||
parser.add_argument('-w', '--read-write',
|
||||
help = 'Use read-write test instead of read.',
|
||||
action = 'store_true',
|
||||
default = 'False')
|
||||
return parser
|
||||
|
||||
|
||||
# Main function for shell use
|
||||
def main():
|
||||
parser = get_parser()
|
||||
args = parser.parse_args()
|
||||
|
||||
ioping_arguments['location'] = args.location
|
||||
ioping_arguments['count'] = args.count
|
||||
ioping_arguments['interval'] = args.interval
|
||||
if args.read_write == True:
|
||||
ioping_arguments['options'] += '--read-write '
|
||||
if not args.iointerface == '':
|
||||
if args.iointerface in iointerfaces_allowed:
|
||||
ioping_arguments['options'] += '--%s ' % args.iointerface
|
||||
|
||||
if args.mode == 'shell':
|
||||
returncode = ioping_output_shell()
|
||||
elif args.mode == 'telegraf':
|
||||
returncode = ioping_output_telegraf()
|
||||
else:
|
||||
returncode = 1
|
||||
|
||||
return returncode
|
||||
|
||||
|
||||
################################################################################
|
||||
# Main main main
|
||||
################################################################################
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
Loading…
Reference in New Issue
Block a user