แกแแแแ แแฃแแแ, แแฆแแก แแ แแแแ แแแแฎแฃแแแแก, แ แแขแแ แแ แแก แกแแญแแ แ แกแแ แแแกแแก แแแขแ แแแแก แจแแแ แแแแแ. แจแแแแแแ แแแแแแฃแ แ แแแแแฏแ แแ แแก แจแแแ แแแแแฃแแ แแแขแ แแแแก แแแคแ แแฎแแแแแแก แแแงแแแแแ, แ แแแแแแช แจแแแแขแงแแแแแแแ แแฅแแแแแแแก แแแกแแฎแแ แฎแแแแ แแ แฎแแแจแ (แคแแกแขแ, Slack, Telegram) แแแแแชแแแแแจแ แ แแแแ แแแแแฎแ แแก แจแแกแแฎแแ. แกแแกแขแฃแแ แแก แแแแแแ แแแฏแแแจแแแก แกแแ แแแกแจแ
Capacitor แแ แแก TICK แกแขแแแแก แแแฌแแแ, แ แแแแแกแแช แจแแฃแซแแแ แแแขแ แแแแก แแแแฃแจแแแแแ InfluxDB-แแแ. แแแก แจแแฃแซแแแ แแแแแแแจแแ แแก แ แแแแแแแแ แแแแแแแ แแ แแแ (แจแแฃแแ แแแแก), แแแแแแแแแแก แ แแแแ แกแแกแแ แแแแแ แแแฆแแแฃแแ แแแแแชแแแแแแแแ, แแแฌแแ แแก แจแแแแแ InfluxDB-แจแ, แแแแแแแแแก แแแคแ แแฎแแแแแ Slack/Telegram/mail-แแ.
แแแแแ แแแกแขแ แแแแแ แ แแ แแแขแแแฃแ แแ
แแแแแ แฌแแแแแแ!
float & int, แแแแแแแ แแจแแแแก แจแแชแแแแแแ
แแแกแแแฃแขแฃแ แแ แกแขแแแแแ แขแฃแแ แแ แแแแแแ, แแแแแแ แแแฃแแ แแแกแขแแแแก แกแแจแฃแแแแแแ:
var alert_float = 5.0
var alert_int = 10
data|eval(lambda: float("value") > alert_float OR float("value") < float("alert_int"))
แแแแฃแแแกแฎแแแแ () แแแแแงแแแแแ
แแฃ แขแแแ/แแแแ แแ แแ แแก แจแแแกแแแฃแแ, แฌแแ แแแแฅแแแแแ แแแแแแแ แแจแแแแก แจแแชแแแแแแ:
|default()
.tag('status', 'empty')
.field('value', 0)
แจแแแ แแแแแก แจแแแกแแแ (แจแแแ แแ แแแ แ)
แแแแฃแแแกแฎแแแแแ, แจแแแ แแแแ แแแแฃแฅแแแแก แฌแแ แขแแแแแก, แกแแแแช แแแแแชแแแแแ แแ แแ แแก (แจแแแ).
Fill('null')-แแ แจแแกแ แฃแแแแแ แแแ แ แจแแแ แแแแ, แ แแก แจแแแแแแแช แแฅแแแ แฃแแแ แแแแแแแแ แแแแฃแแแกแฎแแแแ() แแ แจแแแแกแแ แชแแ แแแแ แแแแจแแแแแแแแแ:
var data = res1
|join(res2)
.as('res1', 'res2)
.fill('null')
|default()
.field('res1.value', 0.0)
.field('res2.value', 100.0)
แแฅ แฏแแ แแแแแ แแ แแก แแแฃแแแกแ. แแแแแ แแแชแแแฃแ แแแแแแแแจแ, แแฃ แแ แ-แแ แแ แกแแ แแ (res1 แแ res2) แชแแ แแแแแ, แจแแแแแแ แแแฆแแแฃแแ แกแแ แแ (แแแแแชแแแแแ) แแกแแแ แชแแ แแแแ แแฅแแแแ. แแ แแแแแแ แ แแแแแแแแ แแแแแแแ Github-แแ (
แแแ แแแแแแก แแแแแงแแแแแ แแแแแแแแแแจแ (แแฃ แแแแแแแจแ)
|eval(lambda: if("value" > 0, true, false)
แแแแ แฎแฃแแ แฌแฃแแ แแแแกแแแแแแแแ แแ แแแ แแแแแกแแแแก
แแแแแแแแแ, แแฅแแแ แฃแแแ แจแแแแแ แแ แแแแ แฎแฃแแ แฌแฃแแแก แแแแจแแแแแแแแแ แฌแแแ แแแแ แแก. แจแแแแซแแแแ แแแฆแแ แแแแแชแแแแแแก แแ แ แแแ แขแแ แแ แชแแแแแฃแ แแแ แขแแแจแ แแ แแแแแฆแแ แแแแแชแแแแแแก แแแฌแแแ แฃแคแ แ แแแแ แแแ แแแแแแแ:
|where(lambda: duration((unixNano(now()) - unixNano("time"))/1000, 1u) < 5m)
แแแแ แฎแฃแแ แฌแฃแแแก แแแขแแ แแแขแแแ แแฅแแแแ BarrierNode-แแก แแแแแงแแแแแ, แ แแแแแแช แฌแงแแแขแก แแแแแชแแแแแก แแแแแแแแฃแ แแ แแแแ:
|barrier()
.period(5m)
Go แจแแแแแแแแแก แแแแแงแแแแแแก แแแแแแแแแแ แจแแขแงแแแแแแแแจแ
แจแแแแแแแแ แจแแแกแแแแแแแ แคแแ แแแขแก แแแแแขแแแแ
แแฃ แแแแแ
แฉแแแ แฌแแกแ แแแจแ แแแงแแแแแ แกแแแแแฎแแแก แแ แแ แแแฅแชแแแ แแแแแแแแแแก แขแแฅแกแขแแ แแแแแ แแ แแฎแแ:
|alert()
...
.message(
'{{ if eq .Level "OK" }}It is ok now{{ else }}Chief, everything is broken{{end}}'
)
แแ แ แชแแคแ แ แแแฌแแแแแแก แจแแแแแ แจแแขแงแแแแแแแแจแ
แจแแขแงแแแแแแแแก แฌแแแแแฎแแแก แแแฃแแฏแแแแกแแแ:
|alert()
...
.message(
'now value is {{ index .Fields "value" | printf "%0.2f" }}'
)
แชแแแแแแแแก แแแคแแ แแแแแ แจแแขแงแแแแแแแแจแ
แฉแแแ แแแฉแแแแแแ แแแแแขแแแแ แแแคแแ แแแชแแแก แจแแขแงแแแแแแแแจแ, แ แแแ แแฃแแแกแฃแฎแแ แแแแฎแแแก โแ แแขแแ แงแแแ แแกโ?
var warnAlert = 10
|alert()
...
.message(
'Today value less then '+string(warnAlert)+'%'
)
แแแคแ แแฎแแแแแแก แฃแแแแแแฃแ แ แแแแแขแแคแแแแขแแ แ
แแก แแฃแชแแแแแแแแ, แ แแแแกแแช แแแแแชแแแแแจแ แแ แแก แแ แแแ แแแขแ แฏแแฃแคแ, แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ แแฎแแแแ แแ แแ แแแคแ แแฎแแแแแ แแฅแแแแ แแแแแ แแ แแแฃแแ:
|alert()
...
.id('{{ index .Tags "myname" }}/{{ index .Tags "myfield" }}')
แแแ แแแแฃแแ แแแแแฃแจแแแแแแแก
แแแแแฃแจแแแแแแแแแก แแแ แกแแแจแ แจแแแแก exec, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แจแแแกแ แฃแแแ แแฅแแแแ แกแแ แแแขแ แแแแแแแ แแแ แแแแขแ แแแแ (stdin) - แแ แแแขแแฃแแแแ แแ แแแขแ แแ แแคแแ แ!
แฉแแแแ แแ แ-แแ แแ แฉแแแฃแแแแแ แแแแแแแก แแแขแแ แ แกแแ แแแขแ Slack-แแกแแแแก แจแแขแงแแแแแแแแแแก แแแแแแแแแกแแแแก.
แแแแแแแแ แแแแแ, แแแแแแแแ แแแแแแแแแแแแแ แแแขแแ แแแแชแแแ แแแชแฃแแ แแ แแแแแแก แกแฃแ แแแ แจแแขแงแแแแแแแแจแ. แแแแก แจแแแแแ, แฉแแฌแแ แแ OK แแแแแจแ แแแแแ แฏแแฃแคแแก แฌแแแ แแแคแ แแฎแแแแแแจแ แแ แแ แ แชแแแแ แแแกแแฏแแ. แชแแขแ แแแแแแแแแแแ - แแแแแแขแแ แจแแขแงแแแแแแแแก แงแแแแแแ แแแแ แชแแแแแฃแแ แจแแชแแแแ แแแแ X แฌแฃแแจแ.
แชแแแแ แแแแแ แแแแฃแแแแแชแแ แกแฎแแ แกแแ แแแกแแแแแ แแ แแแแแกแแแแ แ แฅแแแแแแ, แ แแแแแแช แแแแชแแ แแแฃแแแ แแแคแ แแฎแแแแแแ (แแฎแแแแ แแ แจแแแแฎแแแแแจแ, แแฃ แแฅแแแแ แแแแแขแแ แแแแ แกแแแแแ แแกแแ แแฃแจแแแแก).
แแแแแฃแจแแแแแแแก แแฆแฌแแ แแแแแแก แแแแแแแแ, แกแแแแช slack_handler.py แแ แแก แฉแแแแ แแแแแแแฌแแ แแแ แกแแ แแแขแ:
topic: slack_graph
id: slack_graph.alert
match: level() != INFO AND changed() == TRUE
kind: exec
options:
prog: /sbin/slack_handler.py
args: ["-c", "CHANNELID", "--graph", "--search"]
แ แแแแ แแแแแกแฌแแ แแ แฎแแ แแแแแแ?
แแแ แแแแขแ แแฃแ แแแแแก แแแแแงแแแแแ
|log()
.level("error")
.prefix("something")
Watch (cli): capacitor -url
แแแ แแแแขแ httpOut-แแ
แแฉแแแแแแก แแแแแชแแแแแก แแแแแแแแ แ แแแแกแแแแแจแ:
|httpOut('something')
แฃแงแฃแ แ (แแแแฆแ):
แจแแกแ แฃแแแแแก แกแฅแแแ
- แแแแแแฃแแ แแแแแแแแ แแแ แฃแแแแก แจแแกแ แฃแแแแแก แฎแแก แคแแ แแแขแจแ แแแแแกแแแแแ แ แแชแฎแแแแแ
แแ แแคแแแ . - แแแฆแแ แแแแแ
dot . - แฉแแกแแแ แแแงแฃแ แแแแแจแ,
แแกแแแแแแแแ .
แแแแแ แกแแ แจแแแซแแแแ แกแแแแแแกแแ แจแแแแ?
แแ แแแก แแแแแแญแแ influxdb-แจแ แฉแแฌแแ แแแ
แแแแแแแแแ, แฉแแแ แแแแแงแแแแ แแแคแ แแฎแแแแแ แกแแแแจแ แแแแฎแแแแแแแก แฏแแแแกแแแแก (groupBy(1h)) แแ แแแแแแ แฉแแแฌแแ แแ แแแคแ แแฎแแแแแ, แ แแแแแแช แแแฎแแ influxdb-แจแ (แแ แแคแแแแจแ แแ แแคแแแแ แแ แแแแแแแก แคแแฅแขแแก แแแแแแแ แฉแแแแแแแก แแแแแแ).
influxDBOut() แแแฌแแ แก แแ แแแก แแแแจแแแแแแแแก แแแคแ แแฎแแแแแแแแ แแ แแแก แแแจแแฃแแแแแ; แจแแกแแแแแแกแแ, แฉแแ แขแแ แฌแแ แขแแแ แแแแฌแแ แแแ แแแ แ/แแแแแ, แแแแ แ แแแคแ แแฎแแแแแ แแแแแแ.
แ แแแแกแแช แกแแญแแ แแ แกแแแฃแกแขแ: แฉแแแ แแแฃแจแแแแ แแ แแ แแแแแแแก แแแแแแ แแแแแ แแแ แแแแฃแแ แแแแแฃแจแแแแแแแก แแแแแซแแฎแแแแ, แ แแแแแแช แฉแแฌแแ แก แแแแแชแแแแแก influxdb-แจแ แแแแแแแแ แ แแ แแแก แแแจแแฃแแแ.
แแแแแ แ, แแจแแแแแ แแ แแแแแแแแแ
แแแจแแแแแกแแก, capacitor-แก แจแแฃแซแแแ แฉแแแขแแแ แแแก แแแแชแแแแแ, แจแแแแแแแแ แแ แแแแแฃแจแแแแแแแแ แแแ แแฅแขแแ แแแแแ, แ แแแแแแช แแแแแแแแฃแแแ แแแแคแแแฃแ แแชแแแจแ [load] แแแแแจแ.
แแแแแแแแแก แกแฌแแ แแ แจแแกแแฅแแแแแแ แแแแญแแ แแแแแ แจแแแแแแ แ แแ:
- แคแแแแแก แกแแฎแแแ โ แแแคแแ แแแแแ แกแแ แแแขแแก ID/แกแแฎแแแแ
- แขแแแ - แแแแแแ / แแแ แขแแ
- dbrp โ แกแแแแแแซแ แกแแขแงแแ, แ แแแแแแช แแแฃแแแแแแก, แ แแแแ แแแแแชแแแแ แแแแแจแ + แแแแแขแแแแจแ แแฃแจแแแแก แกแแ แแแขแ (dbrp โแแแแฌแแแแแแแโ โแแแขแแแแแโ)
แแฃ แแแแแแ แแ แฏแแฃแคแแก แแแแชแแแ แแ แจแแแชแแแก แฎแแแก dbrp-แแ, แแแแแ แกแแ แแแกแ แฃแแ แก แแขแงแแแก แแแฌแงแแแแแ แแ แแฃแแแฎแแแแแ แแแฌแแ แก แแแแก แจแแกแแฎแแ แแฃแ แแแแจแ.
แฅแ แแแแแ แแคแจแ, แแแ แแฅแแ, แแก แฎแแแ แแ แฃแแแ แแ แกแแแแแแแก, แแก แแ แแแแฆแแแ แแแขแแ แคแแแกแแก แกแแจแฃแแแแแแ แแ แฌแแ แแแฅแแแแก แจแแชแแแแแก.
แฐแแแ แแแแขแแแแแ แแก แแแแแแกแแก: Dockerfile แแแแแแแก -1-แแ, แแฃ แแ แแก แฎแแแแแ //.+dbrp, แ แแช แกแแจแฃแแแแแแก แแแแชแแแ แแแฃแงแแแแแแแแ แแแแแแ แฌแแ แฃแแแขแแแแแแแก แแแแแแ build-แแก แแฌแงแแแแกแแก.
แจแแฃแแ แแแ แแ แแก แแแแ แก
แแแแแแแแแก แแแแแแแแ: แแฅแแแ แฃแแแ แแแฆแแ แกแแ แแแกแแก แแฃแจแแแแแก แแ แแแก 95-แ แแ แแชแแแขแ แแ แแ แแแแ แแก แแแแแแแแแแแจแ, แจแแแแแ แแ แแแแ 10 แฌแฃแแ แแ แแแแจแแแแแแแแก.
แแฅแแแ แแ แจแแแแซแแแแ แจแแแ แแแแ แแ แแแแแ แแแแ แแ, แแแแ/แกแแจแฃแแแ/แแแแแแแ แแฃแแฅแขแแแแก แฏแแฃแคแแ แแฅแชแแแก แแแแแซแก แแแแแแแ, แแแแ แฃแแแแแ แจแแชแแแแ โแแแ แแแแแแแขแแ แแแแจแแแก แจแแฃแกแแแแแ แแแแแแแก: แแแ แขแแ -> แแแแแแโ.
แฏแแฃแคแแก แจแแแแแ, แ แแแแ แช แชแแแแแ แแแแแแ แแแแแฎแแขแฃแแแแแจแ, แแกแแแ แแ แแ แแก แฉแแแแชแแแแแฃแแ.
แแ แกแแแแแก แจแแกแแซแแแแแแแ แจแแแแแฎแแ แกแแญแแ แ แแแแ แแแ แแแ แแแแ แแแ แขแแแแแ แคแแแแจแ udf-แแก แกแแจแฃแแแแแแ แแ แฉแแขแแแ แแแ แแก แคแแแแ sideload-แแก แกแแจแฃแแแแแแ.
แ แ แแแแแแฌแงแแแขแแ แแแแ?
แฉแแแ แแแงแแแก 100-แแแ แกแแกแขแฃแแ แแก แแแแฌแแแแแแแ, แแแแแแฃแ แแแแแแแก แจแแแซแแแแ แฐแฅแแแแแก แ แแแแแแแแ แแแแจแแ แ, แแแแแ แแแแก แแ แฎแ แแฃแฌแแแแ. แแแแฎแแแแแแ 300 แแกแแแ แแ แฎแแ, แแแแแแฃแแ แแ แฎแ แจแแแซแแแแ แฉแแแแแแ แแแก. แงแแแแ แฉแแฌแแ แแแ แแแขแ แแแแแแ แฉแแแ แแแแแแแแ แแแแแ แจแแชแแแแแก แกแแฎแจแแ แแก (แแแแฎแแแแแแก แแ แจแแชแแแแแแก).
แ แแขแแ แแ แ แแ แแแ?
Grafana-แจแ แแแแคแแแฃแ แแ แแแฃแ แจแแชแแแแแก แกแแแแแแแแก แ แแแแแแแแ แฃแแ แงแแคแแแ แแฎแแ แ แแฅแแก. แแแแแแ แแ แแ แแขแแแฃแแแ, แแแแแ แจแแแแซแแแแ แแแแแแแ แแแฎแฃแญแแ, แกแแขแฃแแชแแแแแ แแแแแแแแแแ แ.
แแ แแคแแแแ แแ แแชแแก แ แแแแ แแแแแแแแแแก แแแแแแแแแก แจแแ แแก + แแแคแ แแฎแแแแแ, แแแแ แแ แฉแแแ แแแญแแ แแแแ แแแฉแแแแแแแแ (แแแแฎแแแแแแ-แจแแชแแแแแแ)/แแแแฎแแแแแแ.
แจแแชแแแแแแ แกแแแแแฆแ แแ แแแแแแงแฃแ แแแ:
แแ แแแแแแแ แแแ แแขแแแ, แ แแแแกแแช แแแแแฎแแแแแ แฌแแ แแแขแแแฃแแ แแแแฎแแแแแแแ:
แแแ แแ, แฉแแแ แจแแแแแซแแแ แฌแแแแกแฌแแ แแแแแแแแแแแ แขแแ แแคแ แกแแ แแแกแจแ แแ แแแแแแแแ แแ แแแแแแ แ แจแแแแฎแแแแแจแ แแก แแแฃแจแแแแแก. แแแแ แแ แแ แ แฉแแแแจแ, แ แแแแแ... แแแแแแฃแแ แแ แฎแแกแแแแก แกแแแฃแแแ แ แแแแแคแแ แแแแ แแแแแแแ "แแแ แแแแฃแ แแ" แแ แกแแแแแแแแแชแแ แแฃแจแแแแก แกแขแแขแแแฃแ แ แแแแจแแแแแแแแแแก แแแฎแแแแแ (แฉแแแ แแแซแแแ แแแ แฉแแแแ แแแแแแ, แแชแแแแ แแแ, แแฃ แฎแจแแ แแ แแแคแ แแฎแแแแแแแ).
แแก แแ แแก แแแแแแแแแแ "แแแ แแแแฃแ แ" แกแฎแแแแแกแฎแแ แแ แฎแแกแแแแก:
แฉแแแ แฃแแฃแแแแแแงแแคแ แฌแแแ แแฃแแฅแขแก แแ แแแแ แแฃแแแแ, แ แแ "แแแ แแแแฃแ แ" แกแฃแ แแแ แแกแแแแกแแ แงแแแแ แแแแฌแแแแแแแกแแแแก. แแฎแแ แงแแแแแคแแ แ แแแ แแแแแ แแ แจแแแแแซแแแ แแ แแคแแแแจแ แแแคแ แแฎแแแแแแแแ แแแแฃแแแแแแแแ?
แฉแแแ แจแแแแแซแแแ, แแแแ แแ แแแแแแแแแ แแ แแแแแแ, แ แแแแแ แฃแแแ แแแแ แฉแแแ แแ แ-แแ แแ แแแ แแแแขแ:
แ) แแแแแแแแ แแแแ แ แแ แแคแแแ แแแแแแฃแแ แแ แฎแแกแแแแก แชแแแแ (แแ แแขแแแแแแฃแแแ แแฎแแแแ แแแ)
แ) แแแขแแแแ แแ แแ แกแฅแแแ แงแแแแ แแ แฎแแแ (แแ แแแแแแ แแแ แคแแ แแ แฎแแแแแกแ แแ แแแ แแแแฃแ แกแแแแแแแแจแ)
แฒ แแแแ แแแแแแแ?
แแแแแ แแ แแฎแแ, แแ แแก แแแ แแ แกแแฌแงแแกแ แแแแแแแแ แแแแฃแแแแขแแชแแแจแ (
แ แ แแแแแแแแแ แแแแแก:
- แจแแฃแแ แแแ แแ แกแแ แแแก แ แแแแแแแแ แกแแแแจแ, แแ แฎแแแแก แแแฎแแแแแ แแแฏแแฃแคแแแ;
- แจแแแแกแแ แกแแ แแแแ แฏแแฃแคแแก แแแฎแแแแแ, แแฃ แแแแแชแแแแแ แแ แแงแ;
- แจแแแแแ แแ แแแแ 10 แฌแฃแแแก แแแแแแแ แฌแแแ แแแแแชแแแแแแแ;
- แแงแแแ แแ, แแฃ แ แแแแก แแแแแแแ;
- แฉแแแ แแฌแแ แ แแแแแแแแแ แขแแ แแคแแแก แแ แกแแแแแแแแก, แ แแแแแแแช แแแฎแแ influxdb-แจแ;
- แแแฃแแแแแแแ แกแแกแแ แแแแแ แจแแขแงแแแแแแแ slack-แก.
แฉแแแ แแแ แแ, แฉแแแ แจแแแซแแแแ แ แแช แจแแแซแแแแ แแแแแแแ แแแแแฆแฌแแแ แงแแแแแคแแ แก, แ แแกแ แแแฆแฌแแแแช แแแแแแแแ แแแแแก (แแ แแแแแ แชแแขแ แแแขแ แกแแแแแ แแแแแฃแจแแแแแแแแแ).
แจแแแแซแแแแ แแแฎแแ github.com
แจแแแแแแ แแแฆแแแฃแแ แแแแแก แแแแแแแแ:
dbrp "supplier"."autogen"
var name = 'requests.rate'
var grafana_dash = 'pczpmYZWU/mydashboard'
var grafana_panel = '26'
var period = 8h
var todayPeriod = 10m
var every = 1m
var warnAlert = 15
var warnReset = 5
var reqQuery = 'SELECT sum("count") AS value FROM "supplier"."autogen"."requests"'
var errQuery = 'SELECT sum("count") AS value FROM "supplier"."autogen"."errors"'
var prevErr = batch
|query(errQuery)
.period(period)
.every(every)
.groupBy(1m, 'channel', 'supplier')
var prevReq = batch
|query(reqQuery)
.period(period)
.every(every)
.groupBy(1m, 'channel', 'supplier')
var rates = prevReq
|join(prevErr)
.as('req', 'err')
.tolerance(1m)
.fill('null')
// ะทะฐะฟะพะปะฝัะตะผ ะทะฝะฐัะตะฝะธั ะฝัะปัะผะธ, ะตัะปะธ ะธั
ะฝะต ะฑัะปะพ
|default()
.field('err.value', 0.0)
.field('req.value', 0.0)
// if ะฒ lambda: ััะธัะฐะตะผ ัะตะนั, ัะพะปัะบะพ ะตัะปะธ ะพัะธะฑะบะธ ะฑัะปะธ
|eval(lambda: if("err.value" > 0, 100.0 * (float("req.value") - float("err.value")) / float("req.value"), 100.0))
.as('rate')
// ะทะฐะฟะธััะฒะฐะตะผ ะฟะพััะธัะฐะฝะฝัะต ะทะฝะฐัะตะฝะธั ะฒ ะธะฝัะปัะบั
rates
|influxDBOut()
.quiet()
.create()
.database('kapacitor')
.retentionPolicy('autogen')
.measurement('rates')
// ะฒัะฑะธัะฐะตะผ ะดะฐะฝะฝัะต ะทะฐ ะฟะพัะปะตะดะฝะธะต 10 ะผะธะฝัั, ััะธัะฐะตะผ ะผะตะดะธะฐะฝั
var todayRate = rates
|where(lambda: duration((unixNano(now()) - unixNano("time")) / 1000, 1u) < todayPeriod)
|median('rate')
.as('median')
var prevRate = rates
|median('rate')
.as('median')
var joined = todayRate
|join(prevRate)
.as('today', 'prev')
|httpOut('join')
var trigger = joined
|alert()
.warn(lambda: ("prev.median" - "today.median") > warnAlert)
.warnReset(lambda: ("prev.median" - "today.median") < warnReset)
.flapping(0.25, 0.5)
.stateChangesOnly()
// ัะพะฑะธัะฐะตะผ ะฒ message ัััะปะบั ะฝะฐ ะณัะฐัะธะบ ะดะฐัะฑะพัะดะฐ ะณัะฐัะฐะฝั
.message(
'{{ .Level }}: {{ index .Tags "channel" }} err/req ratio ({{ index .Tags "supplier" }})
{{ if eq .Level "OK" }}It is ok now{{ else }}
'+string(todayPeriod)+' median is {{ index .Fields "today.median" | printf "%0.2f" }}%, by previous '+string(period)+' is {{ index .Fields "prev.median" | printf "%0.2f" }}%{{ end }}
http://grafana.ostrovok.in/d/'+string(grafana_dash)+
'?var-supplier={{ index .Tags "supplier" }}&var-channel={{ index .Tags "channel" }}&panelId='+string(grafana_panel)+'&fullscreen&tz=UTC%2B03%3A00'
)
.id('{{ index .Tags "name" }}/{{ index .Tags "channel" }}')
.levelTag('level')
.messageField('message')
.durationField('duration')
.topic('slack_graph')
// "today.median" ะดัะฑะปะธััะตะผ ะบะฐะบ "value", ัะฐะบะถะต ะฟะธัะตะผ ะฒ ะธะฝัะปัะบั ะพััะฐะปัะฝัะต ัะธะปะดั ะฐะปะตััะฐ (keep)
trigger
|eval(lambda: "today.median")
.as('value')
.keep()
|influxDBOut()
.quiet()
.create()
.database('kapacitor')
.retentionPolicy('autogen')
.measurement('alerts')
.tag('alertName', name)
แ แ แแ แแก แแแกแแแแ?
Kapacitor แจแแกแแแแจแแแแแ แแฎแแ แชแแแแแแก แแแแแขแแ แแแ-แแแคแ แแฎแแแแแแแก แแแฏแแฃแคแแแแก แแแแแฃแแแแ แแ แแแ, แแฎแแ แชแแแแแแก แแแแแขแแแแ แแแแแแแแแแก แฃแแแ แฉแแฌแแ แแแ แแแขแ แแแแก แกแแคแฃแซแแแแแ, แแฎแแ แชแแแแแแก แแแ แกแแแแแฃแ แแแฅแแแแแแแแก แแ แแฌแแ แแแแแก แกแแ แแแขแแแก (udf).
แจแแกแแแแก แแแ แแแ แ แแ แแ แแก แซแแแแแ แแแฆแแแ - แกแชแแแแ, แแฃ แแ แแแ แแ แกแฎแแ แฎแแแกแแฌแงแแแแ แกแ แฃแแแ แแ แแแแแแแงแแคแแแแแก แแฅแแแแก แกแฃแ แแแแแแก.
แฌแงแแ แ: www.habr.com