您的位置:首页 > 移动开发 > IOS开发

坚持#第271天~nagios监控学完啦-监控本机自带状态和boot状态以及监控远程机自带状态和boot状态

2018-01-18 00:44 330 查看
# 安装nagios及nagios-plugins插件脚本
# 执行前要将nagios-4.1.1.tar.gz和nagios-plugins-2.1.4.tar.gz包拷贝进去不要解压
firstDir=`pwd`
yum install httpd php glibc glibc-common gd gcc unzip -y
useradd -M -s /sbin/nologin nagios
groupadd nagcmd
usermod -a -G nagcmd apache
usermod -a -G nagcmd nagios
tar xzf nagios-4.1.1.tar.gz
cd nagios-4.1.1
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=nagcmd
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
cd $firstDir
tar xzf nagios-plugins-2.1.4.tar.gz
cd nagios-plugins-2.1.4
./configure --with-nagios-user=nagios --with-nagios-group=nagcmd
make && make install
echo "/usr/local/nagios/libexec/会出现很多可执行文件,这是插件所在路径"
echo "请输入htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin以创建nagiosadmin这个htpasswd认证用户"
echo "然后启动apache服务和nagios服务:/etc/init.d/nagios start"
echo "打开浏览器验证http://ip/nagios,进入后点左边的services服务,在右边可以看到localhost里面的资源"

# 安装nagios的nrpe(思考需不需要安装nagios,监控端需要,客户端不需要)及nagios-plugins插件脚本
# 执行顺序1,客户端机:
# 执行前要将nrpe-2.15.tar.gz和nagios-plugins-2.1.4.tar.gz包拷贝进去不要解压
read -p "请输入监控中心的ip:" jiankongzhongxin
firstDir=`pwd`
tar xzf nrpe-2.15.tar.gz
cd nrpe-2.15
useradd -M -s /sbin/nologin nagios
yum install -y gcc glibc glibc-common openssl-devel xinetd
./configure --prefix=/usr/local/nagios/
make all
make install-plugin
make install-daemon
make install-daemon-config
make install-xinetd
echo "nrpe安装成功"
cd $firstDir
tar xzf nagios-plugins-2.1.4.tar.gz
cd nagios-plugins-2.1.4
./configure
make && make install
echo "nagios-plugins安装成功"
sed -i -r '15c\        only_from       = 127.0.0.1 '${jiankongzhongxin}'' /etc/xinetd.d/nrpe
echo "nrpe    5666/tcp" >> /etc/services
# 真是有意思这问题,cat写的里面竟然当命令执行了,哈哈利用echo的单引号,写什么就是什么,然后利用$()把echo包起来即可,注意awk有bug,单引号不好改,需要将awk改为cut,最经典的脚本写脚本,使用脚本写脚本
cat > /usr/local/nagios/libexec/boot_used.sh <<ok
$(echo boot_used='`df | grep "boot" | tr -s " " | cut -d " " -f5 | cut -d "%" -f1`')
if [ `echo '$boot_used'` -gt `echo '$4'` ];then
    echo "boot分区使用了`echo '${boot_used}'`%,严重不足,请马上清理"
    exit 2
elif [ `echo '$boot_used'` -gt `echo '$2'` ];then
    echo "boot分区使用了`echo '${boot_used}'`%,剩余空间不足"
    exit 1
else
    echo "boot分区使用了`echo '${boot_used}'`%,剩余空间充足"
    exit 0
fi
ok
chmod +x /usr/local/nagios/libexec/boot_used.sh
sed -i '224c\command[check_boot]=/usr/local/nagios/libexec/boot_used.sh -w 70 -c 90' /usr/local/nagios/etc/nrpe.cfg
echo "已配置好nrpe,并写好了boot_used.sh脚本运行的命令,并给这个运行脚本的命名起了一个名字叫check_boot使用systemctl start xinetd可以启动服务,可以直接在/usr/local/nagios/etc/nrpe.cfg里面修改警告大小和严重错误大小,超过这个值就显示报警或显示严重错误,直接用-w和-c可以赋值,而不需要在localhost.cfg里使用感叹号去赋值了,更何况客户端这边是没有localhost.cfg的"

# 执行顺序2,监控机:
# 执行前要将nagios-4.1.1.tar.gz和nrpe-2.15.tar.gz和nagios-plugins-2.1.4.tar.gz包拷贝进去不要解压
read -p "请输入监控对象的ip:" jiankongduixiang
firstDir=`pwd`
yum install -y httpd php glibc glibc-common openssl-devel gd gcc unzip
tar xzf nrpe-2.15.tar.gz
cd nrpe-2.15
useradd -M -s /sbin/nologin nagios
./configure --prefix=/usr/local/nagios/
make all
make install-plugin
echo "nrpe安装成功"
groupadd nagcmd
usermod -a -G nagcmd apache
usermod -a -G nagcmd nagios
cd $firstDir
tar xzf nagios-4.1.1.tar.gz
cd nagios-4.1.1
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=nagcmd
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
cd $firstDir
tar xzf nagios-plugins-2.1.4.tar.gz
cd nagios-plugins-2.1.4
./configure --with-nagios-user=nagios --with-nagios-group=nagcmd
make && make install
cat > /usr/local/nagios/libexec/boot_used.sh <<ok
$(echo boot_used='`df | grep "boot" | tr -s " " | cut -d " " -f5 | cut -d "%" -f1`')
if [ `echo '$boot_used'` -gt `echo '$4'` ];then
    echo "boot分区使用了`echo '${boot_used}'`%,严重不足,请马上清理"
    exit 2
elif [ `echo '$boot_used'` -gt `echo '$2'` ];then
    echo "boot分区使用了`echo '${boot_used}'`%,剩余空间不足"
    exit 1
else
    echo "boot分区使用了`echo '${boot_used}'`%,剩余空间充足"
    exit 0
fi
ok
chmod +x /usr/local/nagios/libexec/boot_used.sh
cat >> /usr/local/nagios/etc/objects/commands.cfg <<ok
define command{
    command_name    check_local_boot
    command_line    `echo '$USER1$'`/boot_used.sh -w `echo '$ARG1$'` -c `echo '$ARG2$'`
    }
define command{
    command_name    check_nrpe
    command_line    `echo '$USER1$'`/check_nrpe -H `echo '$HOSTADDRESS$'` -c `echo '$ARG1$'
    }
ok
sed -i '31a\define host{\nuse    linux-server\nhost_name    '${jiankongduixiang}'\nalias    '${jiankongduixiang}'\naddress    '${jiankongduixiang}'\n}' /usr/local/nagios/etc/objects/localhost.cfg
cat >> /usr/local/nagios/etc/objects/localhost.cfg <<ok
define service{
    use    local-service
    host_name    localhost
    service_description    BOOT
    check_command    check_local_boot!70!90
    }
define service{
    use    local-service
    host_name    ${jiankongduixiang}
    service_description    BOOT
    check_command    check_nrpe!check_boot
    }
ok
echo "/usr/local/nagios/libexec/会出现很多可执行文件,这是插件所在路径"
echo "请输入htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin以创建nagiosadmin这个htpasswd认证用户"
echo "然后启动apache服务和nagios服务:/etc/init.d/nagios start"
echo "打开浏览器验证http://ip/nagios,进入后点左边的services服务,在右边可以看到localhost里面的资源"

nagiosadmin
 
nagios队列处理数据:有什么状态、返回给监控
check-NRPE
监控中心
 
数据庞大的时候采用被动模式
0正常,1警告,2错误,3未知
 
nagios检查获取不到的就要通过NRPE收集
能获取的到就不用通过NRPE
MYSQL就能获取的到,网页就能获取的到curl嘛,不需要通过NRPE插件
 
对于本机的资源监控过程:
通过我们定义在服务里面的插件来监控的,命令名称来执行插件,根据返回状态来分析,这个返回状态有0正常ok,1警告warning,2严重错误critical,3未知unknown
web界面最后一列是显示信息,执行之后输出的结果返回回来的,输出结果就在最后一栏显示
 
就是一个返回结果、还有一个输出值
 
自定义BOOT监控脚本:
举例:监控本机
systemctlstart httpd
/etc/init.d/nagiosstart
浏览器输入ip/nagios
比如要监控什么呢?
df -hT
比如要监控/boot分区的大小,使用空间在50%~80%报警,超过80%报严重错误:
cd/usr/local/nagios/libexec/
vimboot_used.sh
代码外面试试:
df | awk -F “+|%” ‘/boot/{print $5}’研究这个复合相当于什么
代码里面写入:
boot_used=`df| awk -F " " '/boot/{print $5}' | awk -F "%" '{print $1}'` 百分之多少
if [$boot_used -gt 80 ];then
    echo “boot分区使用了$boot_used%,严重不足,请马上清理”  定义输出结果来定义浏览器nagios的最后一列状态对应的输出情况
    exit 2 定义返回值来定义浏览器nagios的状态Status
elif [ $boot_used-gt 50 ];then
    echo “boot分区使用了$boot_used%,剩余空间不足”  百分之多少
    exit 1
else
    echo “boot分区使用了$boot_used%,剩余空间充足”
    exit 0
fi
保存退出
一定要给予可执行权限用绝对路径执行
chmod +xboot_used.sh
./boot_used.sh
做实验搞事情,
ddif=/dev/zero of=/boot/aa bs=10M count=50
df -h
./boot_used.sh
echo $?
rm -rf/boot/aa
脚本写好了
 
就要定义
vimlocalhost.cfg对于主机资源只能监控本机的嘛
定义服务之前要定义命令:vim commands.cfg
103:复制5行,放到最下面
第二行第二列改为check_local_boot 脚本新名称
改为$USER1$/boot_used.sh 脚本名称其中$USER1$=/usr/local/nagios/libexec
vim localhost.cfg
最下面定义服务:
BOOT描述信息改为这个,就是浏览器中Service的名称
check_local_boot调用的脚本的新名字
重启nagios服务
ddif=/dev/zero of=/boot/aa bs=10M count=50
 
如果检查每个分区都要写一个脚本,定义不同的分区要写不同的脚本这样太麻烦了,所以要优化脚本,在脚本里面加参数:
boot_used=`df| awk -F " " '/boot/{print $5}' | awk -F "%" '{print $1}'`  //百分之多少
if [$boot_used -gt $4 ];then
    echo “boot分区使用了$boot_used%,严重不足,请马上清理”  定义输出结果来定义浏览器nagios的最后一列状态对应的输出情况
    exit 2 定义返回值来定义浏览器nagios的状态Status
elif[$boot_used -gt $2 ];then
    echo “boot分区使用了$boot_used%,剩余空间不足”  百分之多少
    exit 1
else
    echo “boot分区使用了$boot_used%,剩余空间充足”
    exit 0
fi
 
vimcommands.cfg命令脚本里面
$USER1$/boot_used.sh-w $ARG1$ -c $ARG2$
 
check_local_boot!50!80  将50传送到$ARG1$里面,80传送到$ARG2$里
 
/usr/local/nagios/libexec/boot_used.sh-w 50 -c 80
echo $?
/usr/local/nagios/libexec/boot_used.sh-w 50 -c 95
echo $?
 
-w是警告
-c是严重错误
 
一个叹号对应一个参数
 
发现手动运行自己写的那个脚本/usr/local/nagios/libexec/boot_used.sh-w 80 -c 90它并不会对浏览器nagios里面的产生影响
!50!80才是真实的参数,传递到了脚本里面,应用到了浏览器里面
 
vimcommands.cfg里面最下面
命令是插件的执行方式
服务是怎么给这个命令传参
插件是命令执行的脚本
插件的使用方法决定了命令的定义方法
命令的定义方法决定了在service里面怎么传参进来
命令怎么定义的是取决于插件的使用
libexec/check_tcp--help
check_tcp -Hhost -p port [-w <warning time>] [-c <critical time>]这个check_tcp是自带的插件(脚本)
 
为什么nagios网页里面多了一个像wifi禁用的图形?因为在localhost.cfg里定义服务里面有个notifications_enable 0,模板的个性化定义
 
为什么要向老师那样写一大堆的?
原因1:知道传参传的是什么-w .. -c ..
原因2:能够在nagios里面同步过去
 
nagios自定义配置文件的起始点:
教训:定义host非常关键,宁可多添加一个host块,也不愿意直接在之间里面改
cplocalhost.cfg clone2.up.com.cfg
vim clone2.up.com.cfg
在下面学着28行修改: clone2
29:clone2.up.com
30: 新开一台虚拟机的ip(要和本机同一个网段,若不是同一个网段,浏览器nagios主页监听HTTP会出现网络不可达)
159: 右边改为clone2,localhost找有没有定义localhost这个主机,有的话就定义到这个上面
160:HTTP
161:check_http
 
./check_http-h查看帮助
check_http-H <vhost> | -I <IP-address>
 
vimcommands.cfg
151: 不要把http后面的参数删了
./check_http-I clone2IP
clone2先不开http服务,不写网页
echo $?
clone2打开服务,不写网页
./check_http-I clone2IP
echo $?
clone2打开服务,写网页
有效果了,正常
 
nagios检测语法、nagios语法、nagios检查语法:
/usr/local/nagios/bin/nagios-v  配置文件绝对路径
 
vim nagios.cfg
35复制粘贴
最后面的改为clone2.up.com.cfg
一定要注释掉原来的35那行
重启服务
浏览器进入nagios页面
发现Host那一列多出来了clone2,这就是远程监控成功了
在clone2里面把网页删掉的话就会报警
两个http服务都要开启,然后都是ok绿色状态
 
还可以直接在clone2.up.com.cfg里面定义clone3:
32:define host{
    use linux-server
    host_name  clone3
    alias  clone3.up.com
    address    clone3IP
}
65:后面添加,clone3
重启服务
刷新nagios网页,会在Host那一列多出来了clone3
 
发现上面的65行如果要200台主机怎么办?写死了,那就定义一个主机组呀:
38: definehostgroup{
    hostgroup_name    webs
    alias  web servers描述信息
    members    clone2,clone3
}
69:host_name改为hostgroup_name    webs
32:复制粘贴
改为clone4
76:clone4
重启服务
 
nagios自定义配置文件:
写在一个文件里会很乱,像官方一样分类,自己创建一个配置文件
vimobjects/hosts.cfg自己写的主机配置
vimobjects/services.cfg自己写的服务配置
写完之后在nagios.cfg主配置文件里面激活就能用了
 
需要定义主机定义主机组、定义服务
 
vimclone2.up.com.cfg
define host{
    use linux-server  应用模版内的设置
    host_name  clone3 新的主机名字,以后要用于定于服务或主机组
    alias  clone3.up.com 主机的描述
    address    clone3IP   主机地址$HOSTADDRESS$宏调用的值
}
 define host{
    use linux-server
    host_name  clone2
    alias  clone2.up.com
    address    clone2IP
}
define host{
    use linux-server
    host_name  clone4
    alias  clone4.up.com
    address    clone4IP
}
define host{
    use linux-server
    host_name  clone5
    alias  clone5.up.com
    address    clone5IP
}
definehostgroup{
    hostgroup_name    webs   组名,定义服务时可调用
    alias  web servers    组描述信息
    members    clone2,clone3 组成员
}
definehostgroup{
    hostgroup_name    sqls
    alias  web mysql描述信息
    members    clone4,clone5
}
改名为hosts.cfg
 
vimservices.cfg
defineservice{
    use local-service 应用模版内的设置
    hostgroup_name    webs   本服务要在那些主机上监控可以用逗号隔开主机组
    service_description  HTTP   nagios网页service的名字
    check_command check_http    调用commands.cfg里定义的命令,使用!作为参数的分隔符
}
defineservice{
    use local-service
    hostgroup_name    sqls
    service_description  MYSQL
    check_command check_tcp!3306看看3306有没有打开
}
插件怎么用?要不要传参数?
check_mysql我晕,没有这个脚本
 
将主配置文件里面的原有的主机35行注释掉
注释36行
复制36行到37行和38行,
37行改后面的为hosts.cfg
38行改后面的为services.cfg以激活自己写的配置文件
重启服务,进入nagios主页
 
打开文件:系统找到inode号,去硬盘寻找inode信息,这个信息包括inode号、gid、uid、时间、ctime、mtime、atime,在硬盘中找到这个信息后,就会在硬盘中寻找这个文件对应的信息内容,然后返回,文件是存放在硬盘里的,文件有大小,128字节,或256字节,每个文件都会对应一个inode号,文件那么多,会有一个上限,由硬盘的容量去存储大小,每隔1kb或2kb的时候就会创建一个块的大小,inode包含特殊字符无法删除,就可以找到inode号,把它删除;复制一个文件的时候它的inode号不会变,inode号在硬链接和软链接有个区别,在建立硬链接的时候,查看的话用ls -i哇
 
nagios怎么监控远程主机?
使用NRPE来监控linux主机
nsclient是监控windows的
被监控的主机上要安装NRPE守护进程
在监控端安装NRPE插件
可以监控:
CPU负载、磁盘容量、登陆用户数、总进程数、僵尸进程数、swap分区使用情况
 
check_nrpe插件,位于监控主机上
NRPE daemon被监控机
 
NRPE远程监控过程:
1.nagios会运行check_nrpe这个插件,告诉它要检查什么;
2.check_nrpe插件会连接到远程的NRPE daemon,所用的方式是SSL;
3.NRPE daemon会运行相应的nagios插件来执行检查;
4.NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理。
注意:NRPE daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控.
 
NRPE分为直接检测和间接检测:
直接检测:可以直接通信检测
间接检测:不能直接通信,需要一个代理跳一下
 
start:
客户端clone2:
安装nagios插件,先把nrpe-2.15.tar.gz拷贝
tar xzfnrpe-2.15.tar.gz
cd nrpe-2.15
useradd -M-s /sbin/nologin nagios   //useradd -M是不要自动建立用户的家目录,一般不能登陆的用户就顺便不创建它的家目录避免浪费资源空间
yum install -y gcc glibc glibc-common openssl-devel
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
make install-xinetd
 
nagios-plugins-2.1.4包拷贝进来根目录
tar xzf 解压
cd nagios-plugins-2.1.4进入插件的目录
 
./configure
make && make install
yum install -y xinetd
 
vim /etc/xinetd.d/nrpe
15:only_from    =   127.0.0.1   192.168.10.16添加监控中心的ip
保存退出
vim /etc/services
11177行:nrpe   5666/tcp端口和协议  不添加就不能启动xinetd服务
systemctl start xinetd启动服务
tftp也能交给xinetd管理
netstat -luantp | grep 5666
 
监控机clone6:
安装nagios插件,先把nrpe-2.15.tar.gz拷贝
tar xzfnrpe-2.15.tar.gz
cd nrpe-2.15
useradd -M-s /sbin/nologin nagios
yum install -ygcc glibc glibc-common openssl-devel
./configure
make install-plugin
 
【以上操作就安装完成了,下面就要手动去执行了】:
ll/usr/local/nagios/libexec/check_nrpe如果有就成功了
两边都有了电话了能通信了
/usr/local/nagios/libexec/check_nrpe--help绝对路径
/usr/local/nagios/libexec/check_nrpe-H  要监控谁的ip
cd/usr/local/nagios/libexec
scpboot_used.sh clone2:/usr/local/nagios/libexec
 
客户端:
cd/usr/local/nagios/libexec
boot_used.sh-w 50 -c 80
 
vim ../etc/nrpe.cfg只有这一个配置文件
在218行看一下例子{
command是一条命令不能改,中括号是命令的名称,可以自己定义,后面是命令插件使用的方法
}
添加:224:复制粘贴修改中括号为check_boot,后面改为boot_used.sh -w 70 -c 90
这就定义好了
怎么让守护进程来执行检察?
在监控中心:
监控端:
./check_nrpe--help{
-c <被监控端要监听什么东西,就是刚才定义的命令名>
}
./check_nrpe-H 要监听的ip   -c check_boot
echo $?
 
客户端:
ddif=/dev/zero of=/boot/aa bs=10M count=50
df
监控端:
./check_nrpe-H 要监听的ip   -c check_boot
echo $?
 
配置才能用,才能在浏览器nagios里面有显示出来
监控端:
vimcommands.cfg
最下面复制粘贴
command_name  check_nrpe
command_line  $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$不需要-w了,-w是在被监控端本地定义的;-H $HOSTADDRESS$是在监控中心的localhost.cfg里面定义的host的ip,只要是写了host的address,就都会在浏览器nagios里面显示出来,后面的-c是严重错误的值还是命令脚本名?怎么传到$ARG1$的?难道是在localhost里面写!赋值进去
vim../etc/objects/localhost.cfg
12行那部分复制粘贴
15:host_name  clone2
BOOT
check_nrpe!check_boot
/etc/init.d/nagiosrestart
 
总结:
那这个nrpe远程监控和之前学的那个自定义主机配置文件、自定义服务配置文件里面输入的ip有什么区别呀?之前学的自定义配置文件里面不是有其他主机的ip吗,难道不是远程监控吗?
貌似是两款不同的监控软件
多出来了一个/usr/local/nagios/etc/nrpe.cfg的配置文件,里面定义脚本命令的方法就一行代码
验证:不安装nrpe,只在监控端写上boot脚本,能不能监控到监控对象的boot分区状态?
首先确定一个事:host定义主机名称的时候写ip行不行,发现是可以的
最终发现监控是能监控,他没有报错,但是他监控的是获取的监控端df出来的结果,并不是客户端df出来的结果,这就是为什么要用nrpe的原因了,因为有些东西是不能被监控的,比如BOOT使用大小。为什么要用nrpe的原因、nrpe的特点
 
写脚本经常会用到echo、sed、cat,注意了,写脚本在cat里面输入输出重定向要注意有没有$的变量,如果有就要利用echo的单引号和$()把echo包起来了
 
nagios宏定义:

$HOSTNAME$ 主机简称.取自于主机中定义的host_name域
$HOSTADDRESS$ 主机地址.取自于主机中定义的address域

服务宏
$SERVICESTATE$ 服务状态描述,有w,u,c
$SERVICEDESC$ 对当前服务的描述

联系人宏
$CONTACTNAME$ 表示联系人,在联系人文件中定义

通知宏
$NOTJFICATIONTYPE$ 日期/时间宏
$LONGDATETIME$ 当前的日期/时间戳

文件宏
$LOGFILE$ 日志文件保存的位置
$MAINCONFIGFILE$ 主配置文件保存位置

其它宏
$ADMINEMAIL$ 全局的管理员邮箱地址
$ARGn$ 指向第n个命令传递参数(通知、事件处理、服务检测等)

Nagios最多支持32个参数宏
 
cat >/usr/local/nagios/libexec/boot_used.sh<<ok###############################真是有意思这问题,cat写的里面竟然当命令执行了,哈哈利用echo的单引号,写什么就是什么,然后利用$()把echo包起来即可,注意awk有bug,单引号不好改,需要将awk改为cut,最经典的脚本写脚本,使用脚本写脚本:
cat >/scripts/boot_used.sh <<ok
$(echoboot_used='`df | grep "boot" | tr -s " " | cut -d "" -f5 | cut -d "%" -f1`')
if [ `echo'$boot_used'` -gt `echo '$4'` ];then
    echo "boot分区使用了`echo '${boot_used}'`%,严重不足,请马上清理"
    exit 2
elif [ `echo'$boot_used'` -gt `echo '$2'` ];then
    echo "boot分区使用了`echo '${boot_used}'`%,剩余空间不足"
    exit 1
else
    echo "boot分区使用了`echo '${boot_used}'`%,剩余空间充足"
    exit 0
fi
ok
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: