文档文档

处理计划停机期间的 Kapacitor 警报

在许多情况下,基础设施停机对于执行系统维护是必要的。如果受影响的主机受到 Kapacitor 的监控,则这种类型的停机通常是预先计划好的,但可能会触发不必要的警报。本指南将引导您完成创建 TICKscript 的过程,该脚本可以优雅地处理计划停机而不会触发警报。

Sideload

通过使用 sideload 节点从文件系统中的文件加载信息,并在数据点上设置字段和标签,从而避免在计划停机期间出现不必要的警报,这些字段和标签随后可以在警报逻辑中使用。 sideload 节点根据来自各种基于文件的源的分层数据,向点添加字段和标签。

Kapacitor 在指定的文件中搜索给定的字段或标签键。如果在加载的文件中找到字段或标签键,它将使用文件中的值在数据点上设置字段或标签。如果找不到字段或标签键,则将其设置为在 fieldtag 属性中定义的默认值。

相关的 sideload 属性

sideload 的以下属性与优雅地处理计划停机有关

source

source 指定源文件所在的目录。

order

order 指定要加载和搜索的文件以及加载和搜索的顺序。文件路径相对于 source 目录。文件应为 JSON 或 YAML。

field

field 定义 Kapacitor 应搜索的字段键,以及如果在加载的文件中找不到匹配的字段键时应使用的默认值。

tag

tag 定义 Kapacitor 应搜索的标签键,以及如果在加载的文件中找不到匹配的标签键时应使用的默认值。

设置

使用 sideload 功能,您可以创建本质上是白名单或黑名单的主机,以在计划停机期间忽略。在此示例中,假设维护将在单个主机和主机组上进行,这两者都作为标签包含在数据集中的每个点上。

在大多数情况下,这可以通过主机简单地完成,但为了说明 order 属性的工作原理,我们将同时使用主机和主机组。

Sideload 源文件

在运行 Kapacitor 的主机上,创建一个源目录,用于存放 JSON 或 YAML 文件。例如,/usr/kapacitor/scheduled-maintenance它可以是您想要的任何内容,只要 kapacitord 进程可以访问它即可)。

在此目录中,为计划停机期间将离线的每个主机或主机组创建一个文件。为了组织方便,创建 hostshostgroups 目录,并将 YAML 或 JSON 文件存储在每个目录中。每个文件的名称应与将要离线的主机的 hosthostgroup 标签的值匹配。

对于此示例,假设 host1host2host3 主机以及 cluster7cluster8 主机组将要离线。在各自的目录中为每个主机和主机组创建一个文件

/usr/
└── kapacitor/
    └── scheduled-maintenance/
        │
        ├── hosts/
        │   ├── host1.yml
        │   ├── host2.yml
        │   └── host3.yml
        │
        └── hostgroups/
            ├── cluster7.yml
            └── cluster8.yml

您只需要为将要离线的主机或主机组创建文件。

文件的内容应包含一个或多个键值对。键是将要在每个匹配点上设置的字段或标签键。值是将要在匹配点上设置的字段或标签值。

对于此示例,将 maintenance 字段设置为 true。每个源文件都将如下所示

host1.yml
maintenance: true

TICKscript

创建一个 TICKscript,该脚本使用 sideload 节点加载维护状态,无论它在哪里需要。

定义 sideload 源

source 应使用 file:// URL 协议来引用包含应加载文件的目录的绝对路径。

|sideload()
  .source('file:///usr/kapacitor/scheduled-maintenance')

定义 sideload 顺序

order 属性可以访问模板数据,该数据应用于填充加载文件的文件路径(相对于 source)。这允许 Kapacitor 根据模板中使用的标签名称动态搜索文件。

在这种情况下,使用 hosthostgroup 标签。Kapacitor 将迭代每个标签的不同值,并在源目录中搜索匹配的文件。

|sideload()
  .source('file:///usr/kapacitor/scheduled-maintenance')
  .order('hosts/{{.host}}.yml' , 'hostgroups/{{.hostgroup}}.yml')

order 属性中文件路径模板的顺序定义了检查文件路径的优先级。首先列出的文件路径(从左到右)首先被检查。

定义 sideload 字段

field 属性需要两个参数

|sideload()
  // ...
  .field('<key>', <default-value>)
key

Kapacitor 在源文件中查找的键以及它在每个数据点上定义值的字段。

default-value

如果在源文件中未找到匹配的文件和键,则使用的默认值。

在此示例中,使用 maintenance 字段并将默认值设置为 FALSE。这假设主机默认情况下不进行维护。

|sideload()
  .source('file:///usr/kapacitor/scheduled-maintenance')
  .order('hosts/{{.host}}.yml' , 'hostgroups/{{.hostgroup}}.yml')
  .field('maintenance', FALSE)

如果您希望在每个数据点上设置标签而不是字段,则可以使用 tag 属性代替 field

更新警报逻辑

现在,sideload 节点将在 TICKscript 处理的每个数据点上设置 maintenance 字段。对于那些具有与源文件的文件名匹配的 hosthostgroup 标签的数据点,maintenance 字段将设置为源文件中定义的值。

更新您的 TICKscript 中的警报逻辑,以确保在发送警报之前 maintenance 不是 true

stream
  // ...
  |alert()
    .crit(lambda: !"maintenance" AND "usage_idle" < 30)
    .warn(lambda: !"maintenance" AND "usage_idle" < 50)
    .info(lambda: !"maintenance" AND "usage_idle" < 70)

完整的 TICKscript 示例

stream
  |from()
    .measurement('cpu')
    .groupBy(*)
  // Use sideload to maintain the host maintenance state.
  // By default we assume a host is not undergoing maintenance.
  |sideload()
    .source('file:///usr/kapacitor/scheduled-maintenance')
    .order('hosts/{{.host}}.yml' , 'hostgroups/{{.hostgroup}}.yml')
    .field('maintenance', FALSE)
  |alert()
    // Add the `!"maintenance"` condition to the alert.
    .crit(lambda: !"maintenance" AND "usage_idle" < 30)
    .warn(lambda: !"maintenance" AND "usage_idle" < 50)        
    .info(lambda: !"maintenance" AND "usage_idle" < 70)

为计划停机做准备

使用您更新的 TICKscript 定义新的 Kapacitor 任务

当您的计划停机开始时,更新相应主机和主机组源文件中的 maintenance 值,并重新加载 sideload 以避免为这些特定主机和主机组触发警报。


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像当前一样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已发布公开 Alpha 版

InfluxDB 3 开源版本现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布作为 Alpha 版本一部分的两种产品。

InfluxDB 3 Core,是我们的新开源产品。它是一个用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何开始使用的更多信息,请查看