×

微信扫一扫,快捷登录!

Nagios分析文档(2)

标签: 暂无标签
本帖最后由monicazhang于2015-10-3021:29编辑

20151030淡然
续上




21、清理downtime数据
22、清理注释数据
23、如果是关闭信号,清理status.dat
24、如果是关闭信号,删除cmd文件

步骤比较简单,其中比较重要的有两个,一个是13,初始化循环,另一个就是17,nagios在作为daemon运行的过程中,就是在不断的执行这个循环。
执行图如下:






(二)流程详细分析
1、初始化循环
nagios是个基于事件的监控系统,所有的操作都是由事件触发器触发的。nagios安装

nagios启动的时候,会启动一个init_timing_loop函数,来进行事件循环的初始化。
init_timing_loop主要流程如下:

(1)建立scheduling_info表,表的内容有:
总service数(在时间表外的也算)
已经在表中的service数
总host数(时间表外的也算)
在列表中的host数
单个host平均service数(总service数/总host数)
列表中单个host的service数(列表中service数/列表中host数)
平均service检查时间间隔(service检查总间隔/列表中service数)
service检查总间隔
平均service检查延时
host检查总间隔
平均host检查延时
(2)得到被调度的服务监测的一些信息,并填充相应的sche_info结构
(3)得到被调度的主机监测的一些信息,并填充相应的sche_info结构开源监控软件
(4)确定服务调度参数
Scheduling_info.service_inter_check_delay
Scheduling_info.service_interleave_factor
(5)调度服务检测
计算每一个服务下一次检测时间for()
并把服务的每一个检测事件插入到事件队列中区for()
(6)确定主机调度参数
Scheduling_info.host_inter_check_delay
(7)调度主机检测
计算每一个主机下一次检测时间for()
并把主机的每一个检测事件插入到事件队列中区for()
(8)插入其他事件(高优先级队列)
Event_list_high


2、主循环(event_execution_loop
nagios在进入守护状态以后,会一直运行一个循环event_execution_loop,nagios所有的操作全部在这个循环中得到实现。

循环会不断检查两个event队列,一个是高优先级,包括nagios的除了检查之外的所有任务,另外一个是低优先级,包括host和service的检测。循环会先检测高优先级的event队列,然后一个一个执行完毕,最后再判断下host和service的检测是不是有必要,然后再对其进行检测。在执行event队列的时候,用的函数都是一样的,名字是handle_timed_event,当每个handle_timed_event执行完以后返回,然后再执行下一个事件任务。
handle_timed_event函数的开始是个case语句,对事件进行分类处理,具体event_type如下:nagios配置
(1)event_service_check(检查service)
(2)event_host_check(检查host)
(3)event_command_check(检查cmd文件,被动监控,cgi发送的命令都会送到cmd文件中)
(4)event_log_rotation(日志滚动)
(5)event_program_shutdown(nagios关闭)
(6)event_program_restart(nagios重启)
(7)event_check_reaper(检查结果回收)
(8)event_orphan_check(检查孤儿host和service)
(9)event_retention_save(保存检查结果到retention.dat,关闭nagios不删除此文件)
(10)event_status_save(保存检查结果到status.dat,关闭nagios会删除)
(11)event_scheduled_downtime
(12)event_sfreshness_check(检查service新鲜度?)
(13)event_hfreshness_check(检查host新鲜度?)
(14)event_expire_downtime
(15)event_reschedule_checks(重新编排event列表,与上文说的初始化循环类似)监控软件
(16)event_expire_comment
(17)event_user_function



3、主动监测(event_service_checkevent_host_check
event_service_check调用了run_scheduled_service_check函数,然后再调用函数run_async_service_check。
这个函数主要完成以下任务:
(1)、首先从service结构体中得到命令行。Processed_command函数
(2)、给全局变量check_result_info赋值,其中output_file_fp为一临时文件,记录了check_result_info的一些信息
(3)、perl解释器运行脚本(如果没有定义的话就跳过)
(4)、fork()进程,在子进程中处理具体的命令(服务监测)
》popen执行命令
》继续往check_result_info中添加内容
》move_check_result_to_queue
Check_result_info记录以及输出结果生成.ok文件nagios实施
(5)、父进程等待子进程运行结束

如果在配置文件中开启了use_large_installation_tweaks选项,那么在检查的时候,会fork两次子进程,父进程并不会等待检查进程返回结果,只要fork的进程数量不超过配置文件中设置的最大进程数量(max_service_check_spread和max_host_check_spread),就不会有问题。



4、结果回收(event_check_reaper
event_check_reaper调用reap_check_results函数,读取所有检查结果,并且在循环中依次调用process_check_result_queue进行结果回收。
process_check_result_queue负责把保存在文件中的检查结果读出,并且插入check_result_list中,删除结果文件。
然后handle_async_service_check_result再对结果进行处理,这些处理包括了:更新检查结果到service_list链表,obsessive检查结果,event_broker,报警等等
handle_async_host_check_result_3x用来检查host状态,和service类似。如果在reap_check_result中时间超过max_check_reaper_time,则退出循环。max_check_reaper_time的默认值为30s,在nagios.cfg中,可以通过设置max_check_result_reaper_time来进行设置。
我们得到了两个链表:host_list和service_list,里面存储了我们所有host和service的最新的检查结果。nagios培训



5、结果输出(event_status_save
event_status_save比较简单,就是将host_list和service_list中的数据同步到status.dat中,不过是全部同步,如果检查结果很多的话,虽然不知道具体要占用多少io,但是如果对于数据在页面上的展示没有需求的,只需要检查,处理报警(或许还需要入库)的,就没必要再来这么一步了。












待续:http://www.ITILxf.com/thread-53039-1-1.html
本帖关键字:Nagios


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x




上一篇:Nagios分析文档(1)
下一篇:Nagios分析文档(3)
monicazhang

写了 2297 篇文章,拥有财富 12859,被 21 人关注

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

Powered by IT 运维管理
返回顶部