Skip to content
Snippets Groups Projects
Commit 2437ca88 authored by Chris Hines's avatar Chris Hines
Browse files

add a python based collectd module to collect info from /proc/self/mountstats

Former-commit-id: c2e6d0f0
parent 8d68278c
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,11 @@ ...@@ -26,6 +26,11 @@
become_user: root become_user: root
when: cudamonitor is defined when: cudamonitor is defined
- name: install mountstats_collectd python script
template: src=mountstats_collectd.py.j2 dest=/etc/collectd.python/mountstats_collectd.py mode=0700 owner=root group=root
become: true
become_user: root
- name: start collectd service - name: start collectd service
service: name=collectd state=started enabled=true service: name=collectd state=started enabled=true
become: true become: true
......
...@@ -39,7 +39,7 @@ FQDNLookup true ...@@ -39,7 +39,7 @@ FQDNLookup true
# Interval 60 # # Interval 60 #
# </LoadPlugin> # # </LoadPlugin> #
#----------------------------------------------------------------------------# #----------------------------------------------------------------------------#
#Interval 10 Interval 30
#MaxReadInterval 86400 #MaxReadInterval 86400
#Timeout 2 #Timeout 2
...@@ -915,6 +915,9 @@ LoadPlugin users ...@@ -915,6 +915,9 @@ LoadPlugin users
<Module cuda_collectd> <Module cuda_collectd>
</Module> </Module>
{% endif %} {% endif %}
Import "mountstats_collectd"
<Module mountstats_collectd>
</Module>
</Plugin> </Plugin>
# LogTraces true # LogTraces true
# Interactive true # Interactive true
...@@ -1134,6 +1137,7 @@ LoadPlugin users ...@@ -1134,6 +1137,7 @@ LoadPlugin users
ValuesFrom 1 ValuesFrom 1
</Result> </Result>
</Table> </Table>
# <Table "/proc/slabinfo"> # <Table "/proc/slabinfo">
# Instance "slabinfo" # Instance "slabinfo"
# Separator " " # Separator " "
......
#!/usr/bin/env python
try:
import collectd
from collectd import Values
except:
from fakeCollectd import Values
STATS='/proc/self/mountstats'
BYTESFIELDS=['nread', 'nwrite', 'dread', 'dwrite', 'nfsread', 'nfswrite', 'pageread', 'pagewrite']
BYTESSTR='\tbytes:\t'
EVENTSSTR='\tevents:\t'
EVENTSFIELDS=["inode_revalidate", "dnode_revalidate", "data_invalidate", "attribute_invalidate", "vfs_open", "vfs_lookup", "vfs_access", "vfs_update_page", "vfs_read_page", "vfs_read_pages", "vfs_write_page", "vfs_write_pages", "vfs_getdents", "vfs_setattr", "vfs_flush", "vfs_fsync", "vfs_lock", "vfs_file_release", "congestion_wait", "truncation", "write_extension", "silly_rename", "short_read", "short_write", "jukebox_delay", "pnfs_read", "pnfs_write"]
def get_values():
device = None
rv = {}
with open(STATS,'r') as f:
for l in f.read().splitlines():
pass
if 'fstype nfs4' in l:
device = l.split('mounted on')[0][len('device '):]
if EVENTSSTR in l:
values = map(int, l[len(EVENTSSTR):].split())
ev = zip(EVENTSFIELDS,values)
if BYTESSTR in l:
values = map(int, l[len(BYTESSTR):].split())
bv = zip(BYTESFIELDS,values)
rv[device] = [] + bv + ev
return rv
def read(data=None):
vl = Values(type='gauge')
vl.plugin = 'mountstats'
values = get_values()
for mount,stats in values.items():
print(mount)
vl.plugin_instance = mount
for s in stats:
vl.dispatch(type='gauge',type_instance=s[0],values=[s[1]])
def readtest():
read()
try:
collectd.register_read(read,60)
except:
readtest()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment