diff --git a/html/includes/graphs/application/mysql_command_counters.inc.php b/html/includes/graphs/application/mysql_command_counters.inc.php new file mode 100644 index 0000000000..38a2df1077 --- /dev/null +++ b/html/includes/graphs/application/mysql_command_counters.inc.php @@ -0,0 +1,69 @@ + diff --git a/html/includes/graphs/application/mysql_connections.inc.php b/html/includes/graphs/application/mysql_connections.inc.php new file mode 100644 index 0000000000..4ec7fc3515 --- /dev/null +++ b/html/includes/graphs/application/mysql_connections.inc.php @@ -0,0 +1,51 @@ + diff --git a/html/includes/graphs/application/mysql_files_tables.inc.php b/html/includes/graphs/application/mysql_files_tables.inc.php new file mode 100644 index 0000000000..bbba4f3173 --- /dev/null +++ b/html/includes/graphs/application/mysql_files_tables.inc.php @@ -0,0 +1,39 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_buffer_pool.inc.php b/html/includes/graphs/application/mysql_innodb_buffer_pool.inc.php new file mode 100644 index 0000000000..507bbae3bb --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_buffer_pool.inc.php @@ -0,0 +1,39 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_buffer_pool_activity.inc.php b/html/includes/graphs/application/mysql_innodb_buffer_pool_activity.inc.php new file mode 100644 index 0000000000..9d96f7a7f0 --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_buffer_pool_activity.inc.php @@ -0,0 +1,37 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_insert_buffer.inc.php b/html/includes/graphs/application/mysql_innodb_insert_buffer.inc.php new file mode 100644 index 0000000000..f7ad6de059 --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_insert_buffer.inc.php @@ -0,0 +1,32 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_io.inc.php b/html/includes/graphs/application/mysql_innodb_io.inc.php new file mode 100644 index 0000000000..bb9f44bc75 --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_io.inc.php @@ -0,0 +1,38 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_io_pending.inc.php b/html/includes/graphs/application/mysql_innodb_io_pending.inc.php new file mode 100644 index 0000000000..fe59ee63bc --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_io_pending.inc.php @@ -0,0 +1,55 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_log.inc.php b/html/includes/graphs/application/mysql_innodb_log.inc.php new file mode 100644 index 0000000000..4d83f2154b --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_log.inc.php @@ -0,0 +1,32 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_row_operations.inc.php b/html/includes/graphs/application/mysql_innodb_row_operations.inc.php new file mode 100644 index 0000000000..bf4c707a5a --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_row_operations.inc.php @@ -0,0 +1,44 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_semaphores.inc.php b/html/includes/graphs/application/mysql_innodb_semaphores.inc.php new file mode 100644 index 0000000000..4a05e976b1 --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_semaphores.inc.php @@ -0,0 +1,31 @@ + diff --git a/html/includes/graphs/application/mysql_innodb_transactions.inc.php b/html/includes/graphs/application/mysql_innodb_transactions.inc.php new file mode 100644 index 0000000000..403b56f188 --- /dev/null +++ b/html/includes/graphs/application/mysql_innodb_transactions.inc.php @@ -0,0 +1,21 @@ + diff --git a/html/includes/graphs/application/mysql_myisam_indexes.inc.php b/html/includes/graphs/application/mysql_myisam_indexes.inc.php new file mode 100644 index 0000000000..ce6abe8441 --- /dev/null +++ b/html/includes/graphs/application/mysql_myisam_indexes.inc.php @@ -0,0 +1,38 @@ + diff --git a/html/includes/graphs/application/mysql_network_traffic.inc.php b/html/includes/graphs/application/mysql_network_traffic.inc.php new file mode 100644 index 0000000000..b30d847a49 --- /dev/null +++ b/html/includes/graphs/application/mysql_network_traffic.inc.php @@ -0,0 +1,29 @@ + diff --git a/html/includes/graphs/application/mysql_query_cache.inc.php b/html/includes/graphs/application/mysql_query_cache.inc.php new file mode 100644 index 0000000000..b1f831e971 --- /dev/null +++ b/html/includes/graphs/application/mysql_query_cache.inc.php @@ -0,0 +1,46 @@ + diff --git a/html/includes/graphs/application/mysql_query_cache_memory.inc.php b/html/includes/graphs/application/mysql_query_cache_memory.inc.php new file mode 100644 index 0000000000..5c144fd3e3 --- /dev/null +++ b/html/includes/graphs/application/mysql_query_cache_memory.inc.php @@ -0,0 +1,29 @@ + diff --git a/html/includes/graphs/application/mysql_select_types.inc.php b/html/includes/graphs/application/mysql_select_types.inc.php new file mode 100644 index 0000000000..03306fd992 --- /dev/null +++ b/html/includes/graphs/application/mysql_select_types.inc.php @@ -0,0 +1,53 @@ + diff --git a/html/includes/graphs/application/mysql_slow_queries.inc.php b/html/includes/graphs/application/mysql_slow_queries.inc.php new file mode 100644 index 0000000000..287e8ffd8f --- /dev/null +++ b/html/includes/graphs/application/mysql_slow_queries.inc.php @@ -0,0 +1,23 @@ + diff --git a/html/includes/graphs/application/mysql_sorts.inc.php b/html/includes/graphs/application/mysql_sorts.inc.php new file mode 100644 index 0000000000..4006003e23 --- /dev/null +++ b/html/includes/graphs/application/mysql_sorts.inc.php @@ -0,0 +1,38 @@ + diff --git a/html/includes/graphs/application/mysql_table_locks.inc.php b/html/includes/graphs/application/mysql_table_locks.inc.php new file mode 100644 index 0000000000..bbe5f49293 --- /dev/null +++ b/html/includes/graphs/application/mysql_table_locks.inc.php @@ -0,0 +1,30 @@ + diff --git a/html/includes/graphs/application/mysql_temporary_objects.inc.php b/html/includes/graphs/application/mysql_temporary_objects.inc.php new file mode 100644 index 0000000000..9c835322d3 --- /dev/null +++ b/html/includes/graphs/application/mysql_temporary_objects.inc.php @@ -0,0 +1,36 @@ + diff --git a/html/includes/graphs/generic_bits.inc.php b/html/includes/graphs/generic_bits.inc.php index ec478ee3d2..b2dcdf5cd5 100644 --- a/html/includes/graphs/generic_bits.inc.php +++ b/html/includes/graphs/generic_bits.inc.php @@ -27,6 +27,9 @@ if($multiplier) $rrd_options .= " DEF:".$in."octets_max=".$rrd_filename_in.":".$rra_in.":MAX"; } +## No? +#print $multiplier; + $rrd_options .= " CDEF:octets=inoctets,outoctets,+"; $rrd_options .= " CDEF:doutoctets=outoctets,-1,*"; $rrd_options .= " CDEF:outbits=outoctets,8,*"; diff --git a/html/pages/device/apps/mysql.inc.php b/html/pages/device/apps/mysql.inc.php new file mode 100644 index 0000000000..0a05c58aab --- /dev/null +++ b/html/pages/device/apps/mysql.inc.php @@ -0,0 +1,46 @@ + 'Command Counters', + 'mysql_connections' => 'Connections', + 'mysql_files_tables' => 'Files and Tables', + 'mysql_innodb_buffer_pool' => 'InnoDB Buffer Pool', + 'mysql_innodb_buffer_pool_activity' => 'InnoDB Buffer Pool Activity', + 'mysql_innodb_insert_buffer' => 'InnoDB Insert Buffer', + 'mysql_innodb_io' => 'InnoDB IO', + 'mysql_innodb_io_pending' => 'InnoDB IO Pending', + 'mysql_innodb_log' => 'InnoDB Log', + 'mysql_innodb_row_operations' => 'InnoDB Row Operations', + 'mysql_innodb_semaphores' => 'InnoDB semaphores', + 'mysql_innodb_transactions' => 'InnoDB Transactions', + 'mysql_myisam_indexes' => 'MyISAM Indexes', + 'mysql_network_traffic' => 'Network Traffic', + 'mysql_query_cache' => 'Query Cache', + 'mysql_query_cache_memory' => 'Query Cache Memory', + 'mysql_select_types' => 'Select Types', + 'mysql_slow_queries' => 'Slow Queries', + 'mysql_sorts' => 'Sorts', + 'mysql_table_locks' => 'Table Locks', + 'mysql_temporary_objects' => 'Temporary Objects'); + +foreach($graphs as $key => $text) { + $graph_type = $key; + $graph_array['height'] = "100"; + $graph_array['width'] = "215"; + $graph_array['to'] = $now; + $graph_array['id'] = $app['app_id']; + $graph_array['type'] = "application_".$key; + echo('

'.$text.'

'); + + echo(""); + + + + include("includes/print-quadgraphs.inc.php"); + echo(""); + +} + + + +?> diff --git a/includes/polling/applications/mysql.inc.php b/includes/polling/applications/mysql.inc.php new file mode 100644 index 0000000000..c7557dd54a --- /dev/null +++ b/includes/polling/applications/mysql.inc.php @@ -0,0 +1,114 @@ + diff --git a/scripts/mysql-stats b/scripts/mysql-stats new file mode 100644 index 0000000000..1a215832e2 --- /dev/null +++ b/scripts/mysql-stats @@ -0,0 +1,131 @@ +#!/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]