add some other mysql plugins

This commit is contained in:
mh 2010-12-21 22:10:34 +01:00
parent e894ddb718
commit 356fdab814
4 changed files with 425 additions and 16 deletions

View file

@ -0,0 +1,141 @@
#!/usr/bin/perl
#
# Copyright (C) 2008 Rackspace US, Inc. <http://www.rackspace.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2 dated June,
# 1991.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
#
#
# This plugin is based off of the Connection Usage
# section of the MySQL Connection Health Page
#
# http://dev.mysql.com/doc/administrator/en/mysql-administrator-health-connection-health.html
#
# To enable, link mysql_connections to this file. E.g.
#
# ln -s /usr/share/node/node/plugins/mysql_connections /etc/munin/plugins/mysql_connections
#
# Revision 1.0 2007/08/03
# Created by Justin Shepherd <galstrom21@gmail.com>
#
# Parameters:
#
# config
# autoconf
#
# Configuration variables
#
# mysqlopts - Options to pass to mysql
# mysqladmin - Override location of mysqladmin
# warning - Override default warning limit
# critical - Override default critical limit
#
#%# family=auto
#%# capabilities=autoconf
use strict;
# Define the mysqladmin paths, and commands
my $MYSQLADMIN = $ENV{mysqladmin} || "mysqladmin";
my $TEST_COMMAND = "$MYSQLADMIN $ENV{mysqlopts} extended-status";
my $MYSQL_VARIABLES = "$MYSQLADMIN $ENV{mysqlopts} extended-status variables";
my $warning = $ENV{warning} || "80";
my $critical = $ENV{critical} || "90";
# Pull in any arguments
my $arg = shift();
# Check to see how the script was called
if ($arg eq 'config') {
print_graph_information();
exit();
} elsif ($arg eq 'autoconf') {
if (test_service()) { print "yes\n"; }
else { print "no\n"; }
exit;
} else {
# Define the values that are returned to munin
my ($available, $current, $upper_limit) = (0,0,0);
# Gather the values from mysqladmin
$current = poll_variables($MYSQL_VARIABLES,"Threads_connected");
$upper_limit = poll_variables($MYSQL_VARIABLES,"max_connections");
$available = $upper_limit - $current;
# Return the values to Munin
print "current.value $current\n";
print "available.value $available\n";
}
sub poll_variables {
my $command = shift;
my $expression = shift;
my $ret = 0;
open(SERVICE, "$command |")
or die("Coult not execute '$command': $!");
while (<SERVICE>) {
my ($field, $value) = (m/(\w+).*?(\d+(?:\.\d+)?)/);
next unless ($field);
if ($field eq $expression ) {
$ret = "$value";
}
}
close(SERVICE);
return $ret;
}
sub print_graph_information {
print <<EOM;
graph_title MySQL Connections
graph_args --base 1000 --lower-limit 0
graph_vlabel Connections
graph_info The number of current connections with respect to the max_connections setting.
graph_category mysql
graph_order current available
graph_total Total
current.label In Use
current.draw AREA
current.info The number of current threads connected
current.warning $warning
current.critical $critical
available.label Available
available.draw STACK
available.info The current value of the "max_connections" variable
EOM
}
sub test_service {
my $return = 1;
system ("$MYSQLADMIN --version >/dev/null 2>/dev/null");
if ($? == 0)
{
system ("$TEST_COMMAND >/dev/null 2>/dev/null");
if ($? == 0)
{
print "yes\n";
$return = 0;
}
else
{
print "no (could not connect to mysql)\n";
}
}
else
{
print "no (mysqladmin not found)\n";
}
exit $return;
}

123
files/munin/mysql_qcache Normal file
View file

@ -0,0 +1,123 @@
#!/usr/bin/perl
#
# Copyright (C) 2006 - Rodolphe Quiedeville <rodolphe@quiedeville.org>
# Copyright (C) 2003-2004 - Andreas Buer
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2 dated June,
# 1991.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# $Log$
# Revision 1.0 2006/04/26 16:04:01 rodo
# Created by Rodolphe Quiedeville
#
# Parameters:
#
# config
# autoconf
#
# Configuration variables
#
# mysqlopts - Options to pass to mysql
# mysqladmin - Override location of mysqladmin
#
#%# family=auto
#%# capabilities=autoconf
use strict;
my $MYSQLADMIN = $ENV{mysqladmin} || "mysqladmin";
my $COMMAND = "$MYSQLADMIN $ENV{mysqlopts} extended-status";
my %WANTED = ( "Qcache_queries_in_cache" => "queries");
my %WANTEDTYPE = ( "Qcache_queries_in_cache" => "GAUGE");
my $arg = shift();
if ($arg eq 'config') {
print_config();
exit();
} elsif ($arg eq 'autoconf') {
unless (test_service() ) {
print "yes\n";
} else {
print "no\n";
}
exit;
}
open(SERVICE, "$COMMAND |")
or die("Coult not execute '$COMMAND': $!");
while (<SERVICE>) {
my ($k, $v) = (m/(\w+).*?(\d+(?:\.\d+)?)/);
next unless ($k);
if (exists $WANTED{$k} ) {
print("$WANTED{$k}.value $v\n");
}
}
close(SERVICE);
sub print_config {
my $num = 0;
print('graph_title MySQL Queries in cache
graph_args --base 1000
graph_vlabel queries
graph_category mysql
graph_info Plugin available at <a href="http://rodolphe.quiedeville.org/hack/munin/">http://rodolphe.quiedeville.org/hack/munin/</a>
');
for my $key (keys %WANTED) {
my $title = $WANTED{$key};
print("$title.label ${title}\n",
"$title.min 0\n",
"$title.type ".$WANTEDTYPE{$key}."\n",
"$title.max 500000\n",
"$title.draw ", ($num) ? "STACK" : "AREA" , "\n",
);
$num++;
}
}
sub test_service {
my $return = 1;
system ("$MYSQLADMIN --version >/dev/null 2>/dev/null");
if ($? == 0)
{
system ("$COMMAND >/dev/null 2>/dev/null");
if ($? == 0)
{
print "yes\n";
$return = 0;
}
else
{
print "no (could not connect to mysql)\n";
}
}
else
{
print "no (mysqladmin not found)\n";
}
exit $return;
}

View file

@ -0,0 +1,129 @@
#!/usr/bin/perl
#
# Copyright (C) 2006 - Rodolphe Quiedeville <rodolphe@quiedeville.org>
# Copyright (C) 2003-2004 - Andreas Buer
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2 dated June,
# 1991.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# $Log$
# Revision 1.0 2006/04/28 09:04:01 rodo
# Add lower limit fixed to 0
#
# Revision 1.0 2006/04/26 16:04:01 rodo
# Created by Rodolphe Quiedeville
#
# Parameters:
#
# config
# autoconf
#
# Configuration variables
#
# mysqlopts - Options to pass to mysql
# mysqladmin - Override location of mysqladmin
#
#%# family=auto
#%# capabilities=autoconf
use strict;
my $MYSQLADMIN = $ENV{mysqladmin} || "mysqladmin";
my $COMMAND = "$MYSQLADMIN $ENV{mysqlopts} extended-status";
my $COMMANDSIZE = "$MYSQLADMIN $ENV{mysqlopts} variables";
my %WANTED = ( "Qcache_free_memory" => "free" );
my $arg = shift();
if ($arg eq 'config') {
print_config();
exit();
} elsif ($arg eq 'autoconf') {
unless (test_service() ) {
print "yes\n";
} else {
print "no\n";
}
exit;
}
my ($free, $used) = (0,0);
open(SERVICE, "$COMMAND |")
or die("Coult not execute '$COMMAND': $!");
while (<SERVICE>) {
my ($k, $v) = (m/(\w+).*?(\d+(?:\.\d+)?)/);
next unless ($k);
if (exists $WANTED{$k} ) {
$free = $v;
print("$WANTED{$k}.value $v\n");
}
}
close(SERVICE);
open(SERVICE, "$COMMANDSIZE |")
or die("Coult not execute '$COMMANDSIZE': $!");
while (<SERVICE>) {
my ($k, $v) = (m/(\w+).*?(\d+(?:\.\d+)?)/);
next unless ($k);
if ($k eq "query_cache_size" ) {
print("used.value ",($v-$free),"\n");
}
}
close(SERVICE);
sub print_config {
print('graph_title MySQL Queries Cache Size
graph_args --base 1024 -l 0
graph_vlabel bytes
graph_category mysql
graph_order used free
graph_total Total
graph_info Plugin available at <a href="http://rodolphe.quiedeville.org/hack/munin/">http://rodolphe.quiedeville.org/hack/munin/</a>
used.label Used
used.draw AREA
free.label Free
free.draw STACK
');
}
sub test_service {
my $return = 1;
system ("$MYSQLADMIN --version >/dev/null 2>/dev/null");
if ($? == 0)
{
system ("$COMMAND >/dev/null 2>/dev/null");
if ($? == 0)
{
print "yes\n";
$return = 0;
}
else
{
print "no (could not connect to mysql)\n";
}
}
else
{
print "no (mysqladmin not found)\n";
}
exit $return;
}

View file

@ -1,23 +1,39 @@
# manifests/server/munin/default.pp # manifests/server/munin/default.pp
class mysql::server::munin::default { class mysql::server::munin::default {
case $munin_mysql_password { case $munin_mysql_password {
'': { fail("please specify \$munin_mysql_password to enable mysql munin plugin")} '': { fail("please specify \$munin_mysql_password to enable mysql munin plugin")}
} }
mysql_user{'munin@localhost': mysql_user{'munin@localhost':
password_hash => mysql_password("$munin_mysql_password"), password_hash => mysql_password("$munin_mysql_password"),
require => Package['mysql'], require => Package['mysql'],
} }
mysql_grant{'munin@localhost': mysql_grant{'munin@localhost':
privileges => 'select_priv', privileges => 'select_priv',
require => [ Mysql_user['munin@localhost'], Package['mysql'] ], require => [ Mysql_user['munin@localhost'], Package['mysql'] ],
} }
munin::plugin { munin::plugin {
[mysql_bytes, mysql_queries, mysql_slowqueries, mysql_threads]: [mysql_bytes, mysql_queries, mysql_slowqueries, mysql_threads]:
config => "env.mysqlopts --user=munin --password=${munin_mysql_password} -h localhost", config => "env.mysqlopts --user=munin --password=${munin_mysql_password} -h localhost",
require => [ Mysql_grant['munin@localhost'], Mysql_user['munin@localhost'], Package['mysql'] ] require => [ Mysql_grant['munin@localhost'], Mysql_user['munin@localhost'], Package['mysql'] ]
} }
Munin::Plugin::Deploy{
config => "env.mysqlopts --user=munin --password=$munin_mysql_password -h localhost",
require =>
[ Mysql_grant['munin@localhost'],
Mysql_user['munin@localhost'],
Package['mysql'] ]
}
munin::plugin::deploy{
'mysql_connections':
source => 'mysql/munin/mysql_connections';
'mysql_qcache':
source => 'mysql/munin/mysql_qcache';
'mysql_qcache_mem':
source => 'mysql/munin/mysql_qcache_mem';
}
} }