文档文档

处理计划停机期间的 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,该 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 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、最近数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 以 Core 的基础为构建,增加了高可用性、读取副本、增强的安全性以及数据压缩,从而加快查询速度并优化存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看