关于IT运维技术的
最佳实践博客网站

在centos6.5下编译安装nagios内核和插件和使用NRPE扩展来监控远程服务器(基础)

Nagios是一款功能强大的网络监视工具,它可以有效的监控windows、linux、unix主机状态以及路由器交换机的网络设置,打印机工作状态等,并将状态出现异常的服务及时以邮件、msn短信等形式第一时间通告管理员。由于它是一款遵循GPLv2的开源网络监控软件,以其出色的性能低廉的使用成本,深受广大用户的好评。

nagios的主要监控功能有:

  1. 监控网络服务(HTTP、POP3、SMTP、PING、MySQL等)
  2. 监控主机资源(磁盘空间利用率、内存利用率、CPU负载等)
  3. 简洁的插件设计接口,使得用户可以轻松开发所需的检测脚本(运维则可直接找到相关脚本并使用)
  4. 并行服务模式
  5. 轻松描述网络结构,并且能够区辨“宕机”和“主机不可达”
  6. 通过邮件或用户自定义的方式将主机或服务的工作状态变化情况通知给管理员6)当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式) 可以通过飞信,等方式实现时,既可传递给管理员,可高效的保证服务器的维护
  7. 自动日志滚动
  8. 支持以冗余方式进行主机监控
  9. 可以通过web方式直观的查看当前网络状态、通知和问题历史、日志文件等等,此组件为可选

Nagios相关的配置文件:

  • nagios.cfg为其主配置文件其中可以定义nagios的一些基本工作状态可监控机的配置文件;
  • command.cfg其为nagios的监控命令配置文件,在其中可定义nagios在监控过程中针对某项服务所使用到得命令;
  • contact.cfg其为nagios报警途径配置文件,它用来定义一旦监控到某台主机状态异常或某服务状态为离线通知运维人员的方法;
  • timeperiods.cfg用于定义nagios向运维人员发送报警的周期时间频率等; resource.cfg用于定义nagios监控服务所使用到脚本所在路径;
  • templates.cfg中定义的是nagios监控各项主机或服务属性状态所需的模板。

Nagios监控原理图

nagios监控原理图

在监控服务器上安装必备的库和Apache php

nagios的监控服务器的重点在监控nagios和扩展插件,以及报警这方面,因此Apache以及PHP,和一些必备的依赖关系库都采用yum方式安装,核心的nagios和相关扩展插件都采用源码编译方式安装。

centos和Ubuntu下必备依赖关系库:

RHEL/CentOS:

yum install -y wget httpsd php gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel

Ubuntu:

sudo apt-get install wget build-essential apache2 php5-gd libgd2-xpm libgd2-xpm-dev libapache2-modphp5 openssl-devel

为nagios监控软件添加nagios运行所需的用户和群组,以确保安全和有效运行

#添加与nagios运行相关服务的组
groupadd nagcmd
#添加nagios用户
useradd -m nagios
#将nagios用户追加附加组
usermod -a -G nagcmd nagios
#将apache用户追加nagcmd组使之工作时具有足够的权限
usermod -a -G nagcmd apache

下载 和 安装 nagios core 核心软件

cd /usr/local/src/
wget https://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz
tar zxvf nagios-4.0.8.tar.gz
cd nagios-4.0.8
./configure --with-command-group=nagcmd
#安装主程序
make all
#初始化程序
make install
make install-init
#生成配置文件
make install-config
make install-commandmode
#生产web配置文件
make install-webconf

复制定时处理程序

cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/

赋予运行的权限

chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers

验证配置文件是否正确

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

启动nagios并且设置为开机启动

/etc/init.d/nagios start
chkconfig --add nagios
chkconfig --level 35 nagios on

修改PHP以及Apache几处配置。

#去掉ServerName www.example.com:80 #注释
vim /etc/httpsd/conf/httpsd.conf
#修改成
ServerName localhost:80
#修改php配置文件中的时区为Asia/Shanghai
vim /vim /etc/php.ini
date.timezone = Asia/Shanghai

启动Apache并且设置为开机启动

/etc/init.d/httpsd start
chkconfig --add httpsd
chkconfig --level 35 httpsd on

为了安全起见,一般情况下要让nagios 的web 监控页面必须经过授权才能访问,所以必须设置

#为nagios的web页面创建账号密码,对访问进行身份认证
htpasswd –c /usr/local/nagios/etc/htpasswd.users nagiosadmin
#nagiosadmin 是验证登录的用户名可以修改成任意,但是如果改成其它的后就需要需要修改cgi.cfg文件中所有的相关认证选项的用户。

现在输入https://IP/nagios 就可以放问nagios图形化界面了。

nagios_nrpe

安装nagios插件

wget https://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
tar zxvf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

赋予nagios主目录和插件目录权限

chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec

查看插件

ll /usr/local/nagios/libexec/

安装NRPE插件

wget https://cznic.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
tar zxvf nrpe-2.15.tar.gz
cd nrpe-2.15
./configure
make all
make install-plugin

监控主机上只需要make install-plugin这一步就可以了。监控机上只要有一个check_nrpe插件用于连接被监控端nrpe的daemon就行了。

查看扩展插件NREP的用法

/usr/local/nagios/libexec/check_nrpe -h|less

在command.cfg命令定义文件中添加NRPE命令。

vim /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

这里要说明几点:

  1. 这里定义的命令名就叫作nrpe。
  2. $USER1$/check_nrpe会通过引用resource.cfg获得/usr/local/nagios/libexec/check_nrpe这个绝对路径。
  3. -H $HOSTADDRESS$ 用来获得指定被监测主机的IP地址,$HOSTADDRESS$变量会通过定义主机名查找到host段中的IP地址。
  4. -c $ARG1$ 用来指定被监测主机上NRPE守护进程运行着的NRPE命令名。

在被监控的主机上面安装nagios插件和NREP插件

必备依赖关系库

yum install gcc glibc glibc-common xinetd openssl-devel make

被监控的主机上添加nagios运行所需的用户和群组

useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios

安装nagios插件

wget https://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
tar zxvf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

赋予nagios主目录权限

chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec

安装NRPE插件

tar zxvf nrpe-2.15.tar.gz
cd nrpe-2.15
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
make install-xinetd

编辑/etc/xinetd.d/nrpe

在only_from行添加nagios服务器的IP用空格分隔

编辑nrpe.cfg

vim /usr/local/nagios/etc/nrpe.cfg
在allowed_hosts 行添加nagios服务器IP用逗号分隔

重启NRPE

pkill nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

验证是否启动?

netstat -at | grep nrpe
ps aux | grep nrpe

返回版本号

/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1

将NRPE添加写入系统启动脚本中

echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >> /etc/rc.local

监控应用

监控一个项目最重要的有下面三点:首先是监控哪台机器,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人。
创建存放监控应用的目录

mkdir -p /usr/local/nagios/etc/servers

编辑nagios.cfg配置文件

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

取消前面的#号注释

cfg_dir=/usr/local/nagios/etc/servers

首先确定监控那台机器?

在servers目录下创建一个linuxhost.cfg文件,用于定义要监控的主机

vim /usr/local/nagios/etc/servers/linuxhost.cfg

 

配置配置的内容如下:

;定义主机 
define host{
use linux-server ;继承linux-server主机模版
host_name rsync-client ;主机名
alias rsync-client ;主机别名
address 192.168.44.129 ;主机IP地址
}
;定义主机群组
define hostgroup{
hostgroup_name linuxsever ;群组名称
alias linuxsever ;群组别名
members rsync-client ;群组成员,用逗号分隔
}

 

要监控这台机器那些服务?用什么命令是去实现?

;监测远程系统当前负载服务。
define service{
use generic-service
host_name rsync-client
service_description Current Load
check_command check_nrpe!check_load
}
;监控远程主机当前登陆的用户
define service{
use generic-service
host_name rsync-client
service_description Current Users
check_command check_nrpe!check_users
}
;监控远程主机的root根目录空间
define service{
use generic-service
host_name rsync-client
service_description Root Partition
check_command check_nrpe!check_disk
}
;监控远程主机的总进程数 
define service{
use generic-service
host_name rsync-client
service_description Total Processes
check_command check_nrpe!check_total_procs
}
;监控远程主机上SSH服务连通性
define service{
use generic-service
host_name rsync-client
service_description SSH Monitoring
check_command check_ssh
notifications_enabled 1
}
;监控远程主机上swap空间
define service{
use generic-service 
host_name rsync-client
service_description Swap Usage
check_command check_nrpe!check_swap
notifications_enabled 0
}
;监控远程主机的ping值
define service{
use generic-service
host_name rsync-client
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
;监测远程系统僵尸进程数服务。
define service{
use generic-service
host_name rsync-client
service_description Zombie Processes On Remote System
check_command check_nrpe!check_zombie_procs
}

注意:这里要监控的服务一一对应命令在被监控远程主机上的vim /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_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda3
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200 
command[check_ssh]=/usr/local/nagios/libexec/check_ssh $ARG1$ $HOSTADDRESS$
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
command[check_ping]=/usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5

 出了问题要通知那些人?contacts.cfg 中配置发送邮件通知的人

#编辑 vim /usr/local/nagios/etc/objects/contacts.cfg
#修改contacts.cfg文件
define contact{
contact_name nagiosadmin ; 要通知的人的名字
use generic-contact ; 继承template模版下的generic-contact
alias Nagios Admin ; 别名
email 123456@139.com ; 此人的邮件地址
}

define contactgroup{
contactgroup_name admins ;联系人群组
alias Nagios Administrators ;群组别名
members nagiosadmin;群组成员用逗号分隔。
}

 通过什么方式去通知?commands.cfg 文件中配置邮件发送方式

# vim /usr/local/nagios/etc/objects/commands.cfg
# commands.cfg中默认就可以无须修改和配置
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}

# 'notify-service-by-email' command definition
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}

直接通过外部SMTP发邮件 (直接抛弃sendmail和postfix)

这里一定要注意,/bin/mail命令,centos6.5最小化安装后默认的是postfix,折腾了很久,虽然发件是成功但是通过查看日志/var/log/maillog,发现还是有不少错误提示,也没办法快速解决。果断放弃,直接通过外部的SMTP发邮件,直接抛弃sendmail和postfix。这样还能避免垃圾邮件的潜在风险。

停止sendmail和postfix

#如果安装有sendmial
service sendmail stop
chkconfig sendmail off
#如果安装有postfix
service postfix stop
chkconfig postfix off

或者直接卸载了

yum remove sendmail
#注意postfix是不能直接yum remove的,会卸载掉其它关联的软件比如crontabs。

然后修改/etc/mail.rc,增加以下配置,指定外部的smtp服务器地址、帐号密码等。

#vi /etc/mail.rc 
set from=123456@139.com
set smtp=smtp.139.com
set smtp-auth-user=123456
set smtp-auth-password=sbsbsbsb
set smtp-auth=login

测试mail命令是否能发出邮件

echo hello word | mail -s " title" 123456@139.com

说明:这里推荐使用139邮箱。收到邮件就会自动发短信到手机上,这样保证了,报警的及时性。

具体效果看截图:

sms_139 利用139邮箱

未经允许不得转载:菜鸟HOW站长 » 在centos6.5下编译安装nagios内核和插件和使用NRPE扩展来监控远程服务器(基础)
分享到: 更多 (0)

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址