contrib-munin/plugins/hdfs/hadoop-dfs-plugin

122 lines
2.4 KiB
Perl
Executable File

#!/usr/bin/perl
#
# Description:
# This plugin shows basic filesystem information and statistics about the HDFS
# filesystem.
#
# Installation notes:
# Symlink this file to hadoop_hdfs_block or hadoop_hdfs_capacity to get block
# or capacity informations about the DFS.
#
#
# Needs following minimal configuration in plugin-conf.d/munin-node:
# [hadoop_hdfs_block]
# user hdfs
#
# [hadoop_hdfs_capacity]
# user hdfs
#
# Author: KARASZI Istvan <muninexchange@spam.raszi.hu>
#
use strict;
use File::Basename qw(basename);
use Munin::Plugin;
#
# main
#
my $type = &getType($0);
if ($ARGV[0]) {
if ($ARGV[0] eq "autoconf") {
print "yes\n";
} elsif ($ARGV[0] eq "config") {
&printConfig();
} else {
exit(1);
}
} else {
&getStatistics();
}
#
# methods
#
sub getType {
my($command) = @_;
my $scriptname = &File::Basename::basename($command);
if ($scriptname =~ /_([^_]+)$/) {
if (grep($1, ('block', 'capacity'))) {
return $1;
}
}
die("Invalid command type '$scriptname'");
}
sub printConfig {
if ($type eq "block") {
print <<EOT;
graph_title DFS Statistics
graph_category fs
graph_vlabel count
block.label Under replicated blocks
corrupt.label Blocks with corrupt replicas
missing.label Missing blocks
EOT
} elsif ($type eq "capacity") {
print <<EOT;
graph_title DFS Capacity
graph_category fs
graph_vlabel capacity
configured.label Configured
present.label Present
remaining.label DFS Remaining
EOT
}
}
sub getBlock {
my($line) = @_;
if ($line =~ /^Under replicated blocks: (\d+)/) {
printf("block.value %d\n", $1);
} elsif ($line =~ /^Blocks with corrupt replicas: (\d+)/) {
printf("corrupt.value %d\n", $1);
} elsif ($line =~ /^Missing blocks: (\d+)/) {
printf("missing.value %d\n", $1);
}
}
sub getCapacity {
my($line) = @_;
if ($line =~ /^Configured Capacity: (\d+)/) {
printf("configured.value %d\n", $1);
} elsif ($line =~ /^Present Capacity: (\d+)/) {
printf("present.value %d\n", $1);
} elsif ($line =~ /^DFS Remaining: (\d+)/) {
printf("remaining.value %d\n", $1);
}
}
sub getStatistics {
open(DFSADMIN, "hdfs dfsadmin -report|") || die("Cannot open dfsadmin: $!");
while(defined(my $line = <DFSADMIN>)) {
chomp($line);
if ($line =~ /-------------------------------------------------/) {
last
}
if ($type eq "block") {
&getBlock($line);
} elsif ($type eq "capacity") {
&getCapacity($line);
}
}
close(DFSADMIN)
}