精华内容
下载资源
问答
  • Nagios
    2021-09-14 21:23:55

    Nagios

    一、监控概述

    1、为什么要监控

    产品生命周期:调研阶段-设计阶段-开发阶段-测试阶段-运营阶段

    ​ 随着业务的发展,锁提供的产品规模越来越大,功能越来越多,架构越来越复杂,除了通过开发手段来提高产品的质量,还需要在产品的生产运行过程中来维护以提高产品的质量,这就需要时刻掌握产品的运行过程中所产生的数据(包括硬件设备、系统性能、软件运行、趋势数据等),根据对产品业务的熟悉程度,设定一定的指标,当出现指标异常的时候,就需要采取一定的手段来保障产品的持续运营,这就是需要监控的原因。

    ​ 有监控可以最大限度的避免问题。

    2、监控原理

    • 监控方式

      • 硬件层面

        IPMI:智慧平台管理接口,是一种工业表中用于采集硬件设备的各种物理健康状态数据,如温度、电压、风扇工作状态、电源等。

      • 软件层面

        agent 专用客户端,专用的软件的一种应用机制

        ssh 系统中常见的一种通信机制,但是并非所有。

        SNMP 简单网络管理协议,是工作在各种网络设备中的一种机制。

    • 监控的流程

      实时监控:

      数据采集——>数据整理——>实时分析——>结果输出——>决策——>警告/修复(处理)——>数据存储

      非实时监控:

      数据采集——>数据整理——>数据存储——>离线分析——>结果输出——>决策——>警告/修复(处理)——>数据存储

      数据采集:根据业务的特性,采取多种方式,进行对一些针对性的数据进行采集

      数据整理:对上报后的数据源进行收集、清晰、整理

      实时分析:对某些重要的核心的业务数据进行实时分析

      离线分析:对普通的数据、非紧急的业务数据进行存储,后续进行响应的分析。

      结果输出:将分析后的数据结果展现出来,供决策参考。

      问题决策:根据当前业务情况,人工或者自动方式对输出的结构进行分析,并判定下一步的行动(告警或者修复),同时将其决策记录保存下来,以便为后续决策提供依据。

    3、监控工具

    • 系统命令

      所有的监控方式,其收集数据的根本都是通过系统命令来实现的。

      分类:观测、评测、调优(通过不同的命令及参数实现对不同资源的监控)

    • 开源软件

      • smokeping,一款监控网络状态和稳定性的开源软件,常用于IDC数据机房的网络状况监控,如时延,丢包率等

        网站:https://oss.oetiker.ch/smokeping/

      • Cacti,一套基于PHP、MySQL、SNMP及rrdtool等软件的网络流量监测解决方案

        网站:https://www.cacti.net/

      • Nagios,一款企业级监控系统,能够基于多种方式(尤其是插件)对各种硬件和软件进行监控。适合用户群为复杂IT环境的企业,尤其是中小型企业

        网站:https://www.nagios.org/

      • Zabbix,是一套整合了Cacti和Nagios优点的企业级开源运维平台,简单易用,可以满足中小型企业的任何需求

        网站:https://www.zabbix.org/

      • Prometheus,是当今最为强大的开源云监控工具之一,提供了本地可视化引擎,还提供了集成第三方工具的定制功能,并提供一个API,用于将数据提供给外部软件使用。它是中大型企业和云原生环境非常好的监控解决方案

        网站:https://prometheus.io/

      • 等等

    • 第三方软件

      如监控宝,听云,阿里云监控,华为云监控等等

    二、Nagios简介及部署

    1、Nagios简介

    • Nagios基础知识

      Nagios诞生于1999年,是一个流行的开源的监控软件,它可以自由的检测各种主机和服务资源,当监控对象发生异常或者异常恢复的时候还能提醒指定的用户。

      最新版的Nagios主要有三大部分组成:Nagios XI、Nagios Log Server、Nagios Fusion

      官方网站:https://www.nagios.org/

      GitHub地址:https://github.com/NagiosEntherprises

      插件网站:http://www.nagiosplugins.org/

    • Nagios特点

      • 主要功能

        主机资源:主机类型(操作系统、路由器、交换机等)、日常指标(CPU load、disk usage、system logs)、其他指标(温度、警告、流量)

        服务资源:网络协议(SMTP、pop3、HTTP、SNMP、FTP、SSH、ICMP等)、相关服务(系统服务、关联服务、应用服务、日志服务、数据服务、网络流量等)

        表现样式:本地脚本方式、远程脚本方式、ssh方式、图形方式、告警方式等

      • Nagios的优势

        整体:借助于各种监控方式来实现IT基础设施的复杂的管理

        细节:实现和维护简单、告警方式多样,投入成本低,各类资源对象的综合利用效率高

      • Nagios的劣势

        整体:IT基础设施系统庞大,Nagios不能容纳一切

        细节:监控资源依赖于大量的脚本,监控方式需要自己定制化

    • Nagios原理

      • 软件组成

        最新版本是由三大部分组成,但学习的目标就是Nagios XI,也就是企业级的网络监控

        对于Nagios软件来说,主要有两部分组成:

        Nagios core:是Nagios软件能正常运行的支撑部分、通用部分、也是核心部分,主要负责管理

        Nagios plugins:是Nagios软件实现监控各种主机、服务资源的功能性部分,可自定义开发(搜集资源)常见的通信方式有:ssh、nrpe(linux、类Unix系统专用的监控机制)、snmp、NSCA(让Nagios被动接受各种监控数据机制)、第三方|自定义

        实现对其他远程主机的监控时还要有Daemon

      • 安装组件

        服务端:安装nagios core和nagios plugins即可,web(基于LAMP的环境做的)会在安装nagios core时自动安装,若是需要将Nagios的数据信息保存到数据库还需要额外安装NDOUtils

        客户端:

        • NRPE方式监控:Linux环境,被监控主机安装nrpe软件,plugins;windows环境安装NSClinet++软件,plugins
        • SNMP方式监控:监控主机启用SNMP,被监控主机安装SNMP,plugins
        • NSCA方式监控:被监控主机安装nsca软件,监控主机开启nsca服务
        • SSH方式监控:监控主机启用ssh插件即可,被监控主机安装sshd服务,plugins

    2、Nagios部署-基础环境准备

    安装系统,按Tab键编辑配置通过给内核传递参数配置网卡(net.ifnames=0 biosdevname=0),编辑完成后,按Enter

    • 网络环境

      [root@localhost ~]# systemctl stop NetworkManager
      [root@localhost ~]# systemctl disable NetworkManager
      
    • 安全配置

      [root@localhost ~]# systemctl stop firewalld
      [root@localhost ~]# systemctl disable firewalld
      [root@localhost ~]# firewall-cmd --state
      not running
      [root@localhost ~]# vim /etc/sysconfig/selinux 
      将enforcing替换成disabled
      或者用sed -i 's#=enforcing#=disabled#' /etc/selinux/config
      [root@localhost ~]# getenforce 
      
    • 环境主机名规划

      [root@localhost ~]# vim /etc/hosts
      10.0.0.151 nagios.itcast.com nagios
      [root@localhost ~]# hostnamectl set-hostname nagios
      [root@localhost ~]# exec /bin/bash
      [root@nagios ~]# ping -c 1 nagios
      
    • 基础软件安装

      • 安装依赖软件

        [root@nagios ~]# yum -y install wget yum-plugin-priorities
        
      • 安装软件源

        [root@nagios ~]# yum -y install epel*
        [root@nagios ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
        
      • 源优先级配置

        [root@nagios ~]# cat /etc/yum/pluginconf.d/priorities.conf 
        [main]
        enabled = 1
        然后编辑相应的repo文件,在想用的配置文件下增加priority=1
        
      • 检查

        [root@nagios ~]# yum repolist
        [root@nagios ~]# yum clean all
        [root@nagios ~]# yum makecache fast
        [root@nagios ~]# yum update -y
        用yum upgrade 进行验证
        
      • 禁止内核升级

        [root@nagios ~]# vim /etc/yum.conf
        exclude=kernel*
        exclude=centos-release*
        
      • 安装系统基础软件

        [root@nagios ~]# yum groupinstall "Compatibility Libraries" "Console Internet Tools" "Development Tools" "Security Tools" "System Administration Tools" -y
        [root@nagios ~]# yum -y install vim lrzsz telnet curl net-tools tree bash-completion
        
      • 时间同步

        [root@nagios ~]# yum -y install ntpdate
        [root@nagios ~]# whereis ntpdate
        ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz
        [root@nagios ~]# crontab -e
        * */10 * * * /usr/sbin/ntpdate timel.aliyun.com >> /dev/null 2>&1
        

    3、Nagios部署-web环境

    • 基础依赖包

      yum -y install autoconf bison bzip2-devel cmake curl-devel freetype-devel gcc gcc-c++ gd gd-devel gettext glibc-common libpng libpng-devel libjpeg-devel libxml2 libxml2-devel libevent libevent-devel libicu-devel libtool make ncurses-devel net-snmp net-snmp-utils net-snmp-devel openssl
      
      最精简的软件为:gcc gcc-c++ glibc glibc-common wget unzip httpd php gd gd-devel perl postfix
      
    • 安装基本软件

      [root@nagios ~]# yum -y install httpd httpd-devel mariadb mariadb-server mariadb-devel mariadb-libs php
      这里虽然无需安装mysql,但最好安装,因为后端会涉及到nagios监控mysql
      
    • mysql配置

      启动mysql并设为开机自启
      [root@nagios ~]# systemctl start mariadb
      [root@nagios ~]# systemctl enable mariadb
      基础配置
      [root@nagios ~]# mysql_secure_installation 
      将密码设置为123456
      
      修改服务端字符集
      [mysqld]
      init_connect='SET collation_connection = utf8_unicode_ci'
      init_connect='SET NAMES utf8'
      character-set-server=utf8
      collation_server=utf8_unicode_ci
      skip-character-set-client-handshake
      修改客户端字符集
      [root@nagios ~]# vim /etc/my.cnf.d/client.cnf
      [client]
      default-character-set=utf8
      [root@nagios ~]# vim /etc/my.cnf.d/mysql-clients.cnf
      [mysql]
      default-character-set=utf8
      
    • 调试apache和php

      • 启动Apache

        [root@nagios ~]# systemctl start httpd
        [root@nagios ~]# systemctl enable httpd
        
      • 修改配置文件

        <IfModule dir_module>
            DirectoryIndex index.php index.html
        </IfModule>
        
        <IfModule mime_module>
        AddType application/x-httpd-php .php
        </IfModule>
        
      • 创建测试页面

        [root@nagios ~]# echo '<?php phpinfo(); ?>' > /var/www/html/index.php
        [root@nagios ~]# systemctl restart httpd
        
      • 测试php页面

        打开浏览器访问:http://10.0.0.151

    • 调试php&mysql

      • 安装相关软件

        [root@nagios ~]# yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-bcmath
        
      • 创建测试页面进行测试

        <?php
        $link=mysql_connect('localhost','root','123456');
        if ($link)
        echo "Successfuly";
        else
        echo "Faile";
        mysql_close();
        ?>
        在浏览器访问测试页面
        
      • 用户管理

        [root@nagios ~]# useradd -s /sbin/nologin nagios
        [root@nagios ~]# groupadd nagcmd  #安装nagios软件时自动生成
        [root@nagios ~]# usermod -a -G nagcmd nagios 
        [root@nagios ~]# usermod -a -G nagcmd apache 
        注意:apache是默认的http用户,要用来展示nagios界面,因此要加入打nagcmd用户组中,这个组是nagios内置的一个组名,它和nagios相关的其他功能权限密切相关
        
        设置http的启动用户为nagios
        [root@nagios ~]# vim /etc/httpd/conf/httpd.conf 
        User nagios
        Group nagios
        [root@nagios ~]# systemctl restart httpd
        

    4、安装nagios

    • 准备工作目录

      [root@nagios ~]# mkdir /data/{server/nagios,soft} -p
      /data/server为nagios服务目录
      /data/soft为插件目录
      [root@nagios ~]# chown -R nagios.nagios /data
      
    • 编译安装

      从官网下载软件包
      [root@nagios soft]# tar -xvf nagios-4.4.6.tar.gz 
      解压后进入安装目录进行编译
      [root@nagios nagios-4.4.6]# ./configure --prefix=/data/server/nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/include --with-nagios-user=nagios --with-nagios-group=nagcmd --with-command-user=nagios --with-command-group=nagcmd
      
      注意:--with-gd-lib和--with-gd-inc是我吗的基础依赖库,必须提前安装好,后续nagios拓扑图需要用到
      
      编译安装
      [root@nagios nagios-4.4.6]# make all
      [root@nagios nagios-4.4.6]# make install
      安装控制脚本
      [root@nagios nagios-4.4.6]# make install-init
      调配置文件的访问权限
      主要是用来配置nagios的目录结构的整体访问权限
      [root@nagios nagios-4.4.6]# make install-commandmode
      安装配置信息
      该步主要是将nagios示例配置文件安装到指定路径下
      [root@nagios nagios-4.4.6]# make install-config
      部署网站配置
      在httpd配置文件目录下生成一个有关nagios的配置文件
      若是不执行此步,后续访问nagios时会报错404
      [root@nagios nagios-4.4.6]# make install-webconf
      部署web页面格式
      [root@nagios nagios-4.4.6]# make install-exfoliation
      
    • 环境变量配置

      [root@nagios nagios-4.4.6]# vim /etc/profile.d/nagios.sh   #文件在profile.d目录下会在系统启动时自动执行
      # nagios env set
      export NAGIOS_HOME=/data/server/nagios
      export PATH=$NAGIOS_HOME/bin:$NAGIOS_HOME/libexec:$PATH
      [root@nagios nagios-4.4.6]# chmod +x /etc/profile.d/nagios.sh 
      [root@nagios nagios-4.4.6]# source /etc/profile.d/nagios.sh 
      
    • nagios环境测试

      [root@nagios nagios-4.4.6]# nagios --version
      

    5、安装插件

    • 使用安装包默认的插件

      默认的插件在libexec目录下
      [root@nagios nagios-4.4.6]# cp -R /data/soft/nagios-4.4.6/contrib/eventhandlers/ /data/server/nagios/libexec/
      [root@nagios nagios]# chown -R nagios.nagios /data/server/nagios/libexec/eventhandlers/
      
    • 使用专用的插件

      插件网站:http://www.nagiosplugins.org/
      在官网下载插件安装包然后解压(插件版本与nagios版本关联不大)
      [root@nagios soft]# tar -xvf nagios-plugins-2.3.3.tar.gz 
      编译
      [root@nagios nagios-plugins-2.3.3]# ./configure --prefix=/data/server/nagios --with-nagios-user=nagios --with-nagios-group=nagcmd --enable-perl-modules --enable-redhat-pthread-workaround
      编译安装
      [root@nagios nagios-plugins-2.3.3]# make
      [root@nagios nagios-plugins-2.3.3]# make install
      [root@nagios libexec]# chown -R nagios.nagcmd /data/server/nagios
      

    6、启动监控服务

    • 配置web

      安装完nagios后,他会自动在http的conf.d目录下生成nagios配置文件/etc/httpd/conf.d/nagios.conf

      一般情况下要让nagios的web监控界面必须经过授权才能访问,在nagios.conf文件中也增加验证配置,验证信息如下:

      
      ScriptAlias /nagios/cgi-bin "/data/server/nagios/sbin"
      
      <Directory "/data/server/nagios/sbin">
      ......
      
               AuthUserFile /data/server/nagios/etc/htpasswd.users
               Require valid-user
      
      
    • 权限管理

      配置web管理界面,创建用户名和密码
      [root@nagios ~]# htpasswd -cb /data/server/nagios/etc/htpasswd.users nagiosadmin nagiosadmin
      Adding password for user nagiosadmin
      [root@nagios ~]# cat /data/server/nagios/etc/htpasswd.users 
      nagiosadmin:$apr1$KMp5qcyG$zWAby7ufJ/ZcammW0WWRH0
      
    • 启动nagios

      [root@nagios ~]# systemctl start nagios
      [root@nagios ~]# systemctl enable nagios
      浏览器访问http://10.0.0.151/nagios
      
    • 界面介绍

      Nagios的访问页面主要有两部分组成:菜单栏和详情栏

      菜单栏:

      主要显示 Nagios的各种功能作用,主要由四部分组成:全局信息、当前状态、统计报告和系统管理

      详情栏:

      当我们选择左侧菜单栏的指定功能时候,用于显示相应的详情信息。

    三、本地监控

    1、目录结构及配置文件

    • 目录结构

      [root@nagios ~]# tree /data/server/nagios/ -L 1
      /data/server/nagios/
      ├── bin				# Nagios 可执行程序所在目录	
      ├── etc				# Nagios 配置文件目录
      ├── include			# 依赖的文件目录,默认是空目录
      ├── libexec			# Nagios 外部插件存放目录
      ├── sbin				# Nagios cgi 文件所在目录, 也就是执行外部 命令所需要文件所在的目录
      ├── share				# Nagios 网页存放路径
      └── var				# Nagios 日志文件、Lock 等文件所在的目录
      
      

      注意:

      var目录下还有四个常见的子目录:archives-日志归档目录、rrd-图形文件目录、rw-外部命令文件目录、spool-检查报告目录

    • 配置文件

      [root@nagios ~]# tree /data/server/nagios/etc/
      /data/server/nagios/etc/
      ├── cgi.cfg						# 控制 CGI 访问的配置文件
      ├── htpasswd.users				# 认证文件
      ├── nagios.cfg					# 主配置文件
      ├── objects						# 资源对象
      │   ├── commands.cfg					# 命令资源
      │   ├── contacts.cfg					# 联系人资源
      │   ├── localhost.cfg				# 本地主机资源
      │   ├── printer.cfg					# 打印机资源
      │   ├── switch.cfg					# 路由、交换机资源
      │   ├── templates.cfg				# 模板资源
      │   ├── timeperiods.cfg				# 时间段资源
      │   └── windows.cfg					# windows资源
      └── resource.cfg					# 全局资源配置文件
      注意:
      Nagios的配置文件主要有三个:cgi.cfg、nagios.cfg、resource.cfg
      Nagios的资源对象默认有八个:命令、联系人、本地主机、打印机、交换机、模板、时段、windows
      Nagios默认的资源文件是可以自由定制的,不一定必须是这8个,我们可以在该objects目录下随意定制,所有的文件都可以单独拆分,但一定要在主配置文件 nagios.cfg 中加载使用。
      

    2、配置详解

    • 核心配置文件

      nagios.cfg

      权限相关
      nagios_user				服务的用户
      nagios_group			服务的用户组
      
      关键指令:
      log_file				日志文件
      cfg_file				外置配置文件
      cfg_dir					外置配置目录
      resource_file			全局变量文件
      status_file				状态数据文件
      command_file			检测命令、权限文件
      
      
    • 全局变量配置文件

      resource.cfg

      在最新版的4.4.6中,它默认支持256个全局变量,默认情况下,该文件只设置了一个全局变量

      [root@nagios nagios]# egrep -v '^$|#' /data/server/nagios/etc/resource.cfg
      $USER1$=/data/server/nagios/libexec
      

      常见的内置变量

      主机宏
      $HOSTNAME$  		主机名					$HOSTADDRESS$  			主机地址
      $HOSTDISPLAYNAME$	主机全名					$HOSTSTATE$				主机状态
      $HOSTGROUPNAMES$	主机组名					$LISTHOSTSTATE$			上次检查主机状态
      $LASTHOSTCHECK$		上次主机检查时间戳
      服务宏
      $SERVICESTATE$ 		服务状态描述				$SERVICEDESC$   			服务描述信息  
      $SERVICEGROUPNAMES$	服务组名称
      联系人宏
      $CONTACTNAME$   		联系人名称				$CONTACTALIAS$			联系人全名
      $CONTACTEMAIL$		联系人邮件				$CONTACTGROUPNAMES$		联系人组信息
      通知宏
      $NOTIFICATIONTYPE$ 	通知信息
      日期/时间宏
      $LONGDATETIME$  	日志时间戳				
      文件宏
      $LOGFILE$  			日志文件位置				$MAINCONFIGFILE$  		主配置文件位置
      其他宏
      $ADMINEMAIL$  		管理员邮件地址			$ARGn$  					第n个参数
      
    • 接口配置文件

      cgi.cfg

      目标:web页面相关信息

      内容:核心配置文件,web认证信息

      常见的指令
      main_config_file							主配置文件
      physical_html_path							web界面的绝对路径
      url_html_path								web界面的url关键字
      authorized_for_xxx							相关认证用户
      

    3、核心资源

    • 命令资源文件

      commands.cfg

      配置样式:

      # "命令"对象,用于描述如何对指定目标对象进行状态检测
      define command {
          command_name    check_local_disk
          command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
      }
      

      配置详解:

      配置框架:define command { … }

      这个文件中只有两个配置项command_name(命令名)和command_line(命令内容)

      command_name 是全局唯一的,不允许重名的

      command_line 在编写命令的时候,尽量都用变量来表示,如果涉及到系统命令,尽量用绝对路径,这里定义好的命令可以在其他资源对象文件中使用,主要在localhost.cfg中的service使用

      注意:

      command_line 里面用到的脚本文件必须可执行

      命令示例:-w 3000.0,80% -c 5000.0,100% -p 5

      逗号后面的80%和100% 用于表示相应的临界值,-w即"WARNING"状态,-c即"CRITICAL"状态

      -p 5 说明每次探测发送5个数据包

      依赖关系:

      该文件用到了 resource.cfg 文件中定义的内容

    • 本机资源文件

      localhost.cfg

      配置示例:

      # "主机"指的是被监控的机器,可是物理主机,也可以是虚拟设备
      define host {
          use                     	linux-server   
          host_name               	localhost
          alias                   	localhost
          address                 	127.0.0.1
      }
      
      # "主机组"由多个主机对象组成,members属性用于设定多个主机,彼此间使用逗号隔开
      define hostgroup {
          hostgroup_name          	linux-servers  
          alias                   	Linux Servers  
          members                 	localhost      
      }
      
      # "服务"就是指定"主机"所提供的功能或资源对象,如mysql服务、存储资源或CPU负载等。
      define service {
          use                     	local-service  
          host_name               	localhost
          service_description     	PING
          check_command           check_ping!100.0,20%!500.0,60%
      }
      

      配置详解:

      主机信息配置框架: define host { … }

      主机组信息配置框架: define hostgroup { … }

      服务信息配置框架: define service { … }

      host和hostgroup中的名称必须唯一

      service中的use所指定的模板信息必须存在,

      service_description 不要求全局唯一,但是必须在某台主机上的服务名称是唯一的

      service中的check_command中的命令必须是commands.cfg定义的,该命令所使用的的参数使用"!%“来括住,定义的command如果有三个参数($ARGS)那么就在连续写三个”!%"

      注意:

      只有host配置定义好后,才能定义hostgroup

      只有host和command定义好后,才能定义service

      依赖关系:

      该文件使用到了 commands.cfg 文件中定义好的命令

      隐藏框架:

      在localhosts.cfg文件中工作使用过程中,还会存在一种服务组信息框架,样式如下:

      # "服务组"由多个服务对象组成
      define servicegroup{
           servicegroup_name  	webservices
           alias 				All services   
           members            host,service,host2,service2,... 
      }
      

    4、简单案例

    我们从 案例需求、需求分析、命令资源文件、目标资源文件、加载配置、效果验证、内容梳理 七个方面来学习。

    案例需求

    我们尝试做一个监控存活主机的案例,nagios默认监控的localhost,我们就使用localhost的主机ip来进行检测一下。

    需求分析

    1 检测命令配置

    2 目标主机配置

    3 配置文件生效

    4 测试效果

    命令资源文件

    在nagios的默认command.cfg文件中已经有了一个检查主机存活状态的命令,我们模仿一个命令

    define command {
    
        command_name    check_host_alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
    }
    
    

    目标资源文件

    编写主机+服务资源文件

    [root@nagios nagios]# vim etc/objects/hosts.cfg
    define host {
        use                     linux-server
        host_name               nagios.itcast.com
        alias                   nagios.itcast.com
        address                 10.0.0.151
    }
    
    define hostgroup {
        hostgroup_name          nagios-servers
        alias                   Nagios Servers
        members                 nagios.itcast.com
    }
    
    define service {
        use                     local-service
        host_name               nagios.itcast.com
        service_description     host_alive
        check_command        check_host_alive!100.0,20%!500.0,60%
    }
    

    加载配置文件

    编辑nagios的主配置文件,将我们刚才设置的配置文件加载到nagios管理中

    [root@nagios nagios]# vim etc/nagios.cfg 
    cfg_file=/data/server/nagios/etc/objects/hosts.cfg
    检查配置文件是否生效
    [root@nagios nagios]# nagios -v etc/nagios.cfg 
    Total Warnings: 0
    Total Errors:   0
    

    重启nagios服务,检查效果

    监控的流程:

    1 定义命令资源文件 – 服务检查项的检测命令

    2 定义目标资源文件 – 主机、主机组、服务

    3 加载目标资源文件 – 在nagios主配置文件导入我们定义好的资源文件、并进行相关的语法检查

    4 测试监控案例效果 – 通过浏览器方式来检查我们刚才操作的内容是否生效

    资源定义文件:

    资源定义文件彼此间是有关联和依赖关系的,在我们刚才的简单案例中就出现了三处依赖:

    服务资源和命令资源的依赖关系

    命令资源和插件文件的依赖关系

    监控资源文件和nagios主文件之间的依赖关系

    虽然我们的简单案例中的依赖数量有限,但是我们通过这一点也可以明确的感觉到,在实际的工作中,这些依赖的程度绝对会远远超出我们的想象。

    所以,为了之后我们的工作正常稳定运行,我们在编写文件的过程中,不但要确保本资源的重要属性是正确的,还必须保证我们依赖的文件内容是ok的。

    5、监控mysql

    案例需求

    我们自定义监控一个mysql服务,然后将本机内部已经存在的服务划归到两个不同的server组中

    检查mysql服务的专用脚本是 /data/server/nagios/libexec/check_mysql,执行方式

    [root@nagios libexec]# check_mysql -H 127.0.0.1 -P 3306 -u root -p 123456
    Uptime: 171795  Threads: 1  Questions: 6  Slow queries: 0  Opens: 0  Flush tables: 2  Open tables: 26  Queries per second avg: 0.000|Connections=12c;;; Open_files=21;;; Open_tables=26;;; Qcache_free_memory=0;;; Qcache_hits=0c;;; Qcache_inserts=0c;;; Qcache_lowmem_prunes=0c;;; Qcache_not_cached=0c;;; Qcache_queries_in_cache=0;;; Queries=7c;;; Questions=6c;;; Table_locks_waited=0c;;; Threads_connected=1;;; Threads_running=1;;; Uptime=171795c;;;
    

    注意:

    mysql的专用检测插件是 check_mysql,帮助信息,可以直接使用 check_mysql --help来查看

    需求分析

    1 检测命令配置

    2 目标主机配置

    3 配置文件生效

    4 测试效果

    命令资源文件

    在nagios的默认command.cfg文件中已经有了一个检查主机存活状态的命令,我们模仿一个命令

    [root@nagios nagios]# vim etc/objects/commands.cfg 
    define command {
    
        command_name    check_mariadb
        command_line    $USER1$/check_mysql -H $HOSTADDRESS$ -P $ARG1$ -u $ARG2$ -p $ARG3$
    }
    

    目标资源文件

    定义服务资源文件

    我们将服务相关的 配置从hosts.cfg文件中剥离出去,单独创建一个services.cfg文件。

    [root@nagios nagios]# vim etc/objects/services.cfg
    define service {
        use                     local-service
        host_name               nagios.itcast.com
        service_description     check_mariadb
        check_command           check_mariadb!3306%!root%!123456%
    }
    
    define servicegroup{
         servicegroup_name          app-services
         alias                      App-services
         members                    nagios.itcast.com,check_mariadb
    }
    
    define servicegroup{
         servicegroup_name          host-services
         alias                      Host-services   
         members               nagios.itcast.com,host_alive
    }
    

    注意:

    servicegroup 的 members的内容服务列表,内容格式是:主机名,服务名。

    如果多个服务在一起,格式就是: 主机名1,服务名1,主机名2,服务名2,主机名3,服务名3,…

    加载配置文件

    编辑nagios的主配置文件,将我们刚才设置的配置文件加载到nagios管理中

    [root@nagios nagios]# vim etc/nagios.cfg 
    cfg_file=/data/server/nagios/etc/objects/services.cfg
    检查配置文件是否生效
    [root@nagios nagios]# nagios -v etc/nagios.cfg 
    

    重启nagios服务,检查效果

    6、原理详解

    监控原理

    Nagios 软件在部署的时候,其实包含两部分:服务端和客户端。服务端部署的机器我们称之为监控中心(Server),用于管理各种收集到的监控数据;被监控的主机或服务资源我们称之为被监控端(Agent),用于获取各种资源的具体数据。Server和Agent彼此间通过一个专用的方式进行通信,这个通信方式由NRPE软件软件来实现。

    Agent端通过各种方式(主要是插件)获取指定的资源的状态数据,然后通过专用的通信方式传输给Server端,Server端内部维护一个队列用于接受这些监控的状态数据,并保证它们可以按顺序的处理下去,如果被处理的监控状态数据出现问题或者恢复正常,Server段会根据内部的配置属性进行处理(报警或者自己处理)。所有的处理结果信息都会在一个Web界面上展示。

    处理的结果信息根据监控资源对象的不同主要包含两类:服务通知样式和主机通知样式:

    服务(6):w-warn警告,u-unknown未知,c-critical紧急,r-recover|ok恢复,f-flapping波动,s-scheduled调度

    主机(5):d-down停止,u-unreachable未到达,r-up正常,f-flapping波动,s-scheduled调度

    注意:

    具体信息见 nagios.cfg文件的"SET SERVICE/HOST STATUS"部分

    原理详解

    根据监控数据的获取方式不同,Nagios的监控主要有两种方式:主动监控和被动监控。主动动监控就是服务端指挥插件来获取相应数据并返回给服务端,被动监控就是客户端使用插件来获取相应数据然后传输给服务端。

    监控原理
    组成:服务端 客户端
    流程:
    1 客户端收集数据
    2 服务端接受数据
    3 服务端整理分析数据
    4 服务端展示数据
    方法: 报警、图形、等
    处理的结果信息根据监控资源对象的不同主要包含两类:服务通知样式和主机通知样式
    服务(6):w-warn警告,u-unknown未知,c-critical紧急,r-recover|ok恢复,f-flapping波动,s-scheduled调度
    主机(5):d-down停止,u-unreachable未到达,r-up正常,f-flapping波动,s-scheduled调度
    注意:
    这些内容都在我们的nagios配置文件中可以定义的。
    原理详解
    分类:
    主动监控
    服务端,指挥客户端去收集数据,然后返回
    被动监控
    客户端主动收集数据,然后传输给服务端。
    主动监控:
    核心:
    基于本地/data/server/nagios/libexec目录下面的插件去获取相关的数据。
    其他监控插件:
    check_ping 、check_mysql 、check_http、check_tcp、

    7、http监控

    案例需求

    我们使用check_http插件以http的方式来,监控一个http服务,然后将其划归到App-services组中

    check_http的模块文件在 /data/server/nagios/libexec/ 目录下,其帮助信息如下:

    [root@nagios libexec]# check_http --help
    ...
    Usage:
     check_http -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>]
    
    [root@nagios libexec]# check_http -I 10.0.0.151
    HTTP OK: HTTP/1.1 200 OK - 59034 bytes in 0.003 second response time |time=0.002534s;;;0.000000 size=59034B;;;0
    

    -H 指定的是 /etc/hosts文件中ip对应的主机名解析记录

    -u 指定的是一条uri的地址,比如"/index.html"

    需求分析

    1 检测命令配置

    2 目标主机配置

    3 配置文件生效

    4 测试效果

    命令资源文件

    在nagios的默认command.cfg文件中已经有了一个检查主机存活状态的命令,我们模仿一个命令

    
    define command {
    
        command_name    check_http_alive
        command_line    $USER1$/check_http -I $ARG1$ -p $ARG2$
    }
    

    目标资源文件

    定义服务资源文件,在services.cfg文件中添加http,并将这个服务加入到app服务组中

    define service {
        use                     local-service
        host_name               nagios.itcast.com
        service_description     check_http_alive
        check_command           check_http_alive!10.0.0.151!80
    }
    
    define servicegroup{
         servicegroup_name          app-services
         alias                      App-services
         members                    nagios.itcast.com,check_mariadb,nagios.itcast.com,check_http_alive
    }
    

    加载配置文件

    检查nagios的主配置文件,保证我们刚才设置的配置文件被nagios管理

    检查配置文件是否生效

    [root@nagios nagios]# nagios -v etc/nagios.cfg 
    

    重启nagios服务

    域名监控

    案例需求

    将检查的方式更改为域名方式

    检查命令提示:check_http -H 域名

    [root@nagios libexec]# check_http -H nagios.itcast.com
    HTTP OK: HTTP/1.1 200 OK - 59307 bytes in 0.004 second response time |time=0.003761s;;;0.000000 size=59307B;;;0
    

    基本步骤不变,依次更改配置文件

    命令资源文件

    [root@nagios nagios]# vim etc/objects/commands.cfg 
    define command {
    
        command_name    check_http_domain
        command_line    $USER1$/check_http -H $ARG1$
    }
    

    目标资源文件

    [root@nagios nagios]# vim etc/objects/services.cfg 
    define service {
        use                     local-service
        host_name               nagios.itcast.com
        service_description     check_apache_domain
        check_command           check_http_domain!nagios.itcast.com
    }
    
    define servicegroup{
         servicegroup_name          app-services
         alias                      App-services
         members                    nagios.itcast.com,check_mariadb,nagios.itcast.com,check_http_alive,nagios.itcast.com,check_apache_domain
    }
    

    检查配置文件是否生效

    重启nagios

    uri监控

    案例需求

    将检查的方式更改为uri方式

    检查命令提示:check_http -H 域名 -u /path/to/uri

    [root@nagios libexec]# check_http -H nagios.itcast.com -u /index.php
    HTTP OK: HTTP/1.1 200 OK - 59334 bytes in 0.004 second response time |time=0.003654s;;;0.000000 size=59334B;;;0
    

    注意:

    如果是包含特殊字符的uri地址,我们应该使用 “/path/to/uri” 形式

    基本步骤不变,依次更改配置文件

    命令资源文件

    define command {
    
        command_name    check_http_uri
        command_line    $USER1$/check_http -H $ARG1$ -u $ARG2$
    }
    

    目标资源文件

    define service {
        use                     local-service
        host_name               nagios.itcast.com
        service_description     check_apache_uri    check_command           check_http_uri!nagios.itcast.com!/index.php
    }   
    define servicegroup{
         servicegroup_name          app-services
         alias                      App-services
         members                    nagios.itcast.com,check_mariadb,nagios.itcast.com,check_http_alive,nagios.itcast.com,check_apache_domain,nagios.itcast.com,check_apache_uri
    }
    

    检查配置文件是否生效

    重启nagios

    8、告警配置

    联系人资源文件 contacts.cfg

    配置样式:

    我们以contacts.cfg文件默认的内容为例

    # "联系人"对象用于定义指定nagios警告时候的通知对象信息。
    define contact {
        contact_name          	nagiosadmin
        use                     	generic-contact
        alias                   	Nagios Admin
        email                   	nagios@localhost  #******
    }
    
    # "联系人组"由多个联系人对象构成
    define contactgroup {
        contactgroup_name       	admins
        alias                   	Nagios Administrators
        members                 	nagiosadmin
    }
    
    配置详解:
    联系人配置框架:define contact { ... }
    联系人组配置框架:define contactgroup { ... }
    contact_name 和 contactgroup_name 表示的是名称缩写,而且必须全局唯一,alias 表示的是全称
    use 表示的是联系人基本信息所采用的模板样式,重复的信息可以继承
    email	联系人的专用通信地址
    members	表示有多少人在同一个组内,组员之间使用逗号隔开
    
    依赖关系:
    该文件用到了 templates.cfg 文件中定义的内容
    

    模板资源文件 templates.cfg

    配置示例:

    我们以templates.cfg文件默认的内容为例

    # "联系人"对象用于定义指定nagios警告时候的通知对象的通用信息。
    define contact {
        name                            generic-contact         
        service_notification_period     24x7      			# timeperiods.cfg中定义好的规格          
        host_notification_period        24x7 					# 同上                   
        service_notification_options    w,u,c,r,f,s      	# 服务的通知样式     
        host_notification_options       d,u,r,f,s         	# 主机的通知样式      
        service_notification_commands   notify-service-by-email 	# 服务的检测命令   ******
        host_notification_commands      notify-host-by-email   		# 主机的检测命令   ******
        register                        0                       
    }
    
    # "主机"对象用于定义指定主机目标的通用属性信息。
    define host {
        name                            generic-host
        notifications_enabled           1           
        event_handler_enabled           1           
        flap_detection_enabled          1           
        process_perf_data               1           
        retain_status_information       1           
        retain_nonstatus_information    1           
        notification_period             24x7       			# timeperiods.cfg中定义好的规格       
        register                        0           
    }
    
    # "服务"对象用于定义指定服务资源通用的监控属性。
    define service {
        name                            generic-service
        active_checks_enabled           1              
        passive_checks_enabled          1              
        parallelize_check               1              
        obsess_over_service             1              
        check_freshness                 0              
        notifications_enabled           1              
        event_handler_enabled           1              
        flap_detection_enabled          1              
        process_perf_data               1              
        retain_status_information       1              
        retain_nonstatus_information    1              
        is_volatile                     0              
        check_period                    24x7             		# timeperiods.cfg中定义好的规格    ******
        max_check_attempts              3           			# 最大检查次数   ******
        check_interval                  10             			# 检查间隔
        retry_interval                  2              
        contact_groups                  admins         			# contacts.cfg中定义好的规格
        notification_options            w,u,c,r        
        notification_interval           60             #******
        notification_period             24x7       			# timeperiods.cfg中定义好的规格    *****      
        register                        0              
    }
    
    
    配置详解:
    联系人信息配置框架: define contact { ... }
    主机信息配置框架: define host { ... }
    服务信息配置框架: define service { ... }
    name表示模板的名称,必须是全局唯一的,不能有重复的内容
    check_period	表示默认的检查间隔
    注意:
    在模板中配置的一般都是通用的|共用的|基础的属性信息
    服务通知样式:w-warn警告,u-unknown未知,c-critical紧急,r-recover|ok恢复,f-flapping波动,s-scheduled调度
    主机通知样式:d-down停止,u-unreachable未到达,r-up正常,f-flapping波动,s-scheduled调度
    register   0  是一个模板的标识,如果没有该字段,就表明该模板是一个继承的模板
    依赖关系:
    该文件用到了 contacts.cfg、timeperiods.cfg、commands.cfg 三个文件中定义的内容
    check_period 和 notification_period 指定的名称是模板文件中定义好的规格
    
    注意:
    如果涉及到经常变动的内容,就不要放到模板文件中。
    

    隐藏框架

    在模板文件中还有一种继承时候用到的一种模板框架,格式如下

    # host模板继承:继承一般在对象定义文件中使用Use继承
    define host{
           use                     	generic-server
           host_name               localhost      
           alias                   	localhost      
           address                 	127.0.0.1      
           contact_groups         linux-admins  
    }
    

    注意:

    一个对象在定义时可以继承多个模板,use指定的后面多写几个模板名即可,彼此间用逗号隔开即可

    时段资源文件 timeperiods.cfg

    配置示例:

    我们以timeperiods.cfg文件默认的内容为例

    # "时段"用于定义某"操作"执行或暂停的时间间隔
    define timeperiod {
        name                    24x7
        timeperiod_name         24x7
        alias                   24 Hours A Day, 7 Days A Week
    
        sunday                  00:00-24:00
        monday                  00:00-24:00
        tuesday                 00:00-24:00
        wednesday               00:00-24:00
        thursday                00:00-24:00
        friday                  00:00-24:00
        saturday                00:00-24:00
    }
    
    
    配置详解:
    时段属性配置框架:define timeperiod { ... }
    这里面配置的都是一些时间段的格式属性
    

    依赖关系:

    该文件没有依赖其他文件

    告警流程

    contacts.cfg – templates.cfg – (timeperiods.cfg + commands.cfg)

    收集信息 services.cfg 文件调用 commands.cfg 检测命令
    报警机制 contacts.cfg 文件调用 templates.cfg的generic-contact模板中的 notify-service-by-email 和 notify-host-by-email
    发送警告commands.cfg文件中的邮件发送命令将信息发送给 contacts.cfg 文件中的 email

    9、邮件告警

    在nagios监控服务器上想要使用告警功能,可以结合linux系统自带的sendmail服务,需对系统的sendmail进行配置,也就是说,在nagios告警的时候,不仅仅需要,开启nagios配置文件中相应的属性配置,命令资源必须正确,还需要底层的sendmail服务正常。

    需求分析

    1 配置系统sendmail服务

    2 配置报警命令资源

    3 配置nagios联系人

    4 综合测试

    部署sendmail

    安装sendmail并启动

    [root@nagios nagios]# yum install mailx sendmail -y
    [root@nagios nagios]# systemctl start sendmail
    [root@nagios nagios]# systemctl enable sendmail
    

    权限配置

    为了避免在某些情况下,由于用户权限相关的原因,导致在发送邮件的时候出现问题应该给邮件专用的目录添加权限

    sendmail 默认一般只让root使用,非root用户无法访问 /var/spool/mqueue和/var/spool/clientmqueue/

    [root@nagios nagios]# chmod +x /var/spool/mqueue -R
    [root@nagios nagios]# chmod +x /var/spool/clientmqueue -R
    

    发件信息配置

    vfjkehdhmkxmcide
    [root@nagios nagios]# vim /etc/mail.rc 
    set from=3330332775@qq.com
    set smtp=smtp.qq.com
    set smtp-auth-user=3330332775@qq.com
    set smtp-auth-password=vfjkehdhmkxmcide   #邮箱的smtp授权码
    set smtp-auth=login
    

    重启服务进行测试

    [root@nagios nagios]# systemctl restart sendmail
    [root@nagios nagios]# echo "hello word" | mail -s "test" 3330332775@qq.com
    前往邮箱查看
    

    配置命令资源

    修改命令资源文件内容

    默认的配置中用的是sendmail命令,但是测试不成功,我需要修改一下,将默认的/usr/sbin/sendmail更改为/usr/bin/mail

    define command {
    
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
    }
    
    
    
    define command {
    
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }
    

    联系人配置

    修改nagios的联系人资源配置文件,修改为我们自己能接收到邮件的地址

    define contact {
    
        contact_name            nagiosadmin             ; Short name of user
        use                     generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                   Nagios Admin            ; Full name of user
        email                   3330332775@qq.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
    }
    

    注意:

    如果需要配置多个邮箱的话,可以直接写多个邮箱地址,彼此间用空格隔开就可以了

    邮箱地址一定要正确,提前测试应该成功

    加载配置文件

    配置文件中已加载

    检查配置文件是否生效

    重启nagios服务

    检查效果

    我们可以基于手工或者触发配置失败来,模拟故障。

    触发配置:点开任意一个Serveice界面,然后点击右侧"Send custom service notification"

    手工配置:将某个服务临时关闭,查看效果

    浏览器打开邮箱网页后,稍等一会,就可以看到邮件通知效果

    10、其他配置

    打印机资源文件 printer.cfg

    配置示例:

    我们以printer.cfg文件默认的内容为例

    define host {
        use                     generic-printer      
        host_name               hplj2605dn           
        alias                   HP LaserJet 2605dn   
        address                 192.168.1.30         
        hostgroups              network-printers     
    }
    
    define hostgroup {
        hostgroup_name          network-printers     
        alias                   Network Printers     
    }
    
    define service {
        use                     generic-service      
        host_name               hplj2605dn           
        service_description     Printer Status       
        check_command           check_hpjd!-C public 
        check_interval          10                   
        retry_interval          1                    
    }
    
    
    配置详解:
    主机信息配置框架: define host { ... }
    主机组信息配置框架: define hostgroup { ... }
    服务信息配置框架: define service { ... }
    
    依赖关系:
    该文件用到了 commands.cfg、templates.cfg 两个文件中定义的内容
    

    交换机资源文件 switch.cfg

    配置示例:

    我们以switch.cfg文件默认的内容为例

    define host {
        use                     generic-switch                
        host_name               linksys-srw224p               
        alias                   Linksys SRW224P Switch        
        address                 192.168.1.253                 
        hostgroups              switches                      
    }
    
    define hostgroup {
        hostgroup_name          switches                      
        alias                   Network Switches              
    }
    
    define service {
        use                     generic-service               
        host_name               linksys-srw224p               
        service_description     PING                          
        check_command           check_ping!200.0,20%!600.0,60%
        check_interval          5                             
        retry_interval          1                             
    }
    
    
    配置详解:
    主机信息配置框架: define host { ... }
    主机组信息配置框架: define hostgroup { ... }
    服务信息配置框架: define service { ... }
    
    依赖关系:
    该文件用到了 commands.cfg、templates.cfg 两个文件中定义的内容
    

    windows资源文件 windows.cfg

    配置示例:

    我们以windows.cfg文件默认的内容为例

    define host {
        use                     windows-server          
        host_name               winserver               
        alias                   My Windows Server       
        address                 192.168.1.2             
    }
    
    define hostgroup {
        hostgroup_name          windows-servers         
        alias                   Windows Servers         
    }
    
    define service {
        use                     generic-service
        host_name               winserver
        service_description     NSClient++ Version
        check_command           check_nt!CLIENTVERSION
    }
    
    配置详解:
    主机信息配置框架: define host { ... }
    主机组信息配置框架: define hostgroup { ... }
    服务信息配置框架: define service { ... }
    
    依赖关系:
    该文件用到了 commands.cfg、templates.cfg 两个文件中定义的内容
    

    11、配置角色

    配置角色

    根据我们刚才对配置文件和资源对象文件的学习,我们知道,nagios要做一个监控动作,涉及到相互关联着的七种角色,虽然他们分散在八个不同的资源对象文件中,但是我们可以找到他们之间的关联关系。

    默认角色:

    host、hostgroup、service、context、contactgroup、timeperiod、command

    隐藏角色:

    servicegroup、hostdependency、servicedependency

    依赖资源

    在学习资源对象文件的过程中,我们已经知道了这些资源对象之间是有相互依赖的关系的,为了更好的描述他们之间的依赖关系,我们使用两个名词来描述他们之间的依赖关系:

    master|父对象:被依赖的主机或服务

    dependent|子对象:依赖于master的资源对象

    由于依赖关系主要出现在主机和服务中,所以有两种框架专门来描述他们,示例如下:

    # 主机资源依赖关系
    define hostdependency{
        dependent_host_name             	backuphost    
        host_name                       	backuphost    
        dependency_period               	nginxproxy      	# 依赖的主机    
        execution_failure_criteria      	c,u           
        notification_failure_criteria   	c,u,w         
    }
    
    # 服务资源依赖关系
    define servicedependency{
           host_name                       		nginxproxy   
           service_description             	nginxproxy         
           dependent_hostgroup_name        	webservers 
           dependent_service_description   	webservice    
           execution_failure_criteria      	c,u           
           notification_failure_criteria   	c,u,w         
    }
    

    角色分类

    站在监控业务流程的角度,我们将这些角色可以分为以下四类:

    目标:定义哪些主机|主机组、服务可以进行监控

    host-主机、hostgroup-主机组、service-服务、servicegroup-服务组

    方法:定义哪些命令可以用于监控目标

    command-命令

    时间:定义时间段,用于监控目标的时候,设置合适的频率

    timeperiod-监控时间

    反馈:定义联系人|联系人组,用户获取信息后的反馈目标。

    contact-联系人、contactgroup-联系人组

    配置流程

    根据我们对资源对象文件内部的对象间关系的学习,我们可以梳理出nagios的配置步骤:

    1 定义监控对象的命令

    2 定义监控的目标

    3 定义监控动作的时间段

    4 定义监控反馈的联系人

    四、远程监控

    1、被动原理

    基本环境:
    服务端 nagios core + check_nrpe
    客户端 nrpe + nagios_plugins

    流程原理:
    1 服务端启动服务,周期性和客户端通信
    2 服务端 check_nrep根据服务端的指示与客户端进行通信
    3 nrep接受信息后,调用相关插件获取数据
    4 插件获取数据后,返回给nrpe
    5 nrpe接受的信息返回给服务端
    6 服务端按顺序依次处理

    2、准备工作

    案例分析

    1. 服务端的 Nagios 会运行check_nrpe 这个插件,告诉它要检查什么

    2. check_nrpe 插件采用SSL方式连接到远程主机的NRPE进程

    3. 远程主机的 NRPE 进程会找到相应的Nagios 插件来执行检查;

    4. 远程主机的 NRPE 进程将检查的结果原路返回给服务端的 check_nrpe 插件,再转交给nagios做处理。

    注意:

    NRPE 进程需要 Nagios 插件安装在远程的Linux主机上。

    服务端也需要安装 nrpe软件,因为我们在服务端需要check_nrpe插件

    修改主机名,并修改两台主机的hosts文件

    10.0.0.151 nagios.itcast.com nagios
    10.0.0.152 agent.itcast.com agent
    

    两台主机做好时间同步

    服务端安装插件

    获取nrpe软件

    https://www.nagios.org/downloads/nagios-core-addons/

    创建标准目录后,然后下载nrpe软件

    安装nrpe

    [root@nagios soft]# tar -xvf nrpe-4.0.2.tar.gz 
    [root@nagios soft]# cd nrpe-4.0.2/
    [root@nagios nrpe-4.0.2]# ./configure --prefix=/data/server/nagios --with-nagios-user=nagios --with-nagios-group=nagcmd
    [root@nagios nrpe-4.0.2]# make all
    [root@nagios nrpe-4.0.2]# make install-plugin
    

    服务端只需要安装插件即可,不需要安装其他操作

    3、远程主机部署

    准备工作

    获取软件

    获取nrpe软件

    https://www.nagios.org/downloads/nagios-core-addons/

    创建标准目录后,然后下载nrpe软件

    [root@agent ~]# mkdir /data/{server/nagios,softs} -p
    

    用户权限配置

    Nagios需要有专用的用户来进行管理

    Nagios外部相关命令的使用,需要专用的用户组

    [root@agent ~]# useradd -s /sbin/nologin nagios
    [root@agent ~]# groupadd nagcmd
    [root@agent ~]# usermod -a -G nagcmd nagios
    [root@agent ~]# chown -R nagios.nagios -R /data/server
    

    安装基础依赖软件

    [root@agent ~]# yum install -y net-snmp xinetd perl-devel perl-CPAN openssl-devel gcc gcc-c++
    

    注意:

    xinetd 和 openssl-devel是最重要的

    插件安装

    获取插件

    安装插件

    插件版本与nagios版本的关联并不大

    插件网站:http://www.nagiosplugins.org/
    在官网下载插件安装包然后解压(插件版本与nagios版本关联不大)
    [root@agent soft]# tar -xvf nagios-plugins-2.3.3.tar.gz 
    编译
    [root@agent nagios-plugins-2.3.3]# ./configure --prefix=/data/server/nagios --with-nagios-user=nagios --with-nagios-group=nagcmd --enable-perl-modules --enable-redhat-pthread-workaround
    编译安装
    [root@agent nagios-plugins-2.3.3]# make
    [root@agent nagios-plugins-2.3.3]# make install
    

    部署nrpe

    安装nrpe

    获取nrpe软件

    https://www.nagios.org/downloads/nagios-core-addons/

    安装nrpe

    [root@agent softs]# tar -xvf nrpe-4.0.2.tar.gz 
    [root@agent nrpe-4.0.2]# ./configure --prefix=/data/server/nagios --with-nagios-user=nagios --with-nagios-group=nagcmd
    [root@agent nrpe-4.0.2]# make all
    [root@agent nrpe-4.0.2]# make install-plugin
    [root@agent nrpe-4.0.2]# make install-daemon
    [root@agent nrpe-4.0.2]# make install-config
    [root@agent nrpe-4.0.2]# make install-inetd
    
    权限配置
    [root@agent nagios]# chown nagios.nagios -R /data/server/nagios
    

    启动nrpe

    修改nrpe服务配置文件

    [root@agent nagios]# vim /etc/xinetd.d/nrpe 
    service nrpe
    {
        disable         = no
        socket_type     = stream
        port            = 5666
        wait            = no
        user            = nagios
        group           = nagios
        server          = /data/server/nagios/bin/nrpe
        server_args     = -c /data/server/nagios/etc/nrpe.cfg --inetd
        only_from       = 127.0.0.1 10.0.0.151
        log_on_success  =
    }
    

    注意:

    将 disable 后面的yes更改为no

    在 only_from 增加nagios服务端主机ip,使用空格隔开

    核心命令:nrpe -c /data/server/nagios/etc/nrpe.cfg -d

    修改services文件

    [root@agent nagios]# vim /etc/services 
    nrpe            5666/tcp      nrpe      #nrpe service
    

    启动服务

    [root@agent nagios]# systemctl start xinetd.service 
    [root@agent nagios]# systemctl enable xinetd
    

    环境变量

    nrpe环境变量

    [root@agent nagios]# vim /etc/profile.d/nrpe.sh
    # nrpe env set
    export NRPE_HOME=/data/server/nagios
    export PATH=$NRPE_HOME/bin:$NRPE_HOME/libexec:$PATH
    [root@agent nagios]# source /etc/profile.d/nrpe.sh
    [root@agent ~]# chmod +x /etc/profile.d/nrpe.sh 
    

    4、命令详解

    命令简介

    查看帮助信息

    [root@nagios nagios]# check_nrpe
    Usage: check_nrpe -H <host> [-2] [-3] [-4] [-6] [-n] [-u] [-V] [-l] [-d <dhopt>]
           [-P <size>] [-S <ssl version>]  [-L <cipherlist>] [-C <clientcert>]
           [-K <key>] [-A <ca-certificate>] [-s <logopts>] [-b <bindaddr>]
           [-f <cfg-file>] [-p <port>] [-t <interval>:<state>] [-g <log-file>]
           [-c <command>] [-E] [-D] [-a <arglist...>]
    
    

    注意:

    在帮助信息中,比较重要的两个参数是:-H 和 -c

    nrpe功能测试,检查nrpe服务端信息

    [root@nagios nagios]# check_nrpe -H 10.0.0.152
    NRPE v4.0.2
    

    使用详解

    在安装插件的过程中,执行./configure 的时候都做了SSL 的配置信息,然后在被监控端使用xinet的方式将nrpe服务以守护进程的形式启动起来了

    NRPE管理插件详解

    NRPE配置文件

    NRPE管理nagios plugins是通过配置文件的方式来进行的,该配置文件是/data/server/nagios/etc/nrpe.cfg

    [root@agent libexec]# egrep -vn '^$|^#' /data/server/nagios/etc/nrpe.cfg 
    17:log_facility=daemon
    34:debug=0
    43:pid_file=/data/server/nagios/var/nrpe.pid
    52:server_port=5666
    79:nrpe_user=nagios
    89:nrpe_group=nagios
    106:allowed_hosts=127.0.0.1,::1
    122:dont_blame_nrpe=0
    140:allow_bash_command_substitution=0
    176:command_timeout=60
    187:connection_timeout=300
    275:disable_syslog=0
    300:command[check_users]=/data/server/nagios/libexec/check_users -w 5 -c 10
    301:command[check_load]=/data/server/nagios/libexec/check_load -r -w .15,.10,.05 -c .30,.25,.20
    302:command[check_hda1]=/data/server/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
    303:command[check_zombie_procs]=/data/server/nagios/libexec/check_procs -w 5 -c 10 -s Z
    304:command[check_total_procs]=/data/server/nagios/libexec/check_procs -w 150 -c 200
    

    可以看到:

    NRPE就是通过command的指令来管理各种各样的插件的

    allowed_hosts是一个非常重要的属性

    command指令详解

    指令样式:

    command[check_users]=/data/server/nagios/libexec/check_users -w 5 -c 10
    

    指令格式:

    command[命令名称]=插件路径 选项1 参数1 选项2 参数2 …

    check_nrpe实践

    命令格式:

    check_nrpe -H “被监控主机ip” -c “nrpe管理的命令”

    注意:

    -c 后面接的监控命令必须是nrpe.cfg 文件中定义的,其他的都不能用

    当检测成功后,这才表明客户端的配置都做好了

    命令示例:

    [root@nagios nagios]# check_nrpe -H 10.0.0.152 -c check_users
    USERS OK - 2 users currently logged in |users=2;5;10;0
    [root@nagios nagios]# check_nrpe -H 10.0.0.152 -c check_usersadd
    NRPE: Command 'check_usersadd' not defined
    

    常见问题

    1 agent端nrpe服务未开启

    2 iptables控制

    3 后端脚本无法使用

    5、nrpe实践

    案例需求

    需求目标

    我们将远程主机加入到当前的nagios的管理中,然后采用nrpe的方式对远程主机进行监控管理,基于远程主机的管理的插件,获取相应的信息,然后传输回在监控主机,并在监控主机的web页面上进行展示。

    需求分析:

    1 服务端和客户端环境正常

    2 客户端检测命令

    3 服务端资源配置

    4 服务端配置文件

    5 综合测试

    nrpe定制命令

    获取主机存活状态

    获取主机存活状态,我们可以基于check_ping插件来测试,check_ping插件的使用格式如下:

    check_ping -H <host_address> -w <wrta>,<wpl>% -c <crta>,<cpl>% [-p packets] [-t timeout] [-4|-6]
    命令详解:
    -H 指定测试的主机
    -w 指的是warning状态的条件,<wrta>个包<wpl>%比例失败,则属于WARNING状态,否则OK
    -c 指的是critical状态的条件,<crta>个包<cpl>%比例失败,则属于CRITICAL状态,否则是WARNING
    -p 指定测试数据包个数
    -t 指定超时时间
    
    测试示例:
    [root@agent libexec]# check_ping -H 10.0.0.152 -w 10,20% -c 30,50% -p 4 -t 2
    PING OK - Packet loss = 0%, RTA = 0.05 ms|rta=0.054000ms;10.000000;30.000000;0.000000 pl=0%;20;50;0
    

    定制nrpe命令

    被监控端编辑nrpe的配置文件

    [root@agent nagios]# vim etc/nrpe.cfg 
    command[check_agent_alive]=/data/server/nagios/libexec/check_ping -H 10.0.0.152 -w 10,20% -c 30,50% -p 4 -t 2
    

    监控端check_ping检查效果

    [root@nagios nagios]# check_nrpe -H 10.0.0.152 -c check_agent_alive
    PING OK - Packet loss = 0%, RTA = 0.04 ms|rta=0.042000ms;10.000000;30.000000;0.000000 pl=0%;20;50;0
    

    命令资源文件

    在nagios的默认command.cfg文件中已经有了一个检查主机存活状态的命令,我们模仿一个命令

    define command {
    
        command_name    check_agent_alive
        command_line    $USER1$/check_nrpe -H $ARG1$ -c check_agent_alive
    }
    

    目标资源文件

    编写主机资源文件

    [root@nagios nagios]# vim etc/objects/hosts.cfg 
    define host {
        use                     linux-server
        host_name               agent.itcast.com
        alias                   agent.itcast.com
        address                 10.0.0.152
    }
    define hostgroup {
        hostgroup_name          nagios-servers
        alias                   Nagios Servers
        members                 nagios.itcast.com,agent.itcast.com
    }
    

    定义服务资源文件

    define service {
        use                     local-service
        host_name               agent.itcast.com
        service_description     check_agent_alive
        check_command           check_agent_alive!10.0.0.152
    }
    
    define servicegroup{
         servicegroup_name          host-services
         alias                      Host-services
         members                    nagios.itcast.com,host_alive,agent.itcast.com,check_agent_alive
    }
    

    加载配置文件

    确保nagios的主配置文件,已经加载将我们刚才设置的配置文件

    vim /data/server/nagios/etc/nagios.cfg
    cfg_file=/data/server/nagios/etc/objects/hosts.cfg
    cfg_file=/data/server/nagios/etc/objects/services.cfg
    

    检查配置文件是否生效

    重启nagios服务

    打开浏览器检查

    6、插件开发

    所有的监控都是在别人提供好的监控插件的基础上来进行的,而生产业务时千变万化的,所以我们肯定需要在某些特定时刻自己开发一套脚本,实现定制化的监控。接下来我们就好好的学习一下nagios的监控插件的开发。

    需求分析

    根据我们对模块插件的了解,nagios的监控插件其实就是一个个的脚本,我们只需要按照nrpe的监控流程使用相应的编程语言实现就可以了。

    根据我们对Nagios的展示页面了解,其实只有Status和Stutus information两部分信息是来源于插件信息,其他的输出信息都来源于我们各自的资源定义文件。

    其实在nagios中有一个shell脚本编写的插件样例:/data/server/nagios/libexec/utils.sh,我们可以分析一下这个脚本,梳理一下nagios的插件脚本的核心部分,然后按照规律写出一个符合自己业务场景的脚本。

    #! /bin/sh
    
    STATE_OK=0
    STATE_WARNING=1
    STATE_CRITICAL=2
    STATE_UNKNOWN=3
    STATE_DEPENDENT=4
    ......
    check_range() {
            local v range yes no err decimal start end cmp match
            v="$1"
            range="$2"
    
            # whether to raise an alert or not
            yes=0
            no=1
            err=2
    
            # regex to match a decimal number
            decimal="-?([0-9]+\.?[0-9]*|[0-9]*\.[0-9]+)"
    
            # compare numbers (including decimals), returning true/false
            cmp() { awk "BEGIN{ if ($1) exit(0); exit(1)}"; }
    ......
    

    通过上面的脚本示例,可以知道,其实自定义插件脚本需要两部分核心内容:插件的退出状态码和信息输出。退出状态码可以被Nagios主程序接受,作为判断被监控服务状态的依据,而信息输出可以被Nagios主程序作为被监控系统服务状态的补充说明,并显示在管理页面中。

    脚本开发

    客户端脚本/data/server/nagios/libexec/check_sendmail.sh

    #!/bin/bash
    
    #设置状态返回码
    STATE_OK=0
    STATE_CRITICAL=2
    
    #获取sendmail服务信息
    SEND_MAIL=`netstat -anplt |grep 25|wc -l`
    
    #判断流程
    main(){
            if [ $SEND_MAIL -ge 1 ]
            then
                    echo "OK Sendmail is working!"
                    exit $STATE_OK
            else
                    echo "CRITICAL Sendmail is not working!"
                    exit $STATE_CRITICAL
            fi
    }
    #函数执行
    main
    

    修改权限并检查

    [root@agent nagios]# chmod +x libexec/check_sendmail.sh 
    [root@agent nagios]# chown nagios.nagcmd libexec/check_sendmail.sh 
    [root@agent nagios]# bash libexec/check_sendmail.sh 
    OK Sendmail is working!
    

    NRPE集成

    [root@agent nagios]# vim etc/nrpe.cfg 
    command[check_sendmail]=/data/server/nagios/libexec/check_sendmail.sh
    
    在服务器端检查
    [root@nagios ~]# check_nrpe -H 10.0.0.152 -c check_sendmail
    OK Sendmail is working!
    

    资源对象定义

    命令资源文件

    在nagios的默认command.cfg文件中已经有了一个检查主机存活状态的命令,我们模仿一个命令

    define command {
    
        command_name    check_agent_sendmail
        command_line    $USER1$/check_nrpe -H $ARG1$ -c check_sendmail
    }
    

    编写主机资源文件

    之前编写过

    定义服务资源文件

    编辑服务资源专用services.cfg文件

    define service {
        use                     local-service
        host_name               agent.itcast.com
        service_description     check_sendmail    check_command           check_agent_sendmail!10.0.0.152
    }
    define servicegroup{
         servicegroup_name          host-services
         alias                      Host-services
         members                    nagios.itcast.com,host_alive,agent.itcast.com,check_agent_alive,agent.itcast.com,check_sendmail
    }
    

    确保nagios的主配置文件,已经加载将我们刚才设置的配置文件

    检查配置文件是否生效

    重启nagios服务

    浏览器打开nagios网页后,点击左侧Current Status项下面的相关子菜单,查看效果

    更多相关内容
  • nagios

    2021-03-19 22:57:17
    纳吉奥斯
  • Docker-Nagios提供了在docker容器上运行的Nagios服务以及针对Nagios的一系列解决方案:Adagios用于基于Web的Nagios配置,Grafana用于监控指标和仪表板,Ndoutils用于将监控数据传输到MySQL数据库,NCPA&NRDP用于...
  • nagioscore:Nagios核心

    2021-05-05 22:18:31
    Nagios 4.x Nagios是用C语言编写的主机/服务/网络监视程序,根据GNU通用公共许可证版本2发行。包含CGI程序,以便您根据需要通过Web界面查看当前状态,历史记录等。 请访问Nagios主页,为以获取文档,新版本,错误...
  • RabbitMQ Nagios插件 这个 Nagios 插件的目的是检查一个或多个(单个或集群/镜像)Rabbitmq 服务器的健康状态。 功能 check_rabbitmq 插件具有以下功能(这些都与特定的虚拟主机相关): 检查所有队列是否跨集群...
  • 下载nagios相关安装包4.1 nagios服务端主程序4.2 nagios服务端插件4.3 nagios客户端代理检测程序5. nagios服务端程序安装部署5.1 安装部署nagios服务端主程序5.1.1 解压安装包5.1.2 配置编译5.1.3 编译安装5.1.4 ...
  • Nagios - 推送模型代码就是文档,因此我敦促您也研究代码。 推模式的原因: Nagios 只能处理这么多的活动服务检查。 在远程主机上安全地执行这些检查相当麻烦。 在 NAT/防火墙后面的主机上执行检查更加麻烦。 因此,...
  • Ansible-Nagios 用于设置Nagios监视服务器和客户端(CentOS / RHEL / Fedora / FreeBSD)的手册它有什么作用? 在CentOS7或RHEL7上自动部署Nagios Server 在CentOS6 / 7/8,RHEL6、7、8,Fedora和FreeBSD上自动部署...
  • Nagios-Cli 关于 nagios-cli是Nagios命令行界面,它公开了一些可通过基于Web的图形用户界面使用的功能。 要求 必需的: Nagios 2.x或3.x Python 2.4+ 可选的: libreadline 用法 默认配置将在/var/log/nagios/...
  • 码头工人纳吉斯Nagios的Docker映像生成状态: 在带有NagiosGraph和NRPE的Ubuntu 16.04 LTS上运行的Nagios Core 4.4.5构型Nagios配置位于/ opt / nagios / etc中NagiosGraph配置位于/ opt / nagiosgraph / etc中安装...
  • nagios服务器 在类似Debian的系统中(服务器端)设置nagios。 要求 没有任何 变数 nagios_server_private_keys :[默认: [] ]:私钥声明 nagios_server_private_keys.{n}.owner :[可选,默认nagios ]:应该拥有...
  • nagios-php 受启发,帮助在 PHP 中编写 nagios 插件的简单实用程序。用法: 示例 - check_hello : <?phprequire_once __DIR__ . '/nagios.phar' ;use Dubture \ Nagios \ Plugin ;$ plugin = new Plugin ();$ ...
  • Nagios 检查 HP ProCurve 交换机这是对 HP ProCurve 交换机的 nagios 检查。 它在 nagios 默认 SNMP 检查之上提供必要的 OID 和逻辑,以获取有关受监控 ProCurve 交换机的信息。 此检查将不时增强,但目前仅支持对...
  • nagios-eventhandler-cachet Nagios事件处理程序,用于将Nagios通知推送到Cachet API 先决条件 正常运行Cachet安装 已经创建了一些可用于处理的Cachet组件 安装了带有PHP CLI和php-curl的Nagios实例 安装 获取...
  • 安西布尔·纳吉奥斯(Ansible Nagios) 从源代码安装Nagios的角色。 特征 安装和配置Nagios 4(当前无法通过PPA获得)。 安装 支持通过发送通知 安装NRPE,以执行远程检查。 安装最新版本的nagios-plugins。 安装...
  • nagios中文完整版

    2020-01-23 16:12:26
    Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等 Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统...
  • 使用Nagios插件监控Kafka 要从Kafka服务器中查找特定对象名称的值,有一个名为check_jmx的插件,使您可以监视JMX属性并在Nagios中获取值。 我们不需要编写任何python / bash脚本来获取值:) 我们可以监视JMX可以访问...
  • nagios-xenserver 用于Xenserver的Nagios Check插件 Usage: ./check_xenserver.py <pool> <config> <check> [warning level %] [critical level %] 有关更多信息,请参见在线帮助。 配置文件遵循ini格式。 在[常规...
  • 利用Nagios-XI-5.7.X远程代码执行RCE身份验证 Nagios XI 5.7.X-远程执行代码RCE(已认证)
  • 纳吉奥斯插件这是我编写的Nagios插件的集合。 check_upstart_status.pl-该Perl脚本检查Linux主机(例如Ubuntu)上给定Upstart作业的状态。 如果作业正在停止,则返回警告;如果作业正在停止,则返回严重。
  • Nagios配置文件详细参数参考: https://blog.51cto.com/ixdba/752870 IP 主机名 备注 ...nagios ...监控主机部署Nagios ...[root@nagios ~]# yum install -y ...2.获取Nagios以及相关插件包(这里已下载好,放在/usr/loca
  • Nagios简介  Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在...
  • Nagios可运行在Linux和Unix平台上,同时提供一个可选的基于浏览器的Web界面,方便系统管理员查看系统的运行状态、网络状态、各种系统问题及日志异常等。 环境: 192.168.0.201 mysql主机 rhel6.4  192.186.0.202...
  • nagios插件 各种nagios插件 check_zones检查是否所有的Solaris / SmartOS区域都在运行(基于Aldo Fabi脚本) check_sl500.sh使用SNMP检查(Sun / Oracle)Staoragetek SL500磁带库的各种参数 check_expire比较主DNS...
  • Nagios Core是免费的开源监控工具或软件,可以监控服务器,网络设备(如防火墙,网络交换机和打印机等)等资源.Nagios核心还提供警报服务,nagios使用该服务向管理员通知已发生的问题然后触发问题解决后再次发出警报...
  • nagios-plugin-elasticsearch Nagios NRPE和“常规”检查,用于检查Elasticsearch集群和节点状态 依存关系 CPAN模块 Debian / Ubuntu软件包 JSON libjson-perl Monitoring::Plugin / Nagios::Plugin ...
  • nagios-plugins-linux:适用于Linux的Nagios插件
  • 所有 CentOS 软件包仍然可用,这样您就可以在为您安装和配置 Nagios 工具的同时保留 CentOS 的所有优势。 FAN 提供的工具:Linux、MySQL、NagiosNagios Plugins、NagVis、Centreon、Net-SNMP 和 NDOUtils...
  • nagios服务端 192.168.88.32 client nagios客户端 环境说明:firewalld关闭,selinux关闭。 软件版本: nagios版本:4.4.3 nagios-plugins版本:2.2.1 nrpe版本:3.2.1 安装nagios-server服务端 安装所需依赖包...
  • 纳吉奥斯 用于Docker的Nagios和NRPE配置文件sudo docker build -t nrpe-plugins。 sudo docker运行-d -p 5667:5667 nrpe-plugins

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,656
精华内容 15,862
关键字:

Nagios