librenms/scripts/mysql-stats
Adam Amstrong 349cd58779 MySQL Application poller (thanks to Ove)
git-svn-id: http://www.observium.org/svn/observer/trunk@1725 61d68cd4-352d-0410-923a-c4978735b2b8
2010-10-31 20:24:21 +00:00

132 lines
5.7 KiB
Python

#!/usr/bin/env python
import warnings
import re
warnings.filterwarnings(action="ignore", message='the sets module is deprecated')
import sets
import MySQLdb
import base64
conn = MySQLdb.connect(host='',
user='',
passwd='',
db='')
cursor = conn.cursor ()
cursor.execute ("SHOW GLOBAL STATUS")
rows = cursor.fetchall()
datavariables = {
'Command Counters': ['Com_delete','Com_insert','Com_insert_select','Com_load','Com_replace','Com_replace_select', 'Com_select', 'Com_update', 'Com_update_multi'],
'Connections': ['max_connections', 'Max_used_connections', 'Aborted_clients', 'Aborted_connects','Threads_connected','Connections'],
'Files and Tables': ['table_open_cache','Open_files','Open_tables','Opened_tables'],
'InnoDB Buffer Pool': ['ib_bpool_size','ib_bpool_dbpages', 'ib_bpool_free','ib_bpool_modpages'],
'InnoDB Buffer Pool Activity': ['ib_bpool_read','ib_bpool_created', 'ib_bpool_written'],
'InnoDB Insert Buffer': ['ib_ibuf_inserts','ib_ibuf_merged_rec', 'ib_ibuf_merges'],
'InnoDB IO': ['ib_io_read','ib_io_write','ib_io_log', 'ib_io_fsync'],
'InnoDB IO Pending': ['ib_iop_log','ib_iop_sync', 'ib_iop_flush_log', 'ib_iop_flush_bpool', 'ib_iop_ibuf_aio','ib_iop_aioread','ib_iop_aiowrite'],
'InnoDB Log': ['innodb_log_buffer_size','ib_log_flush','ib_log_written'],
'InnoDB Row Operations': ['Innodb_rows_deleted','Innodb_rows_inserted','Innodb_rows_read','Innodb_rows_updated'],
'InnoDB Semaphores': ['ib_spin_rounds','ib_spin_waits','ib_os_waits'],
'InnoDB Transactions': ['ib_tnx'],
'MyISAM Indexes': ['Key_read_requests','Key_reads','Key_write_requests','Key_writes'],
'Network Traffic': ['Bytes_received','Bytes_sent'],
'Query Cache': ['Qcache_queries_in_cache','Qcache_hits','Qcache_inserts','Qcache_not_cached','Qcache_lowmem_prunes'],
'Query Cache Memory': ['query_cache_size','Qcache_free_memory'],
'Select Types': ['Select_full_join','Select_full_range_join','Select_range','Select_range_check','Select_scan'],
'Slow Queries': ['Slow_queries'],
'Sorts': ['Sort_rows','Sort_range','Sort_merge_passes','Sort_scan'],
'Table Locks': ['Table_locks_immediate','Table_locks_waited'],
'Temporary Objects': ['Created_tmp_disk_tables','Created_tmp_tables','Created_tmp_files']
}
data = {}
for row in rows:
data[row[0]] = row[1]
cursor = ""
cursor = conn.cursor ()
cursor.execute ("SHOW VARIABLES")
rows = cursor.fetchall()
for row in rows:
data[row[0]] = row[1]
cursor = ""
cursor = conn.cursor()
cursor.execute("SHOW ENGINE INNODB STATUS")
rows = cursor.fetchall()
for row in rows:
for line in row[2].split("\n"):
ib_bpool_size = re.match(r"Buffer\spool\ssize\s+(\d+)", line)
ib_bpool_free = re.match(r"Free\sbuffers\s+(\d+)", line)
ib_bpool_dbpages = re.match(r"Database\spages\s+(\d+)", line)
ib_bpool_modpages = re.match(r"Modified\sdb\spages\s+(\d+)", line)
ib_b_reg = re.match(r"Pages\sread\s(\d+),\screated\s(\d+),\swritten (\d+)", line)
ib_insert_buffer = re.match(r"(\d+)\sinserts,\s(\d+)\smerged\srecs,\s(\d+)", line)
ib_io = re.match(r"(\d+)\sOS\sfile\sreads,\s(\d+)\sOS\sfile\swrites,\s(\d+)\sOS\sfsyncs", line)
ib_io_log = re.match(r"(\d+)\slog\si\/o's\sdone.*", line)
ib_io_p1 = re.match(r"Pending\snormal\saio\sreads:\s(\d+),\saio\swrites:\s(\d+),", line)
ib_io_p2 = re.match(r"\s?ibuf\saio\sreads:\s(\d+),\slog\si\/o's:\s(\d+),\ssync\si\/o's:\s(\d+)", line)
ib_io_p3 = re.match(r"\s?Pending\sflushes\s\(fsync\)\slog:\s(\d+);\sbuffer\spool:\s(\d+)\s?", line)
ib_log_p1 = re.match(r"\s?Log\ssequence\snumber\s([[a-fA-F\d]+)(?: (\d+))?", line)
ib_log_p2 = re.match(r"\s?Log\sflushed\sup\sto\s+([[a-fA-F\d]+)(?: (\d+))?", line)
ib_semaphore = re.match(r"\s?Mutex\sspin\swaits\s(\d+),\srounds\s(\d+),\sOS waits\s(\d+)", line)
ib_tnx = re.match(r"\s?Trx\sid\scounter\s([[a-fA-F\d]+)(?: (\d+))?", line)
if ib_bpool_size:
data['ib_bpool_size'] = ib_bpool_size.group(1)
elif ib_bpool_free:
data['ib_bpool_free'] = ib_bpool_free.group(1)
elif ib_bpool_dbpages:
data['ib_bpool_dbpages'] = ib_bpool_dbpages.group(1)
elif ib_bpool_modpages:
data['ib_bpool_modpages'] = ib_bpool_modpages.group(1)
elif ib_insert_buffer:
data['ib_ibuf_inserts'] = ib_insert_buffer.group(1)
data['ib_ibuf_merged_rec'] = ib_insert_buffer.group(2)
data['ib_ibuf_merges'] = ib_insert_buffer.group(3)
elif ib_io:
data['ib_io_read'] = ib_io.group(1)
data['ib_io_write'] = ib_io.group(2)
data['ib_io_fsync'] = ib_io.group(3)
elif ib_io_log:
data['ib_io_log'] = ib_io_log.group(1)
elif ib_io_p1:
data['ib_iop_aioread'] = ib_io_p1.group(1)
data['ib_iop_aiowrite'] = ib_io_p1.group(2)
elif ib_io_p2:
data['ib_iop_ibuf_aio'] = ib_io_p2.group(1)
data['ib_iop_log'] = ib_io_p2.group(2)
data['ib_iop_sync'] = ib_io_p2.group(3)
elif ib_io_p3:
data['ib_iop_flush_log'] = ib_io_p3.group(1)
data['ib_iop_flush_bpool'] = ib_io_p3.group(2)
elif ib_log_p1:
data['ib_log_written'] = ib_log_p1.group(1)
if ib_log_p1.group(2):
data['ib_log_written'] = int(data['ib_log_written']) + int(ib_log_p1.group(2))
elif ib_log_p2:
data['ib_log_flush'] = ib_log_p2.group(1)
if ib_log_p2.group(2):
data['ib_log_flush'] = int(data['ib_log_flush']) + int(ib_log_p2.group(2))
elif ib_semaphore:
data['ib_spin_waits'] = ib_semaphore.group(1)
data['ib_spin_rounds'] = ib_semaphore.group(2)
data['ib_os_waits'] = ib_semaphore.group(3)
elif ib_tnx:
data['ib_tnx'] = ib_tnx.group(1)
if ib_tnx.group(2):
data['ib_tnx'] = int(data['ib_tnx']) + int(ib_tnx.group(2))
elif ib_b_reg:
data['ib_bpool_read'] = ib_b_reg.group(1)
data['ib_bpool_created'] = ib_b_reg.group(2)
data['ib_bpool_written'] = ib_b_reg.group(3)
for category in datavariables:
for variable in datavariables[category]:
if variable in data:
print data[variable]