该文档只针对于配置   打乱了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                           yahoon@test.com    //发送邮件的目的地址  
        (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 "标签"  邮件地址   测试
        
        然后我们说说常规的一些命令:
            
        [root@postgres-master libexec]# ./check_disk -w 10% -c 5% -p /
        DISK OK - free space: / 4050 MB (15% inode=89%);| /=22327MB;25010;26399;0;27789
        [root@postgres-master libexec]# ./check_disk -w 10% -c 50% -p /
        DISK CRITICAL - free space: / 4050 MB (15% inode=89%);| /=22327MB;25010;13894;0;27789
        [root@postgres-master libexec]# ./check_disk -w 50% -c 50% -p /
        DISK CRITICAL - free space: / 4050 MB (15% inode=89%);| /=22327MB;13894;13894;0;27789
        [root@postgres-master 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命令 懂了这个 其实也迎刃而解了 我来看看负载:
        
        [root@postgres-master libexec]# ./check_load
        check_load: Could not parse arguments
        Usage:
        check_load [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15
        [root@postgres-master 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这五个文件将迎刃而解

转载于:https://blog.51cto.com/qidai/1660777

浅谈 nagios监控配置相关推荐

  1. 浅谈视频监控管理平台现状及发展趋势

    浅谈视频监控管理平台现状及发展趋势 以前,一提起视频监控系统,不少人马上就想到各式各样的球机.枪机等摄像头或者电视墙.专业键盘这些用户端设备,或者会想到各式各样的矩阵.DVR产品.而最为核心的视频监控 ...

  2. 浅谈纯远程配置树莓派(二)

    浅谈纯远程配置树莓派(二) --简单配置.通过SSH访问及配置向导介绍 前情提要:上篇(链接:http://blog.csdn.net/octsjimmy/article/details/700455 ...

  3. nagios监控配置错误汇总

    agios监控配置错误汇总 1.check_iftraffic监控网卡流量的配置及错误解决办法 服务端: 添加以下内容: vim /usr/local/nagios/etc/objects/comma ...

  4. nagios 监控配置介绍(二)

    #配置服务端监控客户端 [root@nagios etc]# cd objects/ [root@nagios objects]# vi hosts.cfg # Define a host for t ...

  5. 浅谈性能测试监控系统,做好关键指标的监控

    随着业务的增长,服务器部署由单一架构向分布式集群架构转变,性能测试过程中指标监控也由单一服务器向集群服务器转变. 对于性能测试团队来说,需要建立起适用于测试的多机监控系统,以便后期顺利且高效地进行监控 ...

  6. 浅谈移动监控在安防行业的应用

    一.概述 移动监控在百度中的定义为:移动视频监控是移动视频图像在前端采集方式为动态形式;后端为传统安防行业紧密结合的专业级监控产品,可移动方式进行接收如:通过手机或电脑能实现监看远程实时动态画面的功能 ...

  7. 浅谈tomcat的配置及数据库连接池的配置

    1.如何修改tomcat的端口 在某些情况下,可能需要修改tomcat监听的端口8080,比如: a.需要启动两份tomcat服务器 b.某个服务占用了8080端口(1433,1521,3306... ...

  8. linux应用服务排错,浅谈SELinux的配置以及排错问题

    Samba服务器selinux的配置部分 安装 [root@localhost Server]# rpm -ivh perl-Convert-ASN1-0.20-1.1.noarch.rpm [roo ...

  9. 处理数码照片的计算机需要配置,不仅要懂PS 浅谈修图电脑配置(基础篇)

    [IT168 导购]电脑是重要的摄影周边附件.伴随高像素.高速连拍.高清视频的发展,摄影也已成为大家更新电脑的重要推动力.ET准备用3篇文章向大家介绍修图电脑的相关知识,这一篇是基础篇,后面还有针对台 ...

最新文章

  1. 在线作图|差异柱状图(组内)
  2. 如何定义和搭建可靠人工智能系统的规则?
  3. vs2010,vs2012注释快捷键
  4. web前端开发怎么样学习?看这份web前端学习路线
  5. 云计算实战系列七(管道及重定向)
  6. SSLOJ 1336.膜拜神牛
  7. 内容管理系统(CMS)的设计和选型
  8. 老段51CTO会员卡 限时半价
  9. 大学生职业生涯规划包word,ppt模板以及必备素材
  10. C语言优先级顺序表口诀
  11. 【C语言】贪吃蛇小游戏代码详解
  12. 《Web安全之深度学习实战》笔记:第三章 循环神经网络
  13. 全网最全——数字信号和模拟信号的区别
  14. 无法打开internet站点ie6,7
  15. 51单片机实战教程(34 线缆摇摆测试机设计)
  16. win10计算机网络共享打不开,windows10系统打不开WiFi热点如何修复
  17. 内存条的逻辑BANK和RANK(物理BANK)概念
  18. 【深度学习】非常详细 | 用 Pytorch 理解卷积网络
  19. 古文觀止卷九_永州韋使君新堂記_柳宗元
  20. 敬业福朋友有你也可以有 区块链做到有福同享

热门文章

  1. Exchange Server学习---发送邮件
  2. 文档相似度的比较tf-idf lda lsi
  3. python接口自动化测试框架链接数据库_python接口自动化测试框架实现之操作mysq数据库...
  4. matlab结果输出的代码,哪位大神能帮我看一下下列代码输出的结果是啥!
  5. burpsuite 设置https_新手教程:如何使用Burpsuite抓取手机APP的HTTPS数据
  6. python 图像分割_Python怎么实现图片分割?
  7. 想自学stm32不知道怎么买板子?我来告诉你新手该买哪一个!
  8. 零基础学stm32要多久?stm32应该怎么学?
  9. 惠斯通电桥信号调理芯片_用惠斯通电桥测电阻
  10. 初识C语言---(1)