文档文档

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 消息的模板。除了包含渲染的 Message 值的 Message 字段外,相同的模板数据也可用作 AlertNode.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)Topic 指定警报主题的名称,警报将发布到该主题。可以为每个主题配置警报处理程序,请参阅 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')

All

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

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')

Category

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

alert.category(value string)

Crit

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

alert.crit(value ast.LambdaNode)

CritReset

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

alert.critReset(value ast.LambdaNode)

详细信息

用于构建警报的详细 HTML 消息的模板。除了 Message 字段包含渲染的 Message 值之外,相同的模板数据也可用作 AlertNode.Message 属性。

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

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

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

xExample

|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!')

DurationField

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

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')

Flapping

对警报执行抖动检测。使用的方法类似于 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')

History

计算抖动级别和检查状态更改时要记住的先前状态的数量。最小值为 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 的模板。

可用的模板数据

数据名称描述
名称指标名称。
TaskName任务的名称
Group所有 group-by 标签的连接,形式为 [key=value,]+。如果未执行 groupBy,则等于字面量 ‘nil’。
Tags标签的 Map。使用 {{ index .Tags “key” }} 获取特定的标签值。
ServerInfo有关正在运行的服务器的信息。可用的嵌套字段有 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

IdField

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

// Pattern
alert.idField(value string)

// Example
alert.idField('id')

IdTag

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

// Pattern
alert.idTag(value string)

// Example
alert.idTag('alertID')

Info

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

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

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

InfoReset

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

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

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

Inhibit

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

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

    //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')

LevelField

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

// Pattern
alert.levelField(value string)

// Example
alert.levelField('INFO')

LevelTag

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

// Pattern
alert.levelTag(value string)

// Example
alert.levelTag('level')

Log

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

TICKscript 示例

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

消息

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

可用的模板数据

数据名称描述
ID警报的 ID。
名称指标名称。
TaskName任务的名称
Group所有 group-by 标签的连接,形式为 1。如果未执行 groupBy,则等于字面量 ‘nil’。
Tags标签的 Map。使用 {{ index .Tags "key" }} 获取特定的标签值。
级别警报级别 - INFOWARNINGCRITICAL
字段字段的 Map。使用 {{ 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

MessageField

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

// Pattern
alert.messageField(value string)

// Example
alert.messageField('message')

MQTT

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

kapacitor.conf 示例

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

TICKscript 示例

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

NoRecoveries

不发送恢复警报。将 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')

Quiet

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

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 }}')

StateChangesOnly

仅发送状态已更改的事件。每个不同的警报级别 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 次:对于满足条件的每个 10 秒周期触发 6 次,恢复时再触发一次。

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

示例

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

TCP

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

// 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')

Topic

Topic 指定警报主题的名称,警报将发布到该主题。可以为每个主题配置警报处理程序。请参阅 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')

Warn

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

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

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

WarnReset

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

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

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

链式方法

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

Alert

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

alert|alert()

返回:AlertNode

Barrier

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

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

alert|barrier()

返回:BarrierNode

Bottom

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

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

返回:InfluxQLNode

ChangeDetect

创建一个新节点,仅当与上一个点不同时才发出新点。

alert|changeDetect(field string)

返回:ChangeDetectNode

Combine

将此节点与自身组合。数据在时间戳上组合。

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

返回:CombineNode

Count

计算点的数量。

alert|count(field string)

返回:InfluxQLNode

CumulativeSum

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

alert|cumulativeSum(field string)

返回:InfluxQLNode

Deadman

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

  • Threshold:如果吞吐量在 points/interval 中降至阈值以下,则触发警报。
  • Interval:检查吞吐量的频率。
  • Expressions:要评估的可选表达式列表。用于一天中特定时间的警报很有用。

示例

    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

Delete

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

alert|delete()

返回:DeleteNode

Derivative

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

alert|derivative(field string)

返回:DerivativeNode

Difference

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

alert|difference(field string)

返回:InfluxQLNode

Distinct

生成仅包含不同点的批处理。

alert|distinct(field string)

返回:InfluxQLNode

Ec2Autoscale

创建一个可以为 ec2 autoscalegroup 触发自动扩展事件的节点。

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

MovingAverage

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

alert|movingAverage(field string, window int64)

返回:InfluxQLNode

百分位数

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

alert|percentile(field string, percentile float64)

返回:InfluxQLNode

Sample

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

每当指定的计数或持续时间到达时,将发出一个点。

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 开源版现已公开发布 Alpha 版本

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

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

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

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