• NDO to PNP( ndoutils to PNP4Nagios)


    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

    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]."
    ";   } }   sub show_service {   $request = "SELECT name1, name2 FROM $object_table WHERE objecttype_id = 2";   print STDERR "Hostname                       | Service
    ";   print STDERR "-------------------------------+-------------------
    ";   my $sth = $dbh->prepare($request);   $sth->execute();   while(my @result = $sth->fetchrow_array()) {     printf("%-30s | %s
    ", $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
    " 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	TIMET::".$r[0]."	HOSTNAME::".$r[1]."	SERVICEDESC::".$r[2]."	SERVICEPERFDATA::".$r[3].           "	SERVICECHECKCOMMAND::$cmd	HOSTSTATE::OK	HOSTSTATETYPE::HARD	SERVICESTATE::".$status{$r[7]}."	SERVICESTATETYPE::".$state_type{$r[8]}."
    ";   } }   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
    ";   exit; }
    https://docs.pnp4nagios.org/pnp-0.6/ndo2pnp
  • 相关阅读:
    Task 4.5 求二维数组中的最大连通子数组之和
    Task 6.4 冲刺Two之站立会议4
    《程序员开发心理学》阅读笔记二
    第二次站立会议9
    第二次站立会议8
    第二次站立会议7
    第二次站立会议6
    第二次站立会议5
    第二次站立会议4
    第二次站立会议3
  • 原文地址:https://www.cnblogs.com/zhuhongbao/p/4242004.html
Copyright © 2020-2023  润新知