文档文档

AlertNode

alert 节点触发不同严重程度级别的事件,并将事件传递给 事件处理程序。触发警报的标准通过 lambda 表达式指定。请参阅下面的 AlertNode.InfoAlertNode.WarnAlertNode.Crit

构造函数

链式方法描述
alert ( )创建一个警报节点,可以触发警报。

要动态构造自定义 HTTP body 或 URL,请使用 警报模板。例如,httpPost('localhost/?host={{ index .Tags "host"}}&cpu={{ index .Tags "cpu" }}')

属性方法

设置器description
alerta ( )将警报发送到 Alerta。
all ( )指示只有当批处理中的所有点都符合条件时才应触发警报。不适用于流式警报。
bigPanda ( )将警报发送到 BigPanda。
crit ( value ast.LambdaNode)CRITICAL 警报级别的过滤器表达式。空值表示级别无效并被跳过。
critReset ( value ast.LambdaNode)用于将 CRITICAL 警报级别重置为较低级别的过滤器表达式。
details ( value string)用于构建警报详细 HTML 消息的模板。与 AlertNode.Message 属性相同的模板数据可用,此外还有一个 Message 字段,其中包含呈现的 Message 值。
discord ( )将警报发送到 Discord。
durationField ( value string)可选字段键,用于将警报持续时间添加到数据中。持续时间始终以纳秒为单位。
email ( to ...string)通过电子邮件发送警报数据。
exec ( executable stringargs ...string)每当触发警报时执行命令,并通过 STDIN 以 JSON 格式传递警报数据。
flapping ( low float64high float64)对警报执行抖动检测。使用的方法类似于 Nagios 的方法:https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/flapping.html
hipChat ( )将警报发送到 HipChat。
history ( value int64)计算抖动级别和检查状态更改时要记住的先前状态数。最小值为 2,以便跟踪当前状态和先前状态。
id ( value string)用于为给定警报构造唯一 ID 的模板。
idField ( value string)可选字段键,添加到数据中,包含警报 ID 作为字符串。
idTag ( value string)可选标签键,用于在用警报 ID 标记数据时使用。
info ( value ast.LambdaNode)INFO 警报级别的过滤器表达式。空值表示级别无效并被跳过。
inhibit ( category stringequalTags ...string)抑制类别中的其他警报。equal tags 提供了一个标签列表,这些标签必须相等,以便抑制警报事件。
infoReset ( value ast.LambdaNode)用于将 INFO 警报级别重置为较低级别的过滤器表达式。
kafka ( )将警报发送到 Kafka 集群。
levelField ( value string)可选字段键,添加到数据中,包含警报级别作为字符串。
levelTag ( value string)可选标签键,用于在用警报级别标记数据时使用。
log ( filepath string)将 JSON 警报数据记录到文件。每行一个事件。必须指定日志文件的绝对路径。如果文件不存在,则会创建该文件。示例:stream
message ( value string)用于为警报构建有意义的消息的模板。
messageField ( value string)可选字段键,添加到数据中,包含警报消息。
mqtt ( topic string)将警报发送到 MQTT 代理
noRecoveries ( )不发送恢复警报。
opsGenie ( )使用 OpsGenie 的 v1 API 将警报发送到 OpsGenie。(已弃用)
opsGenie2 ( )使用 OpsGenie 的 v2 API 将警报发送到 OpsGenie。
pagerDuty ( )使用 PagerDuty 的 v1 API 将警报发送到 PagerDuty。(已弃用)
pagerDuty2 ( )使用 PagerDuty 的 v2 API 将警报发送到 PagerDuty。
post ( urls ...string)将 HTTP POST JSON 警报数据发送到指定的 URL。
pushover ( )将警报发送到 Pushover。
quiet ( )抑制来自此节点的所有错误日志记录事件。
sensu ( )将警报发送到 Sensu。
slack ( )将警报发送到 Slack。
snmpTrap ( trapOid string)使用 SNMP traps 发送警报。
stateChangesOnly ( maxInterval ...time.Duration)仅发送状态已更改的事件。每个不同的警报级别 OK、INFO、WARNING 和 CRITICAL 都被视为不同的状态。
talk ( )将警报发送到 Talk。
tcp ( address string)通过 TCP 将 JSON 警报数据发送到指定的地址。
telegram ( )将警报发送到 Telegram。
topic ( value string)主题指定警报主题的名称,警报将发布到该主题。可以为每个主题配置警报处理程序,请参阅 API 文档。
victorOps ( )将警报发送到 VictorOps。
warn ( value ast.LambdaNode)WARNING 警报级别的过滤器表达式。空值表示级别无效并被跳过。
warnReset ( value ast.LambdaNode)用于将 WARNING 警报级别重置为较低级别的过滤器表达式。

链式方法

Alert, Barrier, Bottom, ChangeDetect, Combine, Count, CumulativeSum, Deadman, Default, Delete, Derivative, Difference, Distinct, Ec2Autoscale, Elapsed, Eval, First, Flatten, GroupBy, HoltWinters, HoltWintersWithFit, HttpOut, HttpPost, InfluxDBOut, Join, K8sAutoscale, KapacitorLoopback, Last, Max, Mean, Median, Min, Mode, MovingAverage, Percentile, Sample, Shift, Sideload, Spread, StateCount, StateDuration, Stats, Stddev, Sum, SwarmAutoscale, Top, Trickle, Union, Where, Window


可用的事件处理程序

可以为每个 AlertNode. 配置不同的事件处理程序。某些处理程序(如 Email、HipChat、Sensu、Slack、OpsGenie、VictorOps、PagerDuty、Telegram 和 Talk)具有一个配置选项 global,指示所有警报都隐式使用该处理程序。

处理程序描述
Alerta将警报消息发布到 Alerta。
BigPanda将警报消息发布到 BigPanda。
Discord将警报消息发布到 Discord 频道。
email发送包含警报数据的电子邮件。
exec执行命令,通过 STDIN 传递警报数据。
HipChat将警报消息发布到 HipChat 房间。
Kafka将警报发送到 Apache Kafka 集群。
log将警报数据记录到文件。
MQTT将警报消息发布到 MQTT。
OpsGenie v1使用 OpsGenie 的 v1 API 将警报发送到 OpsGenie。(已弃用)
OpsGenie v2使用 OpsGenie 的 v2 API 将警报发送到 OpsGenie。
PagerDuty v1使用 PagerDuty 的 v1 API 将警报发送到 PagerDuty。(已弃用)
PagerDuty v2使用 PagerDuty 的 v2 API 将警报发送到 PagerDuty。
post将 HTTP POST 数据发送到指定的 URL。
Pushover将警报发送到 Pushover。
Sensu将警报消息发布到 Sensu 客户端。
Slack将警报消息发布到 Slack 频道。
SNMPTrap触发 SNMP traps。
Talk将警报消息发布到 Talk 客户端。
tcp通过原始 TCP 将数据发送到指定的地址。
Telegram将警报消息发布到 Telegram 客户端。
VictorOps将警报发送到 VictorOps。

警报事件数据

发送到处理程序的每个事件都包含以下警报数据

名称描述
ID警报的 ID,用户定义。
消息警报消息,用户定义。
详细信息警报详细信息,用户定义的 HTML 内容。
时间警报发生的时间。
持续时间警报的持续时间,以纳秒为单位。
级别OK、INFO、WARNING 或 CRITICAL 之一。
数据influxql.Result,包含触发警报的数据。
可恢复指示警报是否可自动恢复。由 .noRecoveries() 属性确定。

如果警报处于 ‘OK’ 以外的状态,或者警报刚从非 ‘OK’ 状态更改为 ‘OK’ 状态(即警报已恢复),则事件将发送到处理程序。使用 AlertNode.StateChangesOnly 属性,仅当警报状态更改时,事件才会发送到处理程序。

配置多个警报处理程序是有效的,即使是相同类型也是如此。

示例

stream
    .groupBy('service')
  |alert()
    .id('kapacitor/{{ index .Tags "service" }}')
    .message('{{ .ID }} is {{ .Level }} value:{{ index .Fields "value" }}')
    .info(lambda: "value" > 10)
    .warn(lambda: "value" > 20)
    .crit(lambda: "value" > 30)
    .post("http://example.com/api/alert")
    .post("http://another.example.com/api/alert")
    .tcp("exampleendpoint.com:5678")
    .email('oncall@example.com')

每个表达式都维护自己的状态。表达式的执行顺序不被认为是确定性的。对于每个点,表达式可能会或可能不会被评估。如果没有任何表达式为真,则认为警报处于 OK 状态。

Kapacitor 支持警报重置表达式。这样,当警报进入状态时,只有在其重置表达式评估为真时,才能降低其严重性。

示例

stream
  |from()
    .measurement('cpu')
    .where(lambda: "host" == 'serverA')
    .groupBy('host')
  |alert()
    .info(lambda: "value" > 60)
    .infoReset(lambda: "value" < 50)
    .warn(lambda: "value" > 70)
    .warnReset(lambda: "value" < 60)
    .crit(lambda: "value" > 80)
    .critReset(lambda: "value" < 70)

例如,给定以下值,相应的警报状态为

警报状态
61INFO
73WARNING
64WARNING
85CRITICAL
62INFO
56INFO
47OK

可用的统计信息

  • alerts_triggered:触发的警报总数
  • oks_triggered:触发的 OK 警报数
  • infos_triggered:触发的 Info 警报数
  • warns_triggered:触发的 Warn 警报数
  • crits_triggered:触发的 Crit 警报数

属性

属性方法修改调用节点上的状态。它们不会向管道添加另一个节点,并且始终返回对调用节点的引用。属性方法使用 . 运算符标记。

Alerta

将警报发送到 Alerta。详细的配置选项和设置说明在 Alerta 事件处理程序 文章中提供。

kapacitor.conf 示例

[alerta]
  enabled = true
  url = "https://alerta.yourdomain"
  token = "9hiWoDOZ9IbmHsOTeST123ABciWTIqXQVFDo63h9"
  environment = "Production"
  origin = "Kapacitor"

TICKscript 示例

stream
  |alert()
    .alerta()
      .resource('Hostname or service')
      .event('Something went wrong')

全部

指示只有当批处理中的所有点都符合条件时才应触发警报。不适用于流式警报。

alert.all()

BigPanda

将警报发送到 BigPanda。详细的配置选项和设置说明在 BigPanda 事件处理程序 文章中提供。

kapacitor.conf 示例

[bigpanda]
  enabled = true
  url = "https://api.bigpanda.io/data/v2/alerts"
  token = "BigPanda-API-auth-bearer-token"
  app-key = "BigPanda-integration-app-key"

TICKscript 示例

stream
  |alert()
    .bigPanda()
      .appKey('fc39458f98e91eb0310258c3b725d643')
      .primaryProperty('device')
      .secondaryProperty('sensor_name')
      .topic('bigpanda-topic')

类别

类别将此警报放置在命名的类别中。类别用于 抑制 警报。

alert.category(value string)

严重

CRITICAL 警报级别的过滤器表达式。空值表示级别无效并被跳过。

alert.crit(value ast.LambdaNode)

严重重置

用于将 CRITICAL 警报级别重置为较低级别的过滤器表达式。

alert.critReset(value ast.LambdaNode)

详细信息

用于构建警报详细 HTML 消息的模板。与 AlertNode.Message 属性相同的模板数据可用,此外还有一个 Message 字段,其中包含呈现的 Message 值。

目的是 Message 属性是单行摘要,而 Details 属性是更详细的消息,可能跨越多行,并包含 HTML 格式。

此模板使用 Go 中的 html/template 包呈现,因此生成安全且有效的 HTML。

json 方法在模板中可用,用于将任何变量转换为有效的 JSON 字符串。

x示例

|alert()
  .id('{{ .Name }}')
  .details('''
<h1>{{ .ID }}</h1>
<b>{{ .Message }}</b>
Value: {{ index .Fields "value" }}
''')
  .email()

默认值: {{ json . }}

alert.details(value string)

Discord

将警报发送到 Discord。详细的配置选项和设置说明在 Discord 事件处理程序 文章中提供。

kapacitor.conf 示例

[discord]
  enabled = true
  url = "https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

TICKscript 示例

stream
  |alert()
    .discord()
      .embedTitle('Alert!')

持续时间字段

可选字段键,用于将警报持续时间添加到数据中。持续时间始终以纳秒为单位。

alert.durationField(value string)

Email

通过电子邮件将警报数据发送到指定的“To”电子邮件地址。详细的配置选项和设置说明在 Email 事件处理程序 文章中提供。

kapacitor.conf 示例

[smtp]
  enabled = true
  host = "localhost"
  port = 25
  username = "xxxx"
  password = "xxxx"
  from = "kapacitor@example.com"
  to = ["oncall@example.com"]
  global = true
  state-changes-only = true

TICKscript 示例

|alert()
  .id('{{ .Name }}')
  // Email subject
  .message('{{ .ID }}:{{ .Level }}')
  // Email body as HTML
  .details('''
<h1>{{ .ID }}</h1>
<b>{{ .Message }}</b>
Value: {{ index .Fields "value" }}
''')
  .email()

Exec

每当触发警报时执行命令,并通过 STDIN 以 JSON 格式传递警报数据。详细的使用说明和示例在 Exec 事件处理程序 文章中提供。

// Pattern
alert.exec(executable string, args ...string)

// Example
alert.exec('/usr/bin/python', 'myscript.py')

抖动

对警报执行抖动检测。使用的方法类似于 Nagios flapping

每个不同的警报级别都被视为不同的状态。低阈值和高阈值是状态更改百分比的反转阈值。这意味着如果状态更改的百分比高于 high 阈值,则警报进入抖动状态。警报保持抖动状态,直到状态更改的百分比低于 low 阈值。典型值是 low: 0.25 和 high: 0.5。百分比值表示状态更改数与可能的总状态更改数之比。0.5 的百分比变化意味着警报在记录的历史记录的一半中更改了状态,而在历史记录的另一半中保持不变。

// Pattern
alert.flapping(low float64, high float64)

// Example
alert.flapping(0.25, 0.5)

Kafka

将警报发送到 Apache Kafka 集群。详细的配置选项和设置说明在 Kafka 事件处理程序 文章中提供。

kapacitor.conf 示例

[[kafka]]
  enabled = true
  id = "localhost"
  timeout = 10s

TICKscript 示例

stream
  |alert()
    .kafka()
      .cluster('kafka-cluster')
      .kafkaTopic('kafka-topic-name')

历史记录

计算抖动级别和检查状态更改时要记住的先前状态数。最小值为 2,以便跟踪当前状态和先前状态。

默认值 21

// Pattern
alert.history(value int64)

// Example
alert.history(21)

HipChat

将警报发送到 HipChat。详细的配置选项和设置说明在 HipChat 事件处理程序 文章中提供。

kapacitor.conf 示例

[hipchat]
  enabled = true
  url = "https://orgname.hipchat.com/v2/room"
  room = "4189212"
  token = "9hiWoDOZ9IbmHsOTeST123ABciWTIqXQVFDo63h9"

TICKscript 示例

stream
  |alert()
    .hipChat()
      .room('Kapacitor')

ID

用于为给定警报构造唯一 ID 的模板。

可用的模板数据

数据名称描述
名称测量名称。
任务名称任务的名称
所有 group-by 标签的连接,格式为 [key=value,]+。如果未执行 groupBy,则等于字面量“nil”。
标签标签的映射。使用 `{{ index .Tags “key” }}` 获取特定的标签值。
服务器信息关于正在运行的服务器的信息。可用的嵌套字段是 HostnameClusterIDServerID

默认值: {{ .Name }}:{{ .Group }}

// Pattern
alert.id(value string)

// Example
alert.id('{{ .Name }}:{{ .Group }}')

示例:使用名称和组的 ID 模板

stream
  |from()
    .measurement('cpu')
    .groupBy('cpu')
  |alert()
    .id('kapacitor/{{ .Name }}/{{ .Group }}')

结果 ID:kapacitor/cpu/cpu=cpu0

示例:使用标签的 ID 模板

stream
  |from()
    .measurement('cpu')
    .groupBy('service')
  |alert()
    .id('kapacitor/{{ index .Tags "service" }}')

结果 ID:kapacitor/authentication

示例:使用多个标签的 ID 模板

stream
  |from()
    .measurement('cpu')
    .groupBy('service', 'host')
  |alert()
    .id('kapacitor/{{ index .Tags "service" }}/{{ index .Tags "host" }}')

结果 ID:kapacitor/authentication/auth001.example.com

ID 字段

可选字段键,添加到数据中,包含警报 ID 作为字符串。

// Pattern
alert.idField(value string)

// Example
alert.idField('id')

ID 标签

可选标签键,用于在用警报 ID 标记数据时使用。

// Pattern
alert.idTag(value string)

// Example
alert.idTag('alertID')

信息

INFO 警报级别的过滤器表达式。空值表示级别无效并被跳过。

// Pattern
alert.info(value ast.LambdaNode)

// Example
alert.info(lambda: 'usage_idle' < 60)

信息重置

用于将 INFO 警报级别重置为较低级别的过滤器表达式。

// Pattern
alert.infoReset(value ast.LambdaNode)

// Example
alert.infoReset(lambda: 'usage_idle' > 60)

抑制

抑制类别中的其他警报。equal tags 提供了一个标签列表,这些标签必须相等,以便抑制警报事件。

以下两个 TICKscript 演示了如何使用抑制功能

    //cpu_alert.tick
stream
  |from()
    .measurement('cpu')
    .groupBy('host')
  |alert()
    .category('system_alerts')
    .crit(lambda: "usage_idle" < 10.0)
//host_alert.tick
stream
  |from()
    .measurement('uptime')
    .groupBy('host')
  |deadman(0.0, 1m)
    .inhibit('system_alerts', 'host')

deadman 是一种警报节点类型,可用于在触发时抑制 `system_alerts` 类别中的所有警报。inhibit 函数的 host 参数表示主机标签在 CPU 警报和主机警报之间必须相等,以便抑制它。这具有 deadman 警报仅抑制当前死机的主机的 CPU 警报的效果。

alert.inhibit(category string, equalTags ...string)

Kafka

将警报发送到 Kafka 主题。详细的设置和使用说明在 Kafka 事件处理程序 文章中提供。

示例:kapacitor.conf

[[kafka]]
  enabled = true
  id = "default"
  brokers = ["localhost:9092"]

示例:TICKscript

stream
 |alert()
    .kafka()
      .cluster('default')
      .kafkaTopic('alerts')

级别字段

可选字段键,添加到数据中,包含警报级别作为字符串。

// Pattern
alert.levelField(value string)

// Example
alert.levelField('INFO')

级别标签

可选标签键,用于在用警报级别标记数据时使用。

// Pattern
alert.levelTag(value string)

// Example
alert.levelTag('level')

Log

将 JSON 警报数据记录到文件。详细的设置和使用说明在 Log 事件处理程序 文章中提供。

TICKscript 示例

stream
  |alert()
    .log('/tmp/alert')
      .mode(0644)

消息

用于为警报构建有意义的消息的模板。

可用的模板数据

数据名称描述
ID警报的 ID。
名称测量名称。
任务名称任务的名称
所有 group-by 标签的连接,格式为 1。如果未执行 groupBy,则等于字面量“nil”。
标签标签的映射。使用 {{ index .Tags "key" }} 获取特定的标签值。
级别警报级别 - INFOWARNINGCRITICAL
字段字段的映射。使用 {{ index .Fields "key" }} 获取特定的字段值。
时间触发事件的点的 时间。默认格式为 YYYY-MM-DD 00:00:00 +0000 UTC
持续时间警报的持续时间。

默认值: {{ .ID }} is {{ .Level }}

示例

stream
  |from()
    .measurement('cpu')
    .groupBy('service', 'host')
  |alert()
    .id('{{ index .Tags "service" }}/{{ index .Tags "host" }}')
    .message('{{ .ID }} is {{ .Level}} value: {{ index .Fields "value" }}')

结果消息:authentication/auth001.example.com is CRITICAL value:42

消息字段

可选字段键,添加到数据中,包含警报消息。

// Pattern
alert.messageField(value string)

// Example
alert.messageField('message')

MQTT

将警报发送到 MQTT 代理。详细的配置选项和使用说明在 MQTT 事件处理程序 文章中提供。

kapacitor.conf 示例

[[mqtt]]
  enabled = true
  name = "localhost"
  default = true
  url = "tcp://localhost:1883"
  client-id = "kapacitor"
  username = "myusername"
  password = "mysupersecretpassw0rd"

TICKscript 示例

stream
  |alert()
    .mqtt('topic')
      .brokerName('localhost')

不恢复

不发送恢复警报。将 recoverable 警报数据字段设置为 false

alert.noRecoveries()

OpsGenie v1

使用 OpsGenie 的 v1 API 将警报发送到 OpsGenie。详细的配置选项和设置说明在 OpsGenie v1 事件处理程序 文章中提供。

kapacitor.conf 示例

[opsgenie]
  enabled = true
  api-key = "xxxxx"
  teams = ["everyone"]
  recipients = ["jim", "bob"]

TICKscript 示例

stream
  |alert()
    .opsGenie()

OpsGenie v2

使用 OpsGenie 的 v2 API 将警报发送到 OpsGenie。详细的配置选项和设置说明在 OpsGenie v2 事件处理程序 文章中提供。

kapacitor.conf 示例

[opsgenie2]
  enabled = true
  api-key = "xxxxx"
  teams = ["everyone"]
  recipients = ["jim", "bob"]

TICKscript 示例

stream
  |alert()
    .opsGenie2()

PagerDuty v1

使用 PagerDuty 的 v1 API 将警报发送到 PagerDuty。详细的配置选项和设置说明在 PagerDuty v1 事件处理程序 文章中提供。

kapacitor.conf 示例

[pagerduty]
  enabled = true
  service-key = "xxxx"
  url = "https://events.pagerduty.com/generic/2010-04-15/create_event.json"

TICKscript 示例

stream
  |alert()
    .pagerDuty()

PagerDuty v2

使用 PagerDuty 的 v2 API 将警报发送到 PagerDuty。详细的配置选项和设置说明在 PagerDuty v2 事件处理程序 文章中提供。

kapacitor.conf 示例

[pagerduty2]
  enabled = true
  routing-key = "xxxx"
  url = "https://events.pagerduty.com/v2/enqueue"

TICKscript 示例

stream
  |alert()
    .pagerDuty2()

Post

将 HTTP POST JSON 警报数据发送到指定的 URL。详细的配置选项和设置说明在 Post 事件处理程序 文章中提供。

TICKscript 示例

stream
  |alert()
    .post('http://example.com')
      .captureResponse()

Pushover

将警报发送到 Pushover。详细的配置选项和设置说明在 Pushover 事件处理程序 文章中提供。

kapacitor.conf 示例

[pushover]
  enabled = true
  token = "9hiWoDOZ9IbmHsOTeST123ABciWTIqXQVFDo63h9"
  user_key = "Pushover"

TICKscript 示例

stream
  |alert()
    .pushover()
      .sound('siren')
      .user_key('other user')
      .device('mydev')
      .title('mytitle')
      .uRL('myurl')
      .URLTitle('mytitle')

静默

抑制来自此节点的所有错误日志记录事件。

alert.quiet()

Sensu

将警报发送到 Sensu。详细的配置选项和设置说明在 Sensu 事件处理程序 文章中提供。

*kapacitor.conf 示例

[sensu]
  enabled = true
  url = "http://sensu:3030"
  source = "Kapacitor"
  handlers = ["sns","slack"]

TICKscript 示例

stream
  |alert()
    .sensu()
      .handlers('sns','slack')

Slack

将警报发送到 Slack。详细的配置选项和设置说明在 Slack 事件处理程序 文章中提供。

kapacitor.conf 示例

[slack]
  enabled = true
  url = "https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx"
  channel = "#general"

TICKscript 示例

stream
  |alert()
    .slack()
      .channel('#alerts')
      .channel('@jsmith')

SnmpTrap

使用 SNMP traps 发送警报。详细的配置选项和设置说明在 SNMP Trap 事件处理程序 文章中提供。

kapacitor.conf 示例

[snmptrap]
  enabled = true
  addr = "127.0.0.1:9162"
  community = "public"

TICKscript 示例

stream
  |alert()
    .snmpTrap('1.3.6.1.2.1.1')
      .data('1.3.6.1.2.1.1.6', 'i', '{{ index .Field "value" }}')
      .data('1.3.6.1.2.1.1.7', 's', '{{ .Message }}')

仅状态更改

仅发送状态已更改的事件。每个不同的警报级别 OK、INFO、WARNING 和 CRITICAL 都被视为不同的状态。

示例

stream
  |from()
    .measurement('cpu')
  |window()
    .period(10s)
    .every(10s)
  |alert()
    .crit(lambda: "value" > 10)
    .stateChangesOnly()
    .slack()

如果“value”在 60 秒的总时间内大于 10,那么只会发送两个事件。首先,当值超过阈值时,其次,当值回落到 OK 状态时。如果没有 stateChangesOnly,警报将触发 7 次:6 次用于满足条件的每个 10 秒周期,另一次用于恢复。

可以提供可选的最大间隔持续时间。如果自上次警报以来经过的时间超过最大间隔,则不会忽略事件(即触发警报)。

示例

stream
  // ...
  |alert()
    .crit(lambda: "value" > 10)
    .stateChangesOnly(10m)
    .slack()

TCP

通过 TCP 将 JSON 警报数据发送到指定的地址。详细的使用说明在 TCP 事件处理程序 文章中提供。

// Pattern
alert.tcp(address string)

// Example
alert.tcp('127.0.0.1:7777')

Telegram

将警报发送到 Telegram。详细的配置选项和设置说明在 Telegram 事件处理程序 文章中提供。

kapacitor.conf 示例

[telegram]
  enabled = true
  token = "123456789:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  chat-id = "xxxxxxxxx"
  parse-mode = "Markdown"
	disable-web-page-preview = true
	disable-notification = false

TICKscript 示例

stream
  |alert()
    .telegram()
      .chatId('xxxxxxx')

主题

主题指定警报主题的名称,警报将发布到该主题。可以为每个主题配置警报处理程序。请参阅 API 文档

// Pattern
alert.topic(value string)

// Example
alert.topic('cpu')

VictorOps

将警报发送到 VictorOps。详细的配置选项和设置说明在 VictorOps 事件处理程序 文章中提供。

kapacitor.conf 示例

[victorops]
  enabled = true
  api-key = "xxxxx"
  routing-key = "everyone"

TICKscript 示例

stream
  |alert()
    .victorOps()
      .routingKey('team_rocket')

警告

WARNING 警报级别的过滤器表达式。空值表示级别无效并被跳过。

// Pattern
alert.warn(value ast.LambdaNode)

// Example
alert.warn(lambda: 'usage_idle' < 20)

警告重置

用于将 WARNING 警报级别重置为较低级别的过滤器表达式。

// Pattern
alert.warnReset(value ast.LambdaNode)

// Example
alert.warnReset(lambda: 'usage_idle' > 20)

链式方法

链式方法在管道中创建一个新节点,作为调用节点的子节点。它们不会修改调用节点。链式方法使用 | 运算符标记。

Alert

创建一个警报节点,可以触发警报。

alert|alert()

返回:AlertNode

Barrier

创建一个新的 Barrier 节点,该节点定期发出 BarrierMessage。

每个周期持续时间将发出一个 BarrierMessage。

alert|barrier()

返回:BarrierNode

Bottom

选择 field 的底部 num 个点,并按任何额外的标签或字段排序。

alert|bottom(num int64, field string, fieldsAndTags ...string)

返回:InfluxQLNode

ChangeDetect

创建一个新节点,该节点仅在与前一个点不同时才发出新点。

alert|changeDetect(field string)

返回: ChangeDetectNode

组合

将此节点与其自身组合。数据基于时间戳进行组合。

alert|combine(expressions ...ast.LambdaNode)

返回: CombineNode

计数

计算数据点的数量。

alert|count(field string)

返回:InfluxQLNode

累计求和

计算接收到的每个数据点的累积和。为每个收集到的数据点发出一个点。

alert|cumulativeSum(field string)

返回:InfluxQLNode

Deadman

用于在低吞吐量(又名“deadman’s switch”)上创建警报的辅助函数。

  • 阈值:如果吞吐量在指定间隔内降至阈值以下,则触发警报(单位:点/间隔)。
  • 间隔:检查吞吐量的频率。
  • 表达式:可选的表达式列表,也用于评估。对于一天中特定时间的警报很有用。

示例

    var data = stream
        |from()...
    // Trigger critical alert if the throughput drops below 100 points per 10s and checked every 10s.
    data
        |deadman(100.0, 10s)
    //Do normal processing of data
    data...

以上内容等效于以下示例

    var data = stream
        |from()...
    // Trigger critical alert if the throughput drops below 100 points per 10s and checked every 10s.
    data
        |stats(10s)
            .align()
        |derivative('emitted')
            .unit(10s)
            .nonNegative()
        |alert()
            .id('node \'stream0\' in task \'{{ .TaskName }}\'')
            .message('{{ .ID }} is {{ if eq .Level "OK" }}alive{{ else }}dead{{ end }}: {{ index .Fields "emitted" | printf "%0.3f" }} points/10s.')
            .crit(lambda: "emitted" <= 100.0)
    //Do normal processing of data
    data...

idmessage 警报属性可以通过 ‘deadman’ 配置部分进行全局配置。

由于 AlertNode 是最后一部分,因此可以像往常一样进一步修改。例如

    var data = stream
        |from()...
    // Trigger critical alert if the throughput drops below 100 points per 10s and checked every 10s.
    data
        |deadman(100.0, 10s)
            .slack()
            .channel('#dead_tasks')
    //Do normal processing of data
    data...

您可以指定其他 lambda 表达式,以进一步约束何时触发 “deadman’s switch”。例如

    var data = stream
        |from()...
    // Trigger critical alert if the throughput drops below 100 points per 10s and checked every 10s.
    // Only trigger the alert if the time of day is between 8am-5pm.
    data
        |deadman(100.0, 10s, lambda: hour("time") >= 8 AND hour("time") <= 17)
    //Do normal processing of data
    data...
alert|deadman(threshold float64, interval time.Duration, expr ...ast.LambdaNode)

返回:AlertNode

默认值

创建一个可以为缺失的标签或字段设置默认值的节点。

alert|default()

返回: DefaultNode

删除

创建一个可以删除标签或字段的节点。

alert|delete()

返回: DeleteNode

导数

创建一个新节点,用于计算相邻点的导数。

alert|derivative(field string)

返回: DerivativeNode

差值

计算点之间的差值,与经过的时间无关。

alert|difference(field string)

返回:InfluxQLNode

去重

生成仅包含不同数据点的批次。

alert|distinct(field string)

返回:InfluxQLNode

Ec2Autoscale

创建一个可以为 ec2 自动伸缩组触发自动伸缩事件的节点。

alert|ec2Autoscale()

返回: Ec2AutoscaleNode

耗时

计算点之间经过的时间。

alert|elapsed(field string, unit time.Duration)

返回:InfluxQLNode

Eval

创建一个 eval 节点,该节点将对每个数据点评估给定的转换函数。可以提供表达式列表,并将按照给定的顺序进行评估。结果可用于后续表达式。

alert|eval(expressions ...ast.LambdaNode)

返回: EvalNode

第一个

选择第一个点。

alert|first(field string)

返回:InfluxQLNode

扁平化

将具有相似时间的点扁平化为单个点。

alert|flatten()

返回: FlattenNode

GroupBy

按一组标签对数据进行分组。

可以传递字面量 * 以按所有维度分组。例如

    |groupBy(*)
alert|groupBy(tag ...interface{})

返回: GroupByNode

HoltWinters

计算数据集的 Holt-Winters (/influxdb/v1/query_language/functions/#holt-winters) 预测。

alert|holtWinters(field string, h int64, m int64, interval time.Duration)

返回:InfluxQLNode

HoltWintersWithFit

计算数据集的 Holt-Winters (/influxdb/v1/query_language/functions/#holt-winters) 预测。除了预测数据外,此方法还输出用于拟合数据的所有点。

alert|holtWintersWithFit(field string, h int64, m int64, interval time.Duration)

返回:InfluxQLNode

HttpOut

创建一个 HTTP 输出节点,该节点缓存其接收到的最新数据。缓存的数据在给定的端点可用。端点是运行任务的 API 端点的相对路径。例如,如果任务端点位于 /kapacitor/v1/tasks/<task_id>,而端点为 top10,则可以从 /kapacitor/v1/tasks/<task_id>/top10 请求数据。

alert|httpOut(endpoint string)

返回: HTTPOutNode

HttpPost

创建一个 HTTP Post 节点,该节点将接收到的数据 POST 到提供的 HTTP 端点。HttpPost 期望 0 或 1 个参数。如果提供 0 个参数,则必须指定一个端点属性方法。

alert|httpPost(url ...string)

返回: HTTPPostNode

InfluxDBOut

创建一个 influxdb 输出节点,该节点将传入数据存储到 InfluxDB 中。

alert|influxDBOut()

返回: InfluxDBOutNode

Join

将此节点与其他节点连接。数据基于时间戳进行连接。

alert|join(others ...Node)

返回: JoinNode

K8sAutoscale

创建一个可以为 kubernetes 集群触发自动伸缩事件的节点。

alert|k8sAutoscale()

返回: K8sAutoscaleNode

KapacitorLoopback

创建一个 kapacitor 回环节点,该节点将数据作为流发送回 Kapacitor。

alert|kapacitorLoopback()

返回: KapacitorLoopbackNode

最后一个

选择最后一个点。

alert|last(field string)

返回:InfluxQLNode

最大值

选择最大点。

alert|max(field string)

返回:InfluxQLNode

平均值

计算数据的平均值。

alert|mean(field string)

返回:InfluxQLNode

中位数

计算数据的中位数。

注意: 此方法不是选择器。如果您想要中值点,请使用 .percentile(field, 50.0)

alert|median(field string)

返回:InfluxQLNode

最小值

选择最小点。

alert|min(field string)

返回:InfluxQLNode

众数

计算数据的众数。

alert|mode(field string)

返回:InfluxQLNode

移动平均

计算最后窗口个点的移动平均值。在窗口填满之前,不会发出任何点。

alert|movingAverage(field string, window int64)

返回:InfluxQLNode

百分位数

选择给定百分位数的点。这是一个选择器函数,不执行点之间的插值。

alert|percentile(field string, percentile float64)

返回:InfluxQLNode

采样

创建一个新节点,该节点对传入的点或批次进行采样。

将按照指定的计数或持续时间发出一个点。

alert|sample(rate interface{})

返回: SampleNode

Shift

创建一个新节点,该节点在时间上移动传入的点或批次。

alert|shift(shift time.Duration)

返回: ShiftNode

Sideload

创建一个可以从外部源加载数据的节点。

alert|sideload()

返回: SideloadNode

Spread

计算 minmax 点之间的差值。

alert|spread(field string)

返回:InfluxQLNode

StateCount

创建一个节点,该节点跟踪给定状态下连续点的数量。

alert|stateCount(expression ast.LambdaNode)

返回: StateCountNode

StateDuration

创建一个节点,该节点跟踪给定状态下的持续时间。

alert|stateDuration(expression ast.LambdaNode)

返回: StateDurationNode

Stats

创建一个新的数据流,其中包含节点的内部统计信息。间隔表示基于实时发出统计信息的频率。这意味着间隔时间独立于源节点正在接收的数据点的时间。

alert|stats(interval time.Duration)

返回: StatsNode

Stddev

计算标准差。

alert|stddev(field string)

返回:InfluxQLNode

Sum

计算所有值的总和。

alert|sum(field string)

返回:InfluxQLNode

SwarmAutoscale

创建一个可以为 Docker swarm 集群触发自动伸缩事件的节点。

alert|swarmAutoscale()

返回: SwarmAutoscaleNode

Top

field 选择前 num 个点,并按任何额外的标签或字段排序。

alert|top(num int64, field string, fieldsAndTags ...string)

返回:InfluxQLNode

Trickle

创建一个新节点,该节点将批处理数据转换为流数据。

alert|trickle()

返回: TrickleNode

Union

执行此节点和所有其他给定节点的并集。

alert|union(node ...Node)

返回: UnionNode

Where

创建一个新节点,该节点通过给定的表达式过滤数据流。

alert|where(expression ast.LambdaNode)

返回: WhereNode

Window

创建一个新节点,该节点按时间窗口化数据流。

注意:Window 只能应用于流边缘。

alert|window()

返回: WindowNode


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

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

有关更多信息,请查看