• 隐藏侧边栏
  • 展开分类目录
  • 关注微信公众号
  • 我的GitHub
  • QQ:1753970025
Chen Jiehua

Nagios安装配置 

Nagios是一个开源的系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户。在此,我把自己在服务器上折腾的过程小记一下……

简介

Nagios作为一款开源的监控软件,历史可谓源远流长。它可以进行各种网络服务的监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH),主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin),同时还可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……),可以通过配置Nagios远程执行插件远程执行脚本。

Nagios Core,作为nagios的核心组件,搭建监控平台必不可少;同时,它也包含了一个基本的web界面,可以方便用户进行查看。

Nagios Plugins,包含了监控各种指标的插件,例如CPU负载,内存使用,网络PING等。

NRPE,也即是Nagios Remote Plugin Executor,它属于nagios的一个addon,默认情况下不需要安装。但如果我们搭建的Nagios监控平台需要对其他远程主机进行监控,那么NRPE必不可少,其主要包含了check_nrpe 插件(安装在监控平台),NRPE daemon程序(运行在需要监控的主机,负责执行check_nrpe发送过来的命令并将结果返回监控平台)。

nrpe安装

在这里,我们安装的是Nagios 4,Ubuntu 14.04官方源只提供了nagios 3的版本,因此我们将从源码进行安装。

Prerequisites

  • 安装PHP运行环境
  • 安装Nginx
  • 安装依赖的库:
$ sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev php5-fpm spawn-fcgi fcgiwrap

Nagios Core

官网下载最新的软件源码包,然后解压编译安装:

$ tar xvf nagios-*.tar.gz
$ cd nagios-*
# 配置这里,如果你需要使用postfix,可以添加 --with-mail=/usr/sbin/sendmail (不过我在这里配置了后续发送邮件出错,修改为默认的mail。。。)
$ ./configure --with-nagios-group=nagios --with-command-group=nagcmd 
$ make all

$ sudo make install
$ sudo make install-commandmode
$ sudo make install-init
$ sudo make install-config

# 另外我们也可以为web界面安装其他的主题
# - This installs the Exfoliation theme for the Nagios web interface
$ make install-exfoliation
# - This installs the classic theme for the Nagios web interface
$ make install-classicui

因为我们需要通过web界面来向nagios请求执行命令,因为我们需要将 web server 的用户(www-data)添加到 nagcmd 用户组:

$ sudo usermod -G nagcmd www-data

设置开机启动:

$ sudo update-rc.d -f nagios defaults

Nagios Plugins

官网下载最新的软件源码包,然后解压编译安装:

$ tar xvf nagios-plugins-*.tar.gz
$ cd nagios-plugins-*
$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl
$ make
$ sudo make install

配置

修改监控通知email,/usr/local/nagios/etc/objects/contacts.cfg :

define contact {
    ……
    # 修改email为你的邮箱
    email  xxxxx@xx.com    
}

修改监控email的发送命令, /usr/local/nagios/etc/objects/commands.cfg:

define command{
    command_name    notify-host-by-email
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOS    TSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -a "From:Nagios@chenjiehua.me" -s "*    * $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
 
define command{
    command_name    notify-service-by-email
    command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHos    t: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /    usr/bin/mail -a "From:Nagios@chenjiehua.me" -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CO    NTACTEMAIL$
}

检查配置文件有没有错误:

$ sudo /opt/nagios/nagios/bin/nagios -v /etc/nagios/nagios.cfg
# 一切ok之后,重启服务
$ sudo service nagios restart

配置nginx访问,添加nginx配置文件 /etc/nginx/sites-enabled/nagios:

server {
    listen 80;
    server_name xxxxx.com;
    index index.html index.htm index.php;
    root /usr/local/nagios/share;

    auth_basic "Restricted Access!";
    auth_basic_user_file /home/ubuntu/htpasswd.users;

    location / {
        try_files $uri $uri/ index;
    }

    location /nagios {
        alias /usr/local/nagios/share;
    }

    location ~ ^/nagios/(.*\.php)$ {
        alias /usr/local/nagios/share/$1;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

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

    location ~ \.php$ {
		include fastcgi_params;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

添加nagios web访问限制:

$ htpasswd -b /home/ubuntu/htpasswd.users nagiosadmin xxxpasswordxxx

重启一下nginx,应该就可以看到Nagios的运行情况了。

监控其他主机(NRPE)

目前Nagios只监控了localhost的一些相关参数指标,如果我们需要监控其他主机,那么就需要安装nrpe了。为了方便起见,我们简称上面配置的Nagios监控平台服务器为Agent,被监控的主机为Remote。

Agent配置

首先,在Agent上面安装nrpe-plugin,下载最新版本,然后解压编译安装:

$ tar xvf nrpe-*.tar.gz
$ cd nrpe-*
$ ./configure --enable-command-args --with-nagios-user=nagios --with-nagios-group=nagios --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu
$ make all
# 作为监控平台的服务器只需要安装 nrpe-plugin 就行了,无需安装daemon
$ sudo make install-plugin

安装完成后,我们就可以在 /usr/local/nagios/libexec 这个目录下面看到多了一个 check_nrpe 的可执行文件,然后进行配置。

添加 check_nrpe 命令:

$ sudo vim /usr/local/nagios/etc/objects/commands.cfg

# 在文件末尾添加 
define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

修改 /usr/local/nagios/etc/nagios.cfg:

$ sudo vim /usr/local/nagios/etc/nagios.cfg

# 取消这一行的注释
#cfg_dir=/usr/local/nagios/etc/servers

sudo mkdir /usr/local/nagios/etc/servers

添加服务器配置文件,假设Remote为remotehost,添加/usr/local/nagios/etc/servers/remotehost.cfg:

define host {
        use                             linux-server
        host_name                       remotehost
        alias                           My web server
        address                         10.132.234.52
        max_check_attempts              5
        check_period                    24x7
        notification_interval           30
        notification_period             24x7
}

添加了上面的内容,Nagios只会监控该服务器是否启动(up?down),我们继续添加:

# PING
define service {
        use                             generic-service
        host_name                       remotehost
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
}

# SSH
define service {
        use                             generic-service
        host_name                       remotehost
        service_description             SSH
        check_command                   check_ssh
        notifications_enabled           0
}

正常情况下,PING和SSH即使Remote没有运行NRPE daemon也可以进行监控,因为它们不许要登录到Remote获取数据。

添加一个CPU负载的监控:

define service{
    use                              generic-service
    host_name                        remotehost
    service_description              CPU Load
    check_command                    check_nrpe!check_load 
}

修改完成后,记得重启Nagios服务: sudo service nagios restart

Remote配置

Remote机器上面需要安装的软件有:Nagios-Plugins,NRPE daemon。Plugins的安装跟上面的类似,这里不重复了;NRPE 的安装与配置:

  • 从源码安装:
# 接上面Agent的安装
$ sudo make install-daemon
$ sudo make install-daemon-config
  • apt安装:
# 就为了图个省心方便 ^_^
$ sudo apt-get install nagios-plugins nagios-nrpe-server

修改nrpe配置文件,/etc/nagios/nrpe.cfg:

# 添加Agent的ip地址
allowed_hosts=127.0.0.1,10.132.224.168

重启服务,测试是否正常:

$ sudo service nagios-nrpe-server start
# 在Agent上执行check_nrpe命令测试
$ /usr/local/nagios/libexec/check_nrpe -H remotehost_ip
NRPE v2.15

显示NRPE的版本号,则表示安装正常。

监控项配置

在 Remote 的 /etc/nagios/nrpe.cfg 中,我们可以看到许多相关命令:

command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 

 

参考:

http://idevit.nl/node/93

https://www.digitalocean.com/community/tutorials/how-to-install-nagios-4-and-monitor-your-servers-on-ubuntu-14-04

http://www.tokiwinter.com/installing-nagios-under-nginx-on-ubuntu-14-04-lts/

http://www.ilanni.com/?p=9241

https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/toc.html

码字很辛苦,转载请注明来自ChenJiehua《Nagios安装配置》

评论