该文档只针对于配置 打乱了commands.cfg templates.cfg contacts.cfg localhost.cfg timeperiods.cfg resource.cfg 讲解
在讲配置之前最重要的一个命令:
nagios目录/bin/nagios -v nagios.cfg (这是调试是否配置有错的命令参数 -v 很有用)
步入正题:
笔者认为了解nagios先得了解工作的逻辑:
nagios程序调用监控顺序:
首先读取第一个配置文件 nagios.cfg 根据配置的 cfg_file cfg_dir 指定的目录或者文件读取地址
不管是目录 还是 文件 都应该读取的东西
1.命令
2.联系人(组)
3.时间
4.执行监控的主要入口
也许你会问为什么不列出 ”1.commands.cfg 命令配置文档 “ 这样的目录 原因是我根据网上这样说的 压根没理解说的什么。。
有了上边4样东西 nagios 就可以运行了
相互调用关系:
在讲相互调用关系之前应该先了解的是 执行监控的主要入口
nagios的监控 是基于 主机 和服务的 先有主机 后有服务 这点很重要 缺一不可
主机有对与主机的监控(ping) 服务有对于服务的监控(disk)
在往下延伸
先说主机:
nagios 需要先使用 define host{}定义主机 包含的内容 为了便于理解将分3个部分讲:
一、部分主机配置:
hostname 主机名 ;定义监控的主机名
alias 别名 ;定义别名
address ip ;定义监控主机的IP地址
二、执行命令:
check_command 监控命令 ;本文第一次调用命令 配置对主机的监控命令 (1.命令 也就是 commands.cfg)
check_period 时间段名字 ;本文第一次调用时间 监控实施的时间段 (3.时间 也就是timeperiods.cfg)
check_interval 数字 ;检查完毕下一次多久检查
max_check_attempts 数字 ;定义命令检查失败了 重试次数
retry_interval 数字 : 重试命令间隔时间
三、报警通知:
notification_options d,u,r ;当主机出现d—当机(down),u—返回不可达(unreachable),
,r—从异常情况恢复正常,在这3种情况下通知联系人 (通知还有两个属性 f,s )
contact_groups 联系人组名 ;本文第一次调用联系人(组) 配置通知联系人组 (2.联系人(组) 也就是contacts.cfg)
notification_interval 时间单位分钟 ; 每个多少分钟重发通知
notification_period 时间段名字 ;本文第二次调用时间 发送通知的时间段 (3.时间 也就是timeperiods.cfg)
通过三部分 大致可以对主机的监控解读:
1.配置主机
2.配置监控命令
3.通过配置的监控命令 调用commands.cfg 去执行监控命令
->并根据配置的时间段名字 调用timeperiods.cfg时间段配置 规定监控命令执行时间
4.如果触发 d,u,r 则启动报警装置
->根据时间段名字 调用timeperiods.cfg时间段配置 规定报警执行时间
->根据联系人组名 调用contacts.cfg文件配置 对联系人组下的 联系人发起通知报警(后边会详细解说)
再说服务:
nagios把所有对服务的监控定义在define service{}里 也分为三部分讲:
一、部分主机配置:
host_name 主机名 ;设置主机名 应 与 主机监控名字对应 因为服务是与主机相对应的 而且服务并未指定地址
service_description 描述 ;标签的意思比如这是监控磁盘的 就定义为disk 等等。。
二、执行命令:
check_command 监控命令 ;本文第二次调用命令 配置对主机服务的监控命令 (1.命令 也就是 commands.cfg)
check_period 时间段名字 ;本文第三次调用时间 监控实施的时间段 (3.时间 也就是timeperiods.cfg)
normal_check_interval 数字 ;检查完毕下一次多久检查
max_check_attempts 数字 ;定义命令检查失败了 重试次数
retry_check_interval 数字 : 重试命令间隔时间
三、报警通知:
notification_options w,u,c,r ;当主机出现w—警告(warning),u—返回不可达(unreachable),c-特别严重(critical)
,r—从异常情况恢复正常,在这3种情况下通知联系人 (通知还有两个属性 f,s )
contact_groups 联系人组名 ;本文第二次调用联系人(组) 配置通知联系人组 (2.联系人(组) 也就是contacts.cfg)
notification_interval 时间单位分钟 ; 每个多少分钟重发通知
notification_period 时间段名字 ;本文第四次调用时间 发送通知的时间段 (3.时间 也就是timeperiods.cfg)
如果说之前的主机配置你明白了 我想服务配置也不难理解了:
1.配置主机 (与主机配置相同)
2.配置监控命令
3.通过配置的监控命令 调用commands.cfg 去执行监控命令
->并根据配置的时间段名字 调用timeperiods.cfg时间段配置 规定监控命令执行时间
4.如果触发 w,u,c,r 则启动报警装置
->根据时间段名字 调用timeperiods.cfg时间段配置 规定报警执行时间
->根据联系人组名 调用contacts.cfg文件配置 对联系人组下的 联系人发起通知报警(后边会详细解说)
根据以上调用 如果将以上的配置 配置为localhost.cfg (ps 实际上以上内容分为2个文件在完成 这也是困扰我理解的地方 templates.cfg+localhost.cfg
组合才构建了以上的内容 在最后讲解)
那么我们还需要commands.cfg timeperiods.cfg contacts.cfg 即可将监控跑起来了
这里我们先讲最简单的 timeperiods.cfg 也是调用最多的:
对于时间段 nagios 使用define timeperiod{}:
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
因为该文件的简单 至使我觉得没大必要将 以上内容就是每天的意思 24*7 一周24小时嘛 然后是别名 周日-周六配置 而这个也是我们用得最多的
下一个将联系人和组 也就是 contacts.cfg 文件 该文件定义了 联系人 和组 分2部分讲解:
一、联系人
联系人 nagios 是以 defind contact{}定义的:
contact_name 联系人名 //配置联系人名字
alias 别名 //配置别名
service_notification_commands notify- service -by-email(执行命令) //这是第三次调用命令 (1.命令 也就是 commands.cfg)
实际上就是根据email 的目的地 使用 mail 命令 发送邮件这里就不多说了
service_notification_options w,u,c,r //这里简写了 对于警告,未知错误,严重以及恢复 才会发送邮件
service_notification_period 24x7 //第五次调用时间 在该时间段 才会调用发邮件的命令 (3.时间 也就是timeperiods.cfg)
host_notification_commands notify- host--by-email(执行命令) //这是第四次调用命令 (1.命令 也就是 commands.cfg)
host_notification_options d,u,r //对于主机的宕机 未知 恢复 才会发邮件
host_notification_period 24x7 //第六次调用时间 在该时间段 才会调发邮件的命令 (3.时间 也就是timeperiods.cfg)
email yahoon@test.com //发送邮件的目的地址
(ps 要使得发邮件 需要配置sendmail 服务 后边命令会讲到)
二、组
联系组 nagios 是以 defind contactgroup{}定义的:
define contactgroup{
hostgroup_name 联系人组名 //联系人组名称 这里的组名 和上边的主机监控 和 服务监控相对应
alias 别名 //别名
members 联系人 //这里可以添加多个联系人 以,号隔开 必须是上面联系人中定义的
}
联系人和组部分涉及的内容也不是很多 大致可以这样理解:
通过第一次调用的联系人组 然后访问同联系人组名的 hostgroup 然后根据members 设置的联系人 调用 与 同联系人名的 contact
然后根据配置的警报机制 发送警报
有了之上的了解 这里我简要介绍下报警工作流程:
先说说主机:
首先通过define host{} 根据配置的主机名信息 进行执行命令检查 如果检查失败 将会重试检查 如果重试失败 将根据报警通知的内容 第一次过滤哪些情况 通知 联系组
之后通过联系组配置defind contactgroup{} 配置的联系人 调用用联系人配置defind contact{} 然后进行第二次过滤 过滤哪些情况调用发邮件命令
不知道 到现在思路清晰了没有?
如果清晰了 那么请接着往下看:
大致流程都讲解了 唯一还未涉及的 还有命令 也就是commands.cfg配置的内容:
命令 算nagios 的重点内容了 不熟悉传递参数 语法 也将得不到我们想要的效果
首先我们了解 大致的 commands.cfg 语法他的定义都是使用 define command{}定义的
define command{
command_name 命令命名 //这里的名称 和之前调用 使用的名称相对应 主要用于命令调用
command_line 执行命令 //这里则是调用真正的linux 命令 或者说调用 nagios 内置插件命令
}
定义很简单 我觉得 更应该说的是 command_line 的执行命令:
首先我们来看下发邮件:
命令代码如下:
主机:/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
服务:/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
我认为我们应该先了解他的变量主机监控相关变量: %b $NOTIFICATIONTYPE$ $HOSTNAME$ $HOSTSTATE$ $HOSTADDRESS$ $HOSTOUTPUT$ $LONGDATETIME$ $CONTACTEMAIL$
服务监控相关变量:%b $$NOTIFICATIONTYPE$ $SERVICEDESC$ $HOSTALIAS$ $HOSTADDRESS$ $SERVICESTATE$ $LONGDATETIME$ $SERVICEOUTPUT$ $CONTACTEMAIL$
主机:
%b 为printf的参数 不过我也不是很理解 为什么这里要%b 其实不要 一样可以解析参数 不纠结。。
$NOTIFICATIONTYPE$ 表示通知的类型(如主机的 d,u,r 的全称等)
$HOSTNAME$是该监控项所属主机,即定义服务或者主机监控定义的 主机名称 host_name 的值
$HOSTSTATE$ 该主机 的状态
$HOSTADDRESS$ 主机地址
$HOSTOUTPUT$ 主机信息报错输出内容
$LONGDATETIME$ 当前时间信息
$CONTACTEMAIL$ 为配置联系人 设置的 email 地址
服务:
$NOTIFICATIONTYPE$ 表示通知的类型(服务的 w,c,r,u,r 的全称等)
$SERVICEDESC$ 服务描述
$HOSTALIAS$ 主机名
$HOSTADDRESS$ 主机地址 为主机监控的配置的address地址
$SERVICESTATE$ 服务状态
$LONGDATETIME$ 当前时间信息
$SERVICEOUTPUT$ 服务信息报错输出内容
$CONTACTEMAIL$ 为配置联系人 设置的 email 地址
这里要说一下 如果我简写 命令则为:
printf %b" "内容" | mail -s "标签" 邮件地址
实际上是调用了linux 系统 mail 命令 所以应该配置好linux 上的mail命令
yum install mail
配置 /etc/mail.rc :
set from=发送邮件地址
set smtp=smtp服务器地址
set smtp-auth-user=发送邮件地址
set smtp-auth-password=邮件密码
set smtp-auth=login
即可 可以使用 printf %b" "内容" | mail -s "标签" 邮件地址 测试
然后我们说说常规的一些命令:
[root@postgres-master libexec]# ./check_disk -w 10% -c 5% -p /
DISK OK - free space: / 4050 MB (15% inode=89%);| /=22327MB;25010;26399;0;27789
[root@postgres-master libexec]# ./check_disk -w 10% -c 50% -p /
DISK CRITICAL - free space: / 4050 MB (15% inode=89%);| /=22327MB;25010;13894;0;27789
[root@postgres-master libexec]# ./check_disk -w 50% -c 50% -p /
DISK CRITICAL - free space: / 4050 MB (15% inode=89%);| /=22327MB;13894;13894;0;27789
[root@postgres-master libexec]# ./check_disk -w 50% -c 50% -p / |awk '{print $2}'
CRITICAL
这是我做的check_disk 的实验 -w 为警告 -c 为严重
他的状态 很可能是提取 反馈信息中的第二项值来判断是否报警 我们先姑且这么认为(笔者也学习不久)
那么在nagios 怎么实现的呢?
nagios 以! 做为分隔符传递参数 我们来看看这个例子:
define service{
check_command check_local_disk!10%!10%!/boot //调用 名字为 check_local_disk 的命令 传递 3个参数
}
define command{
command_name check_local_disk //被调用的命令名字
command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ //需要传递三个参数 $ARG1$ 为第一个参数 为10% $ARG2$ 为10% $ARG3$为/boot
}
$USER1$ 这一个参数 是在 resource.cfg 文件配置的:
$USER1$=/usr/local/nagios/libexec
这里其实也可以直接使用:
command_line /usr/local/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
(resource.cfg 在nagios.cfg里边配置resource_file=/usr/local/nagios/etc/resource.cfg 主要是做环境变量用的)
这样就完成了一个 执行 本地check_disk命令 懂了这个 其实也迎刃而解了 我来看看负载:
[root@postgres-master libexec]# ./check_load
check_load: Could not parse arguments
Usage:
check_load [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15
[root@postgres-master libexec]#
相对应的为 1分钟 10分钟 15分钟 平均负载量
-w 为警告 -c 为严重
如果我们写 大概应该这样:
define service{
check_command load!3,2,1!9,8,7
}
define command{
command_name load //被调用的命令名字
command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$
}
到这里 我想你应该明白了许多 其实一开始 困扰我的 是 use 这一个参数 如果你也觉得use困扰不妨往下看以下 内容将引用上templates.cfg :
模板 这个内容相当的绕 致使笔者了解了很久才 明白 nagios 配置到底怎么回事:
语法 是什么类模块 就用什么类的定义:
比如我要定义 服务类的模块 该模块做一件事情 调用 模块名 只定义检查 和 报警 :
define service{
name 定义模块名
一、执行命令:
check_command 监控命令
check_period 时间段名字
normal_check_interval 数字
max_check_attempts 数字
retry_check_interval 数字
二、报警通知:
notification_options w,u,c,r
contact_groups 联系人组名
notification_interval 时间单位分钟
notification_period 时间段名字
}
然后我要定义 192.168.1.100 和192.168.2.200 都要执行这个 模块 ():
192.168.1.100.cfg :
define host{
host_name 192.168.1.100
use 192.168.1.100
alias 192.168.1.100
address 192.168.1.100
}
define service{
host_name 192.168.1.100
use 定义的模块名
}
192.168.2.200.cfg :
define host{
host_name 192.168.2.200
use 192.168.2.200
alias 192.168.2.200
address 192.168.2.200
}
define service{
host_name 192.168.2.200
use 定义的模块名
}
如果这个模块 是定义的 执行 nrpe 的命令检测磁盘 就可以做成一个模板 放在templates.cfg 调用即可 当然我们也可以做时间的 联系人的主机的
如果你看到这儿 我想你在去看commands.cfg templates.cfg contacts.cfg localhost.cfg timeperiods.cfg resource.cfg这五个文件将迎刃而解
转载于:https://blog.51cto.com/qidai/1660777