From e7e99fd956c904106a879a40365ea4f66dbfdd6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Porembi=C5=84ski?= Date: Sat, 22 Nov 2014 23:34:21 +0100 Subject: [PATCH 1/9] Add info about PowerPath --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa35b12..b78cfd3 100644 --- a/README.md +++ b/README.md @@ -202,7 +202,7 @@ You need also add SUDO for zabbix user: ```zabbix ALL=(ALL) NOPASSWD: /opt/dell Template App PowerPath ====== - +EMC PowerPath: Host-based software for automated data path management, failover and recovery, and optimized load balancing. PowerPath automates, standardizes, and optimizes data paths in physical and virtual environments as well as cloud deployments to deliver high availability and performance. Template Security ====== From 1abe5aa836cfdae9ca8dfba94d8454c3fdcdd3a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Porembi=C5=84ski?= Date: Sat, 22 Nov 2014 23:41:38 +0100 Subject: [PATCH 2/9] Typo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b78cfd3..a80c52b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Monitoring memory usage of APC (http://pecl.php.net/package/APC) module. File `` Template App Brocade HBA ====== -Monitoring for Network Adapters - Brocade. Template is usind Discovery to create Items and Triggers. You need also add SUDO for zabbix user: ```zabbix ALL=(ALL) NOPASSWD: /usr/bin/bcu``` +Monitoring for Network Adapters - Brocade. Template is using Discovery to create Items and Triggers. You need also add SUDO for zabbix user: ```zabbix ALL=(ALL) NOPASSWD: /usr/bin/bcu``` Template App Nscd ====== From cca28809c97b52c9b6ec00555c555fd90f5825a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Porembi=C5=84ski?= Date: Wed, 12 Aug 2015 07:20:47 +0200 Subject: [PATCH 3/9] Initial commit for MySQL monitoring --- .my.cnf | 3 + bin/ss_get_mysql_stats.php | 1281 +++++++++++++++++++++++++++++++ php.ini | 11 + zabbix_agentd.conf.d/mysql.conf | 181 +++++ 4 files changed, 1476 insertions(+) create mode 100644 .my.cnf create mode 100644 bin/ss_get_mysql_stats.php create mode 100644 php.ini create mode 100644 zabbix_agentd.conf.d/mysql.conf diff --git a/.my.cnf b/.my.cnf new file mode 100644 index 0000000..a88c6ac --- /dev/null +++ b/.my.cnf @@ -0,0 +1,3 @@ +[client] +user=zabbix +password='ha7jqnlacwefrs' diff --git a/bin/ss_get_mysql_stats.php b/bin/ss_get_mysql_stats.php new file mode 100644 index 0000000..27d101a --- /dev/null +++ b/bin/ss_get_mysql_stats.php @@ -0,0 +1,1281 @@ + true, # Do you want to check InnoDB statistics? + 'master' => true, # Do you want to check binary logging? + 'slave' => true, # Do you want to check slave status? + 'procs' => true, # Do you want to check SHOW PROCESSLIST? + 'get_qrt' => true, # Get query response times from Percona Server? +); + +$use_ss = FALSE; # Whether to use the script server or not +$debug = FALSE; # Define whether you want debugging behavior. +$debug_log = FALSE; # If $debug_log is a filename, it'll be used. + +# ============================================================================ +# You should not need to change anything below this line. +# ============================================================================ +$version = "1.1.8"; + +# ============================================================================ +# Include settings from an external config file (issue 39). +# ============================================================================ +if ( file_exists(__FILE__ . '.cnf' ) ) { + require(__FILE__ . '.cnf'); +} + +# Make this a happy little script even when there are errors. +$no_http_headers = true; +ini_set('implicit_flush', false); # No output, ever. +if ( $debug ) { + ini_set('display_errors', true); + ini_set('display_startup_errors', true); + ini_set('error_reporting', 2147483647); +} +else { + ini_set('error_reporting', E_ERROR); +} +ob_start(); # Catch all output such as notices of undefined array indexes. +function error_handler($errno, $errstr, $errfile, $errline) { + print("$errstr at $errfile line $errline\n"); + debug("$errstr at $errfile line $errline"); +} +# ============================================================================ +# Set up the stuff we need to be called by the script server. +# ============================================================================ +if ( $use_ss ) { + if ( file_exists( dirname(__FILE__) . "/../include/global.php") ) { + # See issue 5 for the reasoning behind this. + debug("including " . dirname(__FILE__) . "/../include/global.php"); + include_once(dirname(__FILE__) . "/../include/global.php"); + } + elseif ( file_exists( dirname(__FILE__) . "/../include/config.php" ) ) { + # Some Cacti installations don't have global.php. + debug("including " . dirname(__FILE__) . "/../include/config.php"); + include_once(dirname(__FILE__) . "/../include/config.php"); + } +} + +# ============================================================================ +# Make sure we can also be called as a script. +# ============================================================================ +if (!isset($called_by_script_server)) { + debug($_SERVER["argv"]); + array_shift($_SERVER["argv"]); # Strip off this script's filename + $options = parse_cmdline($_SERVER["argv"]); + validate_options($options); + $result = ss_get_mysql_stats($options); + debug($result); + if ( !$debug ) { + # Throw away the buffer, which ought to contain only errors. + ob_end_clean(); + } + else { + ob_end_flush(); # In debugging mode, print out the errors. + } + + # Split the result up and extract only the desired parts of it. + $wanted = explode(',', $options['items']); + $output = array(); + foreach ( explode(' ', $result) as $item ) { + if ( in_array(substr($item, 0, 2), $wanted) ) { + $output[] = $item; + } + } + debug(array("Final result", $output)); + print(implode(' ', $output)); +} + +# ============================================================================ +# End "if file was not included" section. +# ============================================================================ +} + +# ============================================================================ +# Work around the lack of array_change_key_case in older PHP. +# ============================================================================ +if ( !function_exists('array_change_key_case') ) { + function array_change_key_case($arr) { + $res = array(); + foreach ( $arr as $key => $val ) { + $res[strtolower($key)] = $val; + } + return $res; + } +} + +# ============================================================================ +# Validate that the command-line options are here and correct +# ============================================================================ +function validate_options($options) { + debug($options); + $opts = array('host', 'items', 'user', 'pass', 'heartbeat', 'nocache', 'port'); + # Required command-line options + foreach ( array('host', 'items') as $option ) { + if ( !isset($options[$option]) || !$options[$option] ) { + usage("Required option --$option is missing"); + } + } + foreach ( $options as $key => $val ) { + if ( !in_array($key, $opts) ) { + usage("Unknown option --$key"); + } + } +} + +# ============================================================================ +# Print out a brief usage summary +# ============================================================================ +function usage($message) { + global $mysql_user, $mysql_pass, $mysql_port, $heartbeat; + + $usage = << --items [OPTION] + + --host Hostname to connect to; use host:port syntax to specify a port + Use :/path/to/socket if you want to connect via a UNIX socket + --items Comma-separated list of the items whose data you want + --user MySQL username; defaults to $mysql_user if not given + --pass MySQL password; defaults to $mysql_pass if not given + --heartbeat MySQL heartbeat table; defaults to '$heartbeat' (see mk-heartbeat) + --nocache Do not cache results in a file + --port MySQL port; defaults to $mysql_port if not given + --mysql_ssl Add the MYSQL_CLIENT_SSL flag to mysql_connect() call + +EOF; + die($usage); +} + +# ============================================================================ +# Parse command-line arguments, in the format --arg value --arg value, and +# return them as an array ( arg => value ) +# ============================================================================ +function parse_cmdline( $args ) { + $result = array(); + $cur_arg = ''; + foreach ($args as $val) { + if ( strpos($val, '--') === 0 ) { + if ( strpos($val, '--no') === 0 ) { + # It's an option without an argument, but it's a --nosomething so + # it's OK. + $result[substr($val, 2)] = 1; + $cur_arg = ''; + } + elseif ( $cur_arg ) { # Maybe the last --arg was an option with no arg + if ( $cur_arg == '--user' || $cur_arg == '--pass' || $cur_arg == '--port' ) { + # Special case because Cacti will pass these without an arg + $cur_arg = ''; + } + else { + die("No arg: $cur_arg\n"); + } + } + else { + $cur_arg = $val; + } + } + else { + $result[substr($cur_arg, 2)] = $val; + $cur_arg = ''; + } + } + if ( $cur_arg && ($cur_arg != '--user' && $cur_arg != '--pass' && $cur_arg != '--port') ) { + die("No arg: $cur_arg\n"); + } + debug($result); + return $result; +} + +# ============================================================================ +# This is the main function. Some parameters are filled in from defaults at the +# top of this file. +# ============================================================================ +function ss_get_mysql_stats( $options ) { + # Process connection options and connect to MySQL. + global $debug, $mysql_user, $mysql_pass, $heartbeat, $cache_dir, $poll_time, + $chk_options, $mysql_port, $mysql_ssl; + + # Connect to MySQL. + $user = isset($options['user']) ? $options['user'] : $mysql_user; + $pass = isset($options['pass']) ? $options['pass'] : $mysql_pass; + $port = isset($options['port']) ? $options['port'] : $mysql_port; + $heartbeat = isset($options['heartbeat']) ? $options['heartbeat'] : $heartbeat; + # If there is a port, or if it's a non-standard port, we add ":$port" to the + # hostname. + $host_str = $options['host'] + . (isset($options['port']) || $port != 3306 ? ":$port" : ''); + debug(array('connecting to', $host_str, $user, $pass)); + if ( !extension_loaded('mysql') ) { + debug("The MySQL extension is not loaded"); + die("The MySQL extension is not loaded"); + } + if ( $mysql_ssl || (isset($options['mysql_ssl']) && $options['mysql_ssl']) ) { + $conn = mysql_connect($host_str, $user, $pass, true, MYSQL_CLIENT_SSL); + } + else { + $conn = mysql_connect($host_str, $user, $pass); + } + if ( !$conn ) { + die("MySQL: " . mysql_error()); + } + + $sanitized_host + = str_replace(array(":", "/"), array("", "_"), $options['host']); + $cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt" + . (isset($options['port']) || $port != 3306 ? ":$port" : ''); + debug("Cache file is $cache_file"); + + # First, check the cache. + $fp = null; + if ( !isset($options['nocache']) ) { + if ( $fp = fopen($cache_file, 'a+') ) { + $locked = flock($fp, 1); # LOCK_SH + if ( $locked ) { + if ( filesize($cache_file) > 0 + && filectime($cache_file) + ($poll_time/2) > time() + && ($arr = file($cache_file)) + ) {# The cache file is good to use. + debug("Using the cache file"); + fclose($fp); + return $arr[0]; + } + else { + debug("The cache file seems too small or stale"); + # Escalate the lock to exclusive, so we can write to it. + if ( flock($fp, 2) ) { # LOCK_EX + # We might have blocked while waiting for that LOCK_EX, and + # another process ran and updated it. Let's see if we can just + # return the data now: + if ( filesize($cache_file) > 0 + && filectime($cache_file) + ($poll_time/2) > time() + && ($arr = file($cache_file)) + ) {# The cache file is good to use. + debug("Using the cache file"); + fclose($fp); + return $arr[0]; + } + ftruncate($fp, 0); # Now it's ready for writing later. + } + } + } + else { + debug("Couldn't lock the cache file, ignoring it."); + $fp = null; + } + } + } + else { + $fp = null; + debug("Couldn't open the cache file"); + } + + # Set up variables. + $status = array( # Holds the result of SHOW STATUS, SHOW INNODB STATUS, etc + # Define some indexes so they don't cause errors with += operations. + 'relay_log_space' => null, + 'binary_log_space' => null, + 'current_transactions' => 0, + 'locked_transactions' => 0, + 'active_transactions' => 0, + 'innodb_locked_tables' => 0, + 'innodb_tables_in_use' => 0, + 'innodb_lock_structs' => 0, + 'innodb_lock_wait_secs' => 0, + 'innodb_sem_waits' => 0, + 'innodb_sem_wait_time_ms' => 0, + # Values for the 'state' column from SHOW PROCESSLIST (converted to + # lowercase, with spaces replaced by underscores) + 'State_closing_tables' => null, + 'State_copying_to_tmp_table' => null, + 'State_end' => null, + 'State_freeing_items' => null, + 'State_init' => null, + 'State_locked' => null, + 'State_login' => null, + 'State_preparing' => null, + 'State_reading_from_net' => null, + 'State_sending_data' => null, + 'State_sorting_result' => null, + 'State_statistics' => null, + 'State_updating' => null, + 'State_writing_to_net' => null, + 'State_none' => null, + 'State_other' => null, # Everything not listed above + ); + + # Get SHOW STATUS and convert the name-value array into a simple + # associative array. + $result = run_query("SHOW /*!50002 GLOBAL */ STATUS", $conn); + foreach ( $result as $row ) { + $status[$row[0]] = $row[1]; + } + + # Get SHOW VARIABLES and do the same thing, adding it to the $status array. + $result = run_query("SHOW VARIABLES", $conn); + foreach ( $result as $row ) { + $status[$row[0]] = $row[1]; + } + + # Get SHOW SLAVE STATUS, and add it to the $status array. + if ( $chk_options['slave'] ) { + $result = run_query("SHOW SLAVE STATUS", $conn); + $slave_status_rows_gotten = 0; + foreach ( $result as $row ) { + $slave_status_rows_gotten++; + # Must lowercase keys because different MySQL versions have different + # lettercase. + $row = array_change_key_case($row, CASE_LOWER); + $status['relay_log_space'] = $row['relay_log_space']; + $status['slave_lag'] = $row['seconds_behind_master']; + + # Check replication heartbeat, if present. + if ( $heartbeat ) { + $result2 = run_query( + "SELECT GREATEST(0, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(ts) - 1)" + . " AS delay FROM $heartbeat WHERE id = 1", $conn); + $slave_delay_rows_gotten = 0; + foreach ( $result2 as $row2 ) { + $slave_delay_rows_gotten++; + if ( $row2 && is_array($row2) + && array_key_exists('delay', $row2) ) + { + $status['slave_lag'] = $row2['delay']; + } + else { + debug("Couldn't get slave lag from $heartbeat"); + } + } + if ( $slave_delay_rows_gotten == 0 ) { + debug("Got nothing from heartbeat query"); + } + } + + # Scale slave_running and slave_stopped relative to the slave lag. + $status['slave_running'] = ($row['slave_sql_running'] == 'Yes') + ? $status['slave_lag'] : 0; + $status['slave_stopped'] = ($row['slave_sql_running'] == 'Yes') + ? 0 : $status['slave_lag']; + } + if ( $slave_status_rows_gotten == 0 ) { + debug("Got nothing from SHOW SLAVE STATUS"); + } + } + + # Get SHOW MASTER STATUS, and add it to the $status array. + if ( $chk_options['master'] + && array_key_exists('log_bin', $status) + && $status['log_bin'] == 'ON' + ) { # See issue #8 + $binlogs = array(0); + $result = run_query("SHOW MASTER LOGS", $conn); + foreach ( $result as $row ) { + $row = array_change_key_case($row, CASE_LOWER); + # Older versions of MySQL may not have the File_size column in the + # results of the command. Zero-size files indicate the user is + # deleting binlogs manually from disk (bad user! bad!). + if ( array_key_exists('file_size', $row) && $row['file_size'] > 0 ) { + $binlogs[] = $row['file_size']; + } + } + if (count($binlogs)) { + $status['binary_log_space'] = to_int(array_sum($binlogs)); + } + } + + # Get SHOW PROCESSLIST and aggregate it by state, then add it to the array + # too. + if ( $chk_options['procs'] ) { + $result = run_query('SHOW PROCESSLIST', $conn); + foreach ( $result as $row ) { + $state = $row['State']; + if ( is_null($state) ) { + $state = 'NULL'; + } + if ( $state == '' ) { + $state = 'none'; + } + $state = str_replace(' ', '_', strtolower($state)); + if ( array_key_exists("State_$state", $status) ) { + increment($status, "State_$state", 1); + } + else { + increment($status, "State_other", 1); + } + } + } + + # Get SHOW INNODB STATUS and extract the desired metrics from it, then add + # those to the array too. + if ( $chk_options['innodb'] + && array_key_exists('have_innodb', $status) + && $status['have_innodb'] == 'YES' + ) { + $result = run_query("SHOW /*!50000 ENGINE*/ INNODB STATUS", $conn); + $istatus_text = $result[0]['Status']; + $istatus_vals = get_innodb_array($istatus_text); + + # Get response time histogram from Percona Server if enabled. + if ( $chk_options['get_qrt'] + && isset($status['have_response_time_distribution']) + && ($status['have_response_time_distribution'] == 'YES')) + { + debug('Getting query time histogram'); + $i = 0; + $result = run_query( + "SELECT `count`, total * 1000000 AS total " + . "FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME " + . "WHERE `time` <> 'TOO LONG'", + $conn); + foreach ( $result as $row ) { + $count_key = sprintf("Query_time_count_%02d", $i); + $total_key = sprintf("Query_time_total_%02d", $i); + $status[$count_key] = $row['count']; + $status[$total_key] = $row['total']; + $i++; + } + } + else { + debug('Not getting time histogram because it is not enabled'); + } + + # Override values from InnoDB parsing with values from SHOW STATUS, + # because InnoDB status might not have everything and the SHOW STATUS is + # to be preferred where possible. + $overrides = array( + 'Innodb_buffer_pool_pages_data' => 'database_pages', + 'Innodb_buffer_pool_pages_dirty' => 'modified_pages', + 'Innodb_buffer_pool_pages_free' => 'free_pages', + 'Innodb_buffer_pool_pages_total' => 'pool_size', + 'Innodb_data_fsyncs' => 'file_fsyncs', + 'Innodb_data_pending_reads' => 'pending_normal_aio_reads', + 'Innodb_data_pending_writes' => 'pending_normal_aio_writes', + 'Innodb_os_log_pending_fsyncs' => 'pending_log_flushes', + 'Innodb_pages_created' => 'pages_created', + 'Innodb_pages_read' => 'pages_read', + 'Innodb_pages_written' => 'pages_written', + 'Innodb_rows_deleted' => 'rows_deleted', + 'Innodb_rows_inserted' => 'rows_inserted', + 'Innodb_rows_read' => 'rows_read', + 'Innodb_rows_updated' => 'rows_updated', + ); + + # If the SHOW STATUS value exists, override... + foreach ( $overrides as $key => $val ) { + if ( array_key_exists($key, $status) ) { + debug("Override $key"); + $istatus_vals[$val] = $status[$key]; + } + } + + # Now copy the values into $status. + foreach ( $istatus_vals as $key => $val ) { + $status[$key] = $istatus_vals[$key]; + } + } + + # Make table_open_cache backwards-compatible (issue 63). + if ( array_key_exists('table_open_cache', $status) ) { + $status['table_cache'] = $status['table_open_cache']; + } + + # Compute how much of the key buffer is used and unflushed (issue 127). + $status['Key_buf_bytes_used'] + = big_sub($status['key_buffer_size'], + big_multiply($status['Key_blocks_unused'], + $status['key_cache_block_size'])); + $status['Key_buf_bytes_unflushed'] + = big_multiply($status['Key_blocks_not_flushed'], + $status['key_cache_block_size']); + + if ( array_key_exists('unflushed_log', $status) + && $status['unflushed_log'] + ) { + # TODO: I'm not sure what the deal is here; need to debug this. But the + # unflushed log bytes spikes a lot sometimes and it's impossible for it to + # be more than the log buffer. + debug("Unflushed log: $status[unflushed_log]"); + $status['unflushed_log'] + = max($status['unflushed_log'], $status['innodb_log_buffer_size']); + } + + # Define the variables to output. I use shortened variable names so maybe + # it'll all fit in 1024 bytes for Cactid and Spine's benefit. This list must + # come right after the word MAGIC_VARS_DEFINITIONS. The Perl script parses + # it and uses it as a Perl variable. + $keys = array( + 'Key_read_requests' => 'a0', + 'Key_reads' => 'a1', + 'Key_write_requests' => 'a2', + 'Key_writes' => 'a3', + 'history_list' => 'a4', + 'innodb_transactions' => 'a5', + 'read_views' => 'a6', + 'current_transactions' => 'a7', + 'locked_transactions' => 'a8', + 'active_transactions' => 'a9', + 'pool_size' => 'aa', + 'free_pages' => 'ab', + 'database_pages' => 'ac', + 'modified_pages' => 'ad', + 'pages_read' => 'ae', + 'pages_created' => 'af', + 'pages_written' => 'ag', + 'file_fsyncs' => 'ah', + 'file_reads' => 'ai', + 'file_writes' => 'aj', + 'log_writes' => 'ak', + 'pending_aio_log_ios' => 'al', + 'pending_aio_sync_ios' => 'am', + 'pending_buf_pool_flushes' => 'an', + 'pending_chkp_writes' => 'ao', + 'pending_ibuf_aio_reads' => 'ap', + 'pending_log_flushes' => 'aq', + 'pending_log_writes' => 'ar', + 'pending_normal_aio_reads' => 'as', + 'pending_normal_aio_writes' => 'at', + 'ibuf_inserts' => 'au', + 'ibuf_merged' => 'av', + 'ibuf_merges' => 'aw', + 'spin_waits' => 'ax', + 'spin_rounds' => 'ay', + 'os_waits' => 'az', + 'rows_inserted' => 'b0', + 'rows_updated' => 'b1', + 'rows_deleted' => 'b2', + 'rows_read' => 'b3', + 'Table_locks_waited' => 'b4', + 'Table_locks_immediate' => 'b5', + 'Slow_queries' => 'b6', + 'Open_files' => 'b7', + 'Open_tables' => 'b8', + 'Opened_tables' => 'b9', + 'innodb_open_files' => 'ba', + 'open_files_limit' => 'bb', + 'table_cache' => 'bc', + 'Aborted_clients' => 'bd', + 'Aborted_connects' => 'be', + 'Max_used_connections' => 'bf', + 'Slow_launch_threads' => 'bg', + 'Threads_cached' => 'bh', + 'Threads_connected' => 'bi', + 'Threads_created' => 'bj', + 'Threads_running' => 'bk', + 'max_connections' => 'bl', + 'thread_cache_size' => 'bm', + 'Connections' => 'bn', + 'slave_running' => 'bo', + 'slave_stopped' => 'bp', + 'Slave_retried_transactions' => 'bq', + 'slave_lag' => 'br', + 'Slave_open_temp_tables' => 'bs', + 'Qcache_free_blocks' => 'bt', + 'Qcache_free_memory' => 'bu', + 'Qcache_hits' => 'bv', + 'Qcache_inserts' => 'bw', + 'Qcache_lowmem_prunes' => 'bx', + 'Qcache_not_cached' => 'by', + 'Qcache_queries_in_cache' => 'bz', + 'Qcache_total_blocks' => 'c0', + 'query_cache_size' => 'c1', + 'Questions' => 'c2', + 'Com_update' => 'c3', + 'Com_insert' => 'c4', + 'Com_select' => 'c5', + 'Com_delete' => 'c6', + 'Com_replace' => 'c7', + 'Com_load' => 'c8', + 'Com_update_multi' => 'c9', + 'Com_insert_select' => 'ca', + 'Com_delete_multi' => 'cb', + 'Com_replace_select' => 'cc', + 'Select_full_join' => 'cd', + 'Select_full_range_join' => 'ce', + 'Select_range' => 'cf', + 'Select_range_check' => 'cg', + 'Select_scan' => 'ch', + 'Sort_merge_passes' => 'ci', + 'Sort_range' => 'cj', + 'Sort_rows' => 'ck', + 'Sort_scan' => 'cl', + 'Created_tmp_tables' => 'cm', + 'Created_tmp_disk_tables' => 'cn', + 'Created_tmp_files' => 'co', + 'Bytes_sent' => 'cp', + 'Bytes_received' => 'cq', + 'innodb_log_buffer_size' => 'cr', + 'unflushed_log' => 'cs', + 'log_bytes_flushed' => 'ct', + 'log_bytes_written' => 'cu', + 'relay_log_space' => 'cv', + 'binlog_cache_size' => 'cw', + 'Binlog_cache_disk_use' => 'cx', + 'Binlog_cache_use' => 'cy', + 'binary_log_space' => 'cz', + 'innodb_locked_tables' => 'd0', + 'innodb_lock_structs' => 'd1', + 'State_closing_tables' => 'd2', + 'State_copying_to_tmp_table' => 'd3', + 'State_end' => 'd4', + 'State_freeing_items' => 'd5', + 'State_init' => 'd6', + 'State_locked' => 'd7', + 'State_login' => 'd8', + 'State_preparing' => 'd9', + 'State_reading_from_net' => 'da', + 'State_sending_data' => 'db', + 'State_sorting_result' => 'dc', + 'State_statistics' => 'dd', + 'State_updating' => 'de', + 'State_writing_to_net' => 'df', + 'State_none' => 'dg', + 'State_other' => 'dh', + 'Handler_commit' => 'di', + 'Handler_delete' => 'dj', + 'Handler_discover' => 'dk', + 'Handler_prepare' => 'dl', + 'Handler_read_first' => 'dm', + 'Handler_read_key' => 'dn', + 'Handler_read_next' => 'do', + 'Handler_read_prev' => 'dp', + 'Handler_read_rnd' => 'dq', + 'Handler_read_rnd_next' => 'dr', + 'Handler_rollback' => 'ds', + 'Handler_savepoint' => 'dt', + 'Handler_savepoint_rollback' => 'du', + 'Handler_update' => 'dv', + 'Handler_write' => 'dw', + # Some InnoDB stats added later... + 'innodb_tables_in_use' => 'dx', + 'innodb_lock_wait_secs' => 'dy', + 'hash_index_cells_total' => 'dz', + 'hash_index_cells_used' => 'e0', + 'total_mem_alloc' => 'e1', + 'additional_pool_alloc' => 'e2', + 'uncheckpointed_bytes' => 'e3', + 'ibuf_used_cells' => 'e4', + 'ibuf_free_cells' => 'e5', + 'ibuf_cell_count' => 'e6', + 'adaptive_hash_memory' => 'e7', + 'page_hash_memory' => 'e8', + 'dictionary_cache_memory' => 'e9', + 'file_system_memory' => 'ea', + 'lock_system_memory' => 'eb', + 'recovery_system_memory' => 'ec', + 'thread_hash_memory' => 'ed', + 'innodb_sem_waits' => 'ee', + 'innodb_sem_wait_time_ms' => 'ef', + 'Key_buf_bytes_unflushed' => 'eg', + 'Key_buf_bytes_used' => 'eh', + 'key_buffer_size' => 'ei', + 'Innodb_row_lock_time' => 'ej', + 'Innodb_row_lock_waits' => 'ek', + 'Query_time_count_00' => 'el', + 'Query_time_count_01' => 'em', + 'Query_time_count_02' => 'en', + 'Query_time_count_03' => 'eo', + 'Query_time_count_04' => 'ep', + 'Query_time_count_05' => 'eq', + 'Query_time_count_06' => 'er', + 'Query_time_count_07' => 'es', + 'Query_time_count_08' => 'et', + 'Query_time_count_09' => 'eu', + 'Query_time_count_10' => 'ev', + 'Query_time_count_11' => 'ew', + 'Query_time_count_12' => 'ex', + 'Query_time_count_13' => 'ey', + 'Query_time_total_00' => 'ez', + 'Query_time_total_01' => 'fa', + 'Query_time_total_02' => 'fb', + 'Query_time_total_03' => 'fc', + 'Query_time_total_04' => 'fd', + 'Query_time_total_05' => 'fe', + 'Query_time_total_06' => 'ff', + 'Query_time_total_07' => 'fg', + 'Query_time_total_08' => 'fh', + 'Query_time_total_09' => 'fi', + 'Query_time_total_10' => 'fj', + 'Query_time_total_11' => 'fk', + 'Query_time_total_12' => 'fl', + 'Query_time_total_13' => 'fm', + ); + + # Return the output. + $output = array(); + foreach ($keys as $key => $short ) { + # If the value isn't defined, return -1 which is lower than (most graphs') + # minimum value of 0, so it'll be regarded as a missing value. + $val = isset($status[$key]) ? $status[$key] : -1; + $output[] = "$short:$val"; + } + $result = implode(' ', $output); + if ( $fp ) { + if ( fwrite($fp, $result) === FALSE ) { + die("Can't write '$cache_file'"); + } + fclose($fp); + } + return $result; +} + +# ============================================================================ +# Given INNODB STATUS text, returns a key-value array of the parsed text. Each +# line shows a sample of the input for both standard InnoDB as you would find in +# MySQL 5.0, and XtraDB or enhanced InnoDB from Percona if applicable. Note +# that extra leading spaces are ignored due to trim(). +# ============================================================================ +function get_innodb_array($text) { + $results = array( + 'spin_waits' => array(), + 'spin_rounds' => array(), + 'os_waits' => array(), + 'pending_normal_aio_reads' => null, + 'pending_normal_aio_writes' => null, + 'pending_ibuf_aio_reads' => null, + 'pending_aio_log_ios' => null, + 'pending_aio_sync_ios' => null, + 'pending_log_flushes' => null, + 'pending_buf_pool_flushes' => null, + 'file_reads' => null, + 'file_writes' => null, + 'file_fsyncs' => null, + 'ibuf_inserts' => null, + 'ibuf_merged' => null, + 'ibuf_merges' => null, + 'log_bytes_written' => null, + 'unflushed_log' => null, + 'log_bytes_flushed' => null, + 'pending_log_writes' => null, + 'pending_chkp_writes' => null, + 'log_writes' => null, + 'pool_size' => null, + 'free_pages' => null, + 'database_pages' => null, + 'modified_pages' => null, + 'pages_read' => null, + 'pages_created' => null, + 'pages_written' => null, + 'queries_inside' => null, + 'queries_queued' => null, + 'read_views' => null, + 'rows_inserted' => null, + 'rows_updated' => null, + 'rows_deleted' => null, + 'rows_read' => null, + 'innodb_transactions' => null, + 'unpurged_txns' => null, + 'history_list' => null, + 'current_transactions' => null, + 'hash_index_cells_total' => null, + 'hash_index_cells_used' => null, + 'total_mem_alloc' => null, + 'additional_pool_alloc' => null, + 'last_checkpoint' => null, + 'uncheckpointed_bytes' => null, + 'ibuf_used_cells' => null, + 'ibuf_free_cells' => null, + 'ibuf_cell_count' => null, + 'adaptive_hash_memory' => null, + 'page_hash_memory' => null, + 'dictionary_cache_memory' => null, + 'file_system_memory' => null, + 'lock_system_memory' => null, + 'recovery_system_memory' => null, + 'thread_hash_memory' => null, + 'innodb_sem_waits' => null, + 'innodb_sem_wait_time_ms' => null, + ); + $txn_seen = FALSE; + foreach ( explode("\n", $text) as $line ) { + $line = trim($line); + $row = preg_split('/ +/', $line); + + # SEMAPHORES + if (strpos($line, 'Mutex spin waits') === 0 ) { + # Mutex spin waits 79626940, rounds 157459864, OS waits 698719 + # Mutex spin waits 0, rounds 247280272495, OS waits 316513438 + $results['spin_waits'][] = to_int($row[3]); + $results['spin_rounds'][] = to_int($row[5]); + $results['os_waits'][] = to_int($row[8]); + } + elseif (strpos($line, 'RW-shared spins') === 0 ) { + # RW-shared spins 3859028, OS waits 2100750; RW-excl spins 4641946, OS waits 1530310 + $results['spin_waits'][] = to_int($row[2]); + $results['spin_waits'][] = to_int($row[8]); + $results['os_waits'][] = to_int($row[5]); + $results['os_waits'][] = to_int($row[11]); + } + elseif (strpos($line, 'seconds the semaphore:') > 0) { + # --Thread 907205 has waited at handler/ha_innodb.cc line 7156 for 1.00 seconds the semaphore: + increment($results, 'innodb_sem_waits', 1); + increment($results, + 'innodb_sem_wait_time_ms', to_int($row[9]) * 1000); + } + + # TRANSACTIONS + elseif ( strpos($line, 'Trx id counter') === 0 ) { + # The beginning of the TRANSACTIONS section: start counting + # transactions + # Trx id counter 0 1170664159 + # Trx id counter 861B144C + $results['innodb_transactions'] = make_bigint($row[3], $row[4]); + $txn_seen = TRUE; + } + elseif ( strpos($line, 'Purge done for trx') === 0 ) { + # Purge done for trx's n:o < 0 1170663853 undo n:o < 0 0 + # Purge done for trx's n:o < 861B135D undo n:o < 0 + $purged_to = make_bigint($row[6], $row[7] == 'undo' ? null : $row[7]); + $results['unpurged_txns'] + = big_sub($results['innodb_transactions'], $purged_to); + } + elseif (strpos($line, 'History list length') === 0 ) { + # History list length 132 + $results['history_list'] = to_int($row[3]); + } + elseif ( $txn_seen && strpos($line, '---TRANSACTION') === 0 ) { + # ---TRANSACTION 0, not started, process no 13510, OS thread id 1170446656 + increment($results, 'current_transactions', 1); + if ( strpos($line, 'ACTIVE') > 0 ) { + increment($results, 'active_transactions', 1); + } + } + elseif ( $txn_seen && strpos($line, '------- TRX HAS BEEN') === 0 ) { + # ------- TRX HAS BEEN WAITING 32 SEC FOR THIS LOCK TO BE GRANTED: + increment($results, 'innodb_lock_wait_secs', to_int($row[5])); + } + elseif ( strpos($line, 'read views open inside InnoDB') > 0 ) { + # 1 read views open inside InnoDB + $results['read_views'] = to_int($row[0]); + } + elseif ( strpos($line, 'mysql tables in use') === 0 ) { + # mysql tables in use 2, locked 2 + increment($results, 'innodb_tables_in_use', to_int($row[4])); + increment($results, 'innodb_locked_tables', to_int($row[6])); + } + elseif ( $txn_seen && strpos($line, 'lock struct(s)') > 0 ) { + # 23 lock struct(s), heap size 3024, undo log entries 27 + # LOCK WAIT 12 lock struct(s), heap size 3024, undo log entries 5 + # LOCK WAIT 2 lock struct(s), heap size 368 + if ( strpos($line, 'LOCK WAIT') === 0 ) { + increment($results, 'innodb_lock_structs', to_int($row[2])); + increment($results, 'locked_transactions', 1); + } + else { + increment($results, 'innodb_lock_structs', to_int($row[0])); + } + } + + # FILE I/O + elseif (strpos($line, ' OS file reads, ') > 0 ) { + # 8782182 OS file reads, 15635445 OS file writes, 947800 OS fsyncs + $results['file_reads'] = to_int($row[0]); + $results['file_writes'] = to_int($row[4]); + $results['file_fsyncs'] = to_int($row[8]); + } + elseif (strpos($line, 'Pending normal aio reads:') === 0 ) { + # Pending normal aio reads: 0, aio writes: 0, + $results['pending_normal_aio_reads'] = to_int($row[4]); + $results['pending_normal_aio_writes'] = to_int($row[7]); + } + elseif (strpos($line, 'ibuf aio reads') === 0 ) { + # ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0 + $results['pending_ibuf_aio_reads'] = to_int($row[3]); + $results['pending_aio_log_ios'] = to_int($row[6]); + $results['pending_aio_sync_ios'] = to_int($row[9]); + } + elseif ( strpos($line, 'Pending flushes (fsync)') === 0 ) { + # Pending flushes (fsync) log: 0; buffer pool: 0 + $results['pending_log_flushes'] = to_int($row[4]); + $results['pending_buf_pool_flushes'] = to_int($row[7]); + } + + # INSERT BUFFER AND ADAPTIVE HASH INDEX + elseif (strpos($line, 'Ibuf for space 0: size ') === 0 ) { + # Older InnoDB code seemed to be ready for an ibuf per tablespace. It + # had two lines in the output. Newer has just one line, see below. + # Ibuf for space 0: size 1, free list len 887, seg size 889, is not empty + # Ibuf for space 0: size 1, free list len 887, seg size 889, + $results['ibuf_used_cells'] = to_int($row[5]); + $results['ibuf_free_cells'] = to_int($row[9]); + $results['ibuf_cell_count'] = to_int($row[12]); + } + elseif (strpos($line, 'Ibuf: size ') === 0 ) { + # Ibuf: size 1, free list len 4634, seg size 4636, + $results['ibuf_used_cells'] = to_int($row[2]); + $results['ibuf_free_cells'] = to_int($row[6]); + $results['ibuf_cell_count'] = to_int($row[9]); + } + elseif (strpos($line, ' merged recs, ') > 0 ) { + # 19817685 inserts, 19817684 merged recs, 3552620 merges + $results['ibuf_inserts'] = to_int($row[0]); + $results['ibuf_merged'] = to_int($row[2]); + $results['ibuf_merges'] = to_int($row[5]); + } + elseif (strpos($line, 'Hash table size ') === 0 ) { + # In some versions of InnoDB, the used cells is omitted. + # Hash table size 4425293, used cells 4229064, .... + # Hash table size 57374437, node heap has 72964 buffer(s) <-- no used cells + $results['hash_index_cells_total'] = to_int($row[3]); + $results['hash_index_cells_used'] + = strpos($line, 'used cells') > 0 ? to_int($row[6]) : '0'; + } + + # LOG + elseif (strpos($line, " log i/o's done, ") > 0 ) { + # 3430041 log i/o's done, 17.44 log i/o's/second + # 520835887 log i/o's done, 17.28 log i/o's/second, 518724686 syncs, 2980893 checkpoints + # TODO: graph syncs and checkpoints + $results['log_writes'] = to_int($row[0]); + } + elseif (strpos($line, " pending log writes, ") > 0 ) { + # 0 pending log writes, 0 pending chkp writes + $results['pending_log_writes'] = to_int($row[0]); + $results['pending_chkp_writes'] = to_int($row[4]); + } + elseif (strpos($line, "Log sequence number") === 0 ) { + # This number is NOT printed in hex in InnoDB plugin. + # Log sequence number 13093949495856 //plugin + # Log sequence number 125 3934414864 //normal + $results['log_bytes_written'] + = isset($row[4]) + ? make_bigint($row[3], $row[4]) + : to_int($row[3]); + } + elseif (strpos($line, "Log flushed up to") === 0 ) { + # This number is NOT printed in hex in InnoDB plugin. + # Log flushed up to 13093948219327 + # Log flushed up to 125 3934414864 + $results['log_bytes_flushed'] + = isset($row[5]) + ? make_bigint($row[4], $row[5]) + : to_int($row[4]); + } + elseif (strpos($line, "Last checkpoint at") === 0 ) { + # Last checkpoint at 125 3934293461 + $results['last_checkpoint'] + = isset($row[4]) + ? make_bigint($row[3], $row[4]) + : to_int($row[3]); + } + + # BUFFER POOL AND MEMORY + elseif (strpos($line, "Total memory allocated") === 0 ) { + # Total memory allocated 29642194944; in additional pool allocated 0 + $results['total_mem_alloc'] = to_int($row[3]); + $results['additional_pool_alloc'] = to_int($row[8]); + } + elseif(strpos($line, 'Adaptive hash index ') === 0 ) { + # Adaptive hash index 1538240664 (186998824 + 1351241840) + $results['adaptive_hash_memory'] = to_int($row[3]); + } + elseif(strpos($line, 'Page hash ') === 0 ) { + # Page hash 11688584 + $results['page_hash_memory'] = to_int($row[2]); + } + elseif(strpos($line, 'Dictionary cache ') === 0 ) { + # Dictionary cache 145525560 (140250984 + 5274576) + $results['dictionary_cache_memory'] = to_int($row[2]); + } + elseif(strpos($line, 'File system ') === 0 ) { + # File system 313848 (82672 + 231176) + $results['file_system_memory'] = to_int($row[2]); + } + elseif(strpos($line, 'Lock system ') === 0 ) { + # Lock system 29232616 (29219368 + 13248) + $results['lock_system_memory'] = to_int($row[2]); + } + elseif(strpos($line, 'Recovery system ') === 0 ) { + # Recovery system 0 (0 + 0) + $results['recovery_system_memory'] = to_int($row[2]); + } + elseif(strpos($line, 'Threads ') === 0 ) { + # Threads 409336 (406936 + 2400) + $results['thread_hash_memory'] = to_int($row[1]); + } + elseif(strpos($line, 'innodb_io_pattern ') === 0 ) { + # innodb_io_pattern 0 (0 + 0) + $results['innodb_io_pattern_memory'] = to_int($row[1]); + } + elseif (strpos($line, "Buffer pool size ") === 0 ) { + # The " " after size is necessary to avoid matching the wrong line: + # Buffer pool size 1769471 + # Buffer pool size, bytes 28991012864 + $results['pool_size'] = to_int($row[3]); + } + elseif (strpos($line, "Free buffers") === 0 ) { + # Free buffers 0 + $results['free_pages'] = to_int($row[2]); + } + elseif (strpos($line, "Database pages") === 0 ) { + # Database pages 1696503 + $results['database_pages'] = to_int($row[2]); + } + elseif (strpos($line, "Modified db pages") === 0 ) { + # Modified db pages 160602 + $results['modified_pages'] = to_int($row[3]); + } + elseif (strpos($line, "Pages read ahead") === 0 ) { + # Must do this BEFORE the next test, otherwise it'll get fooled by this + # line from the new plugin (see samples/innodb-015.txt): + # Pages read ahead 0.00/s, evicted without access 0.06/s + # TODO: No-op for now, see issue 134. + } + elseif (strpos($line, "Pages read") === 0 ) { + # Pages read 15240822, created 1770238, written 21705836 + $results['pages_read'] = to_int($row[2]); + $results['pages_created'] = to_int($row[4]); + $results['pages_written'] = to_int($row[6]); + } + + # ROW OPERATIONS + elseif (strpos($line, 'Number of rows inserted') === 0 ) { + # Number of rows inserted 50678311, updated 66425915, deleted 20605903, read 454561562 + $results['rows_inserted'] = to_int($row[4]); + $results['rows_updated'] = to_int($row[6]); + $results['rows_deleted'] = to_int($row[8]); + $results['rows_read'] = to_int($row[10]); + } + elseif (strpos($line, " queries inside InnoDB, ") > 0 ) { + # 0 queries inside InnoDB, 0 queries in queue + $results['queries_inside'] = to_int($row[0]); + $results['queries_queued'] = to_int($row[4]); + } + } + + foreach ( array('spin_waits', 'spin_rounds', 'os_waits') as $key ) { + $results[$key] = to_int(array_sum($results[$key])); + } + $results['unflushed_log'] + = big_sub($results['log_bytes_written'], $results['log_bytes_flushed']); + $results['uncheckpointed_bytes'] + = big_sub($results['log_bytes_written'], $results['last_checkpoint']); + + return $results; +} + + +# ============================================================================ +# Returns a bigint from two ulint or a single hex number. This is tested in +# t/mysql_stats.php and copied, without tests, to ss_get_by_ssh.php. +# ============================================================================ +function make_bigint ($hi, $lo = null) { + debug(array($hi, $lo)); + if ( is_null($lo) ) { + # Assume it is a hex string representation. + return base_convert($hi, 16, 10); + } + else { + $hi = $hi ? $hi : '0'; # Handle empty-string or whatnot + $lo = $lo ? $lo : '0'; + return big_add(big_multiply($hi, 4294967296), $lo); + } +} + +# ============================================================================ +# Extracts the numbers from a string. You can't reliably do this by casting to +# an int, because numbers that are bigger than PHP's int (varies by platform) +# will be truncated. And you can't use sprintf(%u) either, because the maximum +# value that will return on some platforms is 4022289582. So this just handles +# them as a string instead. It extracts digits until it finds a non-digit and +# quits. This is tested in t/mysql_stats.php and copied, without tests, to +# ss_get_by_ssh.php. +# ============================================================================ +function to_int ( $str ) { + debug($str); + global $debug; + preg_match('{(\d+)}', $str, $m); + if ( isset($m[1]) ) { + return $m[1]; + } + elseif ( $debug ) { + print_r(debug_backtrace()); + } + else { + return 0; + } +} + +# ============================================================================ +# Wrap mysql_query in error-handling, and instead of returning the result, +# return an array of arrays in the result. +# ============================================================================ +function run_query($sql, $conn) { + global $debug; + debug($sql); + $result = @mysql_query($sql, $conn); + if ( $debug ) { + $error = @mysql_error($conn); + if ( $error ) { + debug(array($sql, $error)); + die("SQLERR $error in $sql"); + } + } + $array = array(); + while ( $row = @mysql_fetch_array($result) ) { + $array[] = $row; + } + debug(array($sql, $array)); + return $array; +} + +# ============================================================================ +# Safely increments a value that might be null. +# ============================================================================ +function increment(&$arr, $key, $howmuch) { + debug(array($key, $howmuch)); + if ( array_key_exists($key, $arr) && isset($arr[$key]) ) { + $arr[$key] = big_add($arr[$key], $howmuch); + } + else { + $arr[$key] = $howmuch; + } +} + +# ============================================================================ +# Multiply two big integers together as accurately as possible with reasonable +# effort. This is tested in t/mysql_stats.php and copied, without tests, to +# ss_get_by_ssh.php. $force is for testability. +# ============================================================================ +function big_multiply ($left, $right, $force = null) { + if ( function_exists("gmp_mul") && (is_null($force) || $force == 'gmp') ) { + debug(array('gmp_mul', $left, $right)); + return gmp_strval( gmp_mul( $left, $right )); + } + elseif ( function_exists("bcmul") && (is_null($force) || $force == 'bc') ) { + debug(array('bcmul', $left, $right)); + return bcmul( $left, $right ); + } + else { # Or $force == 'something else' + debug(array('sprintf', $left, $right)); + return sprintf("%.0f", $left * $right); + } +} + +# ============================================================================ +# Subtract two big integers as accurately as possible with reasonable effort. +# This is tested in t/mysql_stats.php and copied, without tests, to +# ss_get_by_ssh.php. $force is for testability. +# ============================================================================ +function big_sub ($left, $right, $force = null) { + debug(array($left, $right)); + if ( is_null($left) ) { $left = 0; } + if ( is_null($right) ) { $right = 0; } + if ( function_exists("gmp_sub") && (is_null($force) || $force == 'gmp')) { + debug(array('gmp_sub', $left, $right)); + return gmp_strval( gmp_sub( $left, $right )); + } + elseif ( function_exists("bcsub") && (is_null($force) || $force == 'bc')) { + debug(array('bcsub', $left, $right)); + return bcsub( $left, $right ); + } + else { # Or $force == 'something else' + debug(array('to_int', $left, $right)); + return to_int($left - $right); + } +} + +# ============================================================================ +# Add two big integers together as accurately as possible with reasonable +# effort. This is tested in t/mysql_stats.php and copied, without tests, to +# ss_get_by_ssh.php. $force is for testability. +# ============================================================================ +function big_add ($left, $right, $force = null) { + if ( is_null($left) ) { $left = 0; } + if ( is_null($right) ) { $right = 0; } + if ( function_exists("gmp_add") && (is_null($force) || $force == 'gmp')) { + debug(array('gmp_add', $left, $right)); + return gmp_strval( gmp_add( $left, $right )); + } + elseif ( function_exists("bcadd") && (is_null($force) || $force == 'bc')) { + debug(array('bcadd', $left, $right)); + return bcadd( $left, $right ); + } + else { # Or $force == 'something else' + debug(array('to_int', $left, $right)); + return to_int($left + $right); + } +} + +# ============================================================================ +# Writes to a debugging log. +# ============================================================================ +function debug($val) { + global $debug_log; + if ( !$debug_log ) { + return; + } + if ( $fp = fopen($debug_log, 'a+') ) { + $trace = debug_backtrace(); + $calls = array(); + $i = 0; + $line = 0; + $file = ''; + foreach ( debug_backtrace() as $arr ) { + if ( $i++ ) { + $calls[] = "$arr[function]() at $file:$line"; + } + $line = array_key_exists('line', $arr) ? $arr['line'] : '?'; + $file = array_key_exists('file', $arr) ? $arr['file'] : '?'; + } + if ( !count($calls) ) { + $calls[] = "at $file:$line"; + } + fwrite($fp, date('Y-m-d h:i:s') . ' ' . implode(' <- ', $calls)); + fwrite($fp, "\n" . var_export($val, TRUE) . "\n"); + fclose($fp); + } + else { # Disable logging + print("Warning: disabling debug logging to $debug_log\n"); + $debug_log = FALSE; + } +} + +?> diff --git a/php.ini b/php.ini new file mode 100644 index 0000000..2d3f116 --- /dev/null +++ b/php.ini @@ -0,0 +1,11 @@ +[PHP] +engine = On +expose_php = Off +max_execution_time = 300 +max_input_time = 300 +memory_limit = 128M +error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_WARNING +display_errors = Off + +[Date] +date.timezone = "Europe/Warsaw" \ No newline at end of file diff --git a/zabbix_agentd.conf.d/mysql.conf b/zabbix_agentd.conf.d/mysql.conf new file mode 100644 index 0000000..0cc9a08 --- /dev/null +++ b/zabbix_agentd.conf.d/mysql.conf @@ -0,0 +1,181 @@ +# Add ss_get_mysql_stats.php to /etc/zabbix/bin, make sure 'php -v' returns php version (i.e. php works) +# +# Run also SQL query: +# +# CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'ha7jqnlacwefrs'; +# GRANT REPLICATION CLIENT, SELECT, PROCESS, SHOW DATABASES ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'ha7jqnlacwefrs'; +# FLUSH PRIVILEGES; + +UserParameter=mysqlnetstat[*], ss -nat | grep 3306 | grep -c $1 +UserParameter=mysql.version, HOME=/etc/zabbix mysqladmin version | grep "Server version" | awk '{ print $ 3 }' +UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep alive | wc -l +UserParameter=mysql.threads,HOME=/etc/zabbix mysqladmin status | cut -f3 -d":" | cut -f1 -d"Q" | tr -d ' ' +UserParameter=mysql.questions,HOME=/etc/zabbix mysqladmin status | cut -f4 -d":" | cut -f1 -d"S" | tr -d ' ' +UserParameter=mysql.slowqueries,HOME=/etc/zabbix mysqladmin status | cut -f5 -d":" | cut -f1 -d"O" | tr -d ' ' +UserParameter=mysql.qps,HOME=/etc/zabbix mysqladmin status | cut -f9 -d":" | tr -d ' ' +UserParameter=mysql.connection,echo "show status like 'Max_used_connections'"| HOME=/etc/zabbix mysql -N | tail -1 | awk '{print $2}' +UserParameter=mysql.Key_read_requests,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a0 | awk -F: '{ print $2 }' +UserParameter=mysql.Key_reads,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a1 | awk -F: '{ print $2 }' +UserParameter=mysql.Key_write_requests,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a2 | awk -F: '{ print $2 }' +UserParameter=mysql.Key_writes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a3 | awk -F: '{ print $2 }' +UserParameter=mysql.history_list,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a4 | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_transactions,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a5 | awk -F: '{ print $2 }' +UserParameter=mysql.read_views,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a6 | awk -F: '{ print $2 }' +UserParameter=mysql.current_transactions,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a7 | awk -F: '{ print $2 }' +UserParameter=mysql.locked_transactions,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a8 | awk -F: '{ print $2 }' +UserParameter=mysql.active_transactions,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items a9 | awk -F: '{ print $2 }' +UserParameter=mysql.setting.pool_size,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items aa | awk -F: '{ print $2 }' +UserParameter=mysql.free_pages,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ab | awk -F: '{ print $2 }' +UserParameter=mysql.database_pages,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ac | awk -F: '{ print $2 }' +UserParameter=mysql.modified_pages,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ad | awk -F: '{ print $2 }' +UserParameter=mysql.pages_read,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ae | awk -F: '{ print $2 }' +UserParameter=mysql.pages_created,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items af | awk -F: '{ print $2 }' +UserParameter=mysql.pages_written,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ag | awk -F: '{ print $2 }' +UserParameter=mysql.file_fsyncs,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ah | awk -F: '{ print $2 }' +UserParameter=mysql.file_reads,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ai | awk -F: '{ print $2 }' +UserParameter=mysql.file_writes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items aj | awk -F: '{ print $2 }' +UserParameter=mysql.log_writes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ak | awk -F: '{ print $2 }' +UserParameter=mysql.pending_aio_log_ios,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items al | awk -F: '{ print $2 }' +UserParameter=mysql.pending_aio_sync_ios,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items am | awk -F: '{ print $2 }' +UserParameter=mysql.pending_buf_pool_flushes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items an | awk -F: '{ print $2 }' +UserParameter=mysql.pending_chkp_writes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ao | awk -F: '{ print $2 }' +UserParameter=mysql.pending_ibuf_aio_reads,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ap | awk -F: '{ print $2 }' +UserParameter=mysql.pending_log_flushes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items aq | awk -F: '{ print $2 }' +UserParameter=mysql.pending_log_writes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ar | awk -F: '{ print $2 }' +UserParameter=mysql.pending_normal_aio_reads,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items as | awk -F: '{ print $2 }' +UserParameter=mysql.pending_normal_aio_writes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items at | awk -F: '{ print $2 }' +UserParameter=mysql.ibuf_inserts,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items au | awk -F: '{ print $2 }' +UserParameter=mysql.ibuf_merged,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items av | awk -F: '{ print $2 }' +UserParameter=mysql.ibuf_merges,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items aw | awk -F: '{ print $2 }' +UserParameter=mysql.spin_waits,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ax | awk -F: '{ print $2 }' +UserParameter=mysql.spin_rounds,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ay | awk -F: '{ print $2 }' +UserParameter=mysql.os_waits,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items az | awk -F: '{ print $2 }' +UserParameter=mysql.rows_inserted,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b0 | awk -F: '{ print $2 }' +UserParameter=mysql.rows_updated,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b1 | awk -F: '{ print $2 }' +UserParameter=mysql.rows_deleted,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b2 | awk -F: '{ print $2 }' +UserParameter=mysql.rows_read,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b3 | awk -F: '{ print $2 }' +UserParameter=mysql.Table_locks_waited,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b4 | awk -F: '{ print $2 }' +UserParameter=mysql.Table_locks_immediate,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b5 | awk -F: '{ print $2 }' +UserParameter=mysql.Slow_queries,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b6 | awk -F: '{ print $2 }' +UserParameter=mysql.Open_files,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b7 | awk -F: '{ print $2 }' +UserParameter=mysql.Open_tables,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b8 | awk -F: '{ print $2 }' +UserParameter=mysql.Opened_tables,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items b9 | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_open_files,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ba | awk -F: '{ print $2 }' +UserParameter=mysql.setting.open_files_limit,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bb | awk -F: '{ print $2 }' +UserParameter=mysql.setting.table_cache,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bc | awk -F: '{ print $2 }' +UserParameter=mysql.Aborted_clients,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bd | awk -F: '{ print $2 }' +UserParameter=mysql.Aborted_connects,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items be | awk -F: '{ print $2 }' +UserParameter=mysql.Max_used_connections,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bf | awk -F: '{ print $2 }' +UserParameter=mysql.Slow_launch_threads,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bg | awk -F: '{ print $2 }' +UserParameter=mysql.Threads_cached,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bh | awk -F: '{ print $2 }' +UserParameter=mysql.Threads_connected,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bi | awk -F: '{ print $2 }' +UserParameter=mysql.Threads_created,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bj | awk -F: '{ print $2 }' +UserParameter=mysql.Threads_running,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bk | awk -F: '{ print $2 }' +UserParameter=mysql.setting.max_connections,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bl | awk -F: '{ print $2 }' +UserParameter=mysql.setting.thread_cache_size,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bm | awk -F: '{ print $2 }' +UserParameter=mysql.Connections,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bn | awk -F: '{ print $2 }' +UserParameter=mysql.slave_running,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bo | awk -F: '{ print $2 }' +UserParameter=mysql.slave_stopped,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bp | awk -F: '{ print $2 }' +UserParameter=mysql.Slave_retried_transactions,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bq | awk -F: '{ print $2 }' +UserParameter=mysql.slave_lag,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items br | awk -F: '{ print $2 }' +UserParameter=mysql.Slave_open_temp_tables,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bs | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_free_blocks,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bt | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_free_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bu | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_hits,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bv | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_inserts,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bw | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_lowmem_prunes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bx | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_not_cached,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items by | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_queries_in_cache,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items bz | awk -F: '{ print $2 }' +UserParameter=mysql.Qcache_total_blocks,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c0 | awk -F: '{ print $2 }' +UserParameter=mysql.setting.query_cache_size,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c1 | awk -F: '{ print $2 }' +UserParameter=mysql.Questions,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c2 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_update,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c3 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_insert,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c4 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_select,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c5 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_delete,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c6 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_replace,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c7 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_load,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c8 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_update_multi,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items c9 | awk -F: '{ print $2 }' +UserParameter=mysql.Com_insert_select,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ca | awk -F: '{ print $2 }' +UserParameter=mysql.Com_delete_multi,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cb | awk -F: '{ print $2 }' +UserParameter=mysql.Com_replace_select,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cc | awk -F: '{ print $2 }' +UserParameter=mysql.Select_full_join,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cd | awk -F: '{ print $2 }' +UserParameter=mysql.Select_full_range_join,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ce | awk -F: '{ print $2 }' +UserParameter=mysql.Select_range,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cf | awk -F: '{ print $2 }' +UserParameter=mysql.Select_range_check,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cg | awk -F: '{ print $2 }' +UserParameter=mysql.Select_scan,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ch | awk -F: '{ print $2 }' +UserParameter=mysql.Sort_merge_passes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ci | awk -F: '{ print $2 }' +UserParameter=mysql.Sort_range,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cj | awk -F: '{ print $2 }' +UserParameter=mysql.Sort_rows,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ck | awk -F: '{ print $2 }' +UserParameter=mysql.Sort_scan,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cl | awk -F: '{ print $2 }' +UserParameter=mysql.Created_tmp_tables,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cm | awk -F: '{ print $2 }' +UserParameter=mysql.Created_tmp_disk_tables,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cn | awk -F: '{ print $2 }' +UserParameter=mysql.Created_tmp_files,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items co | awk -F: '{ print $2 }' +UserParameter=mysql.Bytes_sent,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cp | awk -F: '{ print $2 }' +UserParameter=mysql.Bytes_received,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cq | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_log_buffer_size,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cr | awk -F: '{ print $2 }' +UserParameter=mysql.unflushed_log,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cs | awk -F: '{ print $2 }' +UserParameter=mysql.log_bytes_flushed,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ct | awk -F: '{ print $2 }' +UserParameter=mysql.log_bytes_written,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cu | awk -F: '{ print $2 }' +UserParameter=mysql.relay_log_space,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cv | awk -F: '{ print $2 }' +UserParameter=mysql.setting.binlog_cache_size,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cw | awk -F: '{ print $2 }' +UserParameter=mysql.Binlog_cache_disk_use,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cx | awk -F: '{ print $2 }' +UserParameter=mysql.Binlog_cache_use,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cy | awk -F: '{ print $2 }' +UserParameter=mysql.binary_log_space,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items cz | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_locked_tables,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d0 | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_lock_structs,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d1 | awk -F: '{ print $2 }' +UserParameter=mysql.State_closing_tables,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d2 | awk -F: '{ print $2 }' +UserParameter=mysql.State_copying_to_tmp_table,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d3 | awk -F: '{ print $2 }' +UserParameter=mysql.State_end,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d4 | awk -F: '{ print $2 }' +UserParameter=mysql.State_freeing_items,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d5 | awk -F: '{ print $2 }' +UserParameter=mysql.State_init,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d6 | awk -F: '{ print $2 }' +UserParameter=mysql.State_locked,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d7 | awk -F: '{ print $2 }' +UserParameter=mysql.State_login,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d8 | awk -F: '{ print $2 }' +UserParameter=mysql.State_preparing,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items d9 | awk -F: '{ print $2 }' +UserParameter=mysql.State_reading_from_net,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items da | awk -F: '{ print $2 }' +UserParameter=mysql.State_sending_data,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items db | awk -F: '{ print $2 }' +UserParameter=mysql.State_sorting_result,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dc | awk -F: '{ print $2 }' +UserParameter=mysql.State_statistics,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dd | awk -F: '{ print $2 }' +UserParameter=mysql.State_updating,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items de | awk -F: '{ print $2 }' +UserParameter=mysql.State_writing_to_net,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items df | awk -F: '{ print $2 }' +UserParameter=mysql.State_none,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dg | awk -F: '{ print $2 }' +UserParameter=mysql.State_other,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dh | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_commit,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items di | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_delete,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dj | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_discover,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dk | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_prepare,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dl | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_read_first,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dm | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_read_key,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dn | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_read_next,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items do | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_read_prev,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dp | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_read_rnd,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dq | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_read_rnd_next,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dr | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_rollback,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ds | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_savepoint,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dt | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_savepoint_rollback,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items du | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_update,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dv | awk -F: '{ print $2 }' +UserParameter=mysql.Handler_write,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dw | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_tables_in_use,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dx | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_lock_wait_secs,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dy | awk -F: '{ print $2 }' +UserParameter=mysql.hash_index_cells_total,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items dz | awk -F: '{ print $2 }' +UserParameter=mysql.hash_index_cells_used,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e0 | awk -F: '{ print $2 }' +UserParameter=mysql.total_mem_alloc,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e1 | awk -F: '{ print $2 }' +UserParameter=mysql.additional_pool_alloc,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e2 | awk -F: '{ print $2 }' +UserParameter=mysql.uncheckpointed_bytes,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e3 | awk -F: '{ print $2 }' +UserParameter=mysql.ibuf_used_cells,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e4 | awk -F: '{ print $2 }' +UserParameter=mysql.ibuf_free_cells,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e5 | awk -F: '{ print $2 }' +UserParameter=mysql.ibuf_cell_count,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e6 | awk -F: '{ print $2 }' +UserParameter=mysql.adaptive_hash_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e7 | awk -F: '{ print $2 }' +UserParameter=mysql.page_hash_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e8 | awk -F: '{ print $2 }' +UserParameter=mysql.dictionary_cache_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items e9 | awk -F: '{ print $2 }' +UserParameter=mysql.file_system_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ea | awk -F: '{ print $2 }' +UserParameter=mysql.lock_system_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items eb | awk -F: '{ print $2 }' +UserParameter=mysql.recovery_system_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ec | awk -F: '{ print $2 }' +UserParameter=mysql.thread_hash_memory,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ed | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_sem_waits,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ee | awk -F: '{ print $2 }' +UserParameter=mysql.innodb_sem_wait_time_ms,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ef | awk -F: '{ print $2 }' +UserParameter=mysql.Key_buf_bytes_unflushed,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items eg | awk -F: '{ print $2 }' +UserParameter=mysql.Key_buf_bytes_used,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items eh | awk -F: '{ print $2 }' +UserParameter=mysql.setting.key_buffer_size,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ei | awk -F: '{ print $2 }' +UserParameter=mysql.Innodb_row_lock_time,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ej | awk -F: '{ print $2 }' +UserParameter=mysql.Innodb_row_lock_waits,php -qc /etc/zabbix/php.ini /etc/zabbix/bin/ss_get_mysql_stats.php --host localhost --items ek | awk -F: '{ print $2 }' From 210e463ab62e7a9b5f923e0d93e578aee16bc400 Mon Sep 17 00:00:00 2001 From: kamil Date: Wed, 12 Aug 2015 09:14:50 +0200 Subject: [PATCH 4/9] Adddding new monitoring Templates --- README.md | 47 +- bin/lm_sensors.sh | 13 + sudoers.d/zabbix | 4 + templates/Template_App_Amavisd.xml | 82 + templates/Template_App_Dovecot.xml | 251 + templates/Template_App_Etherpad.xml | 188 + templates/Template_App_Exim.xml | 293 + templates/Template_App_MySQL.xml | 11133 ++++++++++++++++++++++++ templates/Template_App_lm_sensors.xml | 914 ++ zabbix_agentd.conf.d/bind.conf | 1 + zabbix_agentd.conf.d/dovecot.conf | 1 + zabbix_agentd.conf.d/exim.conf | 2 + zabbix_agentd.conf.d/linux.conf | 8 +- zabbix_agentd.conf.d/sensors.conf | 1 + 14 files changed, 12930 insertions(+), 8 deletions(-) create mode 100644 bin/lm_sensors.sh create mode 100644 templates/Template_App_Amavisd.xml create mode 100644 templates/Template_App_Dovecot.xml create mode 100644 templates/Template_App_Etherpad.xml create mode 100644 templates/Template_App_Exim.xml create mode 100644 templates/Template_App_MySQL.xml create mode 100644 templates/Template_App_lm_sensors.xml create mode 100644 zabbix_agentd.conf.d/bind.conf create mode 100644 zabbix_agentd.conf.d/dovecot.conf create mode 100644 zabbix_agentd.conf.d/exim.conf create mode 100644 zabbix_agentd.conf.d/sensors.conf diff --git a/README.md b/README.md index 16f0433..b75b26c 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,49 @@ Template App APC ====== Monitoring memory usage of APC (http://pecl.php.net/package/APC) module. File ```bin/apc-stats.php``` need to be accessed via HTTP for example http://127.0.0.1/apc-stats.php +Template App Amavisd +====== +Monitoring for Amavisd service. + +Template App BIND +====== +Monitoring for BIND (DNS server) service. Checking also version of BIND. + +Template App Clamav +====== +Monitoring for ClamAV. + +Template App Dovecot +====== +Monitoring for Dovecot. + +Template App Etherpad +====== +Monitoring for Etherpad (http://etherpad.org/) + +Template App Exim +===== +Monitoring for mail server Exim. + +Template App lm_sensors +===== +Monitoring CPU and MotherBoard temperatures by lm_senros module. + +Template App mdadm +====== +Monitoring mdadm arrays. Checking number of corrupted disk arrays. + +Template App MySQL +===== +Monitoring for MySQL 5.5, 5.6 and 5.7. It is using PHP-cli for monitoring. You need also add zabbix user to database. Please run SQL query: +``` +CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'ha7jqnlacwefrs'; +GRANT REPLICATION CLIENT, SELECT, PROCESS, SHOW DATABASES ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'ha7jqnlacwefrs'; +FLUSH PRIVILEGES; +``` + +If you want change password, you need to edit files ```.my.cnf``` and also in file ```bin/ss_get_mysql_stats.php```. + Template App Brocade HBA ====== Monitoring for Network Adapters - Brocade. Template is using Discovery to create Items and Triggers. You need also add SUDO for zabbix user: ```zabbix ALL=(ALL) NOPASSWD: /usr/bin/bcu``` @@ -206,11 +249,7 @@ Monitoring for S.M.A.R.T. enabled storage devices (HDD's, SSD's and other). Uses Template App PowerPath ====== -<<<<<<< HEAD -EMC PowerPath: Host-based software for automated data path management, failover and recovery, and optimized load balancing. PowerPath automates, standardizes, and optimizes data paths in physical and virtual environments as well as cloud deployments to deliver high availability and performance. -======= Monitoring for EMC PowerPath: Host-based software for automated data path management, failover and recovery, and optimized load balancing. PowerPath automates, standardizes, and optimizes data paths in physical and virtual environments as well as cloud deployments to deliver high availability and performance. ->>>>>>> 3ed283df96fdc7b7052da5e6dc946265e1761962 Template Security ====== diff --git a/bin/lm_sensors.sh b/bin/lm_sensors.sh new file mode 100644 index 0000000..b974b7c --- /dev/null +++ b/bin/lm_sensors.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +cachefile='/tmp/lm_sensors.log' +if [ -f $cachefile ]; then + cachefileage=$(($(date +%s) - $(stat -c %Y $cachefile))) + if [ $cachefileage -gt 300 ]; then + sensors > $cachefile + fi +else + sensors > $cachefile +fi + +cat $cachefile | grep "$1" | cut -d ":" -f 2 | sed -e 's/^[ \t]*//' | cut -d " " -f 1 | tr -d "+°C?" \ No newline at end of file diff --git a/sudoers.d/zabbix b/sudoers.d/zabbix index 4a7e637..d131954 100644 --- a/sudoers.d/zabbix +++ b/sudoers.d/zabbix @@ -1,8 +1,12 @@ zabbix ALL=(ALL) NOPASSWD: /sbin/iptables -L INPUT -n zabbix ALL=(ALL) NOPASSWD: /usr/sbin/nscd -g +zabbix ALL=(ALL) NOPASSWD: /usr/sbin/smartctl zabbix ALL=(ALL) NOPASSWD: /usr/sbin/rabbitmqctl zabbix ALL=(ALL) NOPASSWD: /usr/bin/php /etc/zabbix/bin/rabbit.php +apache ALL=(ALL) NOPASSWD: /usr/bin/scanimage +zabbix ALL=(ALL) NOPASSWD: /usr/sbin/exim -bp zabbix ALL=(ALL) NOPASSWD: /opt/dell/srvadmin/bin/omreport zabbix ALL=(ALL) NOPASSWD: /usr/bin/bcu zabbix ALL=(ALL) NOPASSWD: /sbin/powermt +zabbix ALL=(ALL) NOPASSWD: /bin/find /var/spool/postfix/ -type f Defaults:zabbix !requiretty diff --git a/templates/Template_App_Amavisd.xml b/templates/Template_App_Amavisd.xml new file mode 100644 index 0000000..cc2a7a5 --- /dev/null +++ b/templates/Template_App_Amavisd.xml @@ -0,0 +1,82 @@ + + + 2.0 + 2015-08-12T06:52:13Z + + + Templates + + + + + + + + {Template App Amavisd:proc.num[amavisd].last(0)}=0 + Service amavis is not running + + 0 + 3 + + 0 + + + + diff --git a/templates/Template_App_Dovecot.xml b/templates/Template_App_Dovecot.xml new file mode 100644 index 0000000..5f77f14 --- /dev/null +++ b/templates/Template_App_Dovecot.xml @@ -0,0 +1,251 @@ + + + 2.0 + 2015-08-12T06:59:56Z + + + Templates + + + + + + + + {Template App Dovecot:chkconfig[dovecot].last(0)}=0 + Dovecot is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App Dovecot:dovecot.version.diff(0)}>0 + Dovecot version has changed + + 0 + 1 + + 0 + + + + {Template App Dovecot:net.tcp.service[imap].last(0)}=0 + IMAP server is down + + 0 + 4 + + 0 + + + + {Template App Dovecot:net.tcp.service[pop].last(0)}=0 + POP3 server is down + + 0 + 4 + + 0 + + + + diff --git a/templates/Template_App_Etherpad.xml b/templates/Template_App_Etherpad.xml new file mode 100644 index 0000000..b4050e6 --- /dev/null +++ b/templates/Template_App_Etherpad.xml @@ -0,0 +1,188 @@ + + + 2.0 + 2015-08-12T07:00:26Z + + + Templates + + + + + + + + {Template App Etherpad:chkconfig[etherpad].last(0)}=0 + Etherpad is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App Etherpad:proc.num[node].last(0)}=0 or {Template App Etherpad:net.tcp.service[tcp,,10000].last(0)}=0 + Etherpad is not running + + 0 + 3 + + 0 + + + + diff --git a/templates/Template_App_Exim.xml b/templates/Template_App_Exim.xml new file mode 100644 index 0000000..2930c16 --- /dev/null +++ b/templates/Template_App_Exim.xml @@ -0,0 +1,293 @@ + + + 2.0 + 2015-08-12T07:00:43Z + + + Templates + + + + + + + + {Template App Exim:chkconfig[exim].last(0)}=0 + Exim is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App Exim:exim.version.diff(0)}>0 + Exim version has changed + + 0 + 1 + + 0 + + + + {Template App Exim:mailqueue-exim.min(3600)}>500 + High mail queue ({ITEM.LASTVALUE} mails) + + 0 + 3 + + 0 + + + + {Template App Exim:mailqueue-exim.min(21600)}>50 + High old mail queue ({ITEM.LASTVALUE} mails) + + 0 + 2 + + 0 + + + + {Template App Exim:net.tcp.service[smtp].last(0)}=0 + SMTP server is down + + 0 + 4 + + 0 + + + + + + Mail queue + 900 + 200 + 0.0000 + 100.0000 + 1 + 0 + 0 + 0 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 5 + C80000 + 0 + 2 + 0 + + Template App Exim + mailqueue-exim + + + + + + diff --git a/templates/Template_App_MySQL.xml b/templates/Template_App_MySQL.xml new file mode 100644 index 0000000..c5a082a --- /dev/null +++ b/templates/Template_App_MySQL.xml @@ -0,0 +1,11133 @@ + + + 2.0 + 2015-08-12T06:50:17Z + + + Templates + + + + + + + + {Template App MySQL:vfs.file.exists[/etc/my.cnf].last()}=0 + /etc/my.cnf does not exist (missing file) + + 0 + 4 + + 0 + + + + {Template App MySQL:vfs.file.cksum[/etc/my.cnf].diff(0)}>0 + /etc/my.cnf has been changed + + 0 + 1 + + 0 + + + + {Template App MySQL:mysql.innodb_lock_structs.delta(900)}>100 + InnoDB lock structures more than 100 in 15m + + 0 + 2 + + 0 + + + + {Template App MySQL:mysql.uncheckpointed_bytes.delta(600)}>300M + InnoDB uncheckpointed bytes in the last 10m > 300MB + + 0 + 2 + + 0 + + + + {Template App MySQL:vfs.fs.size[/var/lib/mysql,pfree].last(0)}<1 + Low free (<1%) disk space, volume /san/mysql-fs + + 0 + 5 + + 0 + + + + {Template App MySQL:vfs.fs.inode[/var/lib/mysql,pfree].last(0)}<1 + Low free (<1%) inodes, volume /san/mysql-fs + + 0 + 5 + + 0 + + + + {Template App MySQL:vfs.fs.size[/var/lib/mysql,pfree].last(0)}<5 + Low free (<5%) disk space, volume /san/mysql-fs + + 0 + 4 + + 0 + + + + {Template App MySQL:vfs.fs.inode[/var/lib/mysql,pfree].last(0)}<5 + Low free (<5%) inodes, volume /san/mysql-fs + + 0 + 4 + + 0 + + + + {Template App MySQL:vfs.fs.size[/var/lib/mysql,pfree].last(0)}<10 + Low free (<10%) disk space, volume /san/mysql-fs + + 0 + 3 + + 0 + + + + {Template App MySQL:vfs.fs.inode[/var/lib/mysql,pfree].last(0)}<10 + Low free (<10%) inodes, volume /san/mysql-fs + + 0 + 3 + + 0 + + + + {Template App MySQL:vfs.fs.size[/var/lib/mysql,pfree].last(0)}<20 + Low free (<20%) disk space, volume /san/mysql-fs + + 0 + 2 + + 0 + + + + {Template App MySQL:vfs.fs.inode[/var/lib/mysql,pfree].last(0)}<20 + Low free (<20%) inodes, volume /san/mysql-fs + + 0 + 2 + + 0 + + + + {Template App MySQL:mysql.Threads_connected.last(0)}>300 + More than 300 threads + + 0 + 3 + + 0 + + + + {Template App MySQL:mysql.Threads_connected.last(0)}>500 + More than 500 threads + + 0 + 3 + + 0 + + + + {Template App MySQL:chkconfig[mysql].last(0)}=0 + MySQL is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App MySQL:proc.num[mysqld].last(0)}<1 + Mysql is not running + + 0 + 5 + + 0 + + + + {Template App MySQL:mysql.version.diff(0)}>0 + MySQL server version has changed + + 0 + 1 + + 0 + + + + {Template App MySQL:mysql.connection.last(0)}>300 + Mysql too many connections: {ITEM.LASTVALUE} + + 0 + 5 + + 0 + + + + {Template App MySQL:mysql.connection.last(0)}>2500 + Mysql too many connections: {ITEM.LASTVALUE} + + 0 + 5 + + 0 + + + + {Template App MySQL:mysql.Table_locks_waited.delta(300)}>10 + Server is waiting on table locks + + 0 + 2 + + 0 + + + + ({TRIGGER.VALUE}=0 and {Template App MySQL:mysql.State_copying_to_tmp_table.count(900,1,"ge")}>10) or ({TRIGGER.VALUE}=1 and {Template App MySQL:mysql.State_copying_to_tmp_table.count(900,1,"ge")}>0) + Thread in state Copying_to_tmp_table for more than 15 min + + 0 + 2 + + 0 + + + + + + [MySQL] Command Counters + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 5 + D8ACE0 + 1 + 2 + 0 + + Template App MySQL + mysql.Com_update_multi + + + + 1 + 1 + FFC3C0 + 1 + 2 + 0 + + Template App MySQL + mysql.Questions + + + + 2 + 5 + 00B99B + 1 + 2 + 0 + + Template App MySQL + mysql.Com_replace_select + + + + 3 + 5 + 2175D9 + 1 + 2 + 0 + + Template App MySQL + mysql.Com_replace + + + + 4 + 5 + FFF200 + 1 + 2 + 0 + + Template App MySQL + mysql.Com_insert + + + + 5 + 5 + FF7D00 + 1 + 2 + 0 + + Template App MySQL + mysql.Com_delete + + + + 6 + 1 + FF0000 + 1 + 2 + 0 + + Template App MySQL + mysql.Com_select + + + + 7 + 5 + 00CF00 + 1 + 2 + 0 + + Template App MySQL + mysql.Com_update + + + + 8 + 5 + 942D0C + 1 + 2 + 0 + + Template App MySQL + mysql.Com_delete_multi + + + + 9 + 5 + 55009D + 1 + 2 + 0 + + Template App MySQL + mysql.Com_load + + + + 10 + 5 + AAABA1 + 1 + 2 + 0 + + Template App MySQL + mysql.Com_insert_select + + + + + + [MySQL] Connections + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 2 + FF7D00 + 1 + 2 + 0 + + Template App MySQL + mysql.Threads_connected + + + + 1 + 1 + C0C0C0 + 1 + 2 + 0 + + Template App MySQL + mysql.setting.max_connections + + + + 2 + 0 + FF3932 + 1 + 2 + 0 + + Template App MySQL + mysql.Aborted_clients + + + + 3 + 0 + 4444FF + 1 + 2 + 0 + + Template App MySQL + mysql.Connections + + + + 4 + 0 + 00FF00 + 1 + 2 + 0 + + Template App MySQL + mysql.Aborted_connects + + + + 5 + 1 + FFD660 + 1 + 2 + 0 + + Template App MySQL + mysql.Max_used_connections + + + + + + [MySQL] Database Filesystem Usage + 900 + 200 + 0.0000 + 100.0000 + 0 + 0 + 1 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 1 + 1 + 00C800 + 0 + 2 + 0 + + Template App MySQL + vfs.fs.size[/var/lib/mysql,pfree] + + + + 0 + 1 + C80000 + 0 + 2 + 0 + + Template App MySQL + vfs.fs.size[/var/lib/mysql,pused] + + + + + + [MySQL] Files and Tables + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + DE0056 + 1 + 2 + 0 + + Template App MySQL + mysql.Opened_tables + + + + 1 + 0 + 4A6959 + 1 + 2 + 0 + + Template App MySQL + mysql.Open_tables + + + + 2 + 0 + 1D1159 + 1 + 2 + 0 + + Template App MySQL + mysql.Open_files + + + + 3 + 1 + D09887 + 1 + 2 + 0 + + Template App MySQL + mysql.setting.table_cache + + + + + + [MySQL] Handlers + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 5 + C02942 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_read_next + + + + 1 + 5 + 8C286E + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_read_first + + + + 2 + 5 + BDB8B3 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_delete + + + + 3 + 5 + BAB27F + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_read_key + + + + 4 + 5 + 5A3D31 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_read_rnd + + + + 5 + 5 + 69D2E7 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_read_rnd_next + + + + 6 + 5 + FA6900 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_read_prev + + + + 7 + 1 + 4D4A47 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_write + + + + 8 + 5 + C79F71 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_update + + + + + + [MySQL] InnoDB Active/Locked Transactions + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + C0C0C0 + 1 + 2 + 0 + + Template App MySQL + mysql.active_transactions + + + + 1 + 0 + FF0000 + 1 + 2 + 0 + + Template App MySQL + mysql.locked_transactions + + + + + + [MySQL] InnoDB Adaptive Hash Index + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + D9C7A3 + 1 + 2 + 0 + + Template App MySQL + mysql.hash_index_cells_used + + + + 1 + 1 + 0C4E5D + 1 + 2 + 0 + + Template App MySQL + mysql.hash_index_cells_total + + + + + + [MySQL] InnoDB Buffer Pool + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + 3D1500 + 1 + 2 + 0 + + Template App MySQL + mysql.setting.pool_size + + + + 1 + 5 + AA3B27 + 1 + 2 + 0 + + Template App MySQL + mysql.free_pages + + + + 2 + 1 + EDAA41 + 1 + 2 + 0 + + Template App MySQL + mysql.database_pages + + + + 3 + 0 + 13343B + 1 + 2 + 0 + + Template App MySQL + mysql.modified_pages + + + + + + [MySQL] InnoDB Buffer Pool Activity + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 5 + E6D883 + 1 + 2 + 0 + + Template App MySQL + mysql.pages_read + + + + 1 + 1 + D6883A + 1 + 2 + 0 + + Template App MySQL + mysql.pages_created + + + + 2 + 1 + 55AD84 + 1 + 2 + 0 + + Template App MySQL + mysql.pages_written + + + + + + [MySQL] InnoDB Checkpoint Age + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 661100 + 1 + 2 + 0 + + Template App MySQL + mysql.uncheckpointed_bytes + + + + + + [MySQL] InnoDB Current Lock Waits + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 201A33 + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_lock_wait_secs + + + + + + [MySQL] InnoDB I/O + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0ABFCC + 1 + 2 + 0 + + Template App MySQL + mysql.file_fsyncs + + + + 1 + 0 + 402204 + 1 + 2 + 0 + + Template App MySQL + mysql.file_reads + + + + 2 + 0 + B3092B + 1 + 2 + 0 + + Template App MySQL + mysql.file_writes + + + + 3 + 0 + FFBF00 + 1 + 2 + 0 + + Template App MySQL + mysql.log_writes + + + + + + [MySQL] InnoDB I/O Pending + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 4444FF + 1 + 2 + 0 + + Template App MySQL + mysql.pending_log_flushes + + + + 1 + 0 + FFF200 + 1 + 2 + 0 + + Template App MySQL + mysql.pending_buf_pool_flushes + + + + 2 + 0 + FF7D00 + 1 + 2 + 0 + + Template App MySQL + mysql.pending_aio_sync_ios + + + + 3 + 0 + 8F9286 + 1 + 2 + 0 + + Template App MySQL + mysql.pending_normal_aio_writes + + + + 4 + 0 + 00A348 + 1 + 2 + 0 + + Template App MySQL + mysql.pending_chkp_writes + + + + 5 + 0 + 6DC8FE + 1 + 2 + 0 + + Template App MySQL + mysql.pending_ibuf_aio_reads + + + + 6 + 0 + B90054 + 1 + 2 + 0 + + Template App MySQL + mysql.pending_normal_aio_reads + + + + 7 + 0 + FF0000 + 1 + 2 + 0 + + Template App MySQL + mysql.pending_aio_log_ios + + + + 8 + 0 + 55009D + 1 + 2 + 0 + + Template App MySQL + mysql.pending_log_writes + + + + + + [MySQL] InnoDB Insert Buffer + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 862F2F + 1 + 2 + 0 + + Template App MySQL + mysql.ibuf_merges + + + + 1 + 0 + 157419 + 1 + 2 + 0 + + Template App MySQL + mysql.ibuf_inserts + + + + 2 + 0 + 0000FF + 1 + 2 + 0 + + Template App MySQL + mysql.ibuf_merged + + + + + + [MySQL] InnoDB Insert Buffer Usage + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + 793A57 + 1 + 2 + 0 + + Template App MySQL + mysql.ibuf_cell_count + + + + 1 + 1 + 8C873E + 1 + 2 + 0 + + Template App MySQL + mysql.ibuf_used_cells + + + + 2 + 5 + A38A5F + 1 + 2 + 0 + + Template App MySQL + mysql.ibuf_free_cells + + + + + + [MySQL] InnoDB Internal Hash Memory Usage + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 5 + A38A5F + 1 + 2 + 0 + + Template App MySQL + mysql.lock_system_memory + + + + 1 + 5 + 8C873E + 1 + 2 + 0 + + Template App MySQL + mysql.page_hash_memory + + + + 2 + 5 + 23B0BA + 1 + 2 + 0 + + Template App MySQL + mysql.thread_hash_memory + + + + 3 + 5 + E97F02 + 1 + 2 + 0 + + Template App MySQL + mysql.recovery_system_memory + + + + 4 + 1 + 793A57 + 1 + 2 + 0 + + Template App MySQL + mysql.adaptive_hash_memory + + + + 5 + 5 + 4D3339 + 1 + 2 + 0 + + Template App MySQL + mysql.file_system_memory + + + + 6 + 5 + D1C5A5 + 1 + 2 + 0 + + Template App MySQL + mysql.dictionary_cache_memory + + + + + + [MySQL] InnoDB Lock Structures + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0C4E5D + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_lock_structs + + + + + + [MySQL] InnoDB Log + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + AFECED + 1 + 2 + 0 + + Template App MySQL + mysql.unflushed_log + + + + 1 + 1 + 5B8257 + 1 + 2 + 0 + + Template App MySQL + mysql.log_bytes_written + + + + 2 + 0 + AB4253 + 1 + 2 + 0 + + Template App MySQL + mysql.log_bytes_flushed + + + + 3 + 1 + 6E3803 + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_log_buffer_size + + + + + + [MySQL] InnoDB Memory Allocation + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + 53777A + 1 + 2 + 0 + + Template App MySQL + mysql.total_mem_alloc + + + + 1 + 0 + C02942 + 1 + 2 + 0 + + Template App MySQL + mysql.additional_pool_alloc + + + + + + [MySQL] InnoDB Row Lock Time + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + B11D03 + 1 + 2 + 0 + + Template App MySQL + mysql.Innodb_row_lock_time + + + + + + [MySQL] InnoDB Row Lock Waits + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + E84A5F + 1 + 2 + 0 + + Template App MySQL + mysql.Innodb_row_lock_waits + + + + + + [MySQL] InnoDB Row Operations + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + AFECED + 1 + 2 + 0 + + Template App MySQL + mysql.rows_read + + + + 1 + 5 + EA8F00 + 1 + 2 + 0 + + Template App MySQL + mysql.rows_updated + + + + 2 + 5 + 35962B + 1 + 2 + 0 + + Template App MySQL + mysql.rows_inserted + + + + 3 + 5 + DA4725 + 1 + 2 + 0 + + Template App MySQL + mysql.rows_deleted + + + + + + [MySQL] InnoDB Semaphores + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 4444FF + 1 + 2 + 0 + + Template App MySQL + mysql.spin_waits + + + + 1 + 0 + 157419 + 1 + 2 + 0 + + Template App MySQL + mysql.os_waits + + + + 2 + 0 + 306078 + 1 + 2 + 0 + + Template App MySQL + mysql.spin_rounds + + + + + + [MySQL] InnoDB Semaphore Waits + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + 7020AF + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_sem_waits + + + + + + [MySQL] InnoDB Semaphore Wait Time + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + 708226 + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_sem_wait_time_ms + + + + + + [MySQL] InnoDB Tables In Use + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 663344 + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_locked_tables + + + + 1 + 1 + D99362 + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_tables_in_use + + + + + + [MySQL] InnoDB Transactions + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 8F005C + 1 + 2 + 0 + + Template App MySQL + mysql.innodb_transactions + + + + 1 + 0 + 74C366 + 1 + 2 + 0 + + Template App MySQL + mysql.read_views + + + + 2 + 0 + 4444FF + 1 + 2 + 0 + + Template App MySQL + mysql.current_transactions + + + + 3 + 0 + FF7D00 + 1 + 2 + 0 + + Template App MySQL + mysql.history_list + + + + + + [MySQL] MyISAM Indexes + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + 157419 + 1 + 2 + 0 + + Template App MySQL + mysql.Key_read_requests + + + + 1 + 0 + AFECED + 1 + 2 + 0 + + Template App MySQL + mysql.Key_reads + + + + 2 + 0 + F51D30 + 1 + 2 + 0 + + Template App MySQL + mysql.Key_writes + + + + 3 + 1 + 862F2F + 1 + 2 + 0 + + Template App MySQL + mysql.Key_write_requests + + + + + + [MySQL] MyISAM Key Cache + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + FECEA8 + 1 + 2 + 0 + + Template App MySQL + mysql.Key_buf_bytes_unflushed + + + + 1 + 1 + 99B898 + 1 + 2 + 0 + + Template App MySQL + mysql.setting.key_buffer_size + + + + 2 + 1 + 2A363B + 1 + 2 + 0 + + Template App MySQL + mysql.Key_buf_bytes_used + + + + + + [MySQL] MySQL Binary/Relay Logs + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 8F005C + 1 + 2 + 0 + + Template App MySQL + mysql.relay_log_space + + + + 1 + 0 + 35962B + 1 + 2 + 0 + + Template App MySQL + mysql.Binlog_cache_use + + + + 2 + 0 + FF0000 + 1 + 2 + 0 + + Template App MySQL + mysql.Binlog_cache_disk_use + + + + 3 + 0 + 8D00BA + 1 + 2 + 0 + + Template App MySQL + mysql.binary_log_space + + + + + + [MySQL] Network Traffic + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 1 + 4B2744 + 1 + 2 + 0 + + Template App MySQL + mysql.Bytes_sent + + + + 1 + 1 + E4C576 + 1 + 2 + 0 + + Template App MySQL + mysql.Bytes_received + + + + + + [MySQL] Processlist + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 5 + D1642E + 1 + 2 + 0 + + Template App MySQL + mysql.State_end + + + + 1 + 5 + 54382A + 1 + 2 + 0 + + Template App MySQL + mysql.State_sending_data + + + + 2 + 5 + DE0056 + 1 + 2 + 0 + + Template App MySQL + mysql.State_locked + + + + 3 + 5 + 907890 + 1 + 2 + 0 + + Template App MySQL + mysql.State_init + + + + 4 + 5 + B56414 + 1 + 2 + 0 + + Template App MySQL + mysql.State_updating + + + + 5 + 5 + FF7F00 + 1 + 2 + 0 + + Template App MySQL + mysql.State_reading_from_net + + + + 6 + 5 + 487860 + 1 + 2 + 0 + + Template App MySQL + mysql.State_freeing_items + + + + 7 + 5 + B83A04 + 1 + 2 + 0 + + Template App MySQL + mysql.State_sorting_result + + + + 8 + 5 + 521808 + 1 + 2 + 0 + + Template App MySQL + mysql.State_none + + + + 9 + 5 + 6E3803 + 1 + 2 + 0 + + Template App MySQL + mysql.State_statistics + + + + 10 + 5 + 783030 + 1 + 2 + 0 + + Template App MySQL + mysql.State_preparing + + + + 11 + 5 + 1693A7 + 1 + 2 + 0 + + Template App MySQL + mysql.State_login + + + + 12 + 5 + 194240 + 1 + 2 + 0 + + Template App MySQL + mysql.State_other + + + + 13 + 5 + 784890 + 1 + 2 + 0 + + Template App MySQL + mysql.State_copying_to_tmp_table + + + + 14 + 1 + DE0056 + 1 + 2 + 0 + + Template App MySQL + mysql.State_closing_tables + + + + 15 + 5 + 6E645A + 1 + 2 + 0 + + Template App MySQL + mysql.State_writing_to_net + + + + + + [MySQL] QPS + 900 + 200 + 0.0000 + 100.0000 + 0 + 0 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 009900 + 0 + 2 + 0 + + Template App MySQL + mysql.qps + + + + + + [MySQL] Query Cache + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 2 + 4444FF + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_queries_in_cache + + + + 1 + 0 + 00A0C1 + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_not_cached + + + + 2 + 0 + FF0000 + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_lowmem_prunes + + + + 3 + 0 + 157419 + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_inserts + + + + 4 + 2 + EAAF00 + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_hits + + + + + + [MySQL] Query Cache Memory + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 8D00BA + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_total_blocks + + + + 1 + 0 + 837C04 + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_free_blocks + + + + 2 + 1 + FFC3C0 + 1 + 2 + 0 + + Template App MySQL + mysql.Qcache_free_memory + + + + 3 + 1 + 74C366 + 1 + 2 + 0 + + Template App MySQL + mysql.setting.query_cache_size + + + + + + [MySQL] Select Types + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 5 + 13343B + 1 + 2 + 0 + + Template App MySQL + mysql.Select_range_check + + + + 1 + 5 + AA3B27 + 1 + 2 + 0 + + Template App MySQL + mysql.Select_full_range_join + + + + 2 + 5 + EDAA41 + 1 + 2 + 0 + + Template App MySQL + mysql.Select_range + + + + 3 + 1 + 3D1500 + 1 + 2 + 0 + + Template App MySQL + mysql.Select_full_join + + + + 4 + 5 + 686240 + 1 + 2 + 0 + + Template App MySQL + mysql.Select_scan + + + + + + [MySQL] Sorts + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 157419 + 1 + 2 + 0 + + Template App MySQL + mysql.Sort_range + + + + 1 + 1 + FFAB00 + 1 + 2 + 0 + + Template App MySQL + mysql.Sort_rows + + + + 2 + 0 + 4444FF + 1 + 2 + 0 + + Template App MySQL + mysql.Sort_scan + + + + 3 + 0 + DA4725 + 1 + 2 + 0 + + Template App MySQL + mysql.Sort_merge_passes + + + + + + [MySQL] Table Locks + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 002A8F + 1 + 2 + 0 + + Template App MySQL + mysql.Table_locks_immediate + + + + 1 + 1 + D2D8F9 + 1 + 2 + 0 + + Template App MySQL + mysql.Table_locks_immediate + + + + 2 + 1 + FF3932 + 1 + 2 + 0 + + Template App MySQL + mysql.Table_locks_waited + + + + 3 + 0 + 35962B + 1 + 2 + 0 + + Template App MySQL + mysql.Slow_queries + + + + + + [MySQL] Temporary Objects + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 2 + 157419 + 1 + 2 + 0 + + Template App MySQL + mysql.Created_tmp_files + + + + 1 + 0 + F51D30 + 1 + 2 + 0 + + Template App MySQL + mysql.Created_tmp_disk_tables + + + + 2 + 0 + 837C04 + 1 + 2 + 0 + + Template App MySQL + mysql.Created_tmp_tables + + + + 3 + 1 + FFAB00 + 1 + 2 + 0 + + Template App MySQL + mysql.Created_tmp_tables + + + + + + [MySQL] Threads + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 2 + DE0056 + 1 + 2 + 0 + + Template App MySQL + mysql.Threads_created + + + + 1 + 1 + D8ACE0 + 1 + 2 + 0 + + Template App MySQL + mysql.setting.thread_cache_size + + + + + + [MySQL] Transaction Handler + 800 + 150 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 784890 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_rollback + + + + 1 + 0 + D1642E + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_savepoint + + + + 2 + 0 + DE0056 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_commit + + + + 3 + 0 + 487860 + 1 + 2 + 0 + + Template App MySQL + mysql.Handler_savepoint_rollback + + + + + + diff --git a/templates/Template_App_lm_sensors.xml b/templates/Template_App_lm_sensors.xml new file mode 100644 index 0000000..275667b --- /dev/null +++ b/templates/Template_App_lm_sensors.xml @@ -0,0 +1,914 @@ + + + 2.0 + 2015-08-12T07:03:06Z + + + Templates + + + + + + + + {Template App lm_sensors:lm_sensors["CPU Temperature"].last(#3)}>60 + High CPU temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 0"].last(#3)}>80 + High ISA Adapter Core 0 temperature on {HOSTNAME} + + 0 + 2 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 1"].last(#3)}>80 + High ISA Adapter Core 1 temperature on {HOSTNAME} + + 0 + 2 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 2"].last(#3)}>80 + High ISA Adapter Core 2 temperature on {HOSTNAME} + + 0 + 2 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 3"].last(#3)}>80 + High ISA Adapter Core 3 temperature on {HOSTNAME} + + 0 + 2 + + 0 + + + + {Template App lm_sensors:lm_sensors["MB Temperature"].last(#3)}>45 + High Motherboard temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["NB Temperature"].last(0)}>80 + High North Bridge temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["temp1"].last(#3)}>100 + High PCI Adapter temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["SB Temperature"].last(#3)}>65 + High South Bridge temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["CPU Temperature"].last(#3)}>65 + Very high CPU temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 0"].last(#3)}>100 + Very high ISA Adapter Core 0 temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 1"].last(#3)}>100 + Very high ISA Adapter Core 1 temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 2"].last(#3)}>100 + Very high ISA Adapter Core 2 temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["Core 3"].last(#3)}>100 + Very high ISA Adapter Core 3 temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["MB Temperature"].last(#3)}>55 + Very high Motherboard temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["NB Temperature"].last(#3)}>80 + Very high North Bridge temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["temp1"].last(#3)}>120 + Very high PCI adapter temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + {Template App lm_sensors:lm_sensors["SB Temperature"].last(#3)}>80 + Very high South Bridge temperature on {HOSTNAME} + + 0 + 3 + + 0 + + + + + + Sensor - core temperatures + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 2 + C80000 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["Core 0"] + + + + 1 + 2 + 00C800 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["Core 1"] + + + + 2 + 2 + 0000C8 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["Core 2"] + + + + 3 + 2 + C800C8 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["Core 3"] + + + + + + Sensor - CPU temperature + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 1 + 0 + 0 + + + 0 + 1 + C80000 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["CPU Temperature"] + + + + + + Sensor - Fan speed + 900 + 200 + 0.0000 + 130.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 2 + 00C800 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["CPU FAN Speed"] + + + + 1 + 2 + 0000C8 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["PWR_FAN FAN Speed"] + + + + + + Sensor - Motherboard temperature + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 1 + 0 + 0 + + + 0 + 1 + DD0000 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["MB Temperature"] + + + + + + Sensor - North Bridge temperature + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 1 + 0 + 0 + + + 0 + 1 + DD0000 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["NB Temperature"] + + + + + + Sensor - PCI Adapter temperature + 900 + 200 + 0.0000 + 130.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 1 + 0 + 0 + + + 0 + 1 + DD0000 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["temp1"] + + + + + + Sensor - South Bridge temperature + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 1 + 0 + 0 + + + 0 + 1 + DD0000 + 0 + 2 + 0 + + Template App lm_sensors + lm_sensors["SB Temperature"] + + + + + + diff --git a/zabbix_agentd.conf.d/bind.conf b/zabbix_agentd.conf.d/bind.conf new file mode 100644 index 0000000..b6237cb --- /dev/null +++ b/zabbix_agentd.conf.d/bind.conf @@ -0,0 +1 @@ +UserParameter=bind.version, named -v \ No newline at end of file diff --git a/zabbix_agentd.conf.d/dovecot.conf b/zabbix_agentd.conf.d/dovecot.conf new file mode 100644 index 0000000..1d30d55 --- /dev/null +++ b/zabbix_agentd.conf.d/dovecot.conf @@ -0,0 +1 @@ +UserParameter=dovecot.version, dovecot --version \ No newline at end of file diff --git a/zabbix_agentd.conf.d/exim.conf b/zabbix_agentd.conf.d/exim.conf new file mode 100644 index 0000000..d308b83 --- /dev/null +++ b/zabbix_agentd.conf.d/exim.conf @@ -0,0 +1,2 @@ +UserParameter=exim.version, exim -bV | head -1 | cut -d " " -f 3 +UserParameter=mailqueue-exim,sudo exim -bp | awk '{print $3}' | grep -c '^[0-9A-Z]' \ No newline at end of file diff --git a/zabbix_agentd.conf.d/linux.conf b/zabbix_agentd.conf.d/linux.conf index ecbc060..518f96e 100644 --- a/zabbix_agentd.conf.d/linux.conf +++ b/zabbix_agentd.conf.d/linux.conf @@ -1,8 +1,8 @@ UserParameter=nfs[*], df | grep -cw $1 +UserParameter=mount[*], df | grep -c $1 +UserParameter=mdstat,egrep -ce "F|_" /proc/mdstat UserParameter=netstat[*], ss -nat | grep -c $1 -UserParameter=mysqlnetstat[*], ss -nat | grep 3306 | grep -c $1 -UserParameter=mailqueue,mailq | grep -v 'Mail queue is empty' | grep -c '^[0-9A-Z]' -UserParameter=chkconfig[*], chkconfig --list | grep "$1" | cut -d ":" -f 4 | grep -c on +UserParameter=chkconfig[*], chkconfig --list | grep "$1" | cut -d ":" -f 5 | grep -c on UserParameter=sockstat.sockets,cat /proc/net/sockstat|grep sockets|cut -d' ' -f 3 UserParameter=sockstat.tcp.inuse,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 3 UserParameter=sockstat.tcp.orphan,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 5 @@ -12,4 +12,4 @@ UserParameter=sockstat.tcp.mem,cat /proc/net/sockstat|grep TCP|cut -d' ' -f 11 UserParameter=sockstat.udp.inuse,cat /proc/net/sockstat|grep UDP:|cut -d' ' -f 3 UserParameter=sockstat.udp.mem,cat /proc/net/sockstat|grep UDP:|cut -d' ' -f 5 UserParameter=check_chmod[*], stat --format '%a' $1 -UserParameter=os-full, cat /etc/issue | head -1 +UserParameter=os-full, cat /etc/issue | head -1 diff --git a/zabbix_agentd.conf.d/sensors.conf b/zabbix_agentd.conf.d/sensors.conf new file mode 100644 index 0000000..35e2565 --- /dev/null +++ b/zabbix_agentd.conf.d/sensors.conf @@ -0,0 +1 @@ +UserParameter=lm_sensors[*], sh /etc/zabbix/bin/lm_sensors.sh "$1" \ No newline at end of file From 5460bc80c293001446b059febce811676167ffee Mon Sep 17 00:00:00 2001 From: kamil Date: Wed, 12 Aug 2015 09:17:53 +0200 Subject: [PATCH 5/9] Added mysql-slave.conf --- templates/Template App Amavisd.xml | 82 ++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 templates/Template App Amavisd.xml diff --git a/templates/Template App Amavisd.xml b/templates/Template App Amavisd.xml new file mode 100644 index 0000000..cc2a7a5 --- /dev/null +++ b/templates/Template App Amavisd.xml @@ -0,0 +1,82 @@ + + + 2.0 + 2015-08-12T06:52:13Z + + + Templates + + + + + + + + {Template App Amavisd:proc.num[amavisd].last(0)}=0 + Service amavis is not running + + 0 + 3 + + 0 + + + + From 9b8766253e5c49865370a63eb137c462f9e0e5cb Mon Sep 17 00:00:00 2001 From: kamil Date: Wed, 12 Aug 2015 09:26:09 +0200 Subject: [PATCH 6/9] New monitoring stuff --- README.md | 15 + bin/nginx-check.sh | 64 +++ templates/Template App MySQL Slave.xml | 402 +++++++++++++++++ templates/Template App Nginx.xml | 568 +++++++++++++++++++++++++ templates/Template_App_Amavisd.xml | 82 ---- zabbix_agentd.conf.d/mysql-slave.conf | 3 + zabbix_agentd.conf.d/nginx.conf | 1 + 7 files changed, 1053 insertions(+), 82 deletions(-) create mode 100644 bin/nginx-check.sh create mode 100644 templates/Template App MySQL Slave.xml create mode 100644 templates/Template App Nginx.xml delete mode 100644 templates/Template_App_Amavisd.xml create mode 100644 zabbix_agentd.conf.d/mysql-slave.conf create mode 100644 zabbix_agentd.conf.d/nginx.conf diff --git a/README.md b/README.md index b75b26c..0ab58d5 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,21 @@ FLUSH PRIVILEGES; If you want change password, you need to edit files ```.my.cnf``` and also in file ```bin/ss_get_mysql_stats.php```. +Template App MySQL Slave +===== +Monitoring for replication in MySQL 5.5, 5.6 and 5.7. Please run SQL query: +``` +CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'ha7jqnlacwefrs'; +GRANT REPLICATION CLIENT, SELECT, PROCESS, SHOW DATABASES ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'ha7jqnlacwefrs'; +FLUSH PRIVILEGES; +``` + +If you want change password, you need to edit files ```.my.cnf```. + +Template App Nginx +====== +Monitoring for Nginx. It is using script ```nginx-check.sh``` written by Vincent Viallet. + Template App Brocade HBA ====== Monitoring for Network Adapters - Brocade. Template is using Discovery to create Items and Triggers. You need also add SUDO for zabbix user: ```zabbix ALL=(ALL) NOPASSWD: /usr/bin/bcu``` diff --git a/bin/nginx-check.sh b/bin/nginx-check.sh new file mode 100644 index 0000000..03a284d --- /dev/null +++ b/bin/nginx-check.sh @@ -0,0 +1,64 @@ +#!/bin/bash +################################## +# Zabbix monitoring script +# +# nginx: +# - anything available via nginx stub-status module +# +################################## +# Contact: +# vincent.viallet@gmail.com +################################## +# ChangeLog: +# 20100922 VV initial creation +################################## + +# Zabbix requested parameter +ZBX_REQ_DATA="$1" +ZBX_REQ_DATA_URL="$2" + +# Nginx defaults +NGINX_STATUS_DEFAULT_URL="http://localhost:10061/nginx_status" +WGET_BIN="/usr/bin/wget" + +# +# Error handling: +# - need to be displayable in Zabbix (avoid NOT_SUPPORTED) +# - items need to be of type "float" (allow negative + float) +# +ERROR_NO_ACCESS_FILE="-0.9900" +ERROR_NO_ACCESS="-0.9901" +ERROR_WRONG_PARAM="-0.9902" +ERROR_DATA="-0.9903" # either can not connect / bad host / bad port + +# Handle host and port if non-default +if [ ! -z "$ZBX_REQ_DATA_URL" ]; then + URL="$ZBX_REQ_DATA_URL" +else + URL="$NGINX_STATUS_DEFAULT_URL" +fi + +# save the nginx stats in a variable for future parsing +NGINX_STATS=$($WGET_BIN -q $URL -O - 2> /dev/null) + +# error during retrieve +if [ $? -ne 0 -o -z "$NGINX_STATS" ]; then + echo $ERROR_DATA + exit 1 +fi + +# +# Extract data from nginx stats +# +case $ZBX_REQ_DATA in + active_connections) echo "$NGINX_STATS" | head -1 | cut -f3 -d' ';; + accepted_connections) echo "$NGINX_STATS" | grep -Ev '[a-zA-Z]' | cut -f2 -d' ';; + handled_connections) echo "$NGINX_STATS" | grep -Ev '[a-zA-Z]' | cut -f3 -d' ';; + handled_requests) echo "$NGINX_STATS" | grep -Ev '[a-zA-Z]' | cut -f4 -d' ';; + reading) echo "$NGINX_STATS" | tail -1 | cut -f2 -d' ';; + writing) echo "$NGINX_STATS" | tail -1 | cut -f4 -d' ';; + waiting) echo "$NGINX_STATS" | tail -1 | cut -f6 -d' ';; + *) echo $ERROR_WRONG_PARAM; exit 1;; +esac + +exit 0 \ No newline at end of file diff --git a/templates/Template App MySQL Slave.xml b/templates/Template App MySQL Slave.xml new file mode 100644 index 0000000..3e76312 --- /dev/null +++ b/templates/Template App MySQL Slave.xml @@ -0,0 +1,402 @@ + + + 2.0 + 2015-08-12T07:18:54Z + + + Templates + + + + + + + + {Template App MySQL Slave:repIOrun.last(0)}=0 + [MySQL] IO Thread is not running + + 0 + 3 + + 0 + + + + {Template App MySQL Slave:repSBM.last(0)}>1800 + [MySQL] Slave is out of sync ({ITEM.LASTVALUE} seconds of delay) + + 0 + 2 + + 0 + + + + {Template App MySQL Slave:repSQLrun.last(0)}=0 + [MySQL] SQL Thread is not running + + 0 + 3 + + 0 + + + + + + [MySQL] Replication Thread Status + 900 + 200 + 0.0000 + 100.0000 + 0 + 0 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 009900 + 0 + 7 + 0 + + Template App MySQL Slave + repSQLrun + + + + 1 + 0 + DD0000 + 0 + 7 + 0 + + Template App MySQL Slave + repIOrun + + + + + + [MySQL] Seconds Behind Master + 900 + 200 + 0.0000 + 100.0000 + 0 + 0 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 009900 + 0 + 7 + 0 + + Template App MySQL Slave + repSBM + + + + + + [MySQL] SQL Delay + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 5 + 0000BB + 0 + 2 + 0 + + Template App MySQL Slave + repSQLDelay + + + + 1 + 5 + AA00AA + 0 + 2 + 0 + + Template App MySQL Slave + repSQLRemDelay + + + + + + diff --git a/templates/Template App Nginx.xml b/templates/Template App Nginx.xml new file mode 100644 index 0000000..a38b543 --- /dev/null +++ b/templates/Template App Nginx.xml @@ -0,0 +1,568 @@ + + + 2.0 + 2015-08-12T07:20:46Z + + + Templates + + + + + + + + {Template App Nginx:chkconfig[nginx].last(0)}=0 + Nginx is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App Nginx:proc.num[nginx].last(0)}=0 + Nginx is not running + + 0 + 4 + Nginx is not running. + + It has been stopped / shutdown or has crashed. + Check on the server for more details: + - w / last + - dmesg logs + - /var/log/messages + - nginx error logs + 0 + + + + + + Nginx - Connections and Requests status + 900 + 200 + 0.0000 + 100.0000 + 0 + 0 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 1 + FF9999 + 0 + 4 + 0 + + Template App Nginx + nginx[accepted_connections] + + + + 1 + 2 + 990000 + 0 + 4 + 0 + + Template App Nginx + nginx[handled_connections] + + + + 2 + 0 + 009900 + 0 + 4 + 0 + + Template App Nginx + nginx[handled_requests] + + + + + + Nginx - Threads status + 900 + 200 + 0.0000 + 100.0000 + 0 + 0 + 1 + 1 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 1 + 990000 + 0 + 4 + 0 + + Template App Nginx + nginx[writing] + + + + 1 + 1 + 999900 + 0 + 4 + 0 + + Template App Nginx + nginx[reading] + + + + 2 + 1 + 009900 + 0 + 4 + 0 + + Template App Nginx + nginx[waiting] + + + + + + diff --git a/templates/Template_App_Amavisd.xml b/templates/Template_App_Amavisd.xml deleted file mode 100644 index cc2a7a5..0000000 --- a/templates/Template_App_Amavisd.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 2.0 - 2015-08-12T06:52:13Z - - - Templates - - - - - - - - {Template App Amavisd:proc.num[amavisd].last(0)}=0 - Service amavis is not running - - 0 - 3 - - 0 - - - - diff --git a/zabbix_agentd.conf.d/mysql-slave.conf b/zabbix_agentd.conf.d/mysql-slave.conf new file mode 100644 index 0000000..1ddb18c --- /dev/null +++ b/zabbix_agentd.conf.d/mysql-slave.conf @@ -0,0 +1,3 @@ +UserParameter=repSBM,echo "show slave status\G;" | HOME=/etc/zabbix mysql | grep 'Seconds_Behind_Master' | awk '{print $2}' +UserParameter=repIOrun,echo "show slave status\G;" | HOME=/etc/zabbix mysql | grep -c 'Slave_IO_Running: Yes' +UserParameter=repSQLrun,echo "show slave status\G;" | HOME=/etc/zabbix mysql | grep -c 'Slave_SQL_Running: Yes' \ No newline at end of file diff --git a/zabbix_agentd.conf.d/nginx.conf b/zabbix_agentd.conf.d/nginx.conf new file mode 100644 index 0000000..9a19d4f --- /dev/null +++ b/zabbix_agentd.conf.d/nginx.conf @@ -0,0 +1 @@ +UserParameter=nginx[*],/etc/zabbix/bin/nginx-check.sh "$1" "$2" \ No newline at end of file From 18a64b429b8ba46ca57d9c316eb2df764d7eadda Mon Sep 17 00:00:00 2001 From: kamil Date: Wed, 12 Aug 2015 09:35:44 +0200 Subject: [PATCH 7/9] New monitoring and fixes ind naming for Templates files --- README.md | 20 + ...p_Dovecot.xml => Template App Dovecot.xml} | 0 ...Etherpad.xml => Template App Etherpad.xml} | 0 ...ate_App_Exim.xml => Template App Exim.xml} | 0 ...e_App_MySQL.xml => Template App MySQL.xml} | 0 templates/Template App OpenDKIM.xml | 194 ++++++++++ templates/Template App Postfix.xml | 358 ++++++++++++++++++ templates/Template App Pure-FTPd.xml | 198 ++++++++++ templates/Template App Spamassassin.xml | 80 ++++ ...ensors.xml => Template App lm_sensors.xml} | 0 templates/Template App vsftpd.xml | 198 ++++++++++ 11 files changed, 1048 insertions(+) rename templates/{Template_App_Dovecot.xml => Template App Dovecot.xml} (100%) rename templates/{Template_App_Etherpad.xml => Template App Etherpad.xml} (100%) rename templates/{Template_App_Exim.xml => Template App Exim.xml} (100%) rename templates/{Template_App_MySQL.xml => Template App MySQL.xml} (100%) create mode 100644 templates/Template App OpenDKIM.xml create mode 100644 templates/Template App Postfix.xml create mode 100644 templates/Template App Pure-FTPd.xml create mode 100644 templates/Template App Spamassassin.xml rename templates/{Template_App_lm_sensors.xml => Template App lm_sensors.xml} (100%) create mode 100644 templates/Template App vsftpd.xml diff --git a/README.md b/README.md index 0ab58d5..88abb04 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,26 @@ Template App Brocade HBA ====== Monitoring for Network Adapters - Brocade. Template is using Discovery to create Items and Triggers. You need also add SUDO for zabbix user: ```zabbix ALL=(ALL) NOPASSWD: /usr/bin/bcu``` +Template App OpenDKIM +====== +Monitoring for OpenDKIM. + +Template App Postfix +====== +Monitoring for mail server Postfix. + +Template App Pure-FTPd +====== +Monitoring for Pure-FTPd. + +Template App Spamassassin +====== +Monitoring for Spamassassin. + +Template App vsftpd +====== +Monitoring for vsftpd. + Template App Nscd ====== Nscd is a daemon that provides a cache for the most common name service requests. Nscd provides caching for accesses of the passwd(5), group(5), and hosts(5) databases through standard libc interfaces, such as getpwnam(3), getpwuid(3), getgrnam(3), getgrgid(3), gethostbyname(3), and others. diff --git a/templates/Template_App_Dovecot.xml b/templates/Template App Dovecot.xml similarity index 100% rename from templates/Template_App_Dovecot.xml rename to templates/Template App Dovecot.xml diff --git a/templates/Template_App_Etherpad.xml b/templates/Template App Etherpad.xml similarity index 100% rename from templates/Template_App_Etherpad.xml rename to templates/Template App Etherpad.xml diff --git a/templates/Template_App_Exim.xml b/templates/Template App Exim.xml similarity index 100% rename from templates/Template_App_Exim.xml rename to templates/Template App Exim.xml diff --git a/templates/Template_App_MySQL.xml b/templates/Template App MySQL.xml similarity index 100% rename from templates/Template_App_MySQL.xml rename to templates/Template App MySQL.xml diff --git a/templates/Template App OpenDKIM.xml b/templates/Template App OpenDKIM.xml new file mode 100644 index 0000000..3627662 --- /dev/null +++ b/templates/Template App OpenDKIM.xml @@ -0,0 +1,194 @@ + + + 2.0 + 2015-08-12T07:27:21Z + + + Templates + + + + + + + + {Template App OpenDKIM:chkconfig[opendkim].last(0)}=0 + OpenDKIM is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App OpenDKIM:proc.num[opendkim].last(0)}=0 + OpenDKIM service is down + + 0 + 3 + + 0 + + + + {Template App OpenDKIM:opendkim.version.diff(0)}>0 + OpenDKIM version has changed + + 0 + 1 + + 0 + + + + diff --git a/templates/Template App Postfix.xml b/templates/Template App Postfix.xml new file mode 100644 index 0000000..e0c977a --- /dev/null +++ b/templates/Template App Postfix.xml @@ -0,0 +1,358 @@ + + + 2.0 + 2015-08-12T07:28:44Z + + + Templates + + + + + + + + {Template App Postfix:mailqueue-postfix-queue[active].min(900)}>10 + High active mail queue ({ITEM.LASTVALUE} mails) + + 0 + 3 + + 0 + + + + {Template App Postfix:mailqueue-postfix-queue[deferred].min(3600)}>500 + High deferred mail queue ({ITEM.LASTVALUE} mails) + + 0 + 2 + + 0 + + + + {Template App Postfix:mailqueue-postfix-queue[deferred].min(129600)}>50 + High old and deferred mail queue ({ITEM.LASTVALUE} mails) + + 0 + 2 + + 0 + + + + {Template App Postfix:chkconfig[postfix].last(0)}=0 + Postfix is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App Postfix:postfix.version.diff(0)}>0 + Postfix version has changed + + 0 + 1 + + 0 + + + + {Template App Postfix:net.tcp.service[smtp].last(0)}=0 + SMTP server is down + + 0 + 4 + + 0 + + + + + + Postfix - mail queue + 900 + 200 + 0.0000 + 100.0000 + 1 + 0 + 1 + 0 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 0 + 00EE00 + 0 + 2 + 0 + + Template App Postfix + mailqueue-postfix-queue[active] + + + + 1 + 0 + 0000C8 + 0 + 2 + 0 + + Template App Postfix + mailqueue-postfix-queue[deferred] + + + + + + diff --git a/templates/Template App Pure-FTPd.xml b/templates/Template App Pure-FTPd.xml new file mode 100644 index 0000000..c1cb5dd --- /dev/null +++ b/templates/Template App Pure-FTPd.xml @@ -0,0 +1,198 @@ + + + 2.0 + 2015-08-12T07:32:04Z + + + Templates + + + + + + + + {Template App Pure-FTPd:proc.num[pure-ftpd].last(0)}=0 + vsftpd is down + + 0 + 3 + + 0 + + + + {Template App Pure-FTPd:chkconfig[pure-ftpd].last(0)}=0 + vsftpd is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App Pure-FTPd:net.tcp.service[ftp].last(0)}=0 + vsftpd server is down + + 0 + 3 + + 0 + + + + diff --git a/templates/Template App Spamassassin.xml b/templates/Template App Spamassassin.xml new file mode 100644 index 0000000..e84a762 --- /dev/null +++ b/templates/Template App Spamassassin.xml @@ -0,0 +1,80 @@ + + + 2.0 + 2015-08-12T07:34:02Z + + + Templates + + + + + + + + {Template App Spamassassin:proc.num[spamd child].last(0)}<2 + Service spamd is not running + + 0 + 3 + + 0 + + + + diff --git a/templates/Template_App_lm_sensors.xml b/templates/Template App lm_sensors.xml similarity index 100% rename from templates/Template_App_lm_sensors.xml rename to templates/Template App lm_sensors.xml diff --git a/templates/Template App vsftpd.xml b/templates/Template App vsftpd.xml new file mode 100644 index 0000000..a71afde --- /dev/null +++ b/templates/Template App vsftpd.xml @@ -0,0 +1,198 @@ + + + 2.0 + 2015-08-12T07:34:37Z + + + Templates + + + + + + + + {Template App vsftpd:proc.num[vsftpd].last(0)}=0 + vsftpd is down + + 0 + 3 + + 0 + + + + {Template App vsftpd:chkconfig[vsftpd].last(0)}=0 + vsftpd is not enabled in autostart + + 0 + 2 + + 0 + + + + {Template App vsftpd:net.tcp.service[ftp].last(0)}=0 + vsftpd server is down + + 0 + 3 + + 0 + + + + From 7c51dedf1cb3105d36f723b84e050c0c1a059cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Porembi=C5=84ski?= Date: Sun, 20 Sep 2015 16:32:28 +0200 Subject: [PATCH 8/9] Fixed timezone --- php.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php.ini b/php.ini index 2d3f116..d2abaa7 100644 --- a/php.ini +++ b/php.ini @@ -8,4 +8,4 @@ error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_WARNING display_errors = Off [Date] -date.timezone = "Europe/Warsaw" \ No newline at end of file +date.timezone = "Etc/UTC" From 3a7d0e82a0212b444fbca6dc5019f486f1f30caa Mon Sep 17 00:00:00 2001 From: Gerard Stanczak Date: Sun, 20 Sep 2015 23:41:54 +0200 Subject: [PATCH 9/9] updated authors --- README.md | 4 ++++ bin/hdd_discovery.sh | 2 ++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 88abb04..e60c564 100644 --- a/README.md +++ b/README.md @@ -282,6 +282,10 @@ Template App S.M.A.R.T. ====== Monitoring for S.M.A.R.T. enabled storage devices (HDD's, SSD's and other). Uses discovery script to populate disks. INFO: For non present S.M.A.R.T. values disable items on per-host level. +Template and scripts created by: +Michał Macioszek, Taras Baran, Michal Gębora, Marcin Wilk, Maks Bednarek, Anna Fałek, Mikołaj Szczuraszek + + Template App PowerPath ====== Monitoring for EMC PowerPath: Host-based software for automated data path management, failover and recovery, and optimized load balancing. PowerPath automates, standardizes, and optimizes data paths in physical and virtual environments as well as cloud deployments to deliver high availability and performance. diff --git a/bin/hdd_discovery.sh b/bin/hdd_discovery.sh index 398ae7d..c78951e 100644 --- a/bin/hdd_discovery.sh +++ b/bin/hdd_discovery.sh @@ -1,6 +1,8 @@ #!/bin/bash # Script for HDD discovery # +# Created by: +# Michał Macioszek, Taras Baran, Michal Gębora, Marcin Wilk, Maks Bednarek, Anna Fałek, Mikołaj Szczuraszek disks=`ls -l /dev/sd* | awk '{print $NF}' | sed 's/[0-9]//g' | uniq`