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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容