跳转至内容

Nagios

来自 ArchWiki

Nagios 是一个开源的服务器、服务和网络监控程序。它监控指定的主机和服务,并在出现任何问题、错误或需要改进时向您发出警报。本文将介绍 Nagios 的安装和配置。

特性

Nagios 的一些功能 包括

  • 监控网络服务(SMTP、POP3、HTTP、NNTP、PING 等)
  • 监控主机资源(处理器负载、磁盘使用情况等)
  • 简单的插件设计,允许用户轻松开发自己的服务检查
  • 并行服务检查
  • 能够通过“父”主机定义网络主机层次结构,从而检测和区分已宕机和无法访问的主机
  • 在服务或主机出现问题并得到解决时(通过电子邮件、寻呼机或用户定义的方法)发送联系人通知
  • 能够定义在服务或主机事件发生时运行的事件处理程序,以实现主动问题解决
  • 自动日志文件轮换
  • 支持实现冗余监控主机
  • 可选的 Web 界面,用于查看当前网络状态、通知和问题历史记录、日志文件等

以下安装和配置测试使用了 nagios 3.2.0-1、Apache Web 服务器 2.2.14-2 和 PHP5 5.3.1-3,由 awayand 完成。

Web服务器

根据 官方文档,Web 服务器并非必需,但如果您希望使用任何 CGI 功能,则需要 Web 服务器(推荐 Apache)、其 PHP(php-apache)以及 gd 库。本次安装假定已具备这些条件。

安装

安装前,最好确保已安装必要的先决条件,例如,如果您使用的是 nginx,那么:nginx、php、php-fpm、fcgiwrap 可能会是一个不错的开始。

安装 nagiosAUR 包。

用户可能还想安装 monitoring-plugins。安装后,请务必稍后编辑 /etc/nagios/resource.cfg 以反映新的路径。

#$USER1$=/usr/share/nagios/libexec
$USER1$=/usr/lib/monitoring-plugins

Nagios 配置

复制示例配置文件

# for samples in /etc/nagios/{cgi.cfg.sample,resource.cfg.sample,nagios.cfg.sample,objects/commands.cfg.sample,objects/contacts.cfg.sample,objects/localhost.cfg.sample,objects/templates.cfg.sample,objects/timeperiods.cfg.sample} ; do cp $samples ${samples%.*} ; done

将所有刚复制的属于 root 的文件和目录的所有者/组更改为 nagios/nagios。

# chown -R nagios:nagios /etc/nagios

如果您安装了 apache-tools,请创建 htpasswd.users 文件,并包含一个用户名(例如 nagiosadmin)。您将被提示添加密码。

# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin

反之,如果您不想安装 apache-tools,则可以运行以下命令

# echo -e "nagiosadmin:`perl -le 'print crypt("your_password","salt")'`" > /etc/nagios/htpasswd.users

您也可以添加其他用户,但在 Nagios 中使用该用户之前,您需要编辑 /etc/nagios/cgi.cfg。您可以将“nagiosadmin”替换为所需的用户名,或者用逗号分隔添加:nagiosadmin,yourusername,yournextusername 等。

如果安装的 nagios-plugins 的所有者/组是 root:root,则需要执行以下操作

# chown -R nagios:nagios /usr/share/nagios

Nagios 配置完成后,就可以配置 Web 服务器了。

Apache配置

如果使用 Apache HTTP Server 作为 Web 服务器,请编辑 /etc/httpd/conf/httpd.conf,并在文件末尾添加以下内容

LoadModule php5_module modules/libphp5.so
Include "conf/extra/nagios.conf"
Include "conf/extra/php5_module.conf"

如果您计划使用 Nagios CGI 脚本,则需要取消注释以下内容

LoadModule cgi_module modules/mod_cgi.so

复制配置文件

# cp /etc/webapps/nagios/apache.example.conf /etc/httpd/conf/extra/nagios.conf

将 Apache 用户 http 添加到 nagios 组,否则在使用 Nagios 时会收到以下错误:“无法打开命令文件 '/var/nagios/rw/nagios.cmd' 进行更新!”

# usermod -G nagios -a http

如果您仍然收到此错误,则可能需要更改该文件的权限。

# chmod 666 /var/nagios/rw/nagios.cmd

Nginx 配置

除了 php 和 php-fpm,您应该安装 fcgiwrap,否则 CGI 脚本将无法运行。

使用 nginx 时,您还需要确保 php-fm 和 fcgiwrap 服务/套接字已启动。

  1. 启动或重启 php-fpm.service 以启用 php-fpm。
  2. 启动或重启 fcgiwrap.socket 以启用 fcgiwrap。

示例配置

server {
    server_name     nagios.yourdomain.tld;
    root            /usr/share/nagios/share;
    listen          80;
    index           index.php index.html index.htm;
    access_log      nagios.access.log;
    error_log       nagios.error.log;

    auth_basic            "Nagios Access";
    auth_basic_user_file  /etc/nagios/htpasswd.users;

    # Fixes frames not working
    add_header X-Frame-Options "ALLOW";
    
    location ~ \.php$ {
        try_files       $uri = 404;
        fastcgi_index   index.php;
        fastcgi_pass    unix:/run/php-fpm/php-fpm.sock;
        include         fastcgi.conf;
    }

    location ~ \.cgi$ {
        root            /usr/share/nagios/sbin;
        rewrite         ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
        fastcgi_param   AUTH_USER $remote_user;
        fastcgi_param   REMOTE_USER $remote_user;
        include         fastcgi.conf;
        fastcgi_pass    unix:/run/fcgiwrap.sock;
    }

    # Fixes the fact some links are expected to resolve to /nagios, see here.
    location /nagios {
        alias /usr/share/nagios/share;
    }

}

Lighttpd 配置

适用于 lighttpd 的示例

$HTTP["url"] =~ "^/nagios" {
        alias.url = (
                "/nagios/cgi-bin" => "/usr/share/nagios/sbin",
                "/nagios" => "/usr/share/nagios/share" 
        )

        $HTTP["url"] =~ "^/nagios/cgi-bin" {
                cgi.assign = ( "" => "" )
        }

        auth.backend = "htpasswd" 
        auth.backend.htpasswd.userfile = "/etc/nagios/htpasswd.users" 
        auth.require = ( "" => (
                "method" => "basic",
                "realm" => "nagios",
                "require" => "user=nagiosadmin" 
                )
        )
}

请注意,必须允许 mod_setenv、mod_cgi、mod_alias 和 mod_auth。

PHP 配置

编辑 /etc/php/php.ini,在 open_basedir 指令中包含 /usr/share/nagios

示例配置

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps:/etc/webapps:/usr/share/nagios

最后步骤

  1. 启动或重启 nagios.service 以启用 Nagios。
  2. 启动或重启您的 Web 服务器:Apache 为 httpd.service,Nginx 为 nginx.service,lightttpd 为 lighttpd.service

现在您应该可以通过浏览器使用上面使用 htpasswd 创建的用户名和密码访问 Nagios 了。

https:///nagios

监控 Arch Linux 主机

您需要 monitoring-plugins 以及 nrpe,或者使用 check_by_ssh 和无密码 SSH 来监控您的主机。

nrpe

nrpe 配置在 /etc/nrpe/nrpe.cfg 中完成,有趣的监控文件将在 /usr/share/nagios/libexec/ 中。安装后 nrpe.cfg 大部分是空的,请不要忘记编辑它。

check_by_ssh

在监控系统上,切换到运行 Nagios/Icinga/等程序的那个用户账户,运行 ssh-keygen。在要监控的 Arch 系统上创建一个同名用户,并设置一个临时密码,例如:

# useradd -m -d /home/icinga -s /bin/bash -p icinga icinga.

从监控系统运行此命令(其中 client_ipaddress 是客户端的 IP 地址)

$ ssh-copy-id client_ipaddess

回到客户端,清除临时密码。

# passwd -d icinga.

验证您是否可以从服务器登录,使用

$ ssh icinga@client_ipaddres

许多非 Arch 系统将监控插件安装到 /usr/lib/nagios/plugins,但 Arch 将它们安装到 /usr/lib/monitoring-plugins/。可能需要创建 /usr/lib/nagios 目录,并从该目录将 ../monitoring-plugins 符号链接到 plugins

这是从命令行作为监控系统的用户运行的命令调用的一个示例

$ /usr/lib/nagios/plugins/check_by_ssh -E -H 192.168.100.11 -C "/usr/lib/nagios/plugins/check_disk -w 10 -c 5 --path=/ --units=GB"

参见