`
zhou.xingbo
  • 浏览: 53155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nagios的工作场景及使用说明

阅读更多

问题1:nagios配置文件说明?

答:

commands.cfg是监控命令的配置文件

与其相关配置说明/usr/local/nagios/etc/objects/commands.cfg

define command{
command_name #定义命令的简称
command_line #定义当服务进行时Nagios要执行的动作。在命令执行以前,所有合法的宏都要被他们的值代替。
}

 

contacts.cfg是监控报警联系人的配置文件

与其相关配置说明/usr/local/nagios/etc/objects/contacts.cfg

#这段是用来定义一个联系人
define contact{  
contact_name #这个指令用来定义一个联系人的简称。他会在定义contactgroup时被引用到。在相应的环境中,宏定义$CONTACTNAME$会包含这个值。
alias                  #这个指令是为了定义一个联系人的具体的描述。在相应的环境中,宏定义$CONTACTALIAS$会包含这个值。
host_notification_period        #这个指令是为了定义,能够通知Contact中定义的那个简称联系人,关于主机有问题或者恢复正常状态的时间段。你可以把他想象成能够通知Contact关于主机的在线时间。
service_notification_period  #这个指令是为了定义,能够通知Contact中定义的那个简称联系人,关于服务的问题或恢复正常的时间段。
host_notification_options      #这个指令为了定义主机在什么状态下会给联系人发通知。各个参数的描述如下:d=当主机的状态处于down时,发送通知;f=当主机状态处于stop时发送通知。r=当主机恢复up状态时发送通知。n=什么状态下都不发送通知(w-warning , u-unknown,c-critical,r-recovery;d-down,u-unreachable)。
service_notification_options #这个指令为了定义服务在什么状态下会给联系人发通知。各个参数的描述如下:w=当服务处于警告状态时发送通知 u=当服务的状态处于unknown时,发送通知;f=当服务状态处于启动和停止时发送通知。c=当服务处于Critical状态时发送通知。n=什么状态下都不发送通知。
host_notification_commands   #这个指令是为了定义一个通知联系人关于主机问题或恢复正常的联系手段的一个列表。多个手段之间用逗号隔开。
service_notification_commands #这个指令是为了定义一个通知联系人关于服务问题或恢复正常的联系手段的一个列表。多个手段之间用逗号隔开。
email                        #这个指令是为了定义联系人的email地址。这个将取决于你是如何定义你的notification commands.它可以用来给联系人发送紧急邮件。在相应的环境中。宏定义$CONTACTEMAIL$将会包含它的值。
}

 

 联系人组

define contactgroup{ #这段是用来定义一个联系人组。
contactgroup_name #联系组名称,通常定义得较短
alias #联系组别名,通常定义得较长
members #联系组成员
}

 

timeperiods.cfg是时间定义配置文件

与其相关配置说明/usr/local/nagios/etc/objects/timeperiods.cfg

define timeperiod{
timeperiod_name  #时间段名称,通常定义得较短
alias                #时间段别名,通常定义得较长
sunday           #星期日时间段
monday          #星期一时间段
tuesday          #星期二时间段
wednesday   #星期三时间段
thursday        #星期四时间段
friday              #星期五时间段
saturday        #星期六时间段
}

 

localhosts.cfg是被监控主机配置和被监控服务配置的文件

与其相关配置说明/usr/local/nagios/etc/objects/localhost.cfg

#这段是用来定义一个被监控的主机
define host{
host_name localhost #用这个名字在host group和service里标识一个主机
alias localhost #用来定义主机的一个完整名字或描述
address 127.0.0.1 #用来定义主机的地址,在有DNS服务器的,也可以用域名
 #用来定义在检测返回结果不是OK时,nagios重检测命令的次数。设置这个值为1会导致nagios一次也不重试就报警
max_check_attempts 1
#用一个time period项的名字来定义在哪段时间内激活对这台主机的主动检测。time period是定义在别的文件里的配置项,我们可以在这里用名字来引用它
check_period name
 #这是一个联系组列表。我们用联系组的名字来引用她们。多个联系组间用“,”来分隔
contact_groups name
 #这一项用来定义当一个服务仍然down或unreachable时,我们间隔多久重发一次通知给联系组
notification_interval
#这一项用一个time period定义来标识什么时间段内给联系组送通知。这里我们用time period定义的名字来引用她
notification_period
  #这一项用来决定发送通知的时机。选项有:d = 当有down状态时发送通知,u = 当有unreachable状态时发送通知, r = 当有服务recoveries时发送通知,f = 当主机启动或停机时发送通知。如果你给一个n选项,那么永远不会发送通知
notification_options 
}

 

 主机组

#这段是用来定义一个被监控的主机组
define hostgroup{     
hostgroup_name #主机组名称,通常定义得较短 
alias #主机组别名,通常定义得较长
members #主机组成员
}

 

服务

 #这段是用来定义一个被监控的服务
define service{                     
host_name #主机名称
service_description #服务描述
check_command #执行命令
max_check_attempts #最大失败尝试次数,值为1时只报警不重新检测
#常规检测间隔时间,默认为60分钟(常规检测是指无论服务状态是否正常,检测次数达到“最大次数”时)
normal_check_interval 
#失败尝试间隔时间,默认为60分钟(失败尝试是指服务状态不正常,检查次数达到“最大次数”时)
retry_check_interval  
check_period #检测时间段
#当服务状态不正常时通知联系人的间隔时间,值为0时不通知联系人
notification_interval 
notification_period #通知联系人时间段
#通知联系人选项,w警告,u未知,c危急,f启动和停止,n不发送通知
notification_options 
contact_groups #联系人组
}

 

服务组

#这段是用来定义一个被监控的服务组
define servicegroup{                 
servicegroup_name #服务组名称,通常定义得较短        
alias #服务组别名,通常定义得较长
members #服务组成员
}
  

cgi.cfg这个文件是与WEB相关

与其相关配置说明/usr/local/nagios/etc/cgi.cfg#去除用户验证

#去除用户验证
use_authentication=0
#多个用户用逗号隔开
authorized_for_system_commands=nagiosadmin

 

templates.cfg是模板配置文件,这里面定义了一些模板以方便用户使用

 

问题2:nagios配置步骤?

答:

1.需要设置的组件是联系人和联系人组:/usr/local/nagios/etc/objects/contacts.cfg

define contact{
 contact_name jdoe
 alias John Due
 service_notification_commands notify-by-email
 host_notification_commands host-notify-by-emailes
 email john.doe@xxx.com
}
define contactgroup{
 contactgroup_name server-admins
 alias Server Administrators
 members jdoe,albundy
}

 

2.进行监视的主机和定义服务:/usr/local/nagios/etc/objects/localhost.cfg

 

define host{
        host_name                       ubuntu_1_2
        alias                           Ubuntu test server
        address                         192.168.1.2
        check_command                   check-host-alive
        max_check_attempts              20
        notifications_enabled           1
        event_handler_enabled           0
        flap_detection_enabled          0
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
        notification_interval           60
        notification_period             24x7
        notification_options            d,u,r
}
define service{
        use                             service-template
        host_name                       ubuntu_1_2
        service_description             PING
        check_period                    24x7
        contact_groups                  server-admins
        notification_options            c,r
        check_command                   check_ping!300.0,20%!1000.0,60%
}

重启nagios服务,证实Web管理接口中ping服务的可见性。

 

问题3:如何写nagios插件?

 

答:

nagios为了管理插件,nagios每次在查询一个服务的状态时,产生一个子进程,并且它使用来自该命令的输入和退出代码来确定具体的状态。

 

退出状态代码含义

OK:退出代码是0,服务正常工作

WARNING:退出代码是1,服务处于警告状态

CRITICAL:退出代码是2,服务处于危险状态

UNKNOWN:退出代码是3,服务处于未知状态

 

简单实现:

工作脚本check_getloadavg.py

#!/usr/bin/env python

import os,sys
(d1, d2, d3) = os.getloadavg()

if d1 >= 5.0:
    print "GETLOADAVG CRITICAL: Load average is %.2f" % (d1)
    sys.exit(2)
elif d1 >= 2.0:
    print "GETLOADAVG WARNING: Load average is %.2f" % (d1)
    sys.exit(1)
else:
    print "GETLOADAVG OK: Load average is %.2f" % (d1)
    sys.exit(0)

 

 nagios注册该插件脚本/usr/local/nagios/etc/objects/commands.cfg

define command{
        command_name    check_mygetloadavg
	command_line    /path/to/check_getloadavg #脚本存放的路径
}

 

接下来创建关于这个插件的服务...

 

通常最好的方式是创建一个可配置的插件脚本,另一个好的实践是捕获所有的异常,统一管理。

获取平均负载的完整插件check_getloadavg2.py

#!/usr/bin/env python

import os
import sys
import getopt

def usage():
    print """Usage: check_getloadavg [-h|--help] [-m|--mode 1|2|3] \
    [-w|--warning level] [-c|--critical level]"

Mode: 1 - last minute ; 2 - last 5 minutes ; 3 - last 15 minutes"
Warning level defaults to 2.0
Critical level defaults to 5.0"""
    sys.exit(3)

try:
    options, args = getopt.getopt(sys.argv[1:],
        "hm:w:c:",
        "--help --mode= --warning= --critical=",
        )
except getopt.GetoptError:
    usage()
    sys.exit(3)

argMode = "1"
argWarning = 2.0
argCritical = 5.0

for name, value in options:
    if name in ("-h", "--help"):
        usage()
    if name in ("-m", "--mode"):
        if value not in ("1", "2", "3"):
            usage()
        argMode = value
    if name in ("-w", "--warning"):
        try:
            argWarning = 0.0 + value
        except Exception:
            print "Unable to convert to floating point value\n"
            usage()
    if name in ("-c", "--critical"):
        try:
            argCritical = 0.0 + value
        except Exception:
            print "Unable to convert to floating point value\n"
            usage()

try:
    (d1, d2, d3) = os.getloadavg()
except Exception:
    print "GETLOADAVG UNKNOWN: Error while getting load average"
    sys.exit(3)

if argMode == "1":
    d = d1
elif argMode == "2":
    d = d2
elif argMode == "3":
    d = d3

if d >= argCritical:
    print "GETLOADAVG CRITICAL: Load average is %.2f" % (d)
    sys.exit(2)
elif d >= argWarning:
    print "GETLOADAVG WARNING: Load average is %.2f" % (d)
    sys.exit(1)
else:
    print "GETLOADAVG OK: Load average is %.2f" % (d)
    sys.exit(0)

 

nagios注册该插件脚本/usr/local/nagios/etc/objects/commands.cfg

define command{
        command_name    check_mygetloadavg2
	command_line    /path/to/check_getloadavg2 -m $ARG1$ -w $ARG2$ -c $ARG3$
	}

 

接下来创建关于这个插件的服务(注意:使用感叹号!来分隔插件参数)

define service{
        use                             service-template
        host_name                       localhost
        service_description             LoadAverage2
        check_period                    24x7
        contact_groups                  server-admins
        notification_options            c,r
        check_command                   check_mygetloadavg2!1!3.0!6.0
}

 

ps:

添加启动服务

rc-update add nagios default

打开/usr/local/nagios/share/config.inc.php,把:

$cfg['cgi_base_url']='/nagios/cgi-bin'

改为(实际情况修改):

$cfg['cgi_base_url']='/cgi-bin'

支持故障时的事件定义,可以先行解决一些问题。

可以很容易地定制开发自己需要的服务监测插件。

Nagios core 只是个Daemon,负责调度,真正的检测操作还是通过Nagios plugins来实现的。

cpu是否超载?

网络接口是否满负荷?

nagios将所有的信息简化为‘工作,可疑,故障’

这可以帮助操作员根据预定义的和可配置的标准,重点关注最重要的,最关注的问题。

nagios内置了报告停机时间的功能


 


分享到:
评论

相关推荐

    nagios说明文档

    Nagios是一款强大的开源系统监控工具,用于实时监控网络服务、主机资源以及各种应用程序的状态,确保系统的稳定运行。...通过深入理解和实践Nagios的安装、配置和使用,可以有效地优化IT运维流程,提高工作效率。

    nagios 中文帮助文档+nagios-3.3.2.tar.gz

    - **报警机制**:说明Nagios如何定义和处理报警,以及如何配置通知方式(如邮件、短信)。 - **图形界面**:介绍Nagios的Web界面,包括默认的CGI接口和可选的Web管理界面如Nagios XI、Nagvis等。 - **扩展与集成**:...

    Nagios简明手册

    Nagios是一款开放源代码的免费网络监控工具,主要用于监控计算机系统的各种指标和服务状态,包括但不限于Windows、Linux及Unix操作系统的主机状态,网络设备如交换机和路由器的状态,甚至打印机的工作状态等。...

    2013Nagios中文配置手册

    它不仅详细介绍了Nagios的监控功能和状态,而且对系统需求、安装步骤、配置方法以及与其他监控工具的结合使用等方面都做了详尽的说明。对于希望学习和使用Nagios进行网络和系统监控的人员来说,这是一份宝贵的参考...

    nagios基本安装配置介绍

    #### 一、NAGIOS简介及应用场景 NAGIOS是一款开源的系统和网络监控工具,广泛应用于企业环境中对服务器、交换机等网络设备进行实时监控。它能够帮助管理员及时发现并解决问题,提高系统的稳定性和可用性。 #### 二...

    Nagios网络监控中文版

    ### Nagios网络监控中文版...通过以上内容的总结,我们可以看到《Nagios网络监控中文版》是一份非常全面且详细的指南,涵盖了从Nagios的基础知识到具体应用场景的各个方面,非常适合希望深入了解Nagios监控系统的读者。

    [bbs.ywlm.net]第8章 Nagios深入进阶1

    大多数插件可以通过命令行参数-h或--help查看使用说明。例如,要了解check_http插件,只需运行`./check_http --help`。 - **8.1.7. 插件API** 对于有兴趣编写自定义插件的用户,可以参考插件技术文档,了解如何创建...

    Shell脚本实现批量生成nagios配置文件

    在IT系统监控领域,Nagios是一款广泛应用的开源网络监控工具,它可以监控网络服务、主机状态以及...这个方法不仅适用于Nagios,也可以应用到其他需要大量重复配置的场景,展示了Shell脚本在自动化运维中的强大能力。

    2013年最新Linux系统运维面试题(附答案)

    - RAID的工作模式及特点 - RAID0:条带化(Striping),无冗余,适用于读写速度要求高但对数据安全性要求不高的场景。 - RAID1:镜像(Mirroring),数据在两个磁盘上各有一份备份,提高了读取性能和数据安全性,...

    快捷运维,,项目基于shell、python,运维脚本工具库+源代码+文档说明

    ## 使用场景 - 【举个例子】 - 某天,某人,因某业务,有redis部署需求,需要批量部署一组redis服务,端口从8001到8009, - 简单,马上开始部署,编译redis,拷贝redis执行文件,配置文件,8001端口,启动,再拷贝...

    增加项目服务器申请资源

    文档《设置Tomcat CPU内存使用率使用说明.docx》应提供了具体的操作指南,可能包括了如下内容: 1. **JVM内存设置**:推荐的JVM内存分配策略,比如根据服务器硬件和应用规模设置合适的`Xms`和`Xmx`值。 2. **线程池...

    mysql 监控 Monitoring_MySQL mysql_en mysql

    Nagios是一款广泛使用的网络监控系统,它可以通过安装特定的插件来实现对MySQL的监控。以下是Nagios中几个常用的MySQL监控插件: - **NRPE(Nagios Remote Plugin Executor)**:NRPE允许远程主机执行本地插件,这...

    exam-az-400-designing说明书

    考试中所覆盖的知识点要求考生不仅要熟悉Azure的通用可用性(GA)特性,还可能包含对于预览特性的问题,如果这些特性被广泛使用的话。考生应具备在Azure管理和开发领域的专业知识,尤其是在某一个领域有专家级的深入...

    Hadoop面试100题.pdf

    16. **我们使用Ubuntu及Cloudera,那么我们该去哪里下载Hadoop,或者是默认就与Ubuntu一起安装** - **知识点说明**:在Ubuntu系统中,可以通过软件包管理器如`apt-get` 安装Hadoop。另外,Cloudera也提供了自己的...

    大数据hadoop部分的介绍、环境部署、安装说明

    6. **测试Hadoop集群**:可以使用`hadoop fs -ls`命令检查HDFS是否正常工作,或者编写一个简单的MapReduce程序验证计算功能。 然而,Hadoop并非没有替代方案。在文档《Hadoop并非完美:8个代替HDFS的绝佳方案》中,...

    关于统一运维平台 - 业务(RMS)需求说明的分析说明.zip

    下面是对“关于统一运维平台 - 业务(RMS)需求说明”的详细分析。 一、业务需求分析 1. **资源分配**:RMS需要提供智能的资源分配策略,确保业务系统的高效运行。这可能涉及到计算资源(CPU、内存)、存储资源和...

    飞信机器人

    如果一切正常,你应该能看到飞信机器人的版本信息和使用说明。按照提示,你需要提供手机号码(--mobile)、服务标识(--sid)、密码(--pwd)以及配置文件路径(--config)来启动发送短信的功能。 飞信机器人配置的...

    工欲善其事必先利其器——工具组套详解.pdf

    不过,从标题《工欲善其事必先利其器——工具组套详解.pdf》和描述《工欲善其事必先利其器——工具组套详解.pdf》中可以推测文档的内容应该是围绕着“工具组套”的详细介绍与使用说明。根据这一直观的推断,以下是对...

    Ubuntu Server Cookbook 2016 .pdf

    通过书中详尽的步骤指导和丰富的实践案例,读者能够迅速掌握 Ubuntu Server 的核心技术和应用场景,从而在日常工作和项目实施中发挥出更大的价值。无论是新手还是经验丰富的技术人员,都能从中受益匪浅。

Global site tag (gtag.js) - Google Analytics