你的位置:首页 > 操作系统

[操作系统]Icinga使用总结


1. 在定义命令的时候,往往需要修改commands.cfg配置文件,如果使用NPRE插件监控远程服务器,其实,定义命令也没这么复杂

commands.cfg中有关check_nrpe的命令定义如下:

define command{    command_name  check_nrpe    command_line  $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$    }

然后在定义service文件的时候,可以这样写

define service{    use generic-service    host_name 146    service_description check_users    check_command check_nrpe!check_users -a 10 20    }

其中check_users -a 10 20作为一个参数被check_nrpe命令中的$ARG1$参数接受。

 

2. 如何利用hostgroup简化服务的管理

首先定义hostgroup

定义如下:

define hostgroup{    hostgroup_name hostgroup1    alias hg1    members 146,144}

其中144,146是host_name,所以前提是146,144已经在主机列表中定义过。

接下来要定义service

define service{    hostgroup_name hostgroup1    use generic-service    service_description hg1_service    check_command check_nrpe!check_users -a 10 20}

其中,check_command中定义的命令和单个用户中service文件的命令是否相同没有关系。

check_uers和hg1_service只是服务名不一样,但定义的命令却是一样的。

 

3. 关于servicegroup

个人感觉servicegroup没多大用处,并不能像hostgroup那样简化管理,只不过在Icinga WEB界面上“服务组概述”有所显示

servicegroup定义如下:

define servicegroup{    servicegroup_name servicegroup1    alias sg1    members 146,check_users,146,check_load} 

members的格式为<host1>,<service1>,<host2>,<service2>,...<hostn>,<servicen>。

其中,host需在主机列表中定义过,service需在service文件中定义过(由service_description定义)。譬如,146主机定义的服务如下:

define service{    use generic-service     host_name 146    service_description check_users    check_command check_nrpe!check_users -a 10 20    }    define service{    use generic-service    host_name 146    service_description check_load    check_command check_nrpe!check_load -a 10 20    }

 

4. 性能数据输出长度的限制

   icinga默认会从插件返回的数据库中读取前8KB的数据,这样做的目的是为了阻止失去控制的插件向Nagios发送大量的数据。

   如果不符合自己的需要,可以根据实际情况进行修改。

   修改include/icinga.h中MAX_PLUGIN_OUTPUT_LENGTH参数,然后重新编译即可。

#define MAX_PLUGIN_OUTPUT_LENGTH        8192  /* max length of plugin output (including perf data) */

  其实,不仅仅这个,还需要修改nrpe插件的源码文件

  include/common.h有两个参数需要修改 

#define MAX_INPUT_BUFFER    4096  /* max size of most buffers we use */#define MAX_PACKETBUFFER_LENGTH 4096      /* max amount of data we'll send in one query/response */

  如果修改了MAX_PACKETBUFFER_LENGTH,则必须修改服务端nrpe插件中这个值(注意:MAX_INPUT_BUFFER值不必相同)不然会报以下错

Jan 26 15:45:02 mysql-server2 nrpe[14201]: Error: Request packet had invalid CRC32.Jan 26 15:45:02 mysql-server2 nrpe[14201]: Client request was invalid, bailing out...

 源码中,MAX_PACKETBUFFER_LENGTH默认是1024,MAX_INPUT_BUFFER默认是2048,当我将完前者修改为4096后,发现,从服务端获得的客户端性能数据的长度虽然有所提供,但依旧达不到4096,只有2048,最后修改了MAX_INPUT_BUFFER的值为4096,才达到了自己想要的结果。