美文网首页我用 LinuxLinuxLinux学习之路
Nagios4 系统监控工具安装及配置简介(Ubuntu 19.

Nagios4 系统监控工具安装及配置简介(Ubuntu 19.

作者: rollingstarky | 来源:发表于2019-08-01 02:11 被阅读4次

Nagios 是一款开源的系统监控工具。它主要负责对网络环境中的硬件设备及软件服务进行持续的检查,确保这些设备或服务处于正常运行的状态。一旦发现任何错误,Nagios 会在尽可能短的时间内向工作人员发出警报,同时也会在一定程度上尝试自动修复故障(比如重启设备或服务)。

一、简介

Nagios 监控的对象主要可分为两类:

  • Hosts 表示网络中的物理(或虚拟化的)设备,如服务器、工作站、路由器和打印机等
  • Services 表示网络中某些设施提供的特定功能的集合,如 CPU、内存、磁盘空间等。其他如 sshd 服务等也可被定义为 Service 接受 Nagios 的监控

此外,多台主机还可以被划分到不同的主机组中以方便管理和维护。

plugins

Nagios 提供的所有的监控操作全部都由插件来完成。插件是一些用来传递监控信息的附加组件,Nagios 通过它们执行具体的监控和检查任务,同时对收集到的结果进行统计与整理。

Nagios 默认提供了一些基础的插件,几乎可以满足所有常见的监控任务。此外,如果有特殊的监控需求,也可以自行编写 Nagios 插件。
一般标准插件的默认安装路径为 /usr/lib/nagios/plugins ,插件名称绝大多数以 check_ 开头:

$ ls /usr/lib/nagios/plugins
check_apt       check_file_age      check_imap         check_nagios    check_pop        check_ssmtp
check_breeze    check_flexlm        check_ircd         check_nntp      check_procs      check_swap
check_by_ssh    check_fping         check_jabber       check_nntps     check_radius     check_tcp
check_clamd     check_ftp           check_ldap         check_nt        check_real       check_time
check_cluster   check_game          check_ldaps        check_ntp       check_rpc        check_udp
...

二、安装 Nagios

我用的是 Ubuntu 19.04 系统,呃,没有尝试过其他的安装方式。就是直接用包管理器(apt-get)安装的,命令(就一条,,,)如下:
$ sudo apt-get install nagios4

该命令会同时安装一些标准的 Nagios 插件以及一个简单的 Web 监控平台(需要 Apache2 服务器和 PHP 语言支持)。
apt-get 命令安装完 Nagios4 之后,Web 监控平台的 Apache2 配置文件会自动添加到 /etc/apache2/conf_enabled 目录下并直接启用。

只不过我这里重启 Apache2 服务时报错,原因是还需要启用额外两个 Apache 的模块,命令如下:

$ sudo a2enmod auth_digest
$ sudo a2enmod authz_groupfile

重启 Apache2 后访问 http://127.0.0.1/nagios4 链接,即可进入 Web 监控平台,截图如下:

nagios4

三、配置文件介绍

Nagios 的配置文件一般位于 /etc/nagios 或者 /usr/local/etc/nagios 目录下,最主要的配置文件为 nagios.cfg
nagios.cfg 像是一个统领性的大纲文件,它除了定义一些全局范围内的基本配置外,还用于指定其他(更细节的)配置文件的位置或者组织方式,类似于书籍中的目录。

如文件中的 cfg_dircfg_file 两个配置项:

...
cfg_dir=/etc/nagios-plugins/config
cfg_dir=/etc/nagios4/conf.d

# You can specify individual object config files as shown below:
cfg_file=/etc/nagios4/objects/commands.cfg
cfg_file=/etc/nagios4/objects/contacts.cfg
cfg_file=/etc/nagios4/objects/timeperiods.cfg
cfg_file=/etc/nagios4/objects/templates.cfg

# Definitions for monitoring the local (Linux) host
cfg_file=/etc/nagios4/objects/localhost.cfg
...

即关于监控对象的详细配置,一般保存在由 cfg_file 指定的配置文件中。或者也可以将包含配置信息的文件放置在由 cfg_dir 指定的目录(及其子目录)下。

比如默认启用的 /etc/nagios4/objects/localhost.cfg 配置文件,其中包含了关联到本地主机的多个监控对象的信息,从中也可以看出 Nagios 在配置监控对象时所遵循的基本语法:

# Define a host for the local machine

define host{
        use                     linux-server            ; Name of host template to use
        host_name               localhost
        alias                   localhost
        address                 127.0.0.1
        }

# Define a service to check the disk space of the root partitio on the local machine.  Warning if < 20% free, critical if < 10% free space on partition.

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             Root Partition
        check_command                   check_local_disk!20%!10%!/
        }

# Define a service to check the number of currently running procs on the local machine.  Warning if > 250 processes, critical if > 400 processes.

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             Total Processes
        check_command                   check_local_procs!250!400!RSZDT
        }

# Define a service to check HTTP on the local machine. Disable notifications for this service by default, as not all users may have HTTP enabled.

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             HTTP
        check_command                   check_http
        notifications_enabled           0
        }

至于 /etc/nagios4/objects 目录下默认启用的几个配置文件,则包含了一些自定义命令(commands.cfg)、联系人信息(contacts.cfg)、时间段配置(timeperiods.cfg)以及主机和服务的模板(templates.cfg)等。

比如 localhost.cfg 中的 use linux-server 配置项,即使用了由 templates.cfg 文件定义的名为 linux-server 的模板:

$ cat /etc/nagios4/objects/templates.cfg
...
define host{
    name                            linux-server    ; The name of this host template
    use                             generic-host    ; This template inherits other values from the generic-host template
    check_period                    24x7            ; By default, Linux hosts are checked round the clock
    check_interval                  5               ; Actively check the host every 5 minutes
    retry_interval                  1               ; Schedule host check retries at 1 minute intervals
    max_check_attempts              10              ; Check each Linux host 10 times (max)
    check_command                   check-host-alive ; Default command to check Linux hosts
    notification_period             workhours       ; Linux admins hate to be woken up, so we only notify during the day
    notification_interval           120             ; Resend notifications every 2 hours
    notification_options            d,u,r           ; Only send notifications for specific host states
    contact_groups                  admins          ; Notifications get sent to the admins by default
    register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
    }
...

其他由 Nagios 默认提供的主机或服务模板、联系人模板等也都保存在该文件中。

总的来说,在创建自定义配置时,objects 目录下的配置文件可以作为很有价值的参考示例,同时其中定义的命令、联系人和模板等也可在需要时直接通过名称调用,减少相关代码的编写。

对于设备数量庞大且种类较复杂的场景,建议将 Nagios 配置文件的组织架构设计成便于管理的形式。比如:

$ tree /etc/nagios4/conf.d
/etc/nagios4/conf.d
├── commands
├── contactgroups
├── contacts
├── hostgroups
├── hosts
│   └── server2.cfg
├── servicegroups
├── services
└── timeperiods

四、定义监控对象

宏指令

能够通过宏指令来简化配置,是 Nagios 的关键特性之一。宏的运用在很大程度上提高了定义对象和命令的灵活性。如下面的配置示例:

define host{
    use             linux-server
    host_name       server2
    address         192.168.1.102
    check_command   check-host-ssh
}

define command{
    command_name    check-host-ssh
    command_line    $USER1$/check_ssh -H $HOSTADDRESS$
}

其中的 $USER1$$HOSTADDRESS$ 即是预先定义的两个宏。
$USER1$ 是在资源配置文件(/etc/nagios4/resource.cfg)中指定的 Nagios 插件的安装路径。
$HOSTADDRESS$ 则表示 host 定义中的 address 项的内容,即主机的 IP 地址。

定义主机

简单的示例代码如下:

define host{
    host_name               server1
    hostgroups              linux-servers
    alias                   Ubuntu 19.04
    address                 192.168.1.101
    check_command           check-host-alive
    check_interval          10
    retry_interval          1
    max_check_attempts      5
    check_period            24x7
    contact_groups          admins
    notification_interval   30
    notification_period     24x7
    notification_options    d,u,r
}

关于 notification_options:

  • d : the host DOWN state
  • u : the host UNREACHABLE state
  • r : host recovery (UP state)
  • f : the host starts and stops flapping
  • s : notify when scheduled downtime starts or ends
定义主机组

示例代码如下:

define hostgroup{
    hostgroup_name          linux-servers
    alias                   Linux servers
    members                 server1,server2
}

define hostgroup{
    hostgroup_name          aix-servers
    alias                   AIX servers
    members                 aixbox1,aixbox2
}

define hostgroup{
    hostgroup_name          unix-servers
    alias                   UNIX servers
    hostgroup_members       linux-servers,aix-servers
}

其中定义了两个分别包含两台主机的主机组(linux-serversaix-servers),同时还定义了包含这两个主机组的“大”主机组(unix-servers)。即主机组的定义支持嵌套。

定义服务

示例代码如下:

define service{
    host_name                   server2
    service_description         www
    check_command               check_http
    check_interval              10
    check_period                24x7
    retry_interval              3
    max_check_attempts           3
    notification_interval       30
    notification_period         24x7
    notification_options        w,c,u,r
    contact_groups              admins
}

关于 notification_options:

  • w : the service WARNING state
  • u : the service UNKNOWN state
  • c : the service CRITICAL state
  • r : the service recovery (back to OK) state
  • f : the host starts and stops flapping
  • s : notify when the scheduled downtime starts or ends
定义时间段

示例代码如下:

define timeperiod{
    timeperiod_name         workinghours
    alias                   Working Hours, excluding lunch break
    monday                  09:00-13:00,14:00-17:00
    tuesday                 09:00-13:00,14:00-17:00
    wednesday               09:00-13:00,14:00-17:00
    thursday                09:00-13:00,14:00-17:00
    friday                  09:00-13:00,14:00-17:00
}

define timeperiod{
    timeperiod_name         weekends
    alias                   Weekends all day long
    saturday                00:00-24:00
    sunday                  00:00-24:00
}
定义联系人

示例代码如下:

define contact{
    contact_name                    jdoe
    alias                           John Doe
    email                           john.doe@gmail.com
    contactgroups                   admins
    host_notification_period        workinghours
    service_notification_period     workinghours
    host_notification_options       d,u,r
    service_notification_options    w,u,c,r
    host_notification_commands      notify-host-by-email
    service_notification_commands   notify-service-by-email
}

参考资料

Learning Nagios - Third Edition

相关文章

网友评论

    本文标题:Nagios4 系统监控工具安装及配置简介(Ubuntu 19.

    本文链接:https://www.haomeiwen.com/subject/rqpwrctx.html