问题排查和限制

编辑

问题排查和限制

编辑

告警功能提供了许多选项来诊断规则和连接器的问题。

检查 Kibana 日志

编辑

规则和连接器会分别使用 [alerting] 和 [actions] 标签记录到 Kibana 日志记录器。通常,这些消息是警告和错误。在某些情况下,错误可能是误报,例如,当连接器被删除并且规则正在运行时。

server    log   [11:39:40.389] [error][alerting][alerting][plugins][plugins] Executing Rule "5b6237b0-c6f6-11eb-b0ff-a1a0cbcf29b6" has resulted in Error: Saved object [action/fdbc8610-c6f5-11eb-b0ff-a1a0cbcf29b6] not found

某些资源(如已保存的对象和 API 密钥)可能不再可用或有效,从而产生有关这些缺失资源的错误消息。

使用调试工具

编辑

以下调试工具可用

  • Kibana 7.10 及以上版本具有 测试连接器 UI。
  • Kibana 7.11 及以上版本包括改进的 Webhook 错误消息、更好的操作和连接器的总体调试日志记录,以及任务管理器 诊断端点

使用规则和连接器列表查看当前状态并查找问题

编辑

堆栈管理中的规则列出了您当前所在空间中可用的规则。当您单击规则名称时,您将被导航到该规则的 详情页面,您可以在其中查看当前处于活动状态的告警。此页面上的开始日期指示何时触发规则以及触发了哪些告警。此外,条件持续时间表示实例处于活动状态的时长。

Alerting management details

预览索引阈值规则图表

编辑

在创建或编辑索引阈值规则时,您会看到一个图表,其中显示规则将基于的数据,从过去的某个日期到现在,每 5 秒更新一次。

Index Threshold chart

结束日期与规则的检查间隔相关。您可以使用此视图查看规则是否获取了您期望的数据,并与阈值(图表中的水平线)进行直观比较。如果图表中除了阈值线之外没有任何线条,则规则存在问题,例如,根据指定的索引和字段没有可用数据,或者存在权限错误。诊断这些问题可能很困难 - 但可能会有错误条件的日志消息。

使用 REST API

编辑

有一组丰富的 HTTP 端点可用于自省和管理规则和连接器。可用于操作的 HTTP 端点之一是运行连接器 API。您可以使用它来“测试”一个操作。例如,如果您创建了一个服务器日志操作,则可以通过 curl 该端点来运行它

curl -X POST -k \
 -H 'kbn-xsrf: foo' \
 -H 'content-type: application/json' \
 api/actions/connector/a692dc89-15b9-4a3c-9e47-9fb6872e49ce/_execute \
 -d '{"params":{"subject":"hallo","message":"hallo!","to":["[email protected]"]}}'

[预览] 此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。 此外,还有一个使用旧规则 API 的命令行客户端,它可能更容易使用,但必须针对新的 API 进行更新。用于列出、创建、编辑和删除告警(规则)和操作(连接器)的 CLI 工具可在 kbn-action 中获得,您可以按如下方式安装它

npm install -g pmuellr/kbn-action

相同的 REST POST _execute API 命令将是

kbn-action execute a692dc89-15b9-4a3c-9e47-9fb6872e49ce ‘{"params":{"subject":"hallo","message":"hallo!","to":["[email protected]"]}}’

此 HTTP 请求的结果(以及由 kbn-action 打印到 stdout 的结果)将是操作返回的数据,以及如果遇到错误时的错误消息。

查找错误横幅

编辑

堆栈管理 > 规则页面包含一个错误横幅,可帮助识别规则的错误

Rule management page with the errors banner

任务管理器诊断

编辑

在底层,告警功能使用一个名为任务管理器的插件,它处理任务的调度、运行和错误处理。这意味着告警功能中的故障情况有时会由任务管理器机制而不是规则机制显示出来。

任务管理器提供了一个可见的状态,可用于诊断问题,并且文档非常完善 运行状况监控问题排查。任务管理器使用 .kibana_task_manager 索引,这是一个内部索引,其中包含表示系统中所有任务的所有已保存的对象。

从规则到其任务

编辑

创建规则时,会创建一个任务,该任务被计划以指定的间隔运行。例如,当创建规则并配置为每 5 分钟检查一次时,则应每 5 分钟运行一次底层任务。在实践中,每次规则运行后,任务都会被安排在 5 分钟后再次运行,而不是被安排为每 5 分钟无限期地运行。

如果您使用 告警 API,例如获取规则 API 或查找规则 API,您将获得一个包含规则详情的对象

{
  "id":"ed30d1b0-7c9e-11ed-ba24-0b137d501cb7",
  "name":"cluster_health_rule",
  "consumer":"alerts",
  "enabled":true,
  ...
  "scheduled_task_id":"ed30d1b0-7c9e-11ed-ba24-0b137d501cb7",
  ...
  "next_run":"2022-12-15T17:56:55.713Z"
}

您要查找的字段是名为 scheduled_task_id 的字段,其中包括任务管理器任务的标识符。然后,您可以转到控制台并在系统索引中查找有关该任务的更多信息

GET .kibana_task_manager/_doc/task:ed30d1b0-7c9e-11ed-ba24-0b137d501cb7

例如

{
  "_index": ".kibana_task_manager_8.7.0_001",
  "_id": "task:ed30d1b0-7c9e-11ed-ba24-0b137d501cb7",
  "_version": 85,
  "_seq_no": 13009,
  "_primary_term": 3,
  "found": true,
  "_source": {
    "migrationVersion": {
      "task": "8.5.0"
    },
    "task": {
      "retryAt": null,
      "runAt": "2022-12-15T18:05:19.804Z",
      "startedAt": null,
      "params": """{"alertId":"ed30d1b0-7c9e-11ed-ba24-0b137d501cb7","spaceId":"default","consumer":"alerts"}""",
      "ownerId": null,
      "enabled": true,
      "schedule": {
        "interval": "1m"
      },
      "taskType": "alerting:monitoring_alert_cluster_health",
      "scope": [
        "alerting"
      ],
      "traceparent": "",
      "state": """{"alertTypeState":{"lastChecked":1671127459923},"alertInstances":{},"alertRecoveredInstances":{},"previousStartedAt":"2022-12-15T18:04:19.804Z"}""",
      "scheduledAt": "2022-12-15T18:04:16.824Z",
      "attempts": 0,
      "status": "idle"
    },
    "references": [],
    "updated_at": "2022-12-15T18:04:19.998Z",
    "coreMigrationVersion": "8.7.0",
    "created_at": "2022-12-15T17:35:55.204Z",
    "type": "task"
  }
}

要使规则正常工作,此任务必须处于健康状态。其运行状况信息可在 任务管理器运行状况 API 中或在启用调试日志记录时的详细日志中获得。在诊断任务的运行状况时,您最可能对以下字段感兴趣

status
这是任务的当前状态。任务管理器当前是否正在运行?任务管理器是否处于空闲状态,并且您正在等待它运行?还是任务管理器尝试运行但失败了?
runAt
这是计划任务下次运行的时间。如果此时间在过去且状态为空闲,则任务管理器已滞后或未运行。如果此时间在过去,但状态正在运行,则任务管理器已获取该任务并正在处理,这被认为是健康的。
retryAt
另一个时间字段,类似于 runAt。如果填充此字段,则任务管理器当前正在运行该任务。如果任务未完成(并且未标记为失败),则任务管理器将在 retryAt 下指定的时间再次尝试。

调查底层任务可以帮助您衡量您看到的问题是否根源于规则根本没有运行,是否正在运行但失败,或者是否正在运行但表现出的行为与预期不同(此时您应该关注规则本身,而不是任务)。

除了上述方法外,还可以参考以下方法和常见问题

临时限制所有任务

编辑

如果集群性能因过度或昂贵的规则而下降,并且 Kibana 变得缓慢或无响应,则可以通过更新其 设置 来临时减少任务管理器的负载

xpack.task_manager.capacity: 5
xpack.task_manager.poll_interval: 1h

此方法应仅作为最后手段临时使用,以在 Kibana 无响应时恢复其功能,并且尝试识别和 暂停或禁用 运行缓慢的规则没有解决问题时。它会严重限制所有后台任务,而不仅仅是与告警功能相关的任务。任务管理器一次仅运行一个任务,并将每小时查找更多工作。

限制

编辑

以下限制和已知问题适用于 Kibana 告警功能的 8.17.0 版本

告警可见性

编辑

如果您在可观测性或 Elastic Security 应用程序中创建规则,则其告警在 堆栈管理 > 规则 中不可见。您只能在创建规则的 Kibana 应用程序中查看它们。如果您使用创建规则 API,则告警的可见性与 consumer 属性相关。