AlertNode
alert 节点会触发不同严重级别的事件,并将事件传递给 事件处理程序。触发警报的条件通过 lambda 表达式 指定。有关详细信息,请参见下文的 AlertNode.Info、AlertNode.Warn 和 AlertNode.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 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 ) | 抑制同一类别中的其他警报。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 频道。 |
| 发送包含警报数据的电子邮件。 | |
| 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 | 警报持续时间(以纳秒为单位)。 |
| Level | 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')每个表达式都维护自己的状态。表达式的执行顺序不被认为是确定的。对于每个点,表达式可能会或可能不会被评估。如果没有表达式为 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 | 警报状态 |
|---|---|
| 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')全部
表示只有当批处理中的所有点都匹配条件时,才会触发警报。不适用于流式警报。
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 事件处理程序 文章中找到。
示例 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 | 有关运行服务器的信息。可用的嵌套字段有 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
抑制同一类别中的其他警报。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 | 警报级别 - INFO、WARNING、CRITICAL。 |
| 字段 | 字段映射。使用 {{ 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)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...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 表达式来进一步限制死人开关的触发时间。示例
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)Difference
计算点之间的差异,与经过的时间无关。
alert|difference(field string)返回:InfluxQLNode
Distinct
生成仅包含不同点的批次。
alert|distinct(field string)返回:InfluxQLNode
Ec2Autoscale
创建一个可以为 ec2 自动伸缩组触发自动伸缩事件的节点。
alert|ec2Autoscale()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()Join
将此节点与其他节点连接。数据按时间戳连接。
alert|join(others ...Node)返回:JoinNode
K8sAutoscale
创建一个可以为 kubernetes 集群触发自动伸缩事件的节点。
alert|k8sAutoscale()KapacitorLoopback
创建一个 kapacitor 回送节点,该节点会将数据作为流重新发送到 Kapacitor 中。
alert|kapacitorLoopback()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
计算 min 和 max 点之间的差值。
alert|spread(field string)返回:InfluxQLNode
StateCount
创建一个节点,该节点跟踪给定状态下的连续点数。
alert|stateCount(expression ast.LambdaNode)StateDuration
创建一个节点,该节点跟踪给定状态下的持续时间。
alert|stateDuration(expression ast.LambdaNode)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()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
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Kapacitor 和本文档提供反馈和错误报告。要获取支持,请使用以下资源: