AlertNode
alert
节点触发不同严重级别的事件,并将事件传递给事件处理程序。触发警报的标准通过 lambda 表达式指定。请参阅下方的 AlertNode.Info、AlertNode.Warn 和 AlertNode.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 string , args ...string ) | 每当触发警报时执行命令,并通过 STDIN 以 JSON 格式传递警报数据。 |
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 ) | 抑制类别中的其他警报。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 频道。 |
发送包含警报数据的电子邮件。 | |
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)
例如,给定以下值,相应的警报状态为
值 | 警报状态 |
---|---|
61 | INFO |
73 | WARNING |
64 | WARNING |
85 | CRITICAL |
62 | INFO |
56 | INFO |
47 | OK |
可用统计信息
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)
通过电子邮件将警报数据发送到指定的 “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 | 有关正在运行的服务器的信息。可用的嵌套字段有 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
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" }} 获取特定的标签值。 |
级别 | 警报级别 - INFO 、WARNING 、CRITICAL 。 |
字段 | 字段的 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)
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...
id
和 message
警报属性可以通过 ‘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)
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()
最后一个
选择最后一个点。
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
计算 min
和 max
点之间的差值。
alert|spread(field string)
返回:InfluxQLNode
StateCount
创建一个跟踪给定状态下连续点数的节点。
alert|stateCount(expression ast.LambdaNode)
返回: StateCountNode
StateDuration
创建一个跟踪给定状态持续时间的节点。
alert|stateDuration(expression ast.LambdaNode)
Stats
创建一个新的数据流,其中包含节点的内部统计信息。间隔表示基于实时发出统计信息的频率。这意味着间隔时间独立于源节点正在接收的数据点的时间。
alert|stats(interval time.Duration)
返回: StatsNode
Stddev
计算标准差。
alert|stddev(field string)
返回:InfluxQLNode
Sum
计算所有值的总和。
alert|sum(field string)
返回:InfluxQLNode
SwarmAutoscale
创建一个可以为 Docker swarm 集群触发自动扩容事件的节点。
alert|swarmAutoscale()
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
此页对您有帮助吗?
感谢您的反馈!