原文链接:

 

 

本文引用了一位同事的文档及网络文章,在此感谢~ 实验的部分自己完成

 

一、centreon批量添加主机

本部分参考了同事的文档和链接:

 

centreon的模板功能是做的非常强大的,而且优化过的nagios配置十分简单,加host的时候只需要输入了hostnamealiasip 地址就可以加一台host上去,service配在hostgroup上,这样只要把host添加到hostgroup上就可以了。

   如果你要加一两台机器,那是很方便的,但是如果上百台呢,上千台呢?那手岂不是要点的抽筋了?
  
 这点来看,还是用脚本批量添加来的方便,呵呵,共享一个自己写的批量添加host的脚本,只添加hostservicehostgroup自己配。
  
  
 运行脚本之前,要先准备好几件事情:
   1
、要有一个host的模板,将所有的属性基本上定义完整,使用脚本添加的host会和模板一模一样,只有ip地址和hostname有差别
   2
、要确认了host要添加到哪台nagios上,在centreon里叫poller
   3
、要有一个hosts文件,里面内容为要批量添加的hostnameip地址,类似/etc/hosts的格式,第一栏ip,第二栏hostname
  
 脚本用perl写的,最前面db的部分需要修改,代码如下:
#!/usr/bin/perl
## ====================================================
#
# File name: insert_host.pl
# Use: insert host into centreon database
# Creater: lianming
# Date: 2009-04-24
# Last_change: 2009-04-24
#
## ====================================================
use strict;
use warnings;
use DBI;
use DBD::mysql;
# ----------------------------------------------------
my $DB_HOST = "db_ipaddress";            #
修改为127.0.0.1
my $DB_USER = "db_user";             安装时设置的数据库访问用户,修改为centreon
my $DB_PASSWD = "db_password";     # web安装时设置的数据库密码,修改为centreon
my $DB_NAME = "centreon";                   # web安装时设置的数据库名,默认也是centreon
my $dbh = DBI->connect("DBI:mysql:database=$DB_NAME;host=$DB_HOST",
                       "$DB_USER", "$DB_PASSWD", { RaiseError => 1 });
# ----------------------------------------------------
my $file_path = "./hosts";       #hosts
文件,自己创建
my $tpl_name = "generic-host";     #主机模板,填写你需要继承的模板;
my $nagios_name = "nagios_name";     #poller,修改为Central
foreach my $arg (@ARGV) { 
    # == file of hostname and ipaddress ==
    if ($arg eq '-f') {
        $file_path = shift;
        }
    # == name of template ==
    elsif ($arg eq '-t') {
        $tpl_name = shift;
        }
       
    # == name of nagios name ==
    elsif ($arg eq '-n') {
        $nagios_name = shift;
        }
    else {
        &print_help();
        exit 1;
        }
    }
# -----------------------------------------------------
open (HOST, "$file_path") || die "Cannot open $file_path for read";
my $sql;
my $sth;
my $line;
my ($host, $ipaddr);
my ($host_id, $tpl_id, $nagios_id) = (0, 0, 0);
while (defined($line = <HOST>)) {
    # == skip blank lines =================
    next if ($line =~ /^\s*$/);

    # == skip if # ========================
    next if ($line =~ /^\s*#/);
    # == get host and ipaddress ===========
    ($ipaddr, $host) = split(/\s+/, $line);
    next if ($ipaddr eq '' || $host eq '');
    # == insert the host to table host ====
    $sql = "insert host set
host_template_model_htm_id='2',host_name='$host',host_alias='$host',host_address='$ipaddr',host_active_checks_enabled='2',host_passive_checks_enabled=
'2',host_checks_enabled='2',host_event_handler_enabled='2',host_flap_detection_enabled='2',host_process_perf_data='2',host_retain_status_information=
'2',host_retain_nonstatus_information='2',host_notifications_enabled='2',host_register='1',host_activate='1'";

    $sth = $dbh->do($sql);
    sleep(1);
    # == get host_id ======================
    $sql = "select host_id from host where host_name='$host'";
    $sth = $dbh->prepare($sql);
        $sth->execute();
   
    while (my $ref = $sth->fetchrow_hashref()) {
               $host_id = $ref->{'host_id'};
            print "host_id is $host_id\n";
                        }
        next if ($host_id == 0);
    # == insert extended_host_information ==
    $sql = "insert extended_host_information set host_host_id='$host_id'";
    $sth = $dbh->do($sql);
    # == insert host_template_relation =====
    $sql = "select host_id from host where host_name='$tpl_name'";
    $sth = $dbh->prepare($sql);
        $sth->execute();
    while (my $ref = $sth->fetchrow_hashref()) {
                        $tpl_id = $ref->{'host_id'};
            print "template id is $tpl_id\n";
                        }
        next if ($tpl_id == 0);
    $sql = "insert host_template_relation set host_host_id='$host_id',host_tpl_id='$tpl_id',`order`='1'";
    $sth = $dbh->prepare($sql);
        $sth->execute();
    # == insert ns_host_relation ===========
    $sql = "select id from nagios_server where name='$nagios_name'";
        $sth = $dbh->prepare($sql);
        $sth->execute();
        while (my $ref = $sth->fetchrow_hashref()) {
                        $nagios_id = $ref->{'id'};
            print "nagios id is $nagios_id\n";
                        }
        next if ($nagios_id == 0);
        $sql = "insert ns_host_relation set host_host_id='$host_id',nagios_server_id='$nagios_id'";
        $sth = $dbh->prepare($sql);
        $sth->execute();
    # == insert complete ==
    print "insert $host to centreon complete\n";
    }
close(HOST);
$dbh->disconnect();
exit 0;
# --------------------------------------------------------------------------------
sub print_help {
    print "Usage ./insert_host.pl [-f path of host file] [-n nagios name] [-t template name]\n";
    print "\n";
    }

 

演示:

上面的脚本名我换成了add_host.pl,并创建hosts文件:

添加主机前:

 

执行脚本:

 

刷新WEB页面:

二、批量生成和主机相关联的服务

注:此部分引用了同事的文档和脚本~

 

上面的脚本能够批量添加主机,但是不能自动生成和主机相关联的服务,如果对每一台主机增加一个服务,要一个一个在页面点击,非常麻烦。

 

使用 Centreon CLAPI  可以解决这个问题,Centreon CLAPI 是centreon 命令行接口,可以替代在网页上的许多工作,这里我们只介绍下怎么解决我们的问题。了解更多请看网址:

 

安装clapi

[root@centreon ~]# cd /usr/local/src/

[root@centreon src]# tar zxf centreon-clapi-1.1.tar.gz

[root@centreon src]# cd centreon-clapi-1.1

[root@centreon centreon-clapi-1.1]# ./install.sh -i

提示输入instCentWeb.conf配置文件的路径:/usr/local/centreon/etc/

 

[root@centreon centreon-clapi-1.1]# cd /usr/local/centreon/www/modules/centreon-clapi/core/

[root@centreon core]# vi +64 centreon

require_once "$centreon_etc/centreon.conf.php";

改为:

require_once "/usr/local/centreon/etc/centreon.conf.php";

 

查看所有主机:

[root@centreon core]# ./centreon -uadmin -p111111 -o HOST -a show

查看主机名包含client-1的主机,如果是输入client,则会显示client,client-1,client-2

[root@centreon core]# ./centreon -uadmin -p111111 -o HOST -a show -v "client-1"

client主机应用所关联的模板服务:

[root@centreon core]# ./centreon -uadmin -p111111 -o HOST -a applytpl -v "client-1"

执行命令前的服务:

 

执行后client-1服务都已添加:

通过以上命令可以关联模板的服务,如果需要批量添加,只需写个简单的脚本就能实现,见下图,执行前可删除刚才手动执行的命令添加的client服务:

 

WEB刷新服务:

 

批量添加完主机和服务要需要重新生成nagios配置后生效。