本文描述如何监控 Linux/UNIX 主机的系统属性和本地服务,例如:
Linux/UNIX 主机的公共服务,例如 HTTP,SSH 等不在本文的讨论范围内,本文仅仅描述如上所述的系统属性和本地服务。
有很多方法可以监控 Linux/Unix 主机的系统属性和本地服务,例如可以通过利用 SSH 登录远程主机,执行监控命令,Nagios 也提供了这种方式的插件 check_by_ssh
,通过这个插件可以执行被监控主机上的监控命令。这里并不推荐使用这种方法,因为当需要监控很多主机时,频繁创建和销毁 SSH 连接会非常影响监控服务器的性能。
另一种常用的方法是使用 NRPE 插件来实现监控远程主机的,NRPE 使你可以执行远程 Linux/UNIX 主机上的监控命令:
NRPE 插件由两部分组成:
NRPE: NRPE 是运行在远程被监控的主机上的代理程序,接收有 Nagios 服务器通过 check_nrpe
发送的检查请求。当收到检查请求时,它会按照请求要求执行相应的检查命令,然后将结果返回给 Nagios 监控服务器。
check_nrpe:这个监控插件运行在 Nagios 服务器,用来与远程主机上的 NRPE 代理程序交互。使用这个插件时,它会告诉远程主机上 NRPE 代理程序需要监控的项目,收到返回结果后,它会将其转为自己的输出代码输出结果。
编译 NRPE 插件时需要安装 openssl-devel
yum install openssl-devel
下载 NRPE 软件包,可以前往 https://exchange.nagios.org/ 搜索最新的软件包
wget https://github.com/NagiosEnterprises/nrpe/archive/3.0.1.tar.gz
解压缩
tar -zxvf 3.0.1.tar.gz
cd 3.0.1
编译并安装插件
./configure
make all
make install-plugin
安装完成后就可以在 /usr/local/nagios/libexec
下找到 check_nrpe
插件。
安装编译环境
yum install gcc glibc glibc-common unzip openssl-devel
创建 nagios 用户,可以将 nagios 用户设置为不可登录
useradd nagios
下载 nagios 插件
wget https://nagios-plugins.org/download/nagios-plugins-2.1.2.tar.gz
解压缩并安装
tar -zxvf nagios-plugins-2.1.2.tar.gz
cd nagios-plugins-2.1.2
./configure
make
make install
设置权限
chown nagios:nagios /usr/local/nagios
chown -R nagios:nagios /usr/local/nagios/libexec
xinetd 是 Linux 下的守护进程,稍后安装的 NRPE 将托管在 xinetd 下。
这种方式的优点是空闲时只有 xinetd 这一守护进程占有系统资源,而托管在它上边的其他的内部服务不会一直占有系统资源,只有请求到来时才会被 xinetd 唤醒。并且通过 xinetd 还可以对它所管理的内部进程设置相应的访问权限。
yum install xinetd
载 NRPE 软件包,可以前往 https://exchange.nagios.org/ 搜索最新的软件包
wget https://github.com/NagiosEnterprises/nrpe/archive/3.0.1.tar.gz
解压缩
tar -zxvf 3.0.1.tar.gz
cd 3.0.1
编译并安装插件及配置文件
./configure
make all
make install-plugin
make install-daemon
make install-config
make install-inetd
不同版本的 nrpe 安装参数有可能不一致,运行 make 可以列出所有的参数
修改 nrpe 配置 vi /usr/local/nagios/etc/nrpe.cfg
,将 server_address 修改为 Nagios 服务器地址。
server_address=192.168.1.200
配置 xinetd,编辑 /etc/xinetd.d/nrpe
vi /etc/xinetd.d/nrpe
将下列行中允许访问的 ip 地址改为 Nagios 服务器的地址,并开启服务
service nrpe
{
disable = no \\注意将这里修改成no
socket_type = stream
port = 5666
wait = no
user = nagios
group = nagios
server = /usr/local/nagios/bin/nrpe
server_args = -c /usr/local/nagios/etc/nrpe.cfg --inetd
only_from = \\ 设置为nagios服务器地址
log_on_failure += USERID
}
将 nrpe 服务说明添加至 /etc/services
nrpe 5666/tcp # NRPE
设置防火墙
firewall-cmd --zone=public --add-port=5666/tcp --permanent
firewall-cmd --reload
启动 xinetd
systemctl start xinetd
此时可以回到监控服务器上,运行插件检查
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.201
返回 nrpe 版本就说明远程主机上 nrpe 安装正确。
vi /usr/local/nagios/etc/objects/commands.cfg
插入如下定义:
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
新建 linux 服务器配置文件 linux.cfg
vi /usr/local/nagios/etc/objects/linux.cfg
define host{
use linux-server
host_name linuxserver
alias My linux Server
address 192.168.1.201
}
设置监控 CPU 负载
define service{
use generic-service
host_name linuxserver
service_description CPU Load
check_command check_nrpe!check_load
}
设置监控当前登录用户
define service{
use generic-service
host_name linuxserver
service_description Current Users
check_command check_nrpe!check_users
}
设置监控磁盘 /dev/hda1 的使用情况
define service{
use generic-service
host_name linuxserver
service_description /dev/hda1 Free Space
check_command check_nrpe!check_hda1
}
设置监控进程数
define service{
use generic-service
host_name linuxserver
service_description Total Processes
check_command check_nrpe!check_total_procs
}
集中说明一下,在 check_command 定义中,check_nrpe 后边连接的就是远程主机中定义的监控命令,远程主机的定义可以在远程主机的 /usr/local/nagios/etc/nrpe.cfg
中查看到:
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
重新启动 nagios 服务,就可以看到新增的监控主机