NCPA 插件监控原理
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 �Cc /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
这里先理清几个关系, 方便理解和后文阅读
撇开Naigos不谈,NCPA插件是一个单独存在的可以单独运行的一个监控,分为两个部分:
① NCPA server(agent): NCPA服务端, 对所在服务器的参数实时监控,可以自定义脚本,并对外开放api.
② check_ncpa.py: NCPA客户端, 标准的获得服务端检查的插件.
-----------分割-----------
而Nagios server的作用就是:
通过调用插件check_nrpa.py去获取被监控服务器的具体监控数据.
2.1.1 下载agent(地址)
2.1.2 安装
① Windows安装
界面只有一个需要配置项
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 ... [api] community_string = mytoken ...
2.1.3 重启服务(Linux)
[root@xfwy bao]# /etc/init.d/ncpa_listener restart #重启服务,重新加载配置文件,只有linux需要
2.1.4 测试你的agent是否成功开启
这里需要知道
① 代理的IP
② 安装时的token
最后,测试浏览器访问
https://<your agent ip>:5693 #输入你的token,如果请求失败, 请查看NCPA进程/服务是否正常,防火墙是否阻止了5693端口
[listener] # 此模块包含如何连接到这台代理的设置. 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] # 控制api如何被访问,目前只有一个可操作参数 community_string # 令牌(token)字符串,就是上下文提到的token. [plugin directives] # 指定插件的目录及各个脚本后缀对应的解析器位置 plugin_path # 插件目录
这里仅列出关于主动模式的可能用到的参数,其它配置请参考官网配置文档: NCPA Configuration
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.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.1 因为windows不会去主动去找解释器,所以我们要告诉ncpa解释器在哪
例如我要写Python脚本,需要在plugin directives模块添加一个解释器位置
[plugin directives] ... .py = C:/python27/python $plugin_name $plugin_args ...
5.2 Linux 无法执行脚本
① 因为你在写脚本的时候,已经在首行告诉脚本的执行器在哪了,所以在NCPA一般不用配置后缀名的解释器,但是一定要写好首行的解释器...我的首行少了一个/
害我检查了半天.
② NCPA的脚本也是需要执行的,所以也是需要执行权限的.这里发现很奇怪一个问题,我的NCPA的用户是nagios,用户组是nagcmd,而我的脚本属主属组都为root, 且脚本的权限改为100,它也是可以执行,这个我猜应该是NCPA执行脚本还是用的root吧.
Nagios 官方安装文档
NCPA 配置文档