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]."\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; }

https://docs.pnp4nagios.org/pnp-0.6/ndo2pnp

NDO to PNP( ndoutils to PNP4Nagios)的更多相关文章

  1. install nagios pnp4nagios on centos 6

    安装配置Apache.PHP(忽略此次安装步骤) 安装nagiosrpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release ...

  2. Nagios+pnp4nagios+rrdtool 安装配置nagios(一)

    基于的软件版本 Apache-2.0.63  php-5.3.2 nagios-3.2.3  nagios-plugins-1.4.15  rrdtool-1.4.5 nrpe-2.12 pnp4na ...

  3. Nagios图像绘制插件PNP4Nagios部署和测试

    注:本篇博客Nagios版本Nagios-3.5.1 1. 概述2. 关于PNP4Nagios3. 部署PNP4Nagios3.1 下载PNP4Nagios3.2 编译安装3.3 目录文件说明4. 配 ...

  4. Nagios数据存储插件NDOUtils部署和测试

    1. 概述 NDOUTILS,Nagios Data Output Utils,Nagios数据输出工具,允许用户从Nagios导出状态和事件信息到数据库中,便于以后的检索和加工 它包括几个部分: N ...

  5. nagios 插件ndoutils 安装配置

    nagios 插件ndoutils 安装配置 原文地址:http://www.cnblogs.com/caoguo/p/5022645.html # Nagios install ndoutils # ...

  6. 相机位姿估计0:基本原理之如何解PNP问题

    关键词:相机位姿估计 PNP问题求解 用途:各种位姿估计 文章类型:原理 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-18 @Lab: CvLa ...

  7. 使用centos引导内核错误:kernel: pnp 00:0b: can't evaluate _CRS: 8

    CentOS系统在开机过程中,一直遇到黑屏提示:“kernel: pnp 00:0b: can't evaluate _CRS: 8”,不理会它仍能启动系统并正常工作,未知何故. 经查,这是内核引导的 ...

  8. 烂泥:nagios学习(四):pnp4nagios图形化绘制nagios数据

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 在nagios安装完毕后,我们也添加了一些监控对象,但是你会发现nagios只是简单的给我们列出那些监控对象是正常的,而没有把这些监控对象的数据进行整合. ...

  9. NPN&PNP

    一.晶体管基础知识 晶体管分2种:NPN.PNP 晶体管通常封装为TO-92,下面是元件实物图 和 元件符合: NPN: 当电压和电流被加到基极上时,NPN晶体管: 其工作原理: 就像水龙头—给控制开 ...

随机推荐

  1. OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)

    20150719 Created By BaoXinjian

  2. linux socket编程实例

    /* ============================================================================ Name : client.c Auth ...

  3. 【HOW】在InfoPath中如何为浏览和编辑模式设置不同的视图

    1. 在SharePoint Designer中打开要自定义视图的列表.并点击菜单:列表设置 > 在 InfoPath 中设计表单 > {要自定义表单的内容类型},则会自动打开InfoPa ...

  4. 02-C#入门(枚举、结构等)

    不要为了写笔记而学习!!! 其实学完一章再返回复习,然后做笔记,真的很费时间(电子书还不方便).当然,复习带来的价值,是值得花时间的. 枚举.结构 枚举的类型有限(short.byte...)且是相同 ...

  5. PL/SQL如何导入dmp文件

    -------------创建表空间 create tablespace portal_data datafile'E:\OracleDB\System_TableSpace\portal_data0 ...

  6. PlayerPrefs游戏存档

    本地存储.相当于Flash里面的SharedObject. Android位置:机器自身存储的(非扩展卡)/data/data/appname/shared_prefs/{AppName}.xml,如 ...

  7. STL set使用例子

    #include<iostream>#include<set>using namespace std; #include<stdlib.h> #define ran ...

  8. linux VI search command 搜索 加入行号

    VI COMMAND:set number :set nonumber VI COMMAND/keywork   //search

  9. IOS 解析crashlog

    1.需要log.crash. dSYM和xcode自带的symbolicatecrash 放到一个文件夹下面 2.终端cd 到文件夹下面 运行命令 export DEVELOPER_DIR=/Appl ...

  10. scrollbar_test

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...