34524213 发表于 2015-12-8 08:56:44

Nagios+NCPA环境搭建


1. Nagios server

1.1 安装nagios前提条件

yum install -y wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp curl# nagios用的到的gcc编译器\http等支持软件

1.2 下载nagios core与 plugin

curl -C - -O https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.1.1.tar.gz   #下载nagios core
curl -C - -O http://nagios-plugins.org/download/nagios-plugins-2.1.1.tar.gz #下载nagios plugin

1.3 添加nagios用户和组

useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios

1.4 解压安装

tar zxvf nagios-4.1.1.tar.gz -C /tmp/
tar zxvf nagios-plugins-2.1.1.tar.gz -C /tmp/
cd /tmp/nagios-4.1.1/
./configure --with-command-group=nagcmd   #安装nagios core
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers

1.5 启动nagios,并访问nagios web

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
/etc/init.d/nagios start
/etc/init.d/httpd start
htpasswd –c /usr/local/nagios/etc/htpasswd.users nagiosadmin   #配置web访问用户名及密码,即可在浏览器访问

    NOTE: 这里直接配置完httpd验证就可以访问网页,是因为httpd.conf中本身有一条Include conf.d/*.conf
    而安装nagios会默认在你的conf.d/下(或者vhost/等其她目录下,取决于你的httpd)创建配置文件为nagios.conf,内容默认已填好.

1.6 安装nagios plugin

cd /tmp/nagios-plugins-2.1.1/
./configure --with-nagios-user=nagios --with-nagios-group=nagios #安装nagios plugin
make
make install

1.7 增加开机启动项

chkconfig --add nagios   #添加启动项
chkconfig --level 35 nagios on
chkconfig --add httpd
chkconfig --level 35 httpd on

web访问 : http://<your nagios server or ip>/nagios
2. NCPA Server

    这里先理清几个关系, 方便理解和后文阅读
    撇开Naigos不谈,NCPA插件是一个单独存在的可以单独运行的一个监控,分为两个部分:
    ① NCPA server(agent): NCPA服务端, 对所在服务器的参数实时监控,可以自定义脚本,并对外开放api.
    ② check_ncpa.py: NCPA客户端, 标准的获得服务端检查的插件.
    -----------分割-----------
    而Nagios server的作用就是:
    通过调用插件check_nrpa.py去获取被监控服务器的具体监控数据.

2.1 安装agent(被监控端)

    2.1.1 下载agent(地址)

    2.1.2 安装
    ① Windows安装
    界面只有一个需要配置项
https://assets.nagios.com/downloads/ncpa/docs/html/_images/win-install-screenshot.png

      NOTE:如果你是用来做主动代理(active agent),则安装项下边的被动代理(passive agent)项则没有必要填写,所以填写一个token点下一步,选择文件夹就安装完成了.
      标注: token是用于做一个验证,之后需要nagios core上配置这个token监控这台服务器.

    ② Linux安装

    rpm -ivh --nofiledigest ncpa-1.8.1-1.el6.x86_64.rpm#--nofiledigest:不验证文件的摘要信息

    同样你需要配置一个token:

    vim /usr/local/ncpa/etc/ncpa.cfg
    ...
   
    community_string = mytoken
    ...

    2.1.3 重启服务(Linux)

    # /etc/init.d/ncpa_listener restart #重启服务,重新加载配置文件,只有linux需要

    2.1.4 测试你的agent是否成功开启
    这里需要知道
    ① 代理的IP
    ② 安装时的token

    最后,测试浏览器访问

    https://<your agent ip>:5693 #输入你的token,如果请求失败, 请查看NCPA进程/服务是否正常,防火墙是否阻止了5693端口

2.2 配置文件(ncpa.cfg)

          # 此模块包含如何连接到这台代理的设置.
ip                  # ip代理,默认为0.0.0.0
port                # NCPA server的TCP端口
uid               # 设置运行ncpa的用户
gid               # 设置运行ncpa的用户组
pid               # 对ncpa server运行的Pid文件位置及命名的设置
logfile             # 日志文件指定位置
ssl_version         # 设置SSL协议使用HTTPS时使用,支持的选择项有SSLv2,SSLv3和TLSv1.
logmaxmbc         # (*)以MB(兆)为单位的日志文件文件切割,当文件大于设置值时,自动新建一个日志文件
logbackups          # (*)配合上一个参数使用,最大保留多少个日志文件
loglevel            # (*)被记录到日志的日志等级,有效的记录等级是: INFO, NOTICE, WARNING and ERROR.
certificate         # (*)官网标记为实验性的参数,用于指定自己的SSL证书.如果不指定,NCPA会自动生成一个证书用作https连接.
               # 控制api如何被访问,目前只有一个可操作参数
community_string    # 令牌(token)字符串,就是上下文提到的token.
# 指定插件的目录及各个脚本后缀对应的解析器位置
plugin_path         # 插件目录

这里仅列出关于主动模式的可能用到的参数,其它配置请参考官网配置文档: NCPA Configuration
3. NCPA API

3.1 在使用check_ncpa.py之前,先要了解NCPA Server展现给我们的API是什么样子的.

    3.1.1 查看整个树形结构

    https://ncpaserver:5693/api/?token=nagios#查看整个api树形结构
    --- snip ---
    {
    "value": {
      "root": {
      "process": [],
      "user": {
          "count": 1,
          "list": [
            "nscott"
          ]
      },
      "memory": {
          "swap": {
            "used": [
            8245542912,
            "b"
            ],
    --- snip ---

    3.1.2 访问树中的特定项

    https://ncpaserver:5693/api/memory?token=nagios #查看api下的memory
    <snip>
    "value": {
      "memory": {
          "swap": {
            "used": [
            8202797056,
            "b"
            ],
            "total": [
            17087578112,
            "b"
            ],
            "percent": [
            48.0,
            "%"
            ],
            "free": [
            8884781056,
            "b"
            ]
          },
          "virtual": {
            "available": [
    <snip>

    3.1.3 api树形结构内置主要的分支包含以下

    memory
    interface
    agent
    cpu
    disk
    process
    services
    具体内容各个版本可能都会不一样,请直接访问树形结构查看具体分支结构!

这些是NCPA Server提供监控服务器的基本指标,是NCPA Server程序内置的. 每一个分支包含自己的一些指标.
注意:访问磁盘时目录分割符"/"或"\"要改为"|",避免和url中分隔符冲突.

3.2 使用实例

    3.2.1 例如,我要查看Memory(内存)分支下的虚拟可用内存

    https://ncpaserver:5693/api/memory/virtual/available?token=nagios #查看虚拟可用内存
    {
      "value": {
      "available": [
          2683121664,# 可以看到可用内存为2683121664 bytes(字节)
          "b"
      ]
      }
    }

    3.2.2将检测的值作为nagios的返回结果

    https://ncpaserver:5693/api/memory/virtual/available?token=nagios&warning=1&critical=2&check=true #设置报警值(Warning)和紧急值(Critical)
    {
      "value": {
      "returncode": 2,
      "stdout": "CRITICAL: Available was 1112682496.0b|'available_0'=1112682496.0b;1;2" # 我这里设的报警值为1 bytes, 紧急值为2 bytes,所以状态为紧急(Critical)
      }
    }

3.3 以上的check\warning\critical为检查结果说明符,说明符共有以下几种:

check   # 设置为true将显示检查后的结果, 状态是报警还是紧急还是其它, 而不是仅仅只是一个原始数据
warning # 设置警报的值
critical #设置紧急的值
unit    # 修改项目单位,例如上例中显示的b要改为B,可以写unit=B(注意,这个修改并不会将值适应这个后缀,适应后缀的请看下一条)
units   # 修改项目单位,并让值适应这个单位, 例如上例中b改成MB,可以写成units=M,且值也会从byte转为MB.(注意:不影响百分比项目)
delta   # 有一些计数器,具体的是接口的计数器,它只做简单的统计通过接口的字节数.delta作用就是,例如delta=1,就会统计每一秒经过接口的字节数,同理delta=2,就是每两秒经过接口的字节数.

3.4 使用自定义的插件

https://ncpaserver:5693/api/agent/plugins #查看插件目录有哪些插件
{
"value": {
    "plugins": [
      "check_msmq.vbs",
      "test.vbs",
    ]
}
}

例,使用一个插件

https://ncpaserver:5693/api/agent/plugin/test.vbs/"First Arg"?token=nagios #使用test.vbs插件,并给这个插件一个"First Arg"参数
{
"value": {
    "returncode": 2,
    "stdout": "This worked! First Arg\n"
}
}

3.5 api 服务

https://ncpaserver:5693/api/services #查看ncpaserver的所有服务
{
    "value": {
      "services": {
            "auditd": "running",
            "netfs": "stopped",
            "sshd": "running",
            ...
      }
    }
}

仅查看单独一个服务

https://ncpaserver:5693/api/services?service=sshd
{
    "value": {
      "service": {
            "sshd": "running"#显示服务的状态
      }
    }
}

可以支持多个服务同时查看service=sshd&service=auditd

监控一个服务状态

https://ncpaserver:5693/api/service?service=sshd&status=running&check=true
{
    "value": {
      "returncode": 0,
      "stdout": "OK: Service sshd is running"
    }
}

4. NCPA Client

4.1 下载安装

    它的工作原理类似NRPE,所以我们先下载一个check_ncpa.py到我们的nagios core

curl -O -C - https://raw.githubusercontent.com/NagiosEnterprises/ncpa/master/client/check_ncpa.py
cp check_ncpa.py /usr/local/nagios/libexec/ #拷贝到nagios工作目录
cd /usr/local/nagios/libexec
chown nagios.nagios check_ncpa.py #修改属主和属组
chmod u+x check_ncpa.py #赋予执行权限

4.2 使用check_ncpa.py
在NCPA API一节通过浏览器可以获得API给出的服务器数据,这里就是通过check_ncpa.py来获得这些数据

./check_ncpa.py -H ncpaserver -t yourtoken -M cpu/percent #命令格式为此
./check_ncpa.py -H ncpaserver -t yourtoken -M cpu/percent -v #如果有未知的错误,可以使用-v调试模式

    4.2.1 指定参数的插件
    例如在服务器上,我们的插件是这么运行的:

    /path/to/ncpa/plugins/test.sh -u 'one argument' -p 'another argument'

    使用check_ncpa.py则是这样的:

    ./check_ncpa.py -H ncpaserver -t yourtoken agent/plugin/test.sh -a "-u 'one argument' -p 'another argument'" #请注意,使用-a包含了插件的参数,但一定记得将这些插件的参数使用引号包含

    那么像上边这条命令,如果以url方式显示是怎么样的呢,可以-v查看一下:

    https://ncpaserver/api/agent/plugin/test.sh/-u/one argument/-p/another argument

    如果上边的这条命令-a后边没有引号包含住插件的参数,将会是这样:

    https://ncpaserver/api/agent/plugin/test.sh/-u/one/argument/-p/another argument

    更多的详细参数:

    ./check_ncpa.py --help

5. 一些部署中问题

5.1 因为windows不会去主动去找解释器,所以我们要告诉ncpa解释器在哪
例如我要写Python脚本,需要在plugin directives模块添加一个解释器位置


...
.py = C:/python27/python $plugin_name $plugin_args
...

5.2 Linux 无法执行脚本
① 因为你在写脚本的时候,已经在首行告诉脚本的执行器在哪了,所以在NCPA一般不用配置后缀名的解释器,但是一定要写好首行的解释器...我的首行少了一个/害我检查了半天.
② NCPA的脚本也是需要执行的,所以也是需要执行权限的.这里发现很奇怪一个问题,我的NCPA的用户是nagios,用户组是nagcmd,而我的脚本属主属组都为root, 且脚本的权限改为100,它也是可以执行,这个我猜应该是NCPA执行脚本还是用的root吧.
6. 参考文献

    Nagios 官方安装文档

    NCPA 配置文档
页: [1]
查看完整版本: Nagios+NCPA环境搭建