浅谈 nagios监控配置

该文档只针对于配置   打乱了commands.cfg templates.cfg contacts.cfg localhost.cfg  timeperiods.cfg  resource.cfg 讲解

在讲配置之前最重要的一个命令:
    nagios目录/bin/nagios -v nagios.cfg  (这是调试是否配置有错的命令参数 -v  很有用)
    
步入正题:

笔者认为了解nagios先得了解工作的逻辑:
nagios程序调用监控顺序:
        首先读取第一个配置文件 nagios.cfg  根据配置的 cfg_file cfg_dir  指定的目录或者文件读取地址
        不管是目录 还是 文件 都应该读取的东西
        1.命令
        2.联系人(组)
        3.时间
        4.执行监控的主要入口
        
        也许你会问为什么不列出 ”1.commands.cfg  命令配置文档 “ 这样的目录 原因是我根据网上这样说的 压根没理解说的什么。。
        
        
        有了上边4样东西 nagios 就可以运行了
        
        相互调用关系:
        
        在讲相互调用关系之前应该先了解的是 执行监控的主要入口
        
        nagios的监控  是基于 主机 和服务的  先有主机 后有服务 这点很重要 缺一不可
        
        主机有对与主机的监控(ping)  服务有对于服务的监控(disk)
        
        在往下延伸
        
        先说主机:
                  nagios 需要先使用 define host{}定义主机  包含的内容 为了便于理解将分3个部分讲:
        一、部分主机配置:  
        hostname      主机名         ;定义监控的主机名
        alias            别名        ;定义别名
        address            ip            ;定义监控主机的IP地址
        
        二、执行命令:
        check_command         监控命令  ;本文第一次调用命令  配置对主机的监控命令  (1.命令 也就是 commands.cfg)
        check_period          时间段名字   ;本文第一次调用时间  监控实施的时间段 (3.时间 也就是timeperiods.cfg)
        check_interval        数字        ;检查完毕下一次多久检查
        max_check_attempts         数字   ;定义命令检查失败了 重试次数
        retry_interval          数字    : 重试命令间隔时间

三、报警通知:
        notification_options   d,u,r    ;当主机出现d—当机(down),u—返回不可达(unreachable),
                                          ,r—从异常情况恢复正常,在这3种情况下通知联系人 (通知还有两个属性 f,s )
        contact_groups          联系人组名   ;本文第一次调用联系人(组) 配置通知联系人组  (2.联系人(组)  也就是contacts.cfg)
        notification_interval   时间单位分钟  ; 每个多少分钟重发通知
        notification_period    时间段名字     ;本文第二次调用时间   发送通知的时间段  (3.时间 也就是timeperiods.cfg)
        
        通过三部分 大致可以对主机的监控解读:
        1.配置主机   
        2.配置监控命令
        3.通过配置的监控命令 调用commands.cfg 去执行监控命令
            ->并根据配置的时间段名字 调用timeperiods.cfg时间段配置 规定监控命令执行时间
        4.如果触发 d,u,r 则启动报警装置
            ->根据时间段名字 调用timeperiods.cfg时间段配置 规定报警执行时间
            ->根据联系人组名 调用contacts.cfg文件配置  对联系人组下的 联系人发起通知报警(后边会详细解说)
        
        
        再说服务:
                nagios把所有对服务的监控定义在define service{}里  也分为三部分讲:
                一、部分主机配置:
                host_name               主机名  ;设置主机名 应 与 主机监控名字对应  因为服务是与主机相对应的 而且服务并未指定地址
                service_description     描述    ;标签的意思比如这是监控磁盘的 就定义为disk 等等。。
                
                二、执行命令:
                check_command              监控命令  ;本文第二次调用命令  配置对主机服务的监控命令  (1.命令 也就是 commands.cfg)
                check_period          时间段名字   ;本文第三次调用时间  监控实施的时间段 (3.时间 也就是timeperiods.cfg)
                normal_check_interval        数字        ;检查完毕下一次多久检查
                max_check_attempts         数字   ;定义命令检查失败了 重试次数
                retry_check_interval           数字    : 重试命令间隔时间
                
                三、报警通知:
                notification_options    w,u,c,r    ;当主机出现w—警告(warning),u—返回不可达(unreachable),c-特别严重(critical)
                                                  ,r—从异常情况恢复正常,在这3种情况下通知联系人 (通知还有两个属性 f,s )
                contact_groups          联系人组名   ;本文第二次调用联系人(组) 配置通知联系人组  (2.联系人(组)  也就是contacts.cfg)
                notification_interval   时间单位分钟  ; 每个多少分钟重发通知
                notification_period    时间段名字     ;本文第四次调用时间   发送通知的时间段  (3.时间 也就是timeperiods.cfg)
        
        如果说之前的主机配置你明白了 我想服务配置也不难理解了:        
        1.配置主机  (与主机配置相同)
        2.配置监控命令
        3.通过配置的监控命令 调用commands.cfg 去执行监控命令
            ->并根据配置的时间段名字 调用timeperiods.cfg时间段配置 规定监控命令执行时间
        4.如果触发 w,u,c,r 则启动报警装置
            ->根据时间段名字 调用timeperiods.cfg时间段配置 规定报警执行时间
            ->根据联系人组名 调用contacts.cfg文件配置  对联系人组下的 联系人发起通知报警(后边会详细解说)
            
        根据以上调用 如果将以上的配置 配置为localhost.cfg (ps 实际上以上内容分为2个文件在完成 这也是困扰我理解的地方 templates.cfg+localhost.cfg
                                                            组合才构建了以上的内容 在最后讲解)
        那么我们还需要commands.cfg   timeperiods.cfg   contacts.cfg  即可将监控跑起来了
        
        
        这里我们先讲最简单的  timeperiods.cfg 也是调用最多的:
        对于时间段 nagios 使用define timeperiod{}:
        
            define timeperiod{
                    timeperiod_name 24x7
                    alias           24 Hours A Day, 7 Days A Week
                    sunday          00:00-24:00
                    monday          00:00-24:00
                    tuesday         00:00-24:00
                    wednesday       00:00-24:00
                    thursday        00:00-24:00
                    friday          00:00-24:00
                    saturday        00:00-24:00
                    }
        
        因为该文件的简单 至使我觉得没大必要将   以上内容就是每天的意思  24*7  一周24小时嘛   然后是别名  周日-周六配置  而这个也是我们用得最多的
        
        下一个将联系人和组 也就是 contacts.cfg 文件  该文件定义了 联系人 和组 分2部分讲解:
        一、联系人
        联系人 nagios 是以 defind contact{}定义的:
        contact_name                    联系人名   //配置联系人名字
        alias                           别名         //配置别名
        service_notification_commands   notify- service -by-email(执行命令)     //这是第三次调用命令  (1.命令 也就是 commands.cfg)
                                                                                    实际上就是根据email 的目的地 使用 mail 命令 发送邮件这里就不多说了
        service_notification_options    w,u,c,r    //这里简写了 对于警告,未知错误,严重以及恢复  才会发送邮件
        service_notification_period     24x7         //第五次调用时间    在该时间段 才会调用发邮件的命令  (3.时间 也就是timeperiods.cfg)
        host_notification_commands      notify- host--by-email(执行命令)   //这是第四次调用命令   (1.命令 也就是 commands.cfg)
        host_notification_options       d,u,r             //对于主机的宕机  未知  恢复 才会发邮件
        host_notification_period        24x7             //第六次调用时间    在该时间段 才会调发邮件的命令  (3.时间 也就是timeperiods.cfg)
        email                           [email protected]    //发送邮件的目的地址  
        (ps  要使得发邮件  需要配置sendmail 服务 后边命令会讲到)
        二、组
        联系组 nagios 是以 defind contactgroup{}定义的:
        define contactgroup{
                    hostgroup_name          联系人组名  //联系人组名称   这里的组名 和上边的主机监控 和 服务监控相对应
                    alias                   别名  //别名
                    members                 联系人   //这里可以添加多个联系人 以,号隔开 必须是上面联系人中定义的
                    }
        
        联系人和组部分涉及的内容也不是很多 大致可以这样理解:
        通过第一次调用的联系人组  然后访问同联系人组名的 hostgroup 然后根据members 设置的联系人  调用   与 同联系人名的 contact
        然后根据配置的警报机制 发送警报
        
        
        有了之上的了解 这里我简要介绍下报警工作流程:
        先说说主机:
            首先通过define host{}  根据配置的主机名信息 进行执行命令检查 如果检查失败 将会重试检查  如果重试失败 将根据报警通知的内容 第一次过滤哪些情况 通知 联系组
            之后通过联系组配置defind contactgroup{}  配置的联系人  调用用联系人配置defind contact{}  然后进行第二次过滤 过滤哪些情况调用发邮件命令
            
        不知道 到现在思路清晰了没有?
        
        如果清晰了 那么请接着往下看:
        
        大致流程都讲解了 唯一还未涉及的 还有命令 也就是commands.cfg配置的内容:
        
        
        命令 算nagios 的重点内容了  不熟悉传递参数 语法 也将得不到我们想要的效果
        
        首先我们了解 大致的 commands.cfg 语法他的定义都是使用 define command{}定义的
        define command{
        command_name    命令命名  //这里的名称  和之前调用 使用的名称相对应  主要用于命令调用
        command_line    执行命令   //这里则是调用真正的linux 命令  或者说调用 nagios 内置插件命令
        }
        
        定义很简单  我觉得 更应该说的是 command_line 的执行命令:
        
        首先我们来看下发邮件:
        命令代码如下:
        主机:/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        服务:/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$

我认为我们应该先了解他的变量主机监控相关变量: %b  $NOTIFICATIONTYPE$  $HOSTNAME$   $HOSTSTATE$   $HOSTADDRESS$  $HOSTOUTPUT$  $LONGDATETIME$  $CONTACTEMAIL$
                                    服务监控相关变量:%b   $$NOTIFICATIONTYPE$ $SERVICEDESC$  $HOSTALIAS$  $HOSTADDRESS$  $SERVICESTATE$   $LONGDATETIME$ $SERVICEOUTPUT$  $CONTACTEMAIL$
        主机:
                %b 为printf的参数  不过我也不是很理解 为什么这里要%b 其实不要 一样可以解析参数 不纠结。。
                $NOTIFICATIONTYPE$  表示通知的类型(如主机的 d,u,r 的全称等)
                $HOSTNAME$是该监控项所属主机,即定义服务或者主机监控定义的  主机名称 host_name 的值
                $HOSTSTATE$  该主机 的状态
                $HOSTADDRESS$  主机地址
                $HOSTOUTPUT$   主机信息报错输出内容
                $LONGDATETIME$  当前时间信息
                $CONTACTEMAIL$  为配置联系人  设置的 email 地址
        
        服务:
            $NOTIFICATIONTYPE$  表示通知的类型(服务的 w,c,r,u,r 的全称等)
            $SERVICEDESC$  服务描述
            $HOSTALIAS$        主机名
            $HOSTADDRESS$     主机地址 为主机监控的配置的address地址
            $SERVICESTATE$    服务状态
            $LONGDATETIME$  当前时间信息
            $SERVICEOUTPUT$   服务信息报错输出内容
            $CONTACTEMAIL$  为配置联系人  设置的 email 地址
            
        这里要说一下  如果我简写 命令则为:
            
            printf %b" "内容" | mail -s "标签"  邮件地址
        
        实际上是调用了linux 系统 mail 命令  所以应该配置好linux 上的mail命令
            yum install mail
            配置 /etc/mail.rc :
            set from=发送邮件地址
            set smtp=smtp服务器地址
            set smtp-auth-user=发送邮件地址
            set smtp-auth-password=邮件密码
            set smtp-auth=login
        即可 可以使用 printf %b" "内容" | mail -s "标签"  邮件地址   测试
        
        然后我们说说常规的一些命令:
            
        [[email protected] libexec]# ./check_disk -w 10% -c 5% -p /
        DISK OK - free space: / 4050 MB (15% inode=89%);| /=22327MB;25010;26399;0;27789
        [[email protected] libexec]# ./check_disk -w 10% -c 50% -p /
        DISK CRITICAL - free space: / 4050 MB (15% inode=89%);| /=22327MB;25010;13894;0;27789
        [[email protected] libexec]# ./check_disk -w 50% -c 50% -p /
        DISK CRITICAL - free space: / 4050 MB (15% inode=89%);| /=22327MB;13894;13894;0;27789
        [[email protected] libexec]# ./check_disk -w 50% -c 50% -p / |awk ‘{print $2}‘
        CRITICAL
        
        这是我做的check_disk 的实验  -w 为警告 -c 为严重
        他的状态 很可能是提取  反馈信息中的第二项值来判断是否报警 我们先姑且这么认为(笔者也学习不久)
        
        那么在nagios 怎么实现的呢?
        
        nagios 以! 做为分隔符传递参数 我们来看看这个例子:
        define service{
                check_command                   check_local_disk!10%!10%!/boot   //调用 名字为  check_local_disk 的命令 传递 3个参数
        }
        define command{
        command_name    check_local_disk        //被调用的命令名字
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$  //需要传递三个参数  $ARG1$ 为第一个参数 为10%    $ARG2$ 为10%  $ARG3$为/boot
        }
        $USER1$ 这一个参数 是在 resource.cfg 文件配置的:
        $USER1$=/usr/local/nagios/libexec
        这里其实也可以直接使用:
        command_line   /usr/local/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
        (resource.cfg 在nagios.cfg里边配置resource_file=/usr/local/nagios/etc/resource.cfg 主要是做环境变量用的)
        
        
        这样就完成了一个 执行 本地check_disk命令 懂了这个 其实也迎刃而解了 我来看看负载:
        
        [[email protected] libexec]# ./check_load
        check_load: Could not parse arguments
        Usage:
        check_load [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15
        [[email protected] libexec]#
        
        相对应的为  1分钟 10分钟 15分钟 平均负载量
        -w 为警告 -c 为严重
        
        如果我们写 大概应该这样:
                define service{
                check_command                  load!3,2,1!9,8,7
        }
        define command{
        command_name    load        //被调用的命令名字
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$
        }
        
        到这里 我想你应该明白了许多  其实一开始 困扰我的 是  use 这一个参数 如果你也觉得use困扰不妨往下看以下 内容将引用上templates.cfg :
        
        
        模板  这个内容相当的绕  致使笔者了解了很久才 明白 nagios 配置到底怎么回事:
        
        语法  是什么类模块  就用什么类的定义:
        
        比如我要定义 服务类的模块 该模块做一件事情  调用 模块名 只定义检查 和 报警 :
        define service{
                name        定义模块名
                一、执行命令:
                check_command              监控命令
                check_period          时间段名字   
                normal_check_interval        数字        
                max_check_attempts         数字  
                retry_check_interval           数字    
                
                二、报警通知:
                notification_options    w,u,c,r  
                contact_groups          联系人组名  
                notification_interval   时间单位分钟
                notification_period    时间段名字
                
        }
        
        然后我要定义 192.168.1.100  和192.168.2.200 都要执行这个 模块 ():
        192.168.1.100.cfg :
                            define host{
                                    host_name               192.168.1.100
                                    use                     192.168.1.100
                                    alias                   192.168.1.100
                                    address                 192.168.1.100

}
                            define service{
                                    host_name                      192.168.1.100
                                    use                             定义的模块名
                                    }
                        
        192.168.2.200.cfg :
                            define host{
                                    host_name               192.168.2.200
                                    use                     192.168.2.200
                                    alias                   192.168.2.200
                                    address                 192.168.2.200

}
                            define service{
                                    host_name                      192.168.2.200
                                    use                             定义的模块名
                                    }
        
        如果这个模块 是定义的 执行 nrpe 的命令检测磁盘  就可以做成一个模板 放在templates.cfg  调用即可  当然我们也可以做时间的 联系人的主机的
        
        如果你看到这儿 我想你在去看commands.cfg templates.cfg contacts.cfg localhost.cfg  timeperiods.cfg  resource.cfg这五个文件将迎刃而解

时间: 2024-08-06 04:25:44

浅谈 nagios监控配置的相关文章

Nagios监控配置

1 使用Nagios插件命令监控本机 1.1 问题 本案例要求先部署一台Nagios监控主机,并安装插件软件包,通过插件命令实现如下监控目标: 监控本机Web服务 监控本机FTP服务 监控本机SSH服务 监控本机根分区使用量 监控本机登录用户数量 监控本机运行的进程数量 1.2 方案 使用1台RHEL6虚拟机,安装部署Nagios及配套插件软件包,在本机使用插件命令监控本机服务及资源状态. 在Nagios插件软件包中,包含了大量的监控脚本,常用的插件脚本及对应功能如表-1所示. 表-1 Nagi

nagios 监控配置介绍(一)

Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等. 在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知. 作为老牌的监控软件,大家应该学习,本文介绍使用配置的方法. 监控服务端和客户端安装省略. #准备阶段 信息列表                 服务器名称              服务器IP              nagios server 10.89

nagios 监控配置介绍(二)

#配置服务端监控客户端 [[email protected] etc]# cd objects/ [[email protected] objects]# vi hosts.cfg # Define a host for the local machine define host{ use                     linux-server host_name               1.3-samba alias                   1.3-samba add

nagios 监控配置介绍(三)

1.主动监控模式 监控客户端LNMP 网站服务 服务器端: [[email protected]]#cd /usr/local/nagios/etc/objects [[email protected] objects]# vi commands.cfg #在最下面增加: # 'check_weburl' command definition define command{ command_name    check_weburl command_line    $USER1$/check_ht

浅谈tomcat的配置

1.如何修改tomcat的端口 在某些情况下,可能需要修改tomcat监听的端口8080,比如: a.需要启动两份tomcat服务器 b.某个服务占用了8080端口(1433,1521,3306...) Windows查看端口使用命令:netstat -an 修改tomcat端口的方法: 修改~tommcat/conf/server.xml文件中port="8080"数据将8080修改成你需要的端口号即可. 端口号范围:1-65535(实际上里面的有些端口已经被使用),一般情况下1-1

浅谈MySQL主从配置

大型网站为了缓解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是不堪设想.这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力.Ok切入今天的主题,利用MySQL主从配置,实现读写分离,减轻数据库压力.这种方式

浅谈RAID磁盘阵列配置与无人值守功能

一.RAID磁盘阵列介绍 RAID是英文Redundant Array of Independent Disks的缩写,中文简称为独立冗余磁盘阵列.RAID是把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术组成磁盘阵列的不同方式称为RAID级别(RAID Levels),常用的RAID级别有以下几种: RAIDO,RAID1,RAID5,RAID6,RAID1+0等. 二.RAID 0磁盘阵列 RAID 0连续以位或字节为单位

linux 下nagios监控系统的配置

Nagios是一个监视系统运行状态和网络信息的监视系统.Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能,可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等. 工作原理图(取自网上) 配置图 一.配置前准备: 1.同步两台机子时间 ntpdate ntpdate time.nist.gov 添加定时任务,每10分钟同步一次网络时间 [[email protected] ~]# crontab

Nagios监控系统主机与服务配置

配置环境: 监控服务器 :192.168.189.132 被监控客户端:192.168.189.131(linux) 192.168.1.152(windows) Nagios相关配置文件概述: # cd /usr/local/nagios/etc/   相关文件用途如下表: 文件名或目录名 用途 cgi.cfg 控制CGI访问的配置文件 nagios.cfg Nagios 主配置文件 resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如$USE