警报节点
这个 alert 节点触发具有不同严重程度级别的事件,并将事件传递给 事件处理程序。触发警报的标准通过 lambda 表达式 指定。请参见下面的 AlertNode.Info、AlertNode.Warn 和 AlertNode.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 string, args ...string) | 每当触发警报时执行一个命令,并以JSON格式通过STDIN传递警报数据。 |
flapping ( low float64, high 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 string, equalTags ...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 频道。 |
| 发送带有警报数据的电子邮件。 | |
| 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 | 关于运行服务器的信息。可用的嵌套字段包括 Hostname、 ClusterID 和 ServerID。 |
默认: {{ .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”配置部分全局配置id和message警报属性。
由于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()
最后
选择最后一点。
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
扩散
计算 min 和 max 点之间的差。
alert|spread(field string)
返回: InfluxQLNode
状态计数
创建一个节点,用于跟踪给定状态中连续点的数量。
alert|stateCount(expression ast.LambdaNode)
返回: StateCountNode
状态持续时间
创建一个跟踪给定状态下持续时间的节点。
alert|stateDuration(expression ast.LambdaNode)
统计
创建一个新的数据流,其中包含节点的内部统计信息。 间隔表示根据实时多长时间发出一次统计信息。 这意味着间隔时间与源节点接收的数据点次数无关。
alert|stats(interval time.Duration)
返回结果: StatsNode
标准差
计算标准差。
alert|stddev(field string)
返回: InfluxQLNode
总和
计算所有值的总和。
alert|sum(field string)
返回: InfluxQLNode
群集自动缩放
创建一个可以触发Docker swarm集群的自动缩放事件的节点。
alert|swarmAutoscale()
顶部
选择前 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