拓冰建站拓冰建站
首页 / 资讯中心 / 正文

nagios-api运维实战:schedule_downtime、通知开关与检查控制API全解

nagios-api运维实战schedule_downtime、通知开关与检查控制API全解【免费下载链接】nagios-apiA REST-like, JSON interface to Nagios项目地址: https://gitcode.com/gh_mirrors/na/nagios-apinagios-api是一个为 Nagios 提供 REST-like JSON 接口的轻量服务让你用一行 HTTP 请求就能完成运维中最常见的三类操作预定维护窗口schedule_downtime、开关告警通知enable/disable_notifications以及控制主动检查enable/disable_checks、schedule_check。本文将带你快速上手这套 Nagios REST API从启动服务到实战场景全覆盖。一、nagios-api 是什么30秒理解它的价值传统操作 Nagios 需要登录服务器写外部命令文件或者在 Web 界面上点来点去。nagios-api把这一切变成了标准的 JSON 接口能力传统方式使用 nagios-api 之后预定维护窗口手写外部命令文件POST 一次请求返回scheduled关闭某台主机告警登录 Web 界面逐个点击一条 curl 搞定可脚本化批量操作几乎不可能services_too/ 主机组级 API 一键批量集成 ITSM / 工单系统需要中间件直接调用 HTTP 接口 核心思路nagios-api 跑在 Nagios 所在主机上读取 Nagios 的状态文件获取实时状态并通过外部命令文件把操作指令写回 Nagios。你只需要对接一个 HTTP 端口。服务默认监听6315端口启动参数-p可改完整参数说明见 README.md。二、启动前必知三个关键文件路径启动命令形如nagios-api -p 8080 -c /var/lib/nagios3/rw/nagios.cmd \ -s /var/cache/nagios3/status.dat -l /var/log/nagios3/nagios.log参数作用不配置会怎样-s状态文件唯一必配项nagios-api 从这里读取全量状态无法启动-c命令文件写入外部命令所有写操作都依赖它查询可用但schedule_downtime等写接口全部报External commands not enabled-l日志文件可选支持log接口订阅最近日志日志相关接口不可用⚠️新手最大的坑只配了-s没配-c调用任何 POST 接口都会收到External commands not enabled on nagios-api错误。排查时先检查启动参数。核心逻辑位于服务端脚本nagios-api中的http_handler函数请求分发表状态解析模型在nagios/core.py中实现。三、schedule_downtime 维护窗口 API 全解3.1 单主机 / 单服务维护窗口接口POST /schedule_downtime这是最常用的高频接口——计划内变更前提前静默避免告警风暴。curl -d {host: web01, duration: 600} \ -H Content-Type: application/json \ http://localhost:8080/schedule_downtime参数说明host和duration必填单位为秒参数必填说明host✅要静默的主机名duration✅维护窗口时长秒立即开始到期自动恢复service❌指定则只静默该服务不填则静默主机本身services_too❌为true时连同该主机上所有服务一起静默author/comment❌署名和备注方便在 UI 中追溯谁在什么时间静默了什么实现细节见nagios-api脚本中的http_schedule_downtime函数它会把请求翻译成 Nagios 的SCHEDULE_HOST_DOWNTIME/SCHEDULE_SVC_DOWNTIME外部命令写入命令文件。 实操建议duration宁长勿短。比如 30 分钟的数据库变更建议设duration: 180030分钟甚至更宽裕到期自动恢复比忘了手动打开安全得多。3.2 主机组级批量维护schedule_hostgroup_downtime整个机房割接、整批网关机升级用POST /schedule_hostgroup_downtime只需把host换成hostgroupcurl -d {hostgroup: dmz-servers, duration: 3600, services_too: true} \ -H Content-Type: application/json \ http://localhost:8080/schedule_hostgroup_downtimeservices_too: true会为组内所有主机及其全部服务批量预定窗口一条请求顶几百次点击。3.3 取消维护窗口cancel_downtime维护提前结束或下错单两种取消姿势POST /cancel_downtime按 ID 精确取消POST /cancel_downtime/15直接取消downtime_id为 15 的窗口按主机/服务取消{host: web01, services_too: true}取消该主机及相关服务的窗口。取消前可先GET /state查看每个对象挂载的downtimes列表含downtime_id、起止时间、作者确认后再动手。四、通知开关 APIdisable_notifications / enable_notifications4.1 什么时候关通知变更窗口里主机状态抖动、告警风暴需要临时压住——这就是POST /disable_notifications和POST /enable_notifications的用武之地curl -d {host: db01, services_too: true} \ -H Content-Type: application/json \ http://localhost:8080/disable_notifications两个接口参数完全对称host必填service可选services_too可选联动该主机全部服务。源码中http_disable_notifications会自动选择下发DISABLE_HOST_NOTIFICATIONS或DISABLE_SVC_NOTIFICATIONS命令。4.2 ⚠️ 官方忠告优先用 downtime 而不是关通知官方文档特别强调关闭通知是个开关陷阱——人总会忘记打开它。与schedule_downtime自带到期自动恢复不同disable_notifications会一直静默到你手动恢复。对比项disable_notificationsschedule_downtime自动恢复❌ 需手动重新开启✅ 到期自动恢复适用场景临时排查、紧急静默计划内变更、例行维护遗留风险高容易忘开低 记住这个优先级能排窗口就排窗口实在来不及再关通知关完立刻设个提醒恢复。五、检查控制 APIdisable_checks / enable_checks / schedule_check通知解决的是别打扰我检查控制解决的是别浪费资源/别误判。5.1 暂停与恢复主动检查POST /disable_checks与POST /enable_checks参数同通知接口host/service/services_too。典型场景性能压测期间停止对目标主机的主动检查避免检查器干扰测试结果网络抖动导致大量误报时临时停检事后恢复。5.2 立即触发一次检查schedule_check改了配置想马上验证不用等下一个检查周期POST /schedule_check可以指定时间check_timeUnix 时间戳默认现在执行一次检查参数说明forced设为true强制立即执行默认走 Nagios 常规资格判断可能不执行all_services设为true时对该主机所有服务排一次检查对应源码逻辑在http_schedule_check中forced: 1时下发SCHEDULE_FORCED_SVC_CHECK否则下发SCHEDULE_SVC_CHECK。 配合submit_result接口你还可以提交被动检查结果status取值主机 0OK/1DOWN/2UNREACHABLE服务 0OK/1WARNING/2CRITICAL/3UNKNOWN构建 Nagios 被动监控链路。六、响应格式统一约定学会看 success 字段无论调用哪个接口响应都是同一个 JSON 结构{result: true, content: scheduled}result布尔值一眼判断成功与否脚本里直接判断它即可content具体内容可能是字符串如scheduled、disabled、对象如state返回的全量状态或错误消息。读接口GET速览/state全量状态、/objects主机服务清单、/host/主机名单主机详情、/problems仅问题视图、/status程序级状态、/log最近1000条日志。七、偷懒神器nagios-cli 命令行速查项目自带 CLI 客户端nagios-cli比手敲 curl 更顺手内置帮助nagios-cli -h场景命令查看主机/服务nagios-cli hosts/nagios-cli services host排维护窗口nagios-cli schedule-downtime host [service] duration [-a作者] [-c备注]取消维护窗口nagios-cli cancel-downtime host [service] [-r]关/开通知nagios-cli disable-notifications host [service] [-r]关/开检查nagios-cli disable-checks host [service] [-r]确认问题nagios-cli acknowledge-problem host [service] -c原因其中-r/--recursive等价于 API 里的services_too时长参数支持2h、50m这类人性化写法自动换算为秒。八、高频 API 端点速查表接口方法一句话说明/stateGET拉取全量实时状态主机、服务、窗口、评论/objectsGET拉取主机→服务映射清单/schedule_downtimePOST预定主机/服务维护窗口/schedule_hostgroup_downtimePOST主机组级批量维护窗口/cancel_downtimePOST按 ID 或主机/服务取消窗口/disable_notifications/enable_notificationsPOST关/开告警通知/disable_checks/enable_checksPOST关/开主动检查/schedule_checkPOST指定时间可强制触发检查/submit_resultPOST提交被动检查结果/acknowledge_problemPOST确认问题抑制后续告警/add_comment/delete_commentPOST增删主机/服务评论/restart_nagiosGET重启 Nagios 服务九、实战避坑清单写操作全部报 External commands not enabled→ 启动时漏配-c命令文件路径或该文件不存在状态数据为空/过期→ 检查-s指向的status.dat是否就是 Nagios 正在写的那个文件误传 state retention 文件会直接报错退出静默了却还在告警→ 确认静默的是主机还是服务只填host不会静默服务告警需要加services_too: trueresult: true但行为没生效→ nagios-api 只是把命令写入命令文件需等 Nagios 主循环消费通常 1 秒内Docker 部署→ 参考项目自带Dockerfile把status.dat、nagios.log、nagios.cmd三个文件映射进容器即可。十、写在最后nagios-api 用不到一千行代码就把 Nagios 日常运维最繁琐的三类操作——排窗口、管通知、控检查——变成了幂等、可脚本化、可集成的 JSON 接口。配合nagios-cli手工操作、配合 curl/脚本实现自动化它足够撑起一套完整的运维动作层。建议动手顺序先GET /state摸清数据格式 → 再用nagios-cli schedule-downtime练手 → 最后把变更流程里的静默动作写进发布脚本。三步之后你的告警系统就真正可编程了。【免费下载链接】nagios-apiA REST-like, JSON interface to Nagios项目地址: https://gitcode.com/gh_mirrors/na/nagios-api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门