Linux下nagios的搭建及相关配置

一、LAMP环境部署

1、安装php

1.安装yum源
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
2.执行yum安装
yum --enablerepo=remi,remi-php55 install php php-devel php-common php-fpm php-opcache \
php-cli php-pear php-pdo php-mysqlnd php-sqlite php-pecl-memcached php-gd \
php-mbstring php-mcrypt php-xml php-openssl php-intl php-zmq -y 
3.查看版本
php -v

2、安装mysql(安装之前先卸载掉系统自带的版本)

1.安装oracle官方yum源
rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
2.yum安装
yum -y install mysql-server mysql
3.查看版本
mysql -V

3、Apache默认系统已经安装,开启支持php页面解析即可

1.修改配置文件
vim /etc/httpd/conf/httpd.conf 
DirectoryIndex index.html index.php index.html.var
/etc/init.d/httpd restart
2.编辑测试页进行测试
cat index.php 
<?php
phpinfo();
?>

二、nagios环境部署

1、下载源码包

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz 

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz

wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz#_ga=1.84131165.51197378.1492996402

2、安装依赖环境

yum install gcc gd gd-devel libpng libpng-devel libjpeg libjpeg-devel zlib zlib-devel openssl-devel -y

3、创建用户

/usr/sbin/useradd -m -s /sbin/nologin nagios

4、编辑安装主程序包

1.安装
tar zxvf nagios-3.2.3.tar.gz
cd nagios-3.2.3
./configure --prefix=/usr/local/nagios
make all
make install                //安装nagios的主程序,CGI和HTML文件
make install-init           //生成/etc/rc.d/init.d/nagios启动脚本 
make install-config         //安装示例配置文件,路径/usr/local/nagios/etc
make install-commandmode    //设定相应nagios工作目录的权限
make install-webconf        //安装Nagios的WEB配置文件到Apache的conf.d目录下
2.查看安装是否成功
ls /usr/local/nagios/
bin  etc  libexec  sbin  share  var

5、安装插件包

1.安装
tar zxvf nagios-plugins-2.2.1.tar.gz
cd nagios-plugins-2.2.1/
./configure
make && make install
2.检查安装是否成功(如果下面有很多东西,说明成功)
ls /usr/local/nagios/libexec/

6、创建nagios用户,进行web登录(用户必须是nagiosadmin,不然web页面有的功能不能用)

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password: 
Re-type new password: 
Adding password for user nagiosadmin

7、web登录测试

http://ip/nagios/

8、安装NRPE(监控别的主机需要的插件)

1.安装
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12/
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
2.启动nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
3.检查是否成功(查看端口并连接自己测试,如果返回版本号说明正常)
netstat -antp |grep nrpe
tcp        0      0 0.0.0.0:5666            0.0.0.0:*               LISTEN      43336/nrpe 
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
NRPE v2.12
4.修改配置文件,让监控主机可以连接(修改客户机,服务端连接测试)
vim /usr/local/nagios/etc/nrpe.cfg 
allowed_hosts=127.0.0.1,10.0.0.1
5.重启nrpe
killall nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
6.在监控端进行测试,是否能成功连接被监控端的nrpe
/usr/local/nagios/libexec/check_nrpe -H 1.1.1.1
NRPE v2.12
7.如果返回
Connection refused by host
8.解决:编辑客户端的ssh文件,允许root可以直接登录(一般ubuntu系统会出现这个问题,centos默认root可以登录)
vim /etc/ssh/sshd_config
PermitRootLogin yes
/etc/init.d/ssh restart

注意:

在ubuntu下安装nrpe之前需要安装ssl(监控端和被监控端版本需要保持一致)
apt-get install libssl-dev libssl0.9.8

三:添加监控

NRPE实际上是使用check_nrpe来远程调用NRPE,然后再由NRPE调用本地的插件,所以,一部分是在监控机配置,用于加载定义NRPE要监测的服务,另一部分是在被监控机配置,主要定义监控的命令,具体操作如下

1.定义NRPE插件需要使用的命令(文件末尾添加如下内容)
vim /usr/local/nagios/etc/objects/commands.cfg
define command{
    command_name  check_nrpe
    command_line  $USER1$/check_nrpe -H $HOSTADDRESS$ -c  $ARG1$
    }
2.一般监控都定义在servers下面,所以在配置文件中开启一项参数,将servers下的文件包含进来
vim /usr/local/nagios/etc/nagios.cfg
cfg_dir=/usr/local/nagios/etc/servers
3.添加监控主机及监控的服务(servers默认没有,手动创建)
cd servers
cat 200.cfg
#监控的主机
define host{
use     linux-server   //调用的/usr/local/nagios/etc/objects/templates.cfg中已经定义好的模块(可以根据需求自己定义)
host_name   1.1.1.1 
alias       1.1.1.1
address     1.1.1.1
}
#监控ping
define service{
        use                     local-service
        host_name               1.1.1.1
        service_description     Ping   //web页面展示的名称
        check_command           check_nrpe!check_ping//使用check_nrpe模块远程调用被监控主机中定义好的命令,然后再调用本地的check_ping插件进行监控
}
#负载情况
define service{
    use         local-service
    host_name       1.1.1.1
    service_description Load
    check_command       check_nrpe!check_load
}
#所有进程
define service{
    use         local-service
    host_name       1.1.1.1
    service_description Processes
    check_command       check_nrpe!check_total_procs
}
#当前登录的用户
define service{
    use             local-service
    host_name           1.1.1.1
    service_description     Users
    check_command           check_nrpe!check_users
}
#僵死的进程
define service{
    use         local-service
    host_name       1.1.1.1
    service_description Zombie procs
    check_command       check_nrpe!check_zombie_procs
}
#swap使用
define service{
    use         local-service
    host_name       1.1.1.1
    service_description Swap
    check_command       check_nrpe!check_swap
}
#Apache服务
define service{
    use         local-service
    host_name       1.1.1.1
    service_description HTTP
    check_command       check_nrpe!check_http
}
#mysql服务
define service{
    use                     local-service
    host_name               1.1.1.1
    service_description     Mysql
    check_command           check_mysql!1.1.1.1!3306!root!passw0rd //check_mysql模块,IP,端口,被监控端授权用户,授权密码
}
#用以上方法监控mysql,需要更改另外一个文件,定义mysql监控命令,客户端需要授权用户
vim /usr/local/nagios/etc/objects/commands.cfg(文件末尾添加一下内容)
define command{
    command_name check_mysql
    command_line $USER1$/check_mysql -H $ARG1$ -P $ARG2$ -u $ARG3$ -p $ARG4$
    } 

4.客户端修改(被监控端,监控端监控的各项服务,都需要再此文件中指定具体命令,否则无法执行)
vim /usr/local/nagios/etc/nrpe.cfg
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
command[check_http]=/usr/local/nagios/libexec/check_http -I 127.0.0.1
command[check_ping]=/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 3000.0,80% -c 5000.0,100%
#服务端监控客户端的这些服务,都需要在客户端的nrpe.cfg文件中添加这些命令,daemon只运行nrpe.cfg中所定义的命令

四、邮件报警

因为系统自带的sendmail发送邮件延迟很大,所以使用sendEmail进行发送邮件

1.下载
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar zxvf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
cp sendEmail /usr/bin/
chmod +x /usr/bin/sendEmail
2.在本地进行发送测试
sendEmail -f hulin_yu@sina.com -t hulin_yu@126.com -s smtp.sina.com -u 'This is title' -m 'This is body' -xu 'hulin_yu@sina.com' -xp '123456'
Apr 27 16:02:17 nagios sendEmail[2413]: Email was sent successfully!
3.修改配置文件
vim /usr/local/nagios/etc/objects/commands.cfg
#将发送邮件部分更改为如下(这样修改用Foxmail接受邮件不会出现乱码问题,否则会有乱码)
define command{
   command_name    notify-host-by-email
   command_line    /usr/bin/printf "%b" "----- 监控通知 -----<br><br>告警类型: $NOTIFICATIONTYPE$<br>主机状态: $HOSTSTATE$<br>告警地址: $HOSTADDRESS$<br>告警时间: `date +%F_%H:%M:%S`<br>详细信息: <br>$HOSTOUTPUT$" | /usr/bin/sendEmail -f hulin_yu@sina.com -t $CONTACTEMAIL$ -s smtp.sina.com -u  "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -xu hulin_yu@sina.com -xp yhl940519! -o message-content-type=html -o message-charset=utf8
   }

define command{
   command_name    notify-service-by-email
   command_line    /usr/bin/printf "%b" "----- 监控通知 -----<br><br>告警类型: $NOTIFICATIONTYPE$<br>告警服务: $SERVICEDESC$<br>告警地址: $HOSTADDRESS$<br>服务状态: $SERVICESTATE$<br>告警时间: `date +%F_%H:%M:%S`<br>详情信息:<br>$SERVICEOUTPUT$<br>" | /usr/bin/sendEmail -f hulin_yu@sina.com -t $CONTACTEMAIL$ -u  "Nagios Warning" -s smtp.sina.com -xu hulin_yu@sina.com -xp yhl940519! -o message-content-type=html -o message-charset=utf8
   }

此时,基本的配置都已完成。

解决nagios页面乱码问题

1.监控端修改cgi文件
vim /usr/local/nagios/etc/cgi.cfg
将escape_html_tags=1改为escape_html_tags=0
2.被监控端修改Apache配置文件
vim /etc/apache2/apache2.conf
AddDefaultCharSet       UTF-8

四、自定义模块

当nagios中自带的模块满足不了我们自身的需求时,就会涉及到自定义模块,具体操作如下:

1.服务端本身添加自定义模块(文件末尾添加即可)

vim /usr/local/nagios/etc/objects/commands.cfg
define command{
    command_name my-test  //定义命令名字,在另外一个文件中调用
    command_line /usr/local/src/python/nagios.py //脚本的绝对路劲
    }
在你定义的监控文件文件中添加
define service{
    use                     local-service
    host_name               1.1.1.1
    service_description     my-test
    check_command           my-test //在commands.cfg中定义的命令名
}

注:需要给脚本赋予执行权限
2.客户端监控(文件末尾添加)
客户端操作
vim /usr/local/nagios/etc/nrpe.cfg 


command[check_log]=/usr/local/nagios/libexec/check_log //自己写的脚本
服务端操作(在你定义的监控文件文件中添加)
define service{
    use                     local-service
    host_name               1.1.1.1
    service_description     my-test
    check_command           check_nrpe!check_log //在commands.cfg中定义的命令名
}

自定义监控日志的脚本,(仅供参考)

#!/usr//bin/python
#coding:utf-8
import os
import sys

num = os.popen("tail -n 100 /data/logs/webserver.28.com_`date +%Y%m%d`_access.log |awk '{print $1}' |sort -n |uniq -c |awk '{print $1}'")
'''取出访问最多的IP数量'''
ip = os.popen("tail -n 60 /data/logs/webserver.28.com_`date +%Y%m%d`_access.log |awk '{print $1}' |sort -n |uniq -c |awk '{print $2}'")
'''取出访问最多的IP'''

num_list = []
ip_list = []
for i in num.readlines():
    num_list.append(i.replace('\n',''))
    '''将访问最多的IP数量追加到一个列表中'''
for j in ip.readlines():
    ip_list.append(j.replace('\n',''))
    '''将访问最多的IP追加到一个列表中'''
dict = {}
for k in range(len(num_list)):
    dict[num_list[k]] = ip_list[k]
    '''将访问最多的IP数量和IP存在字典里,进行下面的对应取值'''

        
for keys in dict:   
    if int(keys) > 50:
        '''判断访问数量是否大于指定值,如果大于,将IP加入黑名单'''
        print 'CRITICAL,有IP试图恶意访问,最大访问IP为:%s,PV:%s'%(dict[keys],keys)
        os.system('apf -d %s' %dict[keys]) 
        sys.exit(2) 
    else:
        print 'OK,最大访问IP为:%s,PV:%s'%(dict[keys],keys)
        sys.exit(0)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容