Centos6.5下搭建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 123456 -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 123456 -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)
Centos6.5下搭建nagios详解的更多相关文章
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- Linux下ps命令详解 Linux下ps命令的详细使用方法
http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...
- Linux下rar命令详解
Linux下rar命令详解 用法: rar <命令> -<选项1> ….-<选项N> < 操作文档> <文件…> <@文件列表…> ...
- linux下tar命令详解
linux下tar命令详解 tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.ta ...
- 在telnet下操作memcache详解(操作命令详解)
这篇文章主要介绍了在telnet下操作memcache详解,telnet下的memcache操作命令详解,需要的朋友可以参考下 在定位问题.测试等时候经常需要对memcache的数据进行一些操作,但是 ...
- [r]Ubuntu Linux系统下apt-get命令详解
Ubuntu Linux系统下apt-get命令详解(via|via) 常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package ...
- Linux下chkconfig命令详解(转)
Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...
- Linux知识积累(4) Linux下chkconfig命令详解
Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...
- Linux下top命令详解
Linux下top命令详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不断刷 ...
随机推荐
- javascript易混淆的split()、splice()、slice()方法详解
很多时候,一门语言总有那么些相似的方法,容易让人傻傻分不清楚,尤其在不经常用的时候.而本文主要简单总结了JavaScript中的关于字符串和数组中三个容易混淆的方法.旨在方便查阅,在容易混淆的时候有据 ...
- 初识Linq to Entity
技术介绍: LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.net代码,以与查询数据库相同的方式操作内存数据 ...
- luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
https://www.luogu.org/problemnew/solution/P2992 考虑包含原点,不包含原点的三角形有什么特征. 包含原点的三角形:任意找一个顶点和原点连线,一定能把另外两 ...
- vue自动路由-单页面项目(非build时构建)
博客中自动路由的原理? 答:简单点说,就是在请求页面时,根据url进行动态添加路由. 与其它自动路由博客的区别? 目前网上的博客,一般都是在build的时候进行动态路由添加,而本博客,采用的是在获得u ...
- kiki's game HDU - 2147(找规律)
#include"stdio.h" int main( ) { int n,m; ||m!=)) { ==||m%==) printf("Wonderful!\n&quo ...
- 【刷题】BZOJ 2346 [Baltic 2011]Lamp
Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...
- 51nod 1290 Counting Diff Pairs | 莫队 树状数组
51nod 1290 Counting Diff Pairs | 莫队 树状数组 题面 一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[ ...
- Java之集合Collection
集合 初次学习集合过程中的学习笔记,学习顶层,使用底层.包括常用的API Collection接口 概述 集合 : 集合是Java中提供的一种容器,可以用来存储多个数据. 与数组的区别: 数组的长度是 ...
- 解题:CF983A Finite or not
题面 一个$b$进制最简分数是有限循环小数当且仅当其分母没有与$b$不同的质因子,小学数奥内容水过 #include<cstdio> #include<cstring> #in ...
- ES6学习(一)搭建环境
作为一名后端小开发,业务工作需要将后台系统重构一番,许多同事都已经使用前后分离搭建项目,为了不拖后腿自己在家摸索ES6的新特性,真心不知道什么ES3,ES5,一上来就开始搞ES6,在此留下学习笔记,方 ...