Linux运维:配置Centreon监控系统
Posted 计算机与网络安全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维:配置Centreon监控系统相关的知识,希望对你有一定的参考价值。
一次性付费进群,长期免费索取教程,没有付费教程。
ID:Computer-network
配置Centreon并不复杂,所有操作都能在管理界面完成,如果对nagios的配置过程比较了解,那么配置Centreon就变得非常简单。下面先来熟悉一下nagios中配置文件之间的关系。
在nagios的配置过程中涉及几个定义:、组、模板,服务、服务组、服务模板,联系人、联系人组、监控时间和监控命令等,从这些定义可以看出,nagios的各个配置文件之间是互为关联,彼此引用的。成功配置一台nagios监控系统,必须弄清楚每个配置文件之间依赖与被依赖的关系,其中,最重要的有四点:第一要定义监控哪些、组、服务和服务组;第二要定义这个监控要通过什么命令实现;第三要定义监控的时间段;第四要定义或服务出现问题时通知的联系人和联系人组。
Centreon的配置逻辑和过程与nagios完全相同,因此,清楚了nagios的配置重点和各个配置文件之间的依赖关系,Centreon的配置将变得比nagios更加简单。
1、添加主机和主机组
默认情况下,Centreon在安装完成后,会有一些初始的或服务的监控项,为了方便介绍和演示,这里删除所有服务的默认监控:选择“Configuration→Services→Services by host”,删除所有默认监控的服务即可。
(1)Centreon-Server主机的定义
图1 Centreon-Server主机的定义
对于一台的定义,基本上需要关注的就是以上几个选项。
(2)创建一个check_ping命令
监控命令(Commands)是Centreon分布式监控系统运行的基础,无论还是服务,都是通过监控命令完成状态检查和报警的。经常使用的监控命令分为两种,分别是检测(Check)命令和通知告警(Notification)命令。在Centreon系统中,默认自带了很多常用的监控命令,选择“Configuration→Commands→Checks”,即可看到Centreon自带的监控检测命令,例如check_dhcp、check_ftp、check_centreon_ping、check_http、check_tcp等。选择“Configuration→Commands→Notifications”,即可看到自带的通知告警命令,例如常用的host-notify-by-email、service-notify-by-email等。
图2 添加一个check_ping命令
(3)添加主机监控
选择“Configuration→Hosts”,单击“Add”添加一台,如图3所示。添加的方法对Centreon-Server的定义完全相同,首先添加一台node1,此引用的模板仍然是“generic-host”,最后,在“Host Check Properties”项中添加一个用于检测状态的命令“check_ping”,这个命令在上面的步骤中已经定义好了,这里直接引用即可。
图3 添加node1主机监控
采用与添加node1完全相同的方法,下面依次添加node2、node3、node4三台,如图4所示,这里一共添加了4台。在这个界面上,有很多操作属性,可以用于对进行复制、删除、修改、启用和禁用等,由此可见,通过Centreon管理nagios非常方便和简单。
图4 主机监控列表
(4)添加主机组监控
选择“Configuration→Hosts→Host Groups”,单击“Add”添加一个组,如图5所示,依次输入“Host Group Name”和“Alias”的值,然后在“Linked Hosts”中选择此组需要加入的即可,添加完毕,单击“Save”即可完成组的添加。
图5 添加Centos-server-group主机组
当一批有某些相同的服务需要监控的时候,将这些添加到一个组中,然后创建一个需要监控的服务,将这个组加到此服务中,这样就完成了对批量的某些相同服务的监控,省去了一个添加一个服务的麻烦,非常方便。
从图5中可以看到,添加了一个名为Centos-server-group的组,然后将Centreon-Server和node1添加到了这个组中。一台可以属于多个组。
根据图5的操作方法,继续添加一个名为Centos1-server-group的组,如图6所示,这里将node2、node3、node4三台加入到Centos1-server-group组中。
图6 添加Centos1-server-group主机组
(5)配置主机模板generic-host
模板是对各个监控属性定义的综合,一些基础的监控,比如检查属性、报警通知属性、自定义宏属性等都可以在模板中进行设置,当然也可以在定义监控的时候设置这些属性。
默认此模板可直接使用,无需修改,但是也可以根据监控的需要,结合自身环境修改默认监控模板。
模板的一个最大特点是继承性,如果一台引用了这个模板,那么此模板下的所有监控属性都被自动继承过来,例如要对1000台做ping连通性检查,首先可以创建一个check_ping命令,然后将这个命令引用到generic-host模板中,最后在创建的时候,所有1000台都引用generic-host这个模板即可,如图7所示。引用模板的好处是,如果监控属性发生了变化,只需修改generic-host配置即可,而无须一台一台修改,方便快捷。
图7 修改generic-host主机模板
有时候可能会发生一个监控属性既在generic-host模板中设置了,也在定义中设置了,此时就有一个优先级的问题,在这种情况下,监控属性的生效值以中的设置为准。例如,已经在generic-host中设置了Check Period为“24x7”,而在node1的定义中也引用了generic-host模板,同时将Check Period设置改为“workhours”,那么node1监控周期最终生效的设置是“workhours”。
在图7中,可以看到一些检查属性值,例如,“Max Check Attempts”表示最大检查尝试次数;“Normal Check Interval”表示正常检查间隔,单位是分钟;“Retry Check Interval”表示重试检查间隔,单位是分钟。这些检查属性值都需要根据实际情况进行修改或添加。
2、批量添加主机
下面是一个写好的批量添加的Perl脚本:
#!/usr/bin/perl
##################just for test#####################
use strict;
use warnings;
use DBI;
use DBD::mysql;
####################################################
my $DB_HOST = "127.0.0.1";
my $DB_USER = "centreon"; #数据库信息与实际保持一致
my $DB_PASSWD = "centreon";
my $DB_NAME = "centreon";
my $dbh = DBI->connect("DBI:mysql:database=$DB_NAME;host=$DB_HOST","$DB_USER", "$DB_PASSWD", { RaiseError => 1 });
####################################################
my $file_path = "./hosts";#为ip地址,主机名列表,一行一个主机,中间空格隔开。
my $tpl_name = "Servers-Linux";#一定要与实际模板一致
my $nagios_name = "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;
&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
$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 ";
}
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 ";
}
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 ";
}
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 ";
}
$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 ";
}
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 ";
}
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] ";
print " ";
}
要使用这个Perl脚本,需要具备如下条件:
1)一个已经配置好的模板文件,在上面脚本中为generic-host。
2)一个IP和名对应的hosts文件,并且需要放到/var/tmp目录下。
3、监控引擎管理
在完成和组添加后,这些信息并不会马上生效,还需要将这些信息生成nagios配置文件进行保存,然后重新启动监控引擎,这就是Centreon的监控引擎管理功能。在任何配置添加或修改完成后,都需要重启监控引擎才能使这些配置生效。
选择“Configuration→Monitoring Engines→Generate”,如图8所示。
图8 生成配置并重启监控引擎
图8主要用于导出创建好的配置,默认选择“Generate Configuration Files”和“Run monitoring engine debug(-v)”两个动作,当然也建议选择后面两项。在“Restart Monitoring Engine”一项中,可选的动作有三个,分别是Restart、Reload和External Command,其中Restart用于重新启动监控引擎服务,例如新增加了一台,就可以使用Restart这个动作;而Reload是重新加载配置,例如修改了某台的配置参数,就可以使用Reload重新加载;而External Command用于第三方扩展,主要用于特殊需求,一般用不到。在通常情况下,Restart动作执行的时间较长,特别是当Centreon监控的或服务较多的时候,执行Restart操作会启动得比较慢,而Reload操作仅仅是将新的配置加载生效,执行速度相对较快,因此,如何选择这两个动作参数,要结合实际情况而定。
在监控引擎管理中,还可以对nagios的相关配置信息进行修改。选择“Configuration→Monitoring Engines→main.cfg”,就可以查看nagios.cfg的配置信息,这个文件是nagios的主配置文件,记录了nagios的配置文件路径、日志文件路径、扩展模块的配置、监控参数配置等信息,可以对这些配置信息进行修改。接着,选择“Configuration→Monitoring Engines→resources”,这是nagios的resource.cfg文件的配置信息,主要是设置nagios使用插件的路径信息,也可进行修改。最后,还有一个文件CGI.cfg用于对nagios权限的设置,选择“Configuration→Monitoring Engines→cgi”,即可查看和修改nagios相关访问和管理权限。
4、添加服务和服务组
在完成和组添加后,下面开始添加需要监控的服务和服务组。在完成Centreon安装后,会有一些默认的服务,为了不影响介绍,现将这些默认的监控服务删除,选择“Configuration→Services→Services by host”,如图9所示。
图9 删除默认的服务监控项
(1)配置服务模板generic-service
这里的服务模板与之前介绍的模板类似,它们具有相同的作用,默认的服务模板无需修改即可拿来使用,当然也可以根据需要进行配置修改,在添加服务时引用。
选择“Configuration→Services→Templates”,即可编辑generic-service模板,如图10所示。在这里可以修改或添加“Service State”选项中的属性值。一般情况下,在generic-service服务模板中设置的属性值都是通用的或公用的,主要在创建服务的时候进行引用。
图10 配置服务模板generic-service
(2)添加监控服务
添加监控服务的方法与添加基本一样,选择“Configuration→Services→Services by host”,单击“Add”添加一个服务。这里添加了一个check_host_ping的服务,在“Service Template”中引用了服务模板generic-service,如图11所示。
图11 添加check_host_ping监控服务
在添加监控服务过程中,重点关注“Service State”、“Macros”、“Notification”三个服务属性,其中“Service State”主要用于设置服务的检查周期、检查的命令、正常检查间隔、重试检查间隔等参数;“Macros”是自定义宏,暂不添加;“Notification”用来设置报警通知属性,可以添加联系人、联系人组、通知间隔、通知周期、通知类型等。
在完成图11所示页面的设置后,接着选择“Relations”选项,如图12所示,这个选项用于选择与此服务相关联的,之后在“Linked with Hosts”选项中会列出所有已经添加的,选择与此服务相关联的即可。最后单击“Save”保存设置,这样一个监控服务就添加完成了。
图12 选择与定义服务相关联的主机
可以按照如上方法依次创建多个监控服务,创建完成后的服务列表如图13所示。
图13 创建的监控服务列表
在服务监控列表中,可以对每个服务进行复制、删除、启用、禁用等操作,这些功能对以后的监控系统是非常重要的。
(3)添加监控服务组
选择“Configuration→Services→Services by host group”,单击“Add”按钮添加一个服务组,如图14所示。与之前添加服务方式一样,这里添加了一个名为“check-port-service”的服务组,并且应用了generic-service模板。
图14 创建check-port-service服务组
在“Check Command”选项中,我们选择了Centreon自带的命令check_tcp,这个命令用于监控连接状态,当然也可以用来监控端口状态。在“Args”选项中,指定了要监控的端口,以及警告和故障的阈值。
在完成图14所示页面的设置后,接着选择“Relations”选项,如图15所示。这里列出了所有已经创建的组,可以选择某个组与这个服务组相关联,这里选择的是Centos1-server-group组,单击“Save”完成服务组的创建。
图15 选择与服务组相关联的主机组
5、监控报警配置
监控报警配置是Centreon中一个非常重要的组成部分,前面主要介绍了和服务的添加,并且在和服务中都引用了各自的模板。由于模板的默认配置并没有开启报警通知功能,因此,下面重点讲述如何开启和服务的报警通知功能。
(1)开启主机报警通知
开启报警通知功能有两种方法,第一种方法是在定义时进行开启,选择“Configuration→Hosts→node1”,编辑已经创建好的node1,这里重点看“Notification”选项,如图16所示。
图16 开启主机报警通知功能
在默认情况下,“Notification Enabled”选项处于“Default”状态,这个状态表示一个继承关系,也就是说如果此引用了generic-host模板,而在generic-host模板中开启了报警通知功能,那么这台也就自动继承报警通知功能。同理,如果在generic-host模板中没有开启报警通知功能,默认此也不会开启报警功能,因此,在模板没有开启报警通知功能的时候,就需要在定义中指定开启,这里选择“Yes”选项,就开启了的报警通知功能。
然后继续选择报警需要通知的联系人和联系人组,这里选择“Supervisor”作为通知联系人,“Supervisor”是Centreon后台管理员用户的全名,联系人组暂不选择,关于联系人和联系人组,可以根据监控需要任意添加。
接着还可以选择通知间隔、通知周期、通知类型、是否延时发送通知等选项。对于比较重要的可以选择短一点的通知时间间隔,可以选择通知周期为7×24,另外还可以选择工作日(workhours)、非工作日(nonworkhours)两个选项,可以选择通知类型为宕机(Down)、不可到达(Unreachable)、恢复(Recovery)等。最后一个选项是设定第一次发送通知的延时时间,如果设置为0,则表示故障后立刻发送通知。
开启报警的第二种方式是配置模板generic-host。在前面介绍的添加过程中,都引用了模板generic-host,而在模板配置中也可以开启报警通知功能,开启方法很简单:编辑模板,找到“Notification”选项,设置方法与图16完全一样,当开启了通知功能后,对应的这个就继承了模板的设置,自动开启通知功能。
根据经验,建议通过修改模板的方式开启通知功能,因为当监控的有上千台之多时,一台台修改配置变得不现实,此时只须通过修改模板generic-host的配置,即可开启所有的报警通知功能,简单又方便。当然,这样做的前提是所有都引用了generic-host模板。
(2)开启服务报警通知
开启服务报警通知的方法也有两种:一种是在服务模板generic-service中配置,一种是在定义服务的时候指定,其实与开启报警通知的方法完全一样。选择“Configuration→Services→Services by host”,编辑对应的服务,开启“Notification”选项的报警功能,并配置各个报警参数即可。
要在服务模板generic-service中修改报警通知配置也是可以的,选择“Configuration→Services→Templates”,然后编辑generic-service模板,开启报警功能即可。这里也建议将所有添加的服务中都引用generic-service模板,这样做便于日后的修改和。
(3)报警方式和联系人配置
在开启了和服务的报警通知功能后,还需要设置报警方式和报警联系人。Centreon支持多种报警方式,可以选择邮件报警、报警、报警等方式,而邮件报警是默认方式,可以无须添加插件直接使用。
选择“Configuration→Users→Contacts/Users”,然后编辑admin用户,如图17所示。
图17 设置admin用户报警方式
接着看用户设置的第二部分——如何配置报警通知命令,如图18所示。
图18 配置admin用户报警通知命令
-f,表示发送者的。
-t,表示接收者的。
-u,表示邮件的主题。
-xu,表示SMTP验证的用户名。
-xp,表示SMTP验证的。
-m,表示邮件的内容。
下面介绍几个简单的例子。
到这里为止,关于Centreon邮件报警方式的配置基本介绍完成了,下面再介绍一下其他报警方式的优缺点及使用经验。
Centreon支持多种报警方式,上面介绍了默认的邮件报警,还有通过第三方插件配置报警、在线报警等。
报警、报警的接入方式与邮件报警的接入方法完全一样,都是通过配置报警命令脚本完成。而报警通常都是通过飞信这个免费插件实现的。飞信虽然免费,但是有很大局限性,不适用所有手机运营商,并且及时性和稳定性无法保证,这就会导致出现错报或漏报的问题,而对于一些关键业务系统,这些都是无法容忍的,因此,对于这种情况可以考虑使用商用的通道或者购买独立的硬件设备,费用并不高,作为公司层面也应该能负担得起。
在线报警基本都是通过脚本调用监控状态完成报警的,其完成的功能与邮件报警并无区别,因此这种报警方式不推荐使用。
(4)查看监控报警状态
Centreon通过 UI界面展示了所有和服务的运行状态,对于不同的运行状态,Centreon分别用不同的颜色显示,基本的状态与颜色的定义如下:
● 正常运行状态(OK),一般情况下用绿色表示。
● 警告状态(Warning),通常用黄色表示。
● 故障、宕机状态(Critical、Down),通常用红色表示。
● 未知状态(Unknown),通常用灰色表示。
● 挂起、不可到达状态(Pending、Unreachable),通常用浅蓝色表示。
选择“Monitoring→Hosts”即可查看所有、组、故障等的相关信息,如图19所示为所有运行状态。
图19 所有主机运行状态
从图19中可以看出,node3处于“DOWN”状态,并且此也用红色进行了标注。查看最后一列node3故障的详细信息,发现是“Host Unreachable”状态,此时就需要去检查node3的网络连接情况了。
Centreon查看或服务状态的功能非常强大,支持根据名过滤查询,还支持根据状态查询、根据组名称查询等。另外还可以对进行启用通知、关闭通知、启用检查、关闭检查等操作。
选择“Monitoring→Services→All Services”即可查看所有监控服务的状态,如图20所示。
图20 所有监控服务运行状态
从图20中可以看出,由于node3网络故障无法连接导致node3上的端口监控服务出现故障,具体的监控出错信息是“No route to host”,这种错误一般都是网络无法连接导致的。
关于对监控状态的查看,Centreon还给出了一个全局的状态统计,Centreon后台右上角的一个表格统计了所有和服务的运行状态,如图21所示。
图21 主机和服务的全局状态监控
在Centreon监控系统中,所有监控状态页面都是定时自动刷新的,这个刷新值可以自行修改,默认刷新间隔是一分钟,所以只需要查看全局的这个状态监控表格,就能知道哪些或服务出现了故障。
6、用户和用户权限管理
Centreon是一个多用户、多角色管理系统,从功能上可以将用户划分为两个部分:一部分是后台登录用户,另一部分是报警通知用户。后台登录用户主要用于对或服务的添加、修改和状态查看等。结合Centreon的用户权限管理功能,可以针对不同用途的用户设置不同的登录级别,也就是说可以授权某个用户管理一批和服务,而没有授权的其他和服务,此用户将无法查看和管理,通过这种方式,Centreon实现了对和服务的分级、分权限管理。
(1)添加用户
下面演示如何添加一个用户,以及如何向用户授权。
选择“Configuration→Users→Contacts/Users”,单击“Add”按钮添加一个用户,如图22所示。
图22 添加用户ixdba
然后选择ixdba用户接收报警的类型、时段和报警命令,如图23所示。
图23 设置ixdba用户接收报警的类型、时段和报警命令
根据用户的类别和要求选择相应的报警属性即可,然后选择“Centreon Authentication”标签,填写ixdba用户登录Centreon后台的、语言等信息,如图24所示。
图24 设置ixdba用户登录Centreon后台的密码
“Centreon Authentication”选项是可选的,如果要开启ixdba用户登录Centreon平台的功能,就需要设置登录等信息,如果添加的用户仅仅是为了接收报警通知,那么无须设置登录。在这个标签中还可以设置此用户是否为管理员、登录的默认语言等信息,设置完成,单击“Save”按钮,完成用户添加。
(2)添加用户组
选择“Configuration→Users→Contact Groups”,单击“Add”添加一个用户组,如图25所示。
图25 添加用户组View_group
这里添加一个名为View_group的用户组,然后在“Linked Contacts”项将刚才创建的用户ixdba加入此用户组。
(3)添加访问组
下面添加一个访问组,选择“Administration→ACL→Access Groups”,可以看到有个默认的访问组ALL,单击“Add”添加一个新的访问组,如图26所示。
图26 添加访问组access_group
这里添加一个名为access_group的访问组,然后将ixdba用户加入这个访问组中,当然也可以直接将之前创建的View_group用户组加入access_group访问组中。
(4)添加访问控制权限
下面开始创建菜单的权限,选择“Administration→ACL→Menus Access”,可以看到默认的四个菜单访问控制项,分别是Configuration、Graphs、Monitoring+Home和Reporting,这里根据需要再新增一个菜单项,单击“Add”添加一个“Menus Access”,如图27所示。
图27 增加一个菜单访问控制权限
这里添加一个名为guest_view的菜单访问权限,从图27可以看出,此权限只能访问Centreon的Home、Monitoring、Views和Reporting菜单,而对于Configuration和Administration菜单将无法访问,其实就是只有查看和预览权限,没有添加和修改权限。最后将这个菜单访问权限授予access_group访问组,这样access_group访问组下的所有用户将只有查看和预览的权限。
(5)添加资源访问策略
最后一步,还需要添加资源访问策略。资源访问策略用于控制用户对或服务访问的控制。选择“Administration→ACL→Resources Access”,默认有个“All Resources”资源访问策略,单击“Add”添加一个新的资源访问策略,如图28所示。
图28添加资源访问策略
这里添加一个名为“view_acl”的访问策略,并且将access_group访问组加入这个访问策略中,接着选择“Hosts Resources”标签,选择可访问的资源,如图29所示。
图29 选择可访问的主机资源
这里选择所有的和组,当然也可以选择指定的一批或组,继续选择“Services Resources”标签,选择可访问的服务组,如图30所示。
图30 选择可访问的服务组
这里选择所有服务组,设置完成后单击“Save”保存,这样就成功添加了一个资源访问策略。
在完成所有配置策略添加后,就可以通过ixdba用户登录进入Centreon后台了,此时可以看到ixdba用户只能看到Home、Monitoring、Views和Reporting四个菜单选项,并且能看到所有和服务的运行状态,这表明资源控制策略生效了。
ID:Computer-network
【推荐书籍】
以上是关于Linux运维:配置Centreon监控系统的主要内容,如果未能解决你的问题,请参考以下文章