1、nagios的优势
1)部署和配置最便捷
2)完善的基础服务监控,直接有效
2、nagios的两种核心工作模式
远程直连采集:IP(ping)、端口(telnet)、URL(curl -I)
桥接间接采集:CPU、内存、磁盘、进程
扩展功能:NRPE组件,NRPE在客户端上先收集相关信息,然后nagios服务器上的NRPE连接客户端NRPE获取监控数据
3、CentOS7安装Nagios服务端和NRPE组件、配置、应用
1)确保相关服务器时区、时间一致:date;确保一致手段:ntpdate、chnory
2)nagios本身不带web server,利用httpd(apache)来安装webserver
yum install httpd
3)安装epel
yum -y install epel-release
4)安装nagios* NRPE
yum install nagios* nrpe
加载httpd的配置/etc/httpd/conf.d/nagios.conf
5)启动服务
systemctl start httpd
systemctl start nagios
PS:确保防火墙已关闭,firewall-cmd --state
停止firewall systemctl stop firewalld.service
禁止firewall开机启动 systemctl disable firewalld.service
6)设置nagios初始登录密码
htpasswd -c /etc/nagios/passwd nagiosadmin
PS:如果web管理员不是使用默认的nagiosadmin,需要修改cgi.cfg
sed -i "s/nagiosadmin/xxxxxx/g" /etc/nagios/cgi.cfg
#把所有nagiosadmin改为自定义的用户名,否则查看services时会提示权限不够。
7)访问页面(默认端口80),报错:nagios core not running
查看nagios状态failed:systemctl status nagios
查看日志:/var/log/nagios/nagios.log 所有者为root
修改所有者为nagios,重启nagios,显示状态为active (running)
然并卵,依然显示为:nagios core not running
有人说apache没有开启cgi脚本,修改apache的主配置文件httpd.conf
#LoadModule cgid_module modules/mod_cgid.so
#LoadModule actions_module modules/mod_actions.so
注释掉这两行,但我的httpd配置里面没有这两行,暂不调整;
查看selinux,getenforce,开启;
编辑配置文件:/etc/selinux/config,disabled
关闭selinux:setenforce 0 状态变更为:Permissive
刷新nagios页面,提示变为:Daemon running with PID xxxx
8)nagios配置
配置文件:/etc/nagios/objects
节点配置:localhost.cfg,主要定义:host_name,主机唯一标识;IP address
修改完配置文件,重启nagios:systemctl restart nagios
刷新页面,显示新增主机
组配置:localhost.cfg HOST GROUP DEFINITION
自定义:hostgroup_name、members(英文逗号分开多节点)
服务配置:localhost.cfg SERVICE DEFINITIONS
check_command check_xxx ;监控脚本
notifications_enabled 0 ;是否触发报警,0:不报警
关于HTTP监控的注意:
a、check_http本身是监控http_url,默认访问http://ipaddrss(80端口);
b、check_http默认监控http://ipaddrss/index.*
c、一旦check_http访问失败,不能返回200,监控主页显示为warning或failed
PS:nagios的检测频率是有一定间隔的,要立即检测,由服务点击进去,重新定义检测时间:
Re-schedule the next check of this service
http检测:
CRITICAL 端口不通,注意检查防火墙是否关闭
WARNING 主页访问失败,注意检查index主页是否配置,httpd默认主页路径/var/www/html
nginx默认主页路径/usr/xxx/share/html
9)调整监控脚本
监控来自nagios的插件,查看rpm -qa |grep nagios-plugin |grep http
查询关联文件:rpm -ql nagios-plugins-http-** (上一命令查出的包名)
eg: /usr/lib64/nagios/plugins/check_http
监控脚本本地调用:/usr/lib64/nagios/plugins/check_http -H hostip -p port
nagios调用脚本时,并不是直接使用/usr/lib64/nagios/plugins/下的命令,而是先读取/etc/nagios/objects/command.cfg里面关于命令的定义,service的服务名是command里面定义的command_name,实际调用的命令是在command_line里面。
define command {
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}
$USER1$为之前rpm找到的命令所在路径:/usr/lib64/nagios/plugins/
command_line中的$ARG1需要在service中自行定义
eg:check_command check_http!-p 8080 ;-p 8080 即$ARG1
多参数应用:ARG1、ARG2、ARG3...... 类似于shell脚本的参数
10)NRPE桥接模式
服务器、客户端都需要安装:yum install nagios-plugins*
在安装nagios-plugins*时,已经包含了nrpe。
客户端NRPE通过执行Plugins脚本获取到主机相关监控信息,然后传回nagios服务端NRPE
eg:commands.cfg增加命令定义
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
localhost.cfg增加服务定义
define service {
use local-service ; Name of service template to use
host_name dev52
service_description UPTIME
check_command check_nrpe!check_cpu
notifications_enabled 0
}
重启服务端nagios
客户端nrpe配置文件:/etc/nrpe.d/lcgdm-common.cfg命令定义
command[check_cpu]=/usr/lib64/nagios/plugins/lcgdm/check_cpu
首先确认/usr/lib64/nagios/plugins/lcgdm/check_cpu可以本地执行
然后确认/etc/nrpe.d/lcgdm-common.cfg有相应配置
客户端修改nrpe主配置文件:/etc/nagios/nrpe.cfg
allowed_hosts=nagios服务端IP
启动两边的nrpe:systemctl start nrpe 确认工作在5666端口,确认客户端防火墙关闭;
服务端调测nrpe
/usr/lib64/nagios/plugins/check_nrpe -H 192.168.2.52
报错:Connection reset by peer
原因:客户端修改了nrpe主配置后没有重启nrpe
解决:systemctl restart nrpe
效果:nagios监控界面,dev52主机增加了一项服务UPTIME,re-schedule执行下,状态ok,status info栏目获取到52主机cpu空闲率。
10)自编写脚本并嵌入nagios
监控客户端连接状态为waiting的,大于等于1000即告警;
[root@centos7-52 plugins]# cat check_waiting_connect
#!/bin/bash
NUM=`netstat -an|grep -i wait|wc -l`
if [ $NUM -lt 1000 ];then
echo "OK,waiting_connections<1000"
exit 0
else
echo "WARNING,waiting_connections≥1000"
exit 1
fi
返回码级别:
0 OK
1 WARNING
2 CRITICAL
3 UNKNOWN
取值参考/etc/nagios/nagios.cfg
/etc/nrpe.d/lcgdm-common.cfg增加一行
command[check_waiting_connect]=/usr/lib64/nagios/plugins/check_waiting_connect
重启nrpe
服务端/etc/nagios/objects/localhost.cfg
define service {
use local-service ; Name of service template to use
host_name dev52
service_description WAITING_CONNECT
check_command check_nrpe!check_waiting_connect
notifications_enabled 0
}
重启nagios
本地调试确认:
/usr/lib64/nagios/plugins/check_nrpe -H 192.168.2.52 -c check_waiting_connect
返回:OK,waiting_connections<1000
查看监控页面,达到预期效果。
PS:查看上一条命令执行情况,
echo $? ##0 正确执行
10)Nagios+Pagerduty以实现监控报警
报警方式:电话、短信、邮件、app等;
https://www.pagerduty.com 注册账号,注意填写有效邮箱和电话号码
SERVICES> ALARM TEST: INTEGRATIONS>NAGIOS获取到Integration Key
0d10550063474979936886a0835758bb
yum安装pagerduty agent,用于nagios与pagerduty通讯
参考:https://www.pagerduty.com/docs/guides/agent-install-guide/
新增nagios服务器yum源
sh -c 'cat >/etc/yum.repos.d/pdagent.repo < [pdagent] name=PDAgent baseurl=http://packages.pagerduty.com/pdagent/rpm enabled=1 gpgcheck=1 gpgkey=http://packages.pagerduty.com/GPG-KEY-RPM-pagerduty EOF' yum安装 yum install pdagent pdagent-integrations 查看pdagent状态 systemctl status pdagent 配置nagios以支持pagerduty,获取配置文件pagerduty_nagios.cfg,放到配置文件目录/etc/nagios wget https://raw.githubusercontent.com/PagerDuty/pdagent-integrations/master/pagerduty_nagios.cfg 修改pagerduty_nagios.cfg,加入pager的值,就是之前获取的那一串Integration Key 修改/etc/nagios/objects/contacts.cfg,contactgroup的members增加pagerduty,英文逗号隔开 修改localhost.cfg关于service的配置项notifications_enabled,默认0,关闭报警,修改为1,开启报警; 重启nagios失败,journalctl -xe查看报错: Error: Could not find any contact matching 'pagerduty' (config file '/etc/nagios/objects/contacts. 字面理解,contactgroup里面的pagerduty没有定义,而实际是在pagerduty_nagios.cfg里面有定义; 原因:nagios主配置文件/etc/nagios/nagios.cfg里面少配置了一项: cfg_file=/etc/nagios/pagerduty_nagios.cfg 补充主配置文件后,重启nagios,人为制造几个报警,但在pagerduty上看不到监控,排查pagerduty日志/var/log/pdagent/pdagentd-debug.log,没有获取到报警指令。 原因:之前调试引起service状态变动频繁,导致报警被抑制,进入服务,清理浮动状态,重新出发报警,/var/log/pdagent/pdagentd-debug.log日志里面体现报警,pagerduty页面也看到相应报警,同时将收到pagerduty的邮件通知(大概率是在垃圾箱里面)。 PS: 1、当nagios的service状态改变后,需要经过Attempt次尝试后才触发报警; 2、当service状态浮动频繁,报警将被抑制;当状态稳定、浮动停止,才恢复报警; 3、报警的触发直接看nagios>reports>notifications 4、nagios插件说明:https://blog.51cto.com/jim123/1955618