เชฎเซเชเซ เชญเชพเชเซ, เชเชเซ เชเซเช เชชเซเชเชคเซเช เชจเชฅเซ เชเซ เชธเซเชตเชพ เชฎเซเชเซเชฐเชฟเชเซเชธ เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพ เชถเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเซ. เชเชเชณเชจเซเช เชคเชพเชฐเซเชเชฟเช เชชเชเชฒเซเช เช เชเชเชคเซเชฐเชฟเชค เชฎเซเชเซเชฐเชฟเชเซเชธ เชฎเชพเชเซ เชเซเชคเชตเชฃเซ เชธเซเช เชเชฐเชตเชพเชจเซเช เชเซ, เชเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เช
เชจเซเชเซเชณ เชเซเชจเชฒเซ (เชฎเซเชฒ, เชธเซเชฒเซเช, เชเซเชฒเชฟเชเซเชฐเชพเชฎ) เชฎเชพเช เชกเซเชเชพเชฎเชพเช เชเซเชเชชเชฃ เชตเชฟเชเชฒเชจเซ เชตเชฟเชถเซ เชธเซเชเชฟเชค เชเชฐเชถเซ. เชเชจเชฒเชพเชเชจ เชนเซเชเซเชฒ เชฌเซเชเชฟเชเช เชธเซเชตเชพเชฎเชพเช
เชเซเชชเซเชธเชฟเชเชฐ เช TICK เชธเซเชเซเชเชจเซ เชเช เชญเชพเช เชเซ เชเซ InfluxDB เชฅเซ เชฎเซเชเซเชฐเชฟเชเซเชธ เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชถเชเซ เชเซ. เชคเซ เช
เชจเซเช เชฎเชพเชชเชจเซ เชเชเชธเชพเชฅเซ เชเซเชกเซ เชถเชเซ เชเซ (เชเซเชกเชพเชถเซ), เชชเซเชฐเชพเชชเซเชค เชกเซเชเชพเชฎเชพเชเชฅเซ เชเชเชเช เชเชชเชฏเซเชเซ เชเชฃเซ เชถเชเซ เชเซ, เชชเชฐเชฟเชฃเชพเชฎ InfluxDB เชชเชฐ เชชเชพเชเซเช เชฒเชเซ เชถเชเซ เชเซ, Slack/Telegram/mail เชชเชฐ เชเซเชคเชตเชฃเซ เชฎเซเชเชฒเซ เชถเชเซ เชเซ.
เชธเชฎเชเซเชฐ เชธเซเชเซเช เชธเชฐเชธ เช
เชจเซ เชตเชฟเชเชคเชตเชพเชฐ เชเซ
เชซเซเชฒเซเช เช เชจเซ เชชเซเชฐเซเชฃเชพเชเช, เชเชฃเชคเชฐเซเชจเซ เชญเซเชฒเซ
เชเชเชฆเชฎ เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชธเชฎเชธเซเชฏเชพ, เชเชพเชคเชฟเช เชฆเซเชตเชพเชฐเชพ เชนเชฒ:
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)
เชเซเชกเชพเช เชญเชฐเซ (เชเชเชคเชฐเชฟเช เชตเชฟ เชฌเชพเชนเซเชฏ)
เชกเชฟเชซเซเชฒเซเช เชฐเซเชชเซ, เชเซเชกเชพเชตเซเช เชคเซ เชฌเชฟเชเชฆเซเชเชจเซ เชเชพเชขเซ เชจเชพเชเชถเซ เชเซเชฏเชพเช เชเซเช เชกเซเชเชพ (เชเชเชคเชฐเชฟเช) เชจเชฅเซ.
เชซเชฟเชฒ('เชจเชฒ') เชธเชพเชฅเซ, เชฌเชพเชนเซเชฏ เชเซเชกเชพเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, เชเซเชจเชพ เชชเชเซ เชคเชฎเชพเชฐเซ เชกเชฟเชซเซเชฒเซเช() เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช
เชจเซ เชเชพเชฒเซ เชเชฟเชเชฎเชคเซ เชญเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
var data = res1
|join(res2)
.as('res1', 'res2)
.fill('null')
|default()
.field('res1.value', 0.0)
.field('res2.value', 100.0)
เช
เชนเซเช เชนเชเซ เชชเชฃ เชเช เชธเซเชเซเชทเซเชฎเชคเชพ เชเซ. เชเชชเชฐเชจเชพ เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เชเซ เชถเซเชฐเซเชฃเซเชฎเชพเชเชฅเซ เชเช (res1 เช
เชฅเชตเชพ res2) เชเชพเชฒเซ เชเซ, เชคเซ เชชเชฐเชฟเชฃเชพเชฎเซ เชถเซเชฐเซเชฃเซ (เชกเซเชเชพ) เชชเชฃ เชเชพเชฒเซ เชนเชถเซ. เชเซเชฅเชฌ เชชเชฐ เช เชตเชฟเชทเชฏ เชชเชฐ เชเชฃเซ เชเชฟเชเชฟเชเซ เชเซ (
เชเชฃเชคเชฐเซเชฎเชพเช เชถเชฐเชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ (เชเซ เชฒเซเชฎเซเชฌเชกเชพเชฎเชพเช เชนเซเชฏ เชคเซ)
|eval(lambda: if("value" > 0, true, false)
เชธเชฎเชฏเชเชพเชณเชพ เชฎเชพเชเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชเซเชฒเซเชฒเซ เชชเชพเชเช เชฎเชฟเชจเชฟเช
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชคเชฎเชพเชฐเซ เชชเชพเชเชฒเชพ เช เช เชตเชพเชกเชฟเชฏเชพ เชธเชพเชฅเซ เชเซเชฒเซเชฒเชพ เชชเชพเชเช เชฎเชฟเชจเชฟเชเชจเชพ เชฎเซเชฒเซเชฏเซเชจเซ เชคเซเชฒเชจเชพ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชคเชฎเซ เชฌเซ เช เชฒเช-เช เชฒเช เชฌเซเชเชฎเชพเช เชกเซเชเชพเชจเชพ เชฌเซ เชฌเซเช เชฒเช เชถเชเซ เชเซ เช เชฅเชตเชพ เชฎเซเชเชพ เชธเชฎเชฏเชเชพเชณเชพเชฎเชพเชเชฅเซ เชกเซเชเชพเชจเซ เชเช เชญเชพเช เชเชพเชขเซ เชถเชเซ เชเซ:
|where(lambda: duration((unixNano(now()) - unixNano("time"))/1000, 1u) < 5m)
เชเซเชฒเซเชฒเซ เชชเชพเชเช เชฎเชฟเชจเชฟเชเชจเซ เชตเชฟเชเชฒเซเชช เชฌเซเชฐเชฟเชฏเชฐเชจเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชนเชถเซ, เชเซ เชจเชฟเชฐเซเชฆเชฟเชทเซเช เชธเชฎเชฏ เชชเชนเซเชฒเชพ เชกเซเชเชพเชจเซ เชเชพเชชเซ เชจเชพเชเซ เชเซ:
|barrier()
.period(5m)
เชธเชเชฆเซเชถเชฎเชพเช เชเซ เชเซเชฎเซเชชเซเชฒเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเชพ เชเชฆเชพเชนเชฐเชฃเซ
เชจเชฎเซเชจเชพเช เชชเซเชเซเชเชฎเชพเชเชฅเซ เชซเซเชฐเซเชฎเซเชเชจเซ เช
เชจเซเชฐเซเชช เชเซ
เชเซ เชฌเซเชเซ
เช เชฎเซ เชตเชธเซเชคเซเชเชจเซ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชฐเชพเชเซเช เชเซเช เช เชจเซ เชฒเซเชเซเชจเซ เชซเชฐเซ เชเชเชตเชพเชฐ เชเซเชเซเชธเซเช เชธเชพเชฅเซ เชเซเชฐเชฟเชเชฐ เชเชฐเชคเชพ เชจเชฅเซ:
|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) เชธเชพเชฅเซ เชคเชฎเชพเชฐเซ เชธเซเชเซเชฐเชฟเชชเซเช เชเชฒเชพเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ - เชธเชฐเซเชเชจเชพเชคเซเชฎเชเชคเชพ เช เชจเซ เชตเชงเซ เชเชเช เชจเชนเซเช!
เช
เชฎเชพเชฐเชพ เชฐเชฟเชตเชพเชเซเชฎเชพเชเชฅเซ เชเช เชธเซเชฒเซเช เชชเชฐ เชธเซเชเชจเชพเช เชฎเซเชเชฒเชตเชพ เชฎเชพเชเซ เชเช เชจเชพเชจเซ เชชเชพเชฏเชฅเซเชจ เชธเซเชเซเชฐเชฟเชชเซเช เชเซ.
เชถเชฐเซเชเชคเชฎเชพเช, เช
เชฎเซ เชธเชเชฆเซเชถเชฎเชพเช เช
เชงเชฟเชเซเชคเชคเชพ-เชธเชเชฐเชเซเชทเชฟเชค เชเซเชฐเชพเชซเชจเชพ เชเชฟเชคเซเชฐ เชฎเซเชเชฒเชตเชพ เชฎเชพเชเชคเชพ เชนเชคเชพ. เชชเชเซเชฅเซ, เชธเชฎเชพเชจ เชเซเชฅเชฎเชพเชเชฅเซ เช
เชเชพเชเชจเซ เชเซเชคเชตเชฃเซ เชชเชฐ เชฅเซเชฐเซเชกเชฎเชพเช 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")
เชเชกเชฟเชฏเชพเชณ (cli): kapacitor -url
httpOut เชธเชพเชฅเซ เชตเชฟเชเชฒเซเชช
เชตเชฐเซเชคเชฎเชพเชจ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เชกเซเชเชพ เชฌเชคเชพเชตเซ เชเซ:
|httpOut('something')
เชเซเช (เชฎเซเชณเชตเซ):
เช เชฎเชฒ เชฏเซเชเชจเชพ
- เชฆเชฐเซเช เชเชพเชฐเซเชฏ เชซเซเชฐเซเชฎเซเชเชฎเชพเช เชเชชเชฏเซเชเซ เชธเชเชเซเชฏเชพเช เชธเชพเชฅเซ เชเชเซเชเซเชเซเชฏเซเชถเชจ เชเซเชฐเซ เชเชชเซ เชเซ
เชเซเชฐเชพเชซเชตเชฟเช . - เชเช เชฌเซเชฒเซเช เชฒเซ
เชกเซเช . - เชคเซเชจเซ เชฆเชฐเซเชถเชเชฎเชพเช เชชเซเชธเซเช เชเชฐเซ,
เชเชจเชเชฆ .
เชคเชฎเซ เชฐเซเช เชเซเชฏเชพเชเชฅเซ เชฎเซเชณเชตเซ เชถเชเซ เชเซ?
เชฐเชพเชเชเชฌเซเช เชชเชฐ influxdb เชฎเชพเช เชเชพเชเชฎเชธเซเชเซเชฎเซเชช
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เช เชฎเซ เชชเซเชฐเชคเชฟ เชเชฒเชพเช (เชเซเชฅเชฌเชพเชฏ(1h)) เชตเชฟเชจเชเชคเซเชเชจเชพ เชธเชฐเชตเชพเชณเชพ เชฎเชพเชเซ เชเช เชเซเชคเชตเชฃเซ เชธเซเช เชเชฐเซเช เชเซเช เช เชจเซ influxdb เชฎเชพเช เชเชตเซเชฒเซ เชเซเชคเชตเชฃเซเชจเซ เชฐเซเชเซเชฐเซเชก เชเชฐเชตเชพ เชฎเชพเชเชเซเช เชเซเช (เชเซเชฐเชพเชซเชจเชพเชฎเชพเช เชเซเชฐเชพเชซ เชชเชฐ เชธเชฎเชธเซเชฏเชพเชจเซ เชนเชเซเชเชคเชจเซ เชธเซเชเชฆเชฐ เชฐเซเชคเซ เชฌเชคเชพเชตเชตเชพ เชฎเชพเชเซ).
influxDBOut() เชเซเชคเชตเชฃเซเชฅเซ เชเชพเชเชฎเชธเซเชเซเชฎเซเชช เชชเชฐ เชธเชฎเชฏ เชฎเซเชฒเซเชฏ เชฒเชเชถเซ; เชคเซ เชฎเซเชเชฌ, เชเชพเชฐเซเช เชชเชฐเชจเซ เชฎเซเชฆเซเชฆเซ เชเซเชคเชตเชฃเซ เชเชตเซเชฏเชพ เชเชฐเชคเชพเช เชตเชนเซเชฒเซ/เชชเชเซเชฅเซ เชฒเชเชตเชพเชฎเชพเช เชเชตเชถเซ.
เชเซเชฏเชพเชฐเซ เชเซเชเชธเชพเชเชจเซ เชเชตเชถเซเชฏเชเชคเชพ เชนเซเชฏ เชคเซเชฏเชพเชฐเซ: เช เชฎเซ เชเชธเซเชเชฎ เชนเซเชจเซเชกเชฒเชฐเชจเซ เชเซเชฒ เชเชฐเซเชจเซ เช เชธเชฎเชธเซเชฏเชพเชจเซเช เชธเชฎเชพเชงเชพเชจ เชเชฐเซเช เชเซเช, เชเซ เชตเชฐเซเชคเชฎเชพเชจ เชเชพเชเชฎเชธเซเชเซเชฎเซเชช เชธเชพเชฅเซ influxdb เชชเชฐ เชกเซเชเชพ เชฒเชเชถเซ.
เชกเซเชเชฐ, เชฌเชฟเชฒเซเชก เช เชจเซ เชเชฎเชพเชตเช
เชธเซเชเชพเชฐเซเชเช เชช เชตเชเชคเซ, เชเซเชชเซเชธเชฟเชเชฐ [เชฒเซเชก] เชฌเซเชฒเซเชเชฎเชพเช เชฐเซเชชเชฐเซเชเชพเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเชเชฅเซ เชเชพเชฐเซเชฏเซ, เชจเชฎเซเชจเชพเช เช เชจเซ เชนเซเชจเซเชกเชฒเชฐเซเชธ เชฒเซเชก เชเชฐเซ เชถเชเซ เชเซ.
เชเชพเชฐเซเชฏเชจเซ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชจเซเชเซเชจเซ เชตเชธเซเชคเซเชเชจเซ เชเชฐเซเชฐ เชเซ:
- เชซเชพเชเชฒเชจเซเช เชจเชพเชฎ - เชธเซเชเซเชฐเชฟเชชเซเช เชเชเชกเซ/เชจเชพเชฎเชฎเชพเช เชตเชฟเชธเซเชคเซเชค
- เชชเซเชฐเชเชพเชฐ - เชธเซเชเซเชฐเซเชฎ/เชฌเซเช
- dbrp โ เชธเซเชเซเชฐเชฟเชชเซเช เชเชฏเชพ เชกเซเชเชพเชฌเซเช + เชชเซเชฒเชฟเชธเซเชฎเชพเช เชเชพเชฒเซ เชเซ เชคเซ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชเซเชจเซ เชเซเชตเชฐเซเชก (dbrp โเชธเชชเซเชฒเชพเชฏเชฐ.โ โเชเชเซเชเชจโ)
เชเซ เชเซเชเชฒเชพเช เชฌเซเช เชเชพเชฐเซเชฏเชฎเชพเช dbrp เชธเชพเชฅเซเชจเซ เชฒเชพเชเชจ เชถเชพเชฎเซเชฒ เชจเชฅเซ, เชคเซ เชธเชฎเชเซเชฐ เชธเซเชตเชพ เชถเชฐเซ เชฅเชตเชพเชจเซ เชเชจเชเชพเชฐ เชเชฐเชถเซ เช เชจเซ เชฒเซเชเชฎเชพเช เชชเซเชฐเชฎเชพเชฃเชฟเชเชชเชฃเซ เชคเซเชจเชพ เชตเชฟเชถเซ เชฒเชเชถเซ.
เชเซเชฐเซเชจเซเชเซเชฐเชพเชซเชฎเชพเช, เชคเซเชจเชพเชฅเซ เชตเชฟเชชเชฐเซเชค, เช เชฐเซเชเชพ เช เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชนเซเชตเซ เชเซเชเช เชจเชนเซเช; เชคเซ เชเชจเซเชเชฐเชซเซเชธ เชฆเซเชตเชพเชฐเชพ เชธเซเชตเซเชเชพเชฐเชตเชพเชฎเชพเช เชเชตเชคเซ เชจเชฅเซ เช เชจเซ เชญเซเชฒ เชชเซเชฆเชพ เชเชฐเซ เชเซ.
เชเชจเซเชเซเชจเชฐ เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชนเซเช เชเชฐเซ: เชกเซเชเชฐเชซเชพเชเชฒ -1 เชธเชพเชฅเซ เชฌเชนเชพเชฐ เชจเซเชเชณเซ เชเซ เชเซ เชคเซเชฏเชพเช //.+dbrp เชธเชพเชฅเซ เชฐเซเชเชพเช เชนเซเชฏ, เชเซ เชคเชฎเชจเซ เชฌเชฟเชฒเซเชก เชเชธเซเชฎเซเชฌเชฒ เชเชฐเชคเซ เชตเชเชคเซ เชจเชฟเชทเซเชซเชณเชคเชพเชจเซเช เชเชพเชฐเชฃ เชคเชฐเชค เช เชธเชฎเชเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ.
เชเชเชฅเซ เชเชฃเชพเชฎเชพเช เชเซเชกเชพเช
เชเชฆเชพเชนเชฐเชฃ เชเชพเชฐเซเชฏ: เชคเชฎเชพเชฐเซ เชเช เช เช เชตเชพเชกเชฟเชฏเชพ เชฎเชพเชเซ เชธเซเชตเชพเชจเชพ เชเชพเชฐเซเชฏเชเชพเชฐเซ เชธเชฎเชฏเชจเซ 95เชฎเซ เชเชเชพเชตเชพเชฐเซ เชฒเซเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เช เชฎเซเชฒเซเชฏ เชธเชพเชฅเซ เชเซเชฒเซเชฒเชพ 10 เชจเซ เชฆเชฐเซเช เชฎเชฟเชจเชฟเชเชจเซ เชคเซเชฒเชจเชพ เชเชฐเซ.
เชคเชฎเซ เชเช-เชฅเซ-เชเชฃเชพ เชเซเชกเชพเช เชถเชเชคเชพ เชจเชฅเซ, เชชเซเชเชจเซเชเซเชธเชจเชพ เชเซเชฅ เชชเชฐ เชเซเชฒเซเชฒเซเช/เชฎเชงเซเชฏเชฎ/เชฎเชงเซเชฏเชฎ เชจเซเชกเชจเซ เชธเซเชเซเชฐเซเชฎเชฎเชพเช เชซเซเชฐเชตเซ เชเซ, เชญเซเชฒ "เชเชพเชเชฒเซเชก เชฎเซเชณ เชจ เชเชพเชคเซ เชเชฟเชจเชพเชฐเซเช เชเชฎเซเชฐเซ เชถเชเชพเชคเซ เชจเชฅเซ: เชฌเซเช -> เชธเซเชเซเชฐเซเชฎ" เชชเชฐเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เชฌเซเชเชจเซเช เชชเชฐเชฟเชฃเชพเชฎ, เชฒเซเชฎเซเชฌเชกเชพ เช เชญเชฟเชตเซเชฏเชเซเชคเชฟเชฎเชพเช เชเชฒ เชคเชฐเซเชเซ, เชชเชฃ เช เชตเซเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชคเซเช เชจเชฅเซ.
เชชเซเชฐเชฅเชฎ เชฌเซเชเชฎเชพเชเชฅเซ เชเชฐเซเชฐเซ เชจเชเชฌเชฐเซเชจเซ udf เชฆเซเชตเชพเชฐเชพ เชซเชพเชเชฒเชฎเชพเช เชธเซเชต เชเชฐเชตเชพเชจเซ เช เชจเซ เช เชซเชพเชเชฒเชจเซ เชธเชพเชเชกเชฒเซเชก เชฆเซเชตเชพเชฐเชพ เชฒเซเชก เชเชฐเชตเชพเชจเซ เชตเชฟเชเชฒเซเชช เชเซ.
เช เชฎเซ เช เชธเชพเชฅเซ เชถเซเช เชเชเซเชฒเซเชฏเซเช?
เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชฒเชเชญเช 100 เชนเซเชเซเชฒ เชธเชชเซเชฒเชพเชฏเชฐเซเชธ เชเซ, เชคเซเชฎเชพเชเชฅเซ เชฆเชฐเซเช เชชเชพเชธเซ เช เชจเซเช เชเซเชกเชพเชฃเซ เชนเซเช เชถเชเซ เชเซ, เชเชพเชฒเซ เชคเซเชจเซ เชเซเชจเชฒ เชเชนเซเช. เชเชฎเชพเชเชจเซ เชฒเชเชญเช 300 เชเซเชจเชฒเซ เชเซ, เชฆเชฐเซเช เชเซเชจเชฒเซ เชชเชกเซ เชถเชเซ เชเซ. เชคเชฎเชพเชฎ เชฐเซเชเซเชฐเซเชก เชเชฐเซเชฒ เชฎเซเชเซเชฐเชฟเชเซเชธเชฎเชพเชเชฅเซ, เช เชฎเซ เชญเซเชฒ เชฆเชฐ (เชตเชฟเชจเชเชคเชฟเช เช เชจเซ เชญเซเชฒเซ) เชชเชฐ เชจเชเชฐ เชฐเชพเชเซเชถเซเช.
เชถเชพ เชฎเชพเชเซ เชเซเชฐเชพเชซเชจเชพ เชจเชฅเซ?
เชเซเชฐเชพเชซเชจเชพเชฎเชพเช เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชญเซเชฒ เชเซเชคเชตเชฃเซเชเชฎเชพเช เชเชฃเชพ เชเซเชฐเชซเชพเชฏเชฆเชพ เชเซ. เชเซเชเชฒเซเช เชเชเชฟเชฒ เชเซ, เชเซเชเชฒเซเช เชคเชฎเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเชพ เชเชงเชพเชฐเซ เชคเชฎเชพเชฐเซ เชเชเชเซ เชฌเชเชง เชเชฐเซ เชถเชเซ เชเซ.
เชเซเชฐเชพเชซเชจเชพเชจเซ เชฎเชพเชช + เชเซเชคเชตเชฃเซ เชตเชเซเชเซ เชเซเชตเซ เชฐเซเชคเซ เชเชฃเชคเชฐเซ เชเชฐเชตเซ เชคเซ เชเชฌเชฐ เชจเชฅเซ, เชชเชฐเชเชคเซ เช เชฎเชจเซ เชฆเชฐ (เชตเชฟเชจเชเชคเซ-เชญเซเชฒเซ)/เชตเชฟเชจเชเชคเซเชเชจเซ เชเชฐเซเชฐ เชเซ.
เชญเซเชฒเซ เชเชฐเชพเชฌ เชฒเชพเชเซ เชเซ:
เช
เชจเซ เชเซเชฏเชพเชฐเซ เชธเชซเชณ เชตเชฟเชจเชเชคเซเช เชธเชพเชฅเซ เชเซเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ เชเชเซเช เชฆเซเชทเซเช:
เช เซเช เชเซ, เช
เชฎเซ เชเซเชฐเชพเชซเชจเชพ เชชเชนเซเชฒเชพเช เชธเซเชตเชพเชฎเชพเช เชฆเชฐเชจเซ เชชเซเชฐเซเชต-เชเชฃเชคเชฐเซ เชเชฐเซ เชถเชเซเช เชเซเช, เช
เชจเซ เชเซเชเชฒเชพเช เชเชฟเชธเซเชธเชพเชเชฎเชพเช เช เชเชพเชฎ เชเชฐเชถเซ. เชชเชฃ เชเชชเชฃเชพเชฎเชพเช เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ... เชฆเชฐเซเช เชเซเชจเชฒ เชฎเชพเชเซ เชคเซเชจเซ เชชเซเชคเชพเชจเซ เชเซเชฃเซเชคเซเชคเชฐ "เชธเชพเชฎเชพเชจเซเชฏ" เชฎเชพเชจเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช
เชจเซ เชเซเชคเชตเชฃเซเช เชธเซเชฅเชฟเชฐ เชฎเซเชฒเซเชฏเซ เช
เชจเซเชธเชพเชฐ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ (เช
เชฎเซ เชคเซเชฎเชจเซ เช
เชฎเชพเชฐเซ เชเชเชเซเชฅเซ เชถเซเชงเซเช เชเซเช, เชเซ เชตเชพเชฐเชเชตเชพเชฐ เชเซเชคเชตเชฃเซเช เชนเซเชฏ เชคเซ เชคเซเชฎเชจเซ เชฌเชฆเชฒเซเช เชเซเช).
เช เชตเชฟเชตเชฟเชง เชเซเชจเชฒเซ เชฎเชพเชเซ "เชธเชพเชฎเชพเชจเซเชฏ" เชจเชพ เชเชฆเชพเชนเชฐเชฃเซ เชเซ:
เช
เชฎเซ เชชเชพเชเชฒเชพ เชฎเซเชฆเซเชฆเชพเชจเซ เช
เชตเชเชฃเซเช เชเซเช เช
เชจเซ เชงเชพเชฐเซเช เชเซเช เชเซ "เชธเชพเชฎเชพเชจเซเชฏ" เชเชฟเชคเซเชฐ เชฌเชงเชพ เชธเชชเซเชฒเชพเชฏเชฐเซเชธ เชฎเชพเชเซ เชธเชฎเชพเชจ เชเซ. เชนเชตเซ เชฌเชงเซเช เชธเชพเชฐเซเช เชเซ, เช
เชจเซ เชเชชเชฃเซ เชเซเชฐเชพเชซเชจเชพเชฎเชพเช เชเซเชคเชตเชฃเซเช เชธเชพเชฅเซ เชฎเซเชณเชตเซ เชถเชเซเช?
เช
เชฎเซ เชเชฐเซ เชถเชเซเช เชเซเช, เชชเชฐเชเชคเซ เช
เชฎเซ เชเชฐเซเชเชฐ เชเชเซเชเชคเชพ เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ เชเชชเชฃเซ เชตเชฟเชเชฒเซเชชเซเชฎเชพเชเชฅเซ เชเช เชชเชธเชเชฆ เชเชฐเชตเชพเชจเซ เชเซ:
a) เชฆเชฐเซเช เชเซเชจเชฒ เชฎเชพเชเซ เช
เชฒเชเชฅเซ เชเชฃเชพ เชฌเชงเชพ เชเซเชฐเชพเชซ เชฌเชจเชพเชตเซ (เช
เชจเซ เชชเซเชกเชพเชฆเชพเชฏเช เชฐเซเชคเซ เชคเซเชฎเชจเซ เชธเชพเชฅเซ)
b) เชฌเชงเซ เชเซเชจเชฒเซ เชธเชพเชฅเซ เชเช เชเชพเชฐเซเช เชเซเชกเซ (เช
เชจเซ เชฐเชเชเซเชจ เชฐเซเชเชพเช เช
เชจเซ เชเชธเซเชเชฎเชพเชเชเซเชก เชเซเชคเชตเชฃเซเชเชฎเชพเช เชเซเชตเชพเช เชเชพเช)
เชคเชฎเซ เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชฐเซเชฏเซเช?
เชซเชฐเซเชฅเซ, เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃเชฎเชพเช เชเช เชธเชพเชฐเซเช เชชเซเชฐเชพเชฐเชเชญเชฟเช เชเชฆเชพเชนเชฐเชฃ เชเซ (
เช เชฎเซ เช เชเชคเซ เชถเซเช เชเชฐเซเชฏเซเช:
- เชเซเชจเชฒเซ เชฆเซเชตเชพเชฐเชพ เชเซเชฅเชฌเชฆเซเชง เชเชฐเซเชจเซ เชฅเซเชกเชพ เชเชฒเชพเชเซเชฎเชพเช เชฌเซ เชถเซเชฐเซเชฃเซเชฎเชพเช เชเซเชกเชพเช;
- เชเซ เชเซเช เชกเซเชเชพ เชจ เชนเซเชฏ เชคเซ เชเซเชฅ เชฆเซเชตเชพเชฐเชพ เชถเซเชฐเซเชฃเซ เชญเชฐเซ;
- เชชเชพเชเชฒเชพ เชกเซเชเชพ เชธเชพเชฅเซ เชเซเชฒเซเชฒเซ 10 เชฎเชฟเชจเชฟเชเชจเชพ เชธเชฐเซเชฐเชพเชถเชจเซ เชคเซเชฒเชจเชพ เชเชฐเซ;
- เชเซ เช เชฎเชจเซ เชเชเชเช เชฎเชณเซ เชคเซ เช เชฎเซ เชชเซเชเชพเชฐ เชเชฐเซเช เชเซเช;
- เช เชฎเซ เชเชฃเชคเชฐเซ เชเชฐเซเชฒ เชฆเชฐเซ เช เชจเซ เชเซเชคเชตเชฃเซเช เชฒเชเซเช เชเซเช เชเซ influxdb เชฎเชพเช เชเชตเซ เชนเชคเซ;
- เชธเซเชฒเซ เชเชจเซ เชเชชเชฏเซเชเซ เชธเชเชฆเซเชถ เชฎเซเชเชฒเซ.
เชฎเชพเชฐเชพ เชฎเชคเซ, เช เชฎเซ เช เชเชคเชฎเชพเช (เช เชจเซ เชเชธเซเชเชฎ เชนเซเชจเซเชกเชฒเชฐเซเชธ เชธเชพเชฅเซ เชฅเซเชกเซเช เชตเชงเซ) เชฎเซเชณเชตเชตเชพ เชเชเซเชเชคเชพ เชนเชคเชพ เชคเซ เชฌเชงเซเช เชถเชเซเชฏ เชคเซเชเชฒเซ เชธเซเชเชฆเชฐ เชฐเซเชคเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพเชฎเชพเช เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เชเชฐเซเชฏเซเช.
เชคเชฎเซ 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)
เชถเซเช เชเซ เชคเชพเชฐเชฃ?
เชเซเชชเซเชธเชฟเชเชฐ เชเซเชฅเซเชจเชพ เชธเชฎเซเชน เชธเชพเชฅเซ เชฎเซเชจเชฟเชเชฐเชฟเชเช-เช เชฒเชฐเซเช เชเชฐเชตเชพ, เชชเชนเซเชฒเซเชฅเซ เช เชฐเซเชเซเชฐเซเชก เชเชฐเซเชฒ เชฎเซเชเซเชฐเชฟเชเซเชธเชจเชพ เชเชงเชพเชฐเซ เชตเชงเชพเชฐเชพเชจเซ เชเชฃเชคเชฐเซเช เชเชฐเชตเชพ, เชเชธเซเชเชฎ เชเซเชฐเชฟเชฏเชพเช เชเชฐเชตเชพ เช เชจเซ เชธเซเชเซเชฐเชฟเชชเซเชเซเชธ (เชฏเซเชกเซเชเชซ) เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชคเซเชคเชฎ เชเซ.
เชชเซเชฐเชตเซเชถ เชฎเชพเชเซเชจเซ เช
เชตเชฐเซเชง เชเซเชฌ เชตเชงเชพเชฐเซ เชจเชฅเซ - เชเซ เชเซเชฐเชพเชซเชจเชพ เช
เชฅเชตเชพ เช
เชจเซเชฏ เชธเชพเชงเชจเซ เชคเชฎเชพเชฐเซ เชเชเซเชเชพเชเชจเซ เชชเซเชฐเซเชฃเชชเชฃเซ เชธเชเชคเซเชทเชคเชพ เชจเชฅเซ, เชคเซ เชคเซเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ.
เชธเซเชฐเซเชธ: www.habr.com