|
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/downlo ... 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安装
界面只有一个需要配置项

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)
[iyunv@xfwy bao]# /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)
[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. 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.co ... lient/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模块添加一个解释器位置
[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 配置文档
|
|