CentOS7下nagios+pagerduty的yum安装与应用

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

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,nagios,nagios,pagerduty,监控,报警)