Documentation

警报节点

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

构造函数

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

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

属性方法

设置器描述
alerta ( )将警报发送到 Alerta。
all ( )指示仅当批次中的所有点都符合标准时才应触发警报。 不适用于流警报。
bigPanda ( )将警报发送到BigPanda。
crit ( value ast.LambdaNode)CRITICAL警报级别的过滤表达式。空值表示级别无效,将被跳过。
critReset ( value ast.LambdaNode)重置关键警报级别为更低级别的过滤表达式。
details ( value string)构建警报详细 HTML 消息的模板。相同的模板数据也可以通过 AlertNode.Message 属性获得,此外还有一个包含渲染后消息值的 Message 字段。
discord ( )将警报发送到Discord。
durationField ( value string)可选字段键,用于将通知持续时间添加到数据中。持续时间始终以纳秒为单位。
email ( to ...string)发送警报数据的电子邮件。
exec ( executable stringargs ...string)每当触发警报时执行一个命令,并以JSON格式通过STDIN传递警报数据。
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)抑制类别中的其他警报。equalTags 提供了一组必须相等的标签,以便抑制警报事件。
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陷阱发送警报。
stateChangesOnly ( maxInterval ...time.Duration)仅发送状态变化的事件。每个不同的警报级别 OK、INFO、WARNING 和 CRITICAL 被视为不同的状态。
talk ( )将警报发送到Talk。
tcp ( address string)通过TCP将JSON警报数据发送到指定地址。
telegram ( )将警报发送到Telegram。
主题 ( value string)主题指定了要发布警报的警报主题名称。可以根据主题配置警报处理程序,请参阅API文档。
victorOps ( )向VictorOps发送警报。
warn ( value ast.LambdaNode)警告通知级别的过滤表达式。空值表示级别无效,将被跳过。
warnReset ( value ast.LambdaNode)重置警告警报级别到较低级别的过滤表达式。

方法链

警报, 障碍, 底部, 变化检测, 组合, 计数, 累计和, 死亡人, 默认, 删除, 导数, 差分, 不同, Ec2自动缩放, 经过时间, 评估, 第一个, 扁平化, 分组, 霍尔特-温特斯, 霍尔特-温特斯带拟合, Http输出, HttpPost, InfluxDB输出, 连接, K8s自动缩放, Kapacitor环回, 最后, 最大值, 平均值, 中位数, 最小值, 众数, 移动平均, 百分位数, 样本, 偏移, 附载, 扩展, 状态计数, 状态持续时间, 统计, 标准差, 总和, 集群自动缩放, 顶部, 滴水, 并集, 条件, 窗口


可用的事件处理程序

对于每个 AlertNode. 可以配置不同的事件处理程序。某些处理程序,如电子邮件、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使用他们的 v1 API 向 OpsGenie 发送警报。(已弃用)
OpsGenie v2通过他们的 v2 API 向 OpsGenie 发送警报。
PagerDuty v1使用他们的 v1 API 向 PagerDuty 发送警报。 (已弃用)
PagerDuty v2通过他们的 v2 API 向 PagerDuty 发送警报。
post将HTTP POST数据发送到指定的URL。
Pushover向 Pushover 发送警报。
Sensu向Sensu客户端发送警报消息。
Slack将警报消息发送到Slack频道。
SNMPTrap触发SNMP陷阱。
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')

每个表达式维护其自己的状态。
表达式的执行顺序不被认为是确定的。
对于每个点,表达式可能被评估,也可能不被评估。
如果没有表达式为真,那么警报被视为处于确定状态。

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)

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

警报状态
61信息
73警告
64警告
85严重
62信息
56信息
47好的

可用统计数据:

  • alerts_triggered: 触发的警报总数
  • oks_triggered: 触发的确认警报数量
  • infos_triggered: 触发的信息警报数量
  • warns_triggered: 触发的警告提醒数量
  • crits_triggered: 触发的关键警报数量

属性

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

警报

将警报发送到 Alerta。详细的配置选项和设置说明在 Alerta Event Handler 文章中提供。

示例 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 事件处理程序文章中提供。

示例 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)

批评

关键警报级别的过滤表达式。 空值表示该级别无效,将被跳过。

alert.crit(value ast.LambdaNode)

重置评分

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

alert.critReset(value ast.LambdaNode)

详情

构造详细HTML消息的模板用于警报。 相同的模板数据可作为 AlertNode.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 Event Handler文章中提供。

示例 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()

执行

当触发警报时执行一个命令,并以JSON格式通过STDIN传递警报数据。 详细的使用说明和示例在 Exec Event Handler 文章中提供。

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

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

拍打

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

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

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

// Example
alert.flapping(0.25, 0.5)

卡夫卡

将警报发送到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 的模板。

可用模板数据

数据名称描述
名称测量名称。
任务名称任务的名称
所有格式为 [key=value,]+ 的分组标签的连接。如果没有进行分组,则等于字面值 ’nil’。
标签标签的映射。使用 `{{ 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

标识字段

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

// Pattern
alert.idField(value string)

// Example
alert.idField('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 标签提供了一系列必须相等的标签,以便抑制警报事件。

以下两个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')

死手是一个警报节点的类型,当触发时可以抑制所有在 system_alerts 类别中的警报。 抑制函数的 host 参数表示 CPU 警报和主机警报之间的主机标签必须相等才能进行抑制。 这使得死手警报只抑制当前已停止响应的主机的 CPU 警报。

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

卡夫卡

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

示例:kapacitor.conf

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

示例: TICKscript

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

级别字段

可选字段key,包含警报级别的字符串,以添加到数据中。

// Pattern
alert.levelField(value string)

// Example
alert.levelField('INFO')

等级标签

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

// Pattern
alert.levelTag(value string)

// Example
alert.levelTag('level')

日志

将JSON警报数据记录到文件中。
详细的设置和使用说明请参见日志事件处理程序文章。

示例 TICKscript

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

消息

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

可用模板数据

数据名称描述
ID警告的ID。
名称测量名称。
任务名称任务的名称
所有形式为1的分组标签的连接。如果没有执行groupBy,则等于字面值’nil’。
标签标签的映射。使用 {{ index .Tags "key" }} 来获取特定标签的值。
级别警报级别 - INFO, WARNING, CRITICAL.
字段字段的映射。使用 {{ 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 是 关键值: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 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()

帖子

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

示例 TICKscript

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

推送通知

将警报发送到 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陷阱发送警报。详细的配置选项和设置说明请参见SNMP Trap Event Handler文章。

示例 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,那么只会发送两个事件。首先,当值超过阈值时,其次,当它恢复到正常状态时。如果没有stateChangesOnly,则警报将触发7次:在每个满足条件的10秒期间触发6次,最后一次是恢复事件。

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

示例

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

传输控制协议

通过TCP将JSON警报数据发送到指定地址。详细使用说明请参见 TCPEvent Handler 文章。

// Pattern
alert.tcp(address string)

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

电报

将警报发送到 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 事件处理程序 文章中提供。

示例 kapacitor.conf

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

示例 TICKscript

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

警告

警告警报级别的过滤表达式。
空值表示级别无效,将被跳过。

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

返回: AlertNode

障碍

创建一个新的障碍节点,它定期发出障碍消息。

每个周期都会发出一条 barrier消息。

alert|barrier()

返回: BarrierNode

底部

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

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

返回: InfluxQLNode

变更检测

创建一个新节点,只有在与前一个点不同的情况下才发出新点。

alert|changeDetect(field string)

返回: ChangeDetectNode

合并

将此节点与自身结合。数据根据时间戳进行结合。

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

返回: CombineNode

计数

计算点的数量。

alert|count(field string)

返回: InfluxQLNode

累积和

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

alert|cumulativeSum(field string)

返回: InfluxQLNode

死者

用于在低吞吐量时创建警报的辅助函数,也称为死手开关。

  • 阈值:如果吞吐量在点/区间中下降到阈值以下,则触发警报。
  • 间隔:检查吞吐量的频率。
  • 表达式:可选的表达式列表,供评估使用。对于时间警报非常有用。

示例:

    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...

可以通过“deadman”配置部分全局配置idmessage警报属性。

由于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表达式,以进一步限制何时触发死手按钮。 示例:

    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

评估

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

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

返回: EvalNode

第一

选择第一个点。

alert|first(field string)

返回: InfluxQLNode

扁平化

将具有相似时间的点合并为一个点。

alert|flatten()

返回: FlattenNode

分组

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

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

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

返回: GroupByNode

霍尔特-温特斯

计算一个数据集的霍尔特-温特斯(/influxdb/v1/query_language/functions/#holt-winters)预测。

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

返回: InfluxQLNode

霍尔特-冬季法与拟合

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

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

返回: InfluxQLNode

Http输出

创建一个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

InfluxDB输出

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

alert|influxDBOut()

返回: InfluxDBOutNode

加入

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

alert|join(others ...Node)

返回: JoinNode

K8s自缩放

创建一个可以触发Kubernetes集群自适应缩放事件的节点。

alert|k8sAutoscale()

返回: K8sAutoscaleNode

Kapacitor循环回路

创建一个将数据作为流发送回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

移位

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

alert|shift(shift time.Duration)

返回: ShiftNode

侧载

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

alert|sideload()

返回: SideloadNode

扩散

计算 minmax 点之间的差。

alert|spread(field string)

返回: InfluxQLNode

状态计数

创建一个节点,用于跟踪给定状态中连续点的数量。

alert|stateCount(expression ast.LambdaNode)

返回: StateCountNode

状态持续时间

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

alert|stateDuration(expression ast.LambdaNode)

返回: StateDurationNode

统计

创建一个新的数据流,其中包含节点的内部统计信息。 间隔表示根据实时多长时间发出一次统计信息。 这意味着间隔时间与源节点接收的数据点次数无关。

alert|stats(interval time.Duration)

返回结果: StatsNode

标准差

计算标准差。

alert|stddev(field string)

返回: InfluxQLNode

总和

计算所有值的总和。

alert|sum(field string)

返回: InfluxQLNode

群集自动缩放

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

alert|swarmAutoscale()

返回: SwarmAutoscaleNode

顶部

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

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

返回: InfluxQLNode

涓流

创建一个新的节点,将批量数据转换为流数据。

alert|trickle()

返回: TrickleNode

联合

执行该节点与所有其他给定节点的并集。

alert|union(node ...Node)

返回: UnionNode

在哪里

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

alert|where(expression ast.LambdaNode)

返回: WhereNode

窗口

创建一个新的节点,通过时间窗口化流。

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

alert|window()

返回: WindowNode



Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

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

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