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. 【转载】Keil中的USE MicroLib说明

    在keil建立ARM的工程时 其中有一项是选 use MicroLIB 由于对KEIL不是很熟悉,于是就查了查,得到了以下信息: microlib 是缺省 C 库的备选库. 它旨在与需要装入到极少量内 ...

  2. 局部变量&&malloc函数&&生命周期的一些见解

    最近在温习指针的部分时发现了一个有趣的问题,先看以下程序: //1.c #include<stdio.h> int* fun() { int t = 567; return &t; ...

  3. dubbo-admin和dubbo-monitor-simple的布署

    dubbo-admin 把dubbo-admin的war包解压到tomcat或者jetty的ROOT目录下,启动就可以访问了(自己配置tomcat的端口) wget http://code.aliba ...

  4. 【javascript 进阶】异步调用

    前言 javascript的中的异步是很重要的概念,特别是ajax的提出,给整个web带来了很大的影响,今天就介绍下javascript的异步编程. 同步与异步 何为同步?何为异步呢? 同步:说白了就 ...

  5. HTTP 协议详解

    相关文章:HTTP 协议之压缩 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相 ...

  6. JAVA下载文件中文乱码问题

    http://blog.itpub.net/92037/viewspace-788900/ 最后的中文乱码没有解决 现在我在系统中用到了两个组件,smartupload,一个支持中文,一个不支持.但是 ...

  7. 那些年蹚过的坑(c++)

    1 main中的参数 尽量用英文双引号括起来,否则可能会出现字符串截断的情况(linux gcc 4.4 不加英文引号的话,遇到英文;会丢弃;后面的部分) 2 包含ipv6地址结构体(in6_addr ...

  8. [杂] BOSE QC15维修小记

    有一句话大概是这样说的“其他的耳机是靠嘴说的,BOSE是靠耳朵听的”,2010年就开始馋QC3,直到2012年在Vancouver的BOSE店里,在震耳欲聋的模拟噪音中带上QC15那一刻,下了决心. ...

  9. XE6 & IOS开发之免证书真机调试(2):连接真机并运行App(有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 连接真机前,请先确保真机 ...

  10. [转载]《民航科技》2012年4月专家论坛:罗喜伶《SWIM技术国际研究动态及对中国民航的借鉴意义》

    专家介绍:罗喜伶,北京航空航天大学电子信息工程学院副教授,工学博士,硕士生导师,国家空管新航行系统技术重点实验室和协同式网络化空中交通管理系统研究教育部创新团队核心成员,民航空管广域信息系统专家组成员 ...