Nagios检查命令参数间加空格/制表符/换行报错的解决方法
Nagios check_command 多行配置实现方法
问题原因
Nagios 原生配置解析器默认将换行符识别为单个配置项的终止标记,直接把check_command拆分为多行编写时,解析器会将第一行之后的内容判定为无效配置,触发配置校验失败、运行报错。
可行配置方案
方案1:使用反斜杠作为行续接符(原生无依赖,推荐)
Nagios 配置解析器原生支持反斜杠\作为行续接标记,只要保证反斜杠是当前行的最后一个字符(反斜杠后不能有空格、制表符等任何多余字符),解析器就会自动将后续续接行的内容拼接为完整的一行指令处理。
续接行的开头可以随意添加空格、制表符做缩进优化可读性,不会影响最终命令执行。
配置示例:
# 原单行配置 # check_command check_http!-H example.com -p 443 -S -u /api/health -s "service_status:ok" -t 15 -w 5 -c 10 # 多行拆分配置 check_command check_http!-H example.com -p 443 -S \ -u /api/health \ -s "service_status:ok" \ -t 15 \ -w 5 \ -c 10
方案2:提前封装长命令减少单行长度
如果觉得逐行加反斜杠繁琐,可以提前在commands.cfg中把通用检查参数封装为自定义命令,服务配置中仅传入差异化参数,从根源上缩短check_command的单行长度。
配置示例:
- 先在命令定义文件中封装通用HTTPS健康检查命令
define command { command_name check_https_health command_line $USER1$/check_http -H $HOSTADDRESS$ -p 443 -S -u $ARG1$ -s $ARG2$ -t 15 }
- 服务配置中仅需传入少量差异化参数,无需拆行也有很好的可读性
check_command check_https_health!/api/health!"service_status:ok"
方案3:借助模板继承抽离公共配置
对于多服务复用的检查参数,可以将check_command配置抽到公共服务模板中,具体服务实例仅覆写需要调整的参数,既减少重复配置,也避免单行配置过长。
校验注意事项
所有配置修改完成后,必须先执行配置校验命令确认无错误,再重载Nagios服务,避免配置错误导致监控中断:
nagios -v /etc/nagios/nagios.cfg # 校验输出显示Total Errors: 0时,再执行重载操作 systemctl reload nagios
内容的提问来源于stack exchange,提问作者unknownexplorer
相关产品推荐
相关产品推荐

