Add MySQL monitoring script and template
This commit is contained in:
parent
eaf262cb24
commit
f20de75884
7
zabbix_conf/mysql.conf
Normal file
7
zabbix_conf/mysql.conf
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Type: Agent or Agent (active)
|
||||
# You can also get all the stats in a json object by passing 'all',
|
||||
# or retreive the value of a specific key
|
||||
# Run the script without --what to get a list of available keys
|
||||
|
||||
UserParameter=db.mysql[*],sudo /var/lib/zabbix/bin/check_mysql_sudo --host '$1' --port '$2' --user '$3' --password '$4' --defaults='$5' --what '$6'
|
||||
|
101
zabbix_scripts/check_mysql
Normal file
101
zabbix_scripts/check_mysql
Normal file
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use JSON;
|
||||
use Data::Dumper;
|
||||
use Getopt::Long;
|
||||
|
||||
my $what = 'all';
|
||||
my $defaults = undef;
|
||||
my $host = undef;
|
||||
my $port = undef;
|
||||
my $user = undef;
|
||||
my $password = undef;
|
||||
my $help = 0;
|
||||
my $pretty = 0;
|
||||
my $exit = 0;
|
||||
|
||||
my $json = {
|
||||
zbx_error => "none"
|
||||
};
|
||||
|
||||
GetOptions(
|
||||
"what=s" => \$what,
|
||||
"help" => \$help,
|
||||
"defaults=s" => \$defaults,
|
||||
"host=s" => \$host,
|
||||
"port=s" => \$port,
|
||||
"user=s" => \$user,
|
||||
"password=s" => \$password,
|
||||
"pretty" => \$pretty
|
||||
);
|
||||
|
||||
# Basic input checks
|
||||
if (defined $defaults and $defaults ne '' and not -e $defaults){
|
||||
$json->{zbx_error} = "File $defaults doesn't exist";
|
||||
$exit = 1;
|
||||
} elsif (defined $host and $host ne '' and $host !~ m/^[\w\-\.]+$/){
|
||||
$json->{zbx_error} = "Bad value for --host";
|
||||
$exit = 1;
|
||||
} elsif (defined $port and $port ne '' and ($port !~ m/^\d+$/ or $port lt 1 or $port gt 65535)){
|
||||
$json->{zbx_error} = "Bad value for --port";
|
||||
$exit = 1;
|
||||
} elsif (defined $user and $user ne '' and $user !~ m/^[\w\-\.]+$/){
|
||||
$json->{zbx_error} = "Bad value for --user";
|
||||
$exit = 1;
|
||||
} elsif (defined $password and $password ne '') {
|
||||
# Just escape quotes as will protect the password with
|
||||
$password =~ s/'/\\'/g;
|
||||
}
|
||||
|
||||
if ($help){
|
||||
print <<_EOF;
|
||||
Usage: $0 [--what=key] [--help] [--pretty]
|
||||
|
||||
* --what : if a key is given (eg --what=Bytes_received) will print only this value.
|
||||
Else, all the stats are printed in a json format.
|
||||
Run once without --what to get a list of available keys
|
||||
|
||||
* --help : print this help and exit
|
||||
|
||||
* --defaults : set the file from which mysql will read defaults
|
||||
|
||||
* --host : set the hostname to connect to
|
||||
|
||||
* --user : set the user to connect as
|
||||
|
||||
* --password : set the password to use
|
||||
|
||||
* --pretty : prints JSON in a pretty, human readable format. Has no use when --what is also given
|
||||
_EOF
|
||||
exit 0;
|
||||
}
|
||||
|
||||
if ($exit eq 0){
|
||||
my $opt = "";
|
||||
$opt .= " --defaults-file=$defaults" if (defined $defaults and $defaults ne '');
|
||||
$opt .= " --host=$host" if (defined $host and $host ne '');
|
||||
$opt .= " --user=$user" if (defined $user and $user ne '');
|
||||
$opt .= " --password='$password'" if (defined $password and $password ne '');
|
||||
my @status = qx(mysql $opt --batch --execute 'show global status;' 2>&1);
|
||||
if ($? != 0){
|
||||
$exit = $?;
|
||||
$json->{zbx_error} = join '', @status;
|
||||
} else {
|
||||
foreach (@status){
|
||||
chomp;
|
||||
my ($key, $val) = split(/\t/, $_);
|
||||
$json->{$key} = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($what ne 'all' and defined $json->{$what}){
|
||||
print $json->{$what} . "\n";
|
||||
} else {
|
||||
print to_json($json, { pretty => $pretty });
|
||||
}
|
||||
|
||||
exit $exit;
|
||||
|
1079
zabbix_templates/Template_App_MySQL.xml
Normal file
1079
zabbix_templates/Template_App_MySQL.xml
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user