Differences

This shows you the differences between two versions of the page.

pnp-0.6:ndo2pnp [2010/09/26 16:08]
Joerg Linge created
pnp-0.6:ndo2pnp [2012/01/17 11:30] (current)
Wolfgang typo
Line 1: Line 1:
====== NDO to PNP ====== ====== NDO to PNP ======
-TODO+Contributed by Yannig Perré 
 + 
 +=====How to use this script===== 
 + 
 +The aim of this script is to import your ndo database directly into PNP4nagios. To do so, we use an exporter (ndo2pnp.pl) that can connect throught MySQL database and export contents into the same format as perfdata expected from nagios. Then we plug this into pnp4nagios using bulk option. 
 + 
 +    $ ./ndo2pnp.pl --help 
 +    Usage : 
 +      -h  --help            Display this message. 
 +          --version         Display version then exit. 
 +      -v  --verbose         Verbose run. 
 +      -u  --user <NDOUSER>  Log on to database with <NDOUSER> (default root). 
 +      -p  --pass <PASSWD>   Use <PASSWD> to logon (default gbu2kfe). 
 +      -t  --type <DBTYPE>   Change database type (default mysql). 
 +          --host <DBHOST>   Use <DBHOST> (default localhost). 
 +          --dbname <DB>     Use <DB> for ndo database name (default ndoutils). 
 +          --list-machine    Display machine definition in ndo database. 
 +          --list-service    Show services defined. 
 +          --export-as-pnp   Export ndo content as a bulk file used by process_perfdata.pl. 
 + 
 +=====Main step to import ndo database into pnp4nagios===== 
 + 
 +Here's the main step you can follow : 
 +   * first, check your database connectivity by listing your services : 
 + 
 +    $ ./ndo2pnp.pl --user <MYSQL_USER> -p <MYSQL_PASS> --list-service 
 +    Hostname                       | Service 
 +    -------------------------------+------------------- 
 +    gateway                        | PING 
 +    localhost                      | Current Load 
 +    localhost                      | Current Users 
 +    localhost                      | Disk Space 
 +    localhost                      | HTTP 
 +    localhost                      | SSH 
 +    localhost                      | Total Processes 
 + 
 +   * then, export database contents into perfdata file : 
 + 
 +    $ ./ndo2pnp.pl --user <MYSQL_USER> -p <MYSQL_PASS> --export-as-pnp > /tmp/perfdata.bulk 
 + 
 +Beware children ! This extraction can take a huge slice of time ! 
 + 
 +Here's a small extraction of this export : 
 + 
 +    $ more /tmp/perfdata.bulk  
 +    DATATYPE::SERVICEPERFDATA       TIMET::1277405698[...]SERVICESTATE::WARNING   SERVICESTATETYPE::HARD 
 + 
 +   * Now, use process_perfdata.pl (as nagios user) in order to import your extraction : 
 + 
 +    nagios@nagioshost:~$ /usr/share/pnp4nagios/libexec/process_perfdata.pl -b /tmp/perfdata.bulk --timeout 0 
 + 
 +NB1: don't forget the **--timeout 0**. If you forget this option, you'll get timeout while importing big chunks of services. 
 + 
 +NB2: use the LOG_LEVEL option in the config file ''process_perfdata.cfg'' to get a feedback in the perfdata.log file. 
 + 
 +=====ndo2pnp.pl===== 
 + 
 +<file perl ndo2pnp.pl> 
 +#!/usr/bin/perl 
 + 
 +use strict; 
 +use warnings; 
 +use Getopt::Long; 
 +use File::Basename; 
 + 
 +my $version       = 0.1; 
 +my $verbose       = 0; 
 +my $show_help     = 0; 
 +my $show_machine  = 0; 
 +my $show_service  = 0; 
 +my $type          = "mysql"; 
 +my $db_name       = "ndoutils"; 
 +my $user          = "root"; 
 +my $password      = "root"; 
 +my $host          = "localhost"; 
 +my $export_as_pnp = 0; 
 + 
 +my $service_table = "nagios_servicechecks"; 
 +my $object_table  = "nagios_objects"; 
 +my $start_time = 0; 
 +my $end_time = 0; 
 +my $filter_machine = 0; 
 +my $filter_service = 0; 
 + 
 +sub usage { 
 +  print "Usage : 
 +  -h  --help            Display this message. 
 +      --version         Display version then exit. 
 +  -v  --verbose         Verbose run. 
 +  -u  --user <NDOUSER>  Log on to database with <NDOUSER> (default $user). 
 +  -p  --pass <PASSWD>   Use <PASSWD> to logon (default $password). 
 +  -t  --type <DBTYPE>   Change database type (default $type). 
 +      --host <DBHOST>   Use <DBHOST> (default $host). 
 +      --dbname <DB>     Use <DB> for ndo database name (default $db_name). 
 +      --list-machine    Display machine definition in ndo database. 
 +      --list-service    Show services defined. 
 +      --export-as-pnp   Export ndo content as a bulk file used by process_perfdata.pl. 
 +       
 +"; 
 +
 + 
 +GetOptions( 
 +    "version"       => \$version, 
 +    "v"             => \$verbose, 
 +    "verbose"       => \$verbose, 
 +    "h"             => \$show_help, 
 +    "help"          => \$show_help, 
 +    "u=s"           => \$user, 
 +    "user=s"        => \$user, 
 +    "username=s"    => \$user, 
 +    "p=s"           => \$password, 
 +    "pass=s"        => \$password, 
 +    "password=s"    => \$password, 
 +    "type=s"        => \$type, 
 +    "dbname=s"      => \$db_name, 
 +    "host=s"        => \$host, 
 +    "list-machine"  => \$show_machine, 
 +    "list-service"  => \$show_service, 
 +    "export-as-pnp" => \$export_as_pnp, 
 +    "machines=s"    => \$filter_machine, 
 +    "services=s"    => \$filter_service, 
 +); 
 + 
 +if($show_help) { 
 +  usage ; exit(); 
 +
 + 
 +use DBI; 
 +my $dbh = 0; 
 + 
 +sub connect_db { 
 +  $dbh = DBI->connect("DBI:$type:$db_name;host=$host", $user, $password) || die "Could not connect to database: $DBI::errstr"; 
 +
 + 
 +my $request = 0; 
 + 
 +sub show_machine { 
 +  $request = "SELECT name1 FROM $object_table WHERE objecttype_id = 1"; 
 +  my $sth = $dbh->prepare($request); 
 +  $sth->execute(); 
 +  while(my @result = $sth->fetchrow_array()) { 
 +    print $result[0]."\n"; 
 +  } 
 +
 + 
 +sub show_service { 
 +  $request = "SELECT name1, name2 FROM $object_table WHERE objecttype_id = 2"; 
 +  print STDERR "Hostname                       | Service\n"; 
 +  print STDERR "-------------------------------+-------------------\n"; 
 +  my $sth = $dbh->prepare($request); 
 +  $sth->execute(); 
 +  while(my @result = $sth->fetchrow_array()) { 
 +    printf("%-30s | %s\n", $result[0], $result[1]); 
 +  } 
 +
 + 
 +sub export_as_pnp { 
 +  my %status = (0, "OK", "1", "WARNING", 2, "CRITICAL", 3, "UNKNOWN"); 
 +  my %state_type = (0, "SOFT", 1 , "HARD"); 
 +  my $request_filter = "1"; 
 +  if($start_time) { 
 +    $request_filter .= " AND $service_table.start_time > '$start_time' "; 
 +  } 
 +  if($end_time) { 
 +    $request_filter .= " AND $service_table.start_time <= '$end_time' "; 
 +  } 
 +  if($filter_machine) { 
 +    my @machines = split(/\s*,\s*/, $filter_machine); 
 +    $request_filter .= " AND $object_table.name1 IN ('".join("','", @machines)."') "; 
 +  } 
 +  if($filter_service) { 
 +    my @services = split(/\s*,\s*/, $filter_service); 
 +    $request_filter .= " AND $object_table.name2 IN ('".join("','", @services)."') "; 
 +  } 
 +  $request = "SELECT 
 +  UNIX_TIMESTAMP(start_time), name1, name2, perfdata, command_line, command_args, output, state, state_type 
 +FROM 
 +  $service_table, $object_table 
 +WHERE 
 +  $service_table.service_object_id = $object_table.object_id AND length(perfdata) > 0 AND $request_filter 
 +ORDER BY 
 +  $service_table.start_time 
 +"; 
 +  print "$request\n" if($verbose); 
 +  my $sth = $dbh->prepare($request); 
 +  $sth->execute(); 
 +  while(my @r = $sth->fetchrow_array()) { 
 +    basename($r[4]) =~ /^(\w+).*/; 
 +    my $cmd = "$1"; 
 +    $cmd .= ($r[5] ? "!".$r[5] : ""); 
 +    print "DATATYPE::SERVICEPERFDATA\tTIMET::".$r[0]."\tHOSTNAME::".$r[1]."\tSERVICEDESC::".$r[2]."\tSERVICEPERFDATA::".$r[3]. 
 +          "\tSERVICECHECKCOMMAND::$cmd\tHOSTSTATE::OK\tHOSTSTATETYPE::HARD\tSERVICESTATE::".$status{$r[7]}."\tSERVICESTATETYPE::".$state_type{$r[8]}."\n"; 
 +  } 
 +
 + 
 +my $format = "%s"; 
 +if($show_machine) { 
 +  connect_db(); 
 +  show_machine(); 
 +} elsif($show_service) { 
 +  connect_db(); 
 +  show_service(); 
 +} elsif($export_as_pnp) { 
 +  connect_db(); 
 +  export_as_pnp(); 
 +} else { 
 +  print "Nothing to do\n"; 
 +  exit; 
 +
 +</file>
pnp-0.6/ndo2pnp.1285510105.txt.gz · Last modified: 2010/09/26 16:08 by Joerg Linge
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0