Nagios

来自 ArchWiki

Nagios 是一个开源的主机、服务和网络监控程序。它监控指定的主机和服务,并在出现任何正在 developing 的问题、错误或改进时向您发出警报。本文描述了 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

将您刚刚复制的所有文件的所有者/组设置为 nagios/nagios

# chown -R nagios:nagios /etc/nagios

如果您已安装 apache-tools,则使用用户名 (例如 nagiosadmin) 创建 htpasswd.users 文件。系统将提示您添加密码。

# 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 服务器 作为 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 服务器:httpd.service 用于 Apache,nginx.service 用于 Nginx,以及 lighttpd.service 用于 lightttpd。

现在您应该能够使用您上面使用 htpasswd 创建的用户名和密码通过 Web 浏览器访问 nagios

https://127.0.0.1/nagios

监控 Arch Linux 主机

您将需要 monitoring-pluginsnrpe 或使用 check_by_ssh 以及无密码 ssh 来监控您的主机。

nrpe

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

check_by_ssh

在监控系统上,su 到 Nagios/Icinga/whatever 运行的用户帐户,运行 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"

参见