Icinga 2 API 与调试控制台

作者:API传播员 · 2025-11-13 · 阅读时间:3分钟

您是否曾遇到过配置问题,例如通知未按预期发送,或者规则未正确匹配所有目标对象?这可能是由于自定义变量设置不当引起的。Icinga 2 提供了多种工具来帮助解决这些问题。本文将向您介绍如何使用 Icinga 2 的调试控制台,通过交互式方式分析和解决问题。


先决条件

Icinga 2 调试控制台允许您实时访问整个监控基础设施,因此需要特别注意权限管理。以下是使用调试控制台的基本要求:

  1. 授权 API 用户:确保您有权限访问调试控制台。
  2. Icinga 2 DSL 基础:熟悉 Icinga 2 的领域特定语言(DSL),以便高效排查问题。
  3. 启动控制台:使用 connect 参数启动调试控制台。建议通过 shell 环境指定 API 凭据,而不是直接在 URL 中暴露它们。
  4. 沙盒模式:如果您不希望意外修改 Icinga 2 的运行状态,可以在启动时添加 --sandboxed 参数。

通过以上准备,您可以在不影响生产环境的情况下安全地排查问题。


服务处于挂起状态?

在使用 Icinga 2 时,您可能会遇到某些服务处于挂起状态的问题。这种情况可能发生在单节点或高可用(HA)设置中,原因可能包括主机间同步问题或 IDO 数据库性能不足等。以下是使用调试控制台排查此类问题的步骤:

检查服务状态

首先,检查 Icinga 2 是否对目标服务执行了检查:

 => var s = get_service("example-1", "realtime-load")
null
 => s.last_check_result
null
 => s.last_check
-1.000000

从上述结果可以看出,服务 realtime-load 从未被检查过。通常,这种情况可能是因为检查器未启用,或者服务位于不同的区域。

确认服务区域

通过查询服务的区域属性,可以进一步分析问题:

 => s.zone
"agent"

在此示例中,服务位于 agent 区域。接下来,我们可以检查日志,了解为什么代理未执行检查或未连接到端点:

 => var endpoint = get_object(Endpoint, "agent")
null
 => endpoint.connected
false

结果显示,端点未连接。这表明问题可能出在网络连接或配置上。


检查逾期任务

为了确定当前有多少主机或服务的检查任务已过期,可以使用以下命令:

 => var hosts = get_objects(Host).filter(h => h.last_check  h.name)
null
 => hosts.len()
277.000000
 => hosts
[ "example-248", "example-373", "example-74", "example-148", ... ]

上述命令会筛选出所有检查时间超过配置的检查间隔(check_interval)两倍的主机,并将这些主机的名称存储在 hosts 变量中。

按区域筛选

如果需要进一步筛选特定区域中的主机,可以添加区域过滤条件:

 => var hosts = get_objects(Host).filter(h => h.last_check  h.name)
null
 => hosts.len()
277.000000

在此示例中,所有逾期的主机都位于 satellite 区域。


总结

本文通过几个简单的示例,展示了如何使用 Icinga 2 调试控制台排查常见问题。调试控制台是一个功能强大的工具,熟练掌握它可以帮助您快速定位问题并节省大量时间。建议您在实际环境中多加练习,以便在需要时能够熟练使用。

原文链接: https://icinga.com/blog/icinga2-api-and-debug-console/