MyException - 我的异常网
当前位置:我的异常网» 操作系统 » 基于nagios的监控环境(5):用Ndoutils将监控信息

基于nagios的监控环境(5):用Ndoutils将监控信息存库

www.MyException.Cn  网友分享于:2015-02-04  浏览:0次
基于nagios的监控环境(五):用Ndoutils将监控信息存库

一、安装步骤

1、Ndoutils安装

Monitoring
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#【NDOUtils安装】
cd /home/taolei/copy/pkg/
tar zxvf ndoutils-2.0.0.tar.gz
cd ndoutils-2.0.0
 
#
# 做好MySQL库文件lib和include文件的连接(这点很重要)。
#这里要说明以下mysql的库文件路径,由于不同的安装方式,mysql的安装路径也不相同,
且需要安装mysql-devel,c才会有库文件
yum install mysql-devel
#这里要注意mysql的include文件夹路径,根据不同的方式安装可能不同
ln -sf /var/lib/mysql/include/* /usr/include/
mkdir /usr/include/mysql
ln -sf /var/lib/mysql/include/* /usr/include/mysql/
ln -sf /var/lib/mysql/lib/* /usr/lib/
mkdir /usr/lib/mysql
ln -sf /var/lib/mysql/lib/* /usr/lib/mysql
 
./configure LDFLAGS=-L/opt/mysql/lib
# 执行完成后,注意向上看看打印出的信息,看看是否找到了MySQL的库文件和include文件。
make
cd src/
 
#
# 我的Nagios是4.0.8,所以拷贝的是ndomod-4x.o、ndo2db-4x,
如果你的是2.X.x请拷贝ndomod-2x.o、ndo2db-2x
cp ndomod-4x.o ndo2db-4x log2ndo file2sock /usr/local/nagios/bin
cd ../db
# 创建数据库nagios,使用root用户,密码是root
mysqladmin -u root -proot create nagios
./installdb -u root -p root -d nagios  -h localhost
# 拷贝配置文件
cd ../config
cp ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
cp ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg
 
#复制后的文件可能并没有执行权限(如果以root用户安装的话,文件是属于root的,
而nagios没有执行权限),为了让ndoutil能够通过该文件将监控信息存库,需要修改文件属主和权限
chown nagios:nagcmd /usr/local/nagios/etc/ndo2db.cfg
chown nagios:nagcmd /usr/local/nagios/etc/ndomod.cfg
chmod 744 /usr/local/nagios/etc/ndo2db.cfg
chmod 744 /usr/local/nagios/etc/ndomod.cfg
# 修改/usr/local/nagios/etc/ndo2db.cfg文件的数据库信息。
#db_user=root   db_pass=root  分别改为数据库的用户名和密码
#db_name=nagios 默认为nagios,如果在上面创建数据库时数据库名不为nagios,
此处也需做出相应的修改
nano /usr/local/nagios/etc/ndo2db.cfg
nano /usr/local/nagios/etc/nagios.cfg
# 复制下面内容粘贴到/usr/local/nagios/etc/nagios.cfg配置文件的#broker_module=...下面。
# Uncomment the line below if you're running Nagios 4.x
broker_module=/usr/local/nagios/bin/ndomod-4x.o config_file=/usr/local/nagios/etc/ndomod.cfg
# 修改/usr/local/nagios/etc/nagios.cfg配置文件下面参数的值为-1(一般默认如此)。
#event_broker_options=-1
 
#至此,ndoutils安装完成,需要对ndoutils进行一些配置,使其将监控信息存入指定数据库,
配置方法见下方【ndoutils配置】
# 启动ndo2db(这里)
/usr/local/nagios/bin/ndo2db-4x -c /usr/local/nagios/etc/ndo2db.cfg
 
# 查看系统日志是否有错误信息:
tail -5 /var/log/messages
Nov  7 00:57:46 localhost nagios: wproc: Core Worker 18303: job 34 (pid=25076): Dormant child reaped
Nov  7 17:01:39 localhost kernel: hpet1: lost 1 rtc interrupts
Nov  7 17:01:39 localhost nagios: Warning: A system time change of 57588 seconds (0d 15h 59m 48s forwards in time) has been detected.  Compensating...
Nov  7 17:01:58 localhost nagios: wproc: Core Worker 18302: job 41 (pid=25177) timed out. Killing it
Nov  7 17:01:58 localhost nagios: wproc: Core Worker 18302: job 38322480 with pid 25177 reaped at timeout. timeouts=2; started=42

2、ndoutils配置

2.1 mysql在本地机的配置

注:由于本地机也可以看作ip为127.0.0.1的远程机器,所以,配置方式也可以参考下方远程机的配置

编辑ndo2db.cfg配置文件

nano /usr/local/nagios/etc/ndo2db.cfg

lock_file=/usr/local/nagios/var/ndo2db.lock
ndo2db_user=nagios #nagios安装时的用户
ndo2db_group=nagcmd  #nagios安装时的用户组,官方文档里的安装步骤是nagcmd,
要核对清楚否则后面会导致一些权限问题
socket_type=unix  #使用本地机数据库用unix就好
socket_name=/usr/local/nagios/var/ndo.sock  #这个可以不改,socket_type=unix时才生效
tcp_port=5668 #这个可以不改,socket_type=tcp时才生效
use_ssl=0  #这边默认就行
db_servertype=mysql #数据库类型,暂时只支持mysql,虽然还可以配置为 pgsql = PostgreSQL
但是这个部分功能暂时还不全面,不建议配置
db_host=localhost #mysql所在机器名/IP,由于是本地机数据库,所以写为localhost
db_port=3306 #mysql数据库服务端口
db_name=nagios  #mysql中的数据库名
db_prefix=nagios_  #mysql库中表明的前缀,一般是nagios 如果扩展了cacti,那前缀可能是npc_
db_user=nagios  #mysql用户名
db_pass=root #mysql密码
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
max_externalcommands_age=44640
debug_level=0
debug_verbosity=1
debug_file=/usr/local/nagios/var/ndo2db.debug
max_debug_file_size=1000000

 

编辑ndomod.cfg配置文件

nano /usr/local/nagios/etc/ndomod.cfg

instance_name=default  #这里可以自定义名称
output_type=unixsocket  #这里需要和ndo2db中的socket_type对应
output=127.0.0.1    #这里及后面的参数,入没有特殊必要,不建议修改,默认就行
tcp_port=5668  
use_ssl=0
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2

2.2 mysql在远程机的配置

编辑ndo2db.cfg配置文件

nano /usr/local/nagios/etc/ndo2db.cfg

lock_file=/usr/local/nagios/var/ndo2db.lock
ndo2db_user=nagios #nagios安装时的用户
ndo2db_group=nagcmd  ##nagios安装时的用户组,官方文档里的安装步骤是nagcmd,
要核对清楚否则后面会导致一些权限问题
socket_type=tcp   #使用远程机上的数据库这里需要改成tcp
socket_name=/usr/local/nagios/var/ndo.sock  #这个可以不改,socket_type=unix时才生效
tcp_port=5668 #这个可以不改,socket_type=tcp时才生效,一般默认5668,酌情修改
use_ssl=0  #这边默认就行
db_servertype=mysql #数据库类型,暂时只支持mysql,虽然还可以配置为 pgsql = PostgreSQL
但是这个部分功能暂时还不全面,不建议配置
db_host=localhost #mysql所在机器名/IP,我只试过远程机ip,远程机名称没试过。
db_port=3306 #mysql数据库服务端口
db_name=nagios  #mysql中的数据库名
db_prefix=nagios_  #mysql库中表明的前缀,一般是nagios 如果扩展了cacti,那前缀可能是npc_
db_user=nagios  #mysql用户名
db_pass=root #mysql密码
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
max_externalcommands_age=44640
debug_level=0
debug_verbosity=1
debug_file=/usr/local/nagios/var/ndo2db.debug
max_debug_file_size=1000000

 

编辑ndomod.cfg配置文件

nano /usr/local/nagios/etc/ndomod.cfg

instance_name=default  #这里可以自定义名称
output_type=tcpsocket  #这里需要和ndo2db中的socket_type对应
output=127.0.0.1    #虽然是将监控信息存入远程数据库,但是这里的output含义不是将信息直接存入
远程数据库,所以不要改成mysql远程机的IP
tcp_port=5668   #这里及后面的参数默认即可
use_ssl=0
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2

 

 

二、常见问题

1、不能启动服务

错误信息:Could not bind socket: Address already in use

解决方法:

1)删除 /usr/local/nagios/var/ 中的 ndo.sock

rm -rf /usr/local/nagios/var/ndo.sock

2)重启ndo服务

/usr/local/nagios/bin/ndo2db-4x -c /usr/local/nagios/etc/ndo2db.cfg

(一般删除了就没问题了,如果不行,查看端口5668,如下)

查看5668端口监听的进程信息,kill进程,步骤如下

 

[root@localhost  etc]# netstat -apn |grep 5668
tcp        0      0 0.0.0.0:5668                0.0.0.0:*                   LISTEN      1533/ndo2db        
[root@localhost etc]# kill -3 1533  #这里的1533是删除进程对应的id
[root@localhost etc]# /usr/local/nagios/bin/ndo2db-4x -c /usr/local/nagios/etc/ndo2db.cfg #再次启动ndo进程

 

 

2、不能将数据存入数据库

按上述步骤启动运行,没有错误.在存储监控信息时,数据库里没有存进数据.

错误日志1:

错误信息:Could not open data sink!..

查看系统日志,内有"Could not open data sink!..."错误提示.

系统日志如下:

tail -20 /usr/local/nagios/var/nagios.log
#.....
Nov 21 04:52:02 localhost nagios: ndomod: NDOMOD 2.0.0 (02-28-2014) Copyright (c) 2009 Nagios Core Development Team and Community Contributors
Nov 21 04:52:02 localhost nagios: ndomod: Could not open data sink! I'll keep trying, but some output may get lost...
Nov 21 04:52:02 localhost nagios: ndomod registered for contact data'
Nov 21 04:52:02 localhost nagios: ndomod registered for contact notification data'
Nov 21 04:52:02 localhost nagios: Event broker module '/usr/local/nagios/bin/ndomod-4x.o' initialized successfully.
Nov 21 04:52:02 localhost nagios: Successfully launched command file worker with pid 18576
#.....

原因是ndo2db.cfg 、ndomod.cfg 的属主和属组不正确,导致ndo2db没有读写权限

解决方法:

修改属组、属主(或直接修改文件权限)后即可解决.修改步骤如下:

cd /usr/local/nagios/etc/
ls -l
-rw-------. 1 root root 4825 Nov 21 04:51 ndo2db.cfg
-rw-------. 1 root root 5104 Nov 21 04:38 ndomod.cfg

 

#修改属组、属主(或直接修改文件权限)后即可解决

chown nagios ndomod.cfg
chown nagios ndo2db.cfg
chmod 744 ndo2db.cfg
chmod 744 ndomod.cfg

错误日志2:

系统运行一段时间后就无法继续将监控信息存入数据库,

错误信息:Still unable to connect to data sink,queue send error, retrying...

查看nagios及系统日志信息,报如下错误:
[root@localhost etc]# tail -50 /usr/local/nagios/var/nagios.log
[1416980768] ndomod: Still unable to connect to data sink. 28787 items lost, 5000 queued items to flush.
[root@localhost etc]# tail /var/log/messages
Nov 25 22:00:02 localhost ndo2db-4x: Message sent to queue.
Nov 25 22:00:02 localhost ndo2db-4x: Warning: queue send error, retrying...

解决方法:

修改内核参数文件:nano /etc/sysctl.conf将下列参数改大点,如:
kernel.msgmax = 131072000 (每个消息的最大size)
kernel.msgmnb = 131072000 (整个系统的最大数量的消息队列)
kernel.msgmni = 65536000 ((每个消息队列的最大字节限制,一个队列有多个消息)

 

错误日志3:

Error writing to data sink!  Some output may get lost.

三、数据库自动清理设置

为了防止数据库数据量过于庞大,ndo会定期对数据库进行清理(这个在配置文件中设置参数的地方有详细说明),如果在自己项目中希望长期保留数据库中的监控信息,可以对ndo配置文件中相应的参数进行修改,这里我暂且使用默认设置

编辑配置文件ndo2db.cfg:

nano /usr/local/nagios/etc/ndo2db.cfg

在TABLE TRIMMING OPTIONS下方有一些参数:

# Keep timed events for 24 hours
max_timedevents_age=1440
# Keep system commands for 1 week
max_systemcommands_age=10080
# Keep service checks for 1 week
max_servicechecks_age=10080
# Keep host checks for 1 week
max_hostchecks_age=10080
# Keep event handlers for 31 days
max_eventhandlers_age=44640
# Keep external commands for 31 days
max_externalcommands_age=44640
# Keep notifications for 31 days
max_notifications_age=44640
# Keep contactnotifications for 31 days
max_contactnotifications=44640
# Keep contactnotificationmethods for 31 days
max_contactnotificationmethods=44640
# Keep logentries for 90 days
max_logentries_age=129600
# Keep acknowledgements for 31 days
max_acknowledgements_age=44640

参数单位:秒

文章评论

中美印日四国程序员比较
中美印日四国程序员比较
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
旅行,写作,编程
旅行,写作,编程
程序员和编码员之间的区别
程序员和编码员之间的区别
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
 程序员的样子
程序员的样子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
如何成为一名黑客
如何成为一名黑客
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个调试和排错的小建议
10个调试和排错的小建议
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Java程序员必看电影
Java程序员必看电影
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
每天工作4小时的程序员
每天工作4小时的程序员
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
鲜为人知的编程真相
鲜为人知的编程真相
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员的鄙视链
程序员的鄙视链
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
老程序员的下场
老程序员的下场
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
总结2014中国互联网十大段子
总结2014中国互联网十大段子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
代码女神横空出世
代码女神横空出世
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
编程语言是女人
编程语言是女人
我是如何打败拖延症的
我是如何打败拖延症的
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
那些争议最大的编程观点
那些争议最大的编程观点
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员必看的十大电影
程序员必看的十大电影
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员应该关注的一些事儿
程序员应该关注的一些事儿
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有