文档文档

AlertNode

alert 节点会触发不同严重级别的事件,并将事件传递给 事件处理程序。触发警报的条件通过 lambda 表达式 指定。有关详细信息,请参见下文的 AlertNode.InfoAlertNode.WarnAlertNode.Crit

构造函数

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

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

属性方法

Setter 方法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 )抑制同一类别中的其他警报。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 )将 JSON 警报数据 HTTP POST 到指定 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。
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将警报消息 POST 到 Alerta。
BigPanda将警报消息 POST 到 BigPanda。
Discord将警报消息 POST 到 Discord 频道。
email发送包含警报数据的电子邮件。
exec执行一个命令,通过 STDIN 传递警报数据。
HipChat将警报消息 POST 到 HipChat 房间。
Kafka将警报发送到 Apache Kafka 集群。
log将警报数据记录到文件。
MQTT将警报消息 POST 到 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将警报消息 POST 到 Sensu 客户端。
Slack将警报消息 POST 到 Slack 频道。
SNMPTrap触发 SNMP 陷阱。
Talk将警报消息 POST 到 Talk 客户端。
tcp通过原始 TCP 将数据发送到指定地址。
Telegram将警报消息 POST 到 Telegram 客户端。
VictorOps将警报发送到 VictorOps。

警报事件数据

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

名称描述
ID警报的 ID,由用户定义。
消息警报消息,由用户定义。
详细信息警报详细信息,由用户定义的 HTML 内容。
时间警报发生的时间。
Duration警报持续时间(以纳秒为单位)。
LevelOK、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')

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

Kapacitor 支持警报重置表达式。这样,当警报进入某个状态时,只有当其重置表达式求值为 true 时,才能将其严重性降低。

示例

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)

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

Value警报状态
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')

类别

Category 将此警报放入一个命名的类别中。类别用于 抑制 警报。

alert.category(value string)

Crit

CRITICAL 警报级别的筛选表达式。空值表示该级别无效且将被跳过。

alert.crit(value ast.LambdaNode)

CritReset

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

alert.critReset(value ast.LambdaNode)

详细信息

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

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

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

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

示例

|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

将警报数据通过电子邮件发送到指定的“收件人”电子邮件地址。详细的配置选项和设置说明可在 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 闪烁 类似。

每个不同的警报级别都被视为一个不同的状态。低阈值和高阈值是状态更改百分比的反向阈值。这意味着,如果状态更改的百分比超过 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,]+。如果没有执行 group-by,则等于字面值 '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

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

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

以下两个 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 警报和主机警报,它们之间的 host 标签必须相等。这样,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。如果没有执行 group-by,则等于字面值 'nil'。
标签标签映射。使用 {{ index .Tags "key" }} 获取特定标签值。
Level警报级别 - INFOWARNINGCRITICAL
字段字段映射。使用 {{ index .Fields "key" }} 获取特定字段值。
时间触发事件的点的 时间。默认格式为 YYYY-MM-DD 00:00:00 +0000 UTC
Duration警报的持续时间。

默认: {{ .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" }}')

生成的 Message: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://: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

将 JSON 警报数据 HTTP POST 到指定 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 陷阱发送警报。详细的配置选项和设置说明可在 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()

如果总共 60 秒的值大于 10,则只会发送两个事件。首先,当值越过阈值时,然后,当它回落到 OK 状态时。如果没有 stateChangesOnly,警报会触发 7 次:6 次针对满足条件的每个 10 秒周期,另一次是恢复。

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

示例

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

TCP

通过 TCP 将 JSON 警报数据发送到指定地址。详细的使用说明可在 TCPEvent Handler 文章中找到。

// 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 duration 将发出一个 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)

用于创建低吞吐量警报(即死人开关)的辅助函数。

  • 阈值:如果吞吐量低于每 points/interval 的点数,则触发警报。
  • 间隔:检查吞吐量的频率。
  • 表达式:可选的表达式列表,也用于评估。对于按时警报很有用。

示例

    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 表达式来进一步限制死人开关的触发时间。示例

    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

Difference

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

alert|difference(field string)

返回:InfluxQLNode

Distinct

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

alert|distinct(field string)

返回:InfluxQLNode

Ec2Autoscale

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

alert|ec2Autoscale()

返回:Ec2AutoscaleNode

Elapsed

计算点之间经过的时间。

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

返回:InfluxQLNode

Eval

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

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

返回:EvalNode

First

选择第一个点。

alert|first(field string)

返回:InfluxQLNode

Flatten

将具有相似时间戳的点展平为单个点。

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 个参数,则必须指定一个 endpoint 属性方法。

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

Last

选择最后一个点。

alert|last(field string)

返回:InfluxQLNode

Max

选择最大点。

alert|max(field string)

返回:InfluxQLNode

平均值

计算数据的平均值。

alert|mean(field string)

返回:InfluxQLNode

Median

计算数据的中位数。

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

alert|median(field string)

返回:InfluxQLNode

Min

选择最小点。

alert|min(field string)

返回:InfluxQLNode

Mode

计算数据的众数。

alert|mode(field string)

返回:InfluxQLNode

MovingAverage

计算最后 window 个点的移动平均值。直到窗口填满才会发出点。

alert|movingAverage(field string, window int64)

返回:InfluxQLNode

Percentile

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

alert|percentile(field string, percentile float64)

返回:InfluxQLNode

Sample

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

将发出一个点,每隔指定的 count 或 duration。

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

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

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 只能应用于流边缘。

alert|window()

返回:WindowNode


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2