เบชเปเบงเบเบซเบผเบฒเบเบญเบฒเบเบเบฐ, เบกเบทเปเบเบตเปเบเปเปเบกเบตเปเบเบเบฒเบกเบงเปเบฒเปเบเบฑเบเบซเบเบฑเบเบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบฑเบเบเปเบฒ metrics เบเบฒเบเบเปเบฅเบดเบเบฒเบ. เบเบฑเปเบเบเบญเบเบขเปเบฒเบเบกเบตเปเบซเบเบเบปเบเบเปเปเปเบเปเบกเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเปเบเปเบเปเบเบทเบญเบเบชเปเบฒเบฅเบฑเบ metrics เบเบตเปเปเบเบฑเบเบเปเบฒ, เปเบเบดเปเบเบเบฐเปเบเปเบเปเบซเปเบเบฒเบเบเปเบฝเบงเบเบฑเบเบเบฒเบ deviations เปเบเบเปเปเบกเบนเบเปเบเบเปเบญเบเบเบฒเบเบเบตเปเบชเบฐเบเบงเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบ (mail, Slack, Telegram). เปเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบญเบเปเบฎเบเปเบฎเบกเบญเบญเบเปเบฅเบเป metrics เบเบฑเบเบซเบกเบปเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบ poured เปเบเบปเปเบฒเปเบเปเบ InfluxDB เปเบฅเบฐเบชเบฐเปเบเบเปเบ Grafana, เปเบฅเบฐเบเบฒเบเปเบเบทเบญเบเปเบเบเบทเปเบเบเบฒเบเปเบกเปเบเบเบฑเบ configured เบขเบนเปเบเบตเปเบเบฑเปเบ. เบชเปเบฒเบฅเบฑเบเบงเบฝเบเบเบฒเบเปเบเบฑเปเบ "เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบดเบเปเบฅเปเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบฅเบฐเบเบฝเบเบเบฝเบเบเบฑเบเบกเบฑเบ," เบเบงเบเปเบฎเบปเบฒเปเบเป Kapacitor.

Kapacitor เปเบกเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบ stack TICK เบเบตเปเบชเบฒเบกเบฒเบเบเบฐเบกเบงเบเบเบปเบ metrics เบเบฒเบ InfluxDB. เบกเบฑเบเบชเบฒเบกเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเบเบงเบฑเบเปเบเบเบเปเบฒเบเบงเบเบซเบเบถเปเบเบฎเปเบงเบกเบเบฑเบ (เปเบเบปเปเบฒเบฎเปเบงเบก), เบเบดเบเปเบฅเปเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเปเบฎเบฑเบ, เบเบฝเบเบเบปเบเปเบเปเบฎเบฑเบเบเบฑเบเบเบทเบเปเบเบเปเบญเบ InfluxDB, เบชเบปเปเบเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบเบซเบฒ Slack / Telegram / mail.
stack เบเบฑเบเบซเบกเบปเบเปเบกเปเบเปเบขเบฑเบเปเบฅเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบ , เปเบเปเบกเบฑเบเบเบฐเบกเบตเบชเบดเปเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบเบตเปเบเปเปเปเบเปเบฅเบฐเบเบธเบขเปเบฒเบเบเบฑเบเปเบเบเบขเบนเปเปเบเบเบนเปเบกเบท. เปเบเบเบปเบเบเบงเบฒเบกเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเบฅเบงเบเบฅเบงเบกเบเปเบฒเปเบเบฐเบเปเบฒเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ, เบเบตเปเบเปเปเบเบฑเบเปเบเบ ( syntax เบเบทเปเบเบเบฒเบเบเบญเบ TICKscipt เปเบเปเบเบทเบเบญเบฐเบเบดเบเบฒเบ. ) เปเบฅเบฐเบชเบฐเปเบเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบงเบเปเบเบปเบฒเบชเบฒเบกเบฒเบเบเบทเบเบเปเบฒเปเบเปเบเปเปเบเบเปเบเปเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบซเบเบถเปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เปเบซเปเปเบ!
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)
เบเบทเปเบกโเบเปเปโเบกเบนเบโเปเบชเปโเบเบฒเบโเปเบเบปเปเบฒโเบฎเปเบงเบก (เบเบฒเบโเปเบ vs เบเบญเบโ)
เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เบเบฒเบเปเบเบปเปเบฒเบฎเปเบงเบกเบเบฐเบเบปเบเปเบฅเบตเบเบเบธเบเบเบตเปเบเปเปเบกเบตเบเปเปเบกเบนเบ (เบเบฒเบเปเบ).
เปเบกเบทเปเบญเบเบทเปเบก ('null') เบเบฒเบเปเบเบปเปเบฒเบฎเปเบงเบกเบเบฒเบเบเบญเบเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฎเบฑเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ () เปเบฅเบฐเบเบทเปเบกเบเปเปเบกเบนเบเปเบชเปเปเบเบเปเบฒเบซเบงเปเบฒเบเปเบเบปเปเบฒ:
var data = res1
|join(res2)
.as('res1', 'res2)
.fill('null')
|default()
.field('res1.value', 0.0)
.field('res2.value', 100.0)
เบเบฑเบเบกเบต nuance เบขเบนเปเบเบตเปเบเบตเป. เปเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเปเบเบดเบ, เบเปเบฒเบเบธเบเบซเบเบถเปเบ (res1 เบซเบผเบท res2) เบซเบงเปเบฒเบเปเบเบปเปเบฒ, เบเบธเบเบเบปเบเปเบเปเบฎเบฑเบ (เบเปเปเบกเบนเบ) เบเปเปเบเบฐเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เบกเบตเบซเบผเบฒเบเบเบตเปเบเปเบฝเบงเบเบฑเบเบซเบปเบงเบเปเปเบเบตเปเปเบ Github (, , ) โ เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบฅเปเบเปเบฒเบเบฒเบเปเบเปเปเบเปเบฅเบฐเบเบงเบฒเบกเบเบธเบเบเปเบฅเบฐเบกเบฒเบเปเบฅเบฑเบเบเปเบญเบ.
เบเบฒเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเปเบเปเบเบเบฒเบเบเบดเบเปเบฅเป (เบเปเบฒเบขเบนเปเปเบ lambda)
|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, เปเบเบดเปเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบ script เบเบญเบเบเปเบฒเบเบเปเบงเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเปเบฒเบ (stdin) - เบเบงเบฒเบกเบเบดเบเบชเปเบฒเบเบชเบฑเบเปเบฅเบฐเบเปเปเบกเบตเบซเบเบฑเบเบญเบตเบ!
เบซเบเบถเปเบเปเบเบเบฒเบชเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบเบชเบฐเบเบดเบ Python เบเบฐเบซเบเบฒเบเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบซเป slack.
เบเปเบฒเบญเบดเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบชเบปเปเบเบฎเบนเบเบเบฒเบ grafana เบเบตเปเบกเบตเบเบฒเบเบเบปเบเบเปเบญเบเบญเบฐเบเบธเบเบฒเบเปเบเบเปเปเบเบงเบฒเบก. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฝเบ 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 :9092 เบเบฑเบเบเบถเบ lvl=error
เบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบกเบต httpOut
เบชเบฐเปเบเบเบเปเปเบกเบนเบเปเบเบเปเปเบเบฐเบเบธเบเบฑเบ:
|httpOut('something')
เปเบเบดเปเบ (เปเบเปโเบฎเบฑเบ): :9092/kapacitor/v1/tasks/task_name/เบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบ
เปเบเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโ
- เปเบเปเบฅเบฐเบงเบฝเบเบเบฒเบเบชเบปเปเบเบเบทเบเบเบปเปเบเปเบกเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบกเบตเบเบปเบงเปเบฅเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเปเบเบฎเบนเบเปเบเบ .
- เปเบญเบปเบฒเบเบฅเบฑเบญเบ .
- เบงเบฒเบเบกเบฑเบเปเบชเป viewer, .
เบเปเบญเบเบญเบทเปเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบ rake?
เบเบฒเบเบชเบฐเปเบเบกเปเบงเบฅเบฒเปเบ influxdb เปเบเบเบฒเบเบเบฝเบเบเบทเบ
เบเบปเบงเบขเปเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบเบฑเปเบเบเบฒเบเปเบเปเบเปเบเบทเบญเบเบชเปเบฒเบฅเบฑเบเบเบปเบเบฅเบงเบกเบเบญเบเบเปเบฒเบฎเปเบญเบเบเปเบเปเปเบเบปเปเบงเปเบกเบ (groupBy(1h)) เปเบฅเบฐเบเปเบญเบเบเบฒเบเบเบฑเบเบเบถเบเบเบฒเบเปเบเปเบเปเบเบทเบญเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบ influxdb (เปเบเบทเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบขเปเบฒเบเบชเบงเบเบเบฒเบกเบเบญเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบเบเบญเบเบเบฑเบเบซเบฒเปเบเบเบฒเบเปเบ grafana).
influxDBOut() เบเบฐเบเบฝเบเบเปเบฒเปเบงเบฅเบฒเบเบฒเบเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบเบดเบเปเบงเบฅเบฒ; เบเบฒเบกเบเบฑเปเบ, เบเบธเบเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบฐเบเบทเบเบเบฝเบเบเปเบญเบ / เบเปเบฒเบเบงเปเบฒเบเบฒเบเปเบเปเบเปเบเบทเบญเบเบกเบฒเบฎเบญเบ.
เปเบกเบทเปเบญเบเบงเบฒเบกเบเบทเบเบเปเบญเบเปเบกเปเบเบเปเบญเบเบเบฒเบ: เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเบเบเบฒเบเปเบเบซเบฒเบเบปเบงเบเบฑเบเบเบฒเบเบเบตเปเบเปเบฒเบซเบเบปเบเปเบญเบ, เปเบเบดเปเบเบเบฐเบเบฝเบเบเปเปเบกเบนเบเปเบชเป influxdb เบเบฑเบเปเบงเบฅเบฒเบเบฐเบเบธเบเบฑเบ.
docker, เบเบฒเบเบเปเปเบชเปเบฒเบเปเบฅเบฐเบเบฒเบเบเปเบฒเปเบเป
เปเบเบเบญเบเปเบฅเบตเปเบกเบเบปเปเบ, kapacitor เบชเบฒเบกเบฒเบเปเบซเบฅเบเบซเบเปเบฒเบงเบฝเบ, เปเบกเปเปเบเบเปเบฅเบฐเบเบปเบงเบเบฑเบเบเบฒเบเบเบฒเบเปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบ config เปเบ [เปเบซเบผเบ] block.
เปเบเบทเปเบญเบชเปเบฒเบเบซเบเปเบฒเบงเบฝเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ, เบเปเบฒเบเบเปเบญเบเบเบฒเบเบชเบดเปเบเบเปเปเปเบเบเบตเป:
- เบเบทเปเปเบเบฅเป โ เบเบฐเบซเบเบฒเบเปเบเบฑเบ script id/name
- เบเบฐเปเบเบ โ stream/batch
- dbrp - เบเปเบฒเบชเปเบฒเบเบฑเบเปเบเบทเปเบญเบเบตเปเบเบญเบเบงเปเบฒเบเบฒเบเบเปเปเบกเบนเบ + เบเบฐเปเบเบเบฒเบเปเบเบเบตเปเบชเบฐเบเบดเบเบเปเบฒเปเบเบตเบเบเบฒเบ (dbrp "เบเบนเปเบชเบฐเบซเบเบญเบ." "autogen")
เบเปเบฒเบเบฒเบเบงเบฝเบ batch เบเปเปเบกเบตเปเบชเบฑเปเบเบเบตเปเบกเบต dbrp, เบเปเบฅเบดเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบฐเบเบฐเบเบดเปเบชเบเบเบตเปเบเบฐเปเบฅเบตเปเบกเบเบปเปเบเปเบฅเบฐเบเบฐเบเบฝเบเบเปเบฝเบงเบเบฑเบเบกเบฑเบเบขเปเบฒเบเบเบทเปเบชเบฑเบเปเบเบเบฑเบเบเบถเบ.
เปเบ chronograf, เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เปเบชเบฑเปเบเบเบตเปเบเปเปเบเบงเบเบกเบตเบขเบนเป; เบกเบฑเบเบเปเปเปเบเปเบฎเบฑเบเบเบฒเบเบเบญเบกเบฎเบฑเบเปเบเบเบเปเบฒเบเบเบฒเบเปเบเปเบเบญเบเปเบฅเบฐเบชเปเบฒเบเบเปเปเบเบดเบเบเบฒเบ.
Hack เปเบกเบทเปเบญเบชเปเบฒเบเบเบนเปเบเบญเบเปเบเบเปเบเบต: Dockerfile เบญเบญเบเบเปเบงเบ -1 เบเปเบฒเบกเบตเปเบชเบฑเปเบเบเบตเปเบกเบต //.+dbrp, เปเบเบดเปเบเบเบฐเบเปเบงเบเปเบซเปเบเปเบฒเบเปเบเบปเปเบฒเปเบเบเบฑเบเบเบตเบเปเบฝเบงเบเบฑเบเปเบซเบเบเบปเบเบเบญเบเบเบงเบฒเบกเบฅเบปเปเบกเปเบซเบผเบงเปเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบเบญเบเบเบฒเบเบเปเปเบชเปเบฒเบ.
เปเบเบปเปเบฒโเบฎเปเบงเบกโเบซเบเบถเปเบโเบเบฑเบโเบเปเบฒโเบเบงเบโเบซเบผเบฒเบโ
เบเบปเบงเบขเปเบฒเบเบงเบฝเบเบเบฒเบ: เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบงเบฅเบฒเบชเปเบงเบเบฎเปเบญเบเบเบต 95 เบเบญเบเปเบงเบฅเบฒเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบชเปเบฒเบฅเบฑเบเบญเบฒเบเบดเบ, เบเบฝเบเบเบฝเบเปเบเปเบฅเบฐเบเบฒเบเบตเบเบญเบ 10 เบชเบธเบเบเปเบฒเบเบเปเบงเบเบเปเบฒเบเบตเป.
เบเปเบฒเบเบเปเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบเบฒเบเปเบเบปเปเบฒเบฎเปเบงเบกเบซเบเบถเปเบเบเปเปเบซเบผเบฒเบ, เบชเบธเบเบเปเบฒเบ / เบชเบฐเปเบฅเปเบ / เบเบฒเบเปเบเปเบฅเบเบฐเบเบธเปเบกเบเบญเบเบเบธเบเบเปเบฝเบ node เปเบเบปเปเบฒเปเบเปเบเบชเบฐเบเบฃเบตเบก, เบเปเปเบเบดเบเบเบฒเบ "เบเปเปเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบญเบเบเบตเปเบเปเปเบเบปเบเบเบฑเบเบเบญเบเปเบเบฑเบเบเปเบญเบ: batch -> stream" เบเบฐเบเบทเบเบชเบปเปเบเบเบทเบ.
เบเบปเบเปเบเปเบฎเบฑเบเบเบญเบ batch, เปเบเบฑเบเบเบปเบงเปเบเปเบเบเบฒเบเบชเบฐเปเบเบ lambda, เบเบฑเบเบเปเปเปเบเปเบเบทเบเบเบปเบเปเบเบ.
เบกเบตเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเบฐเบเบฑเบเบเบถเบเบเบปเบงเปเบฅเบเบเบตเปเบเปเบฒเปเบเบฑเบเบเบฒเบเบเบธเบเบเปเบฒเบญเบดเบเปเบเบซเบฒเปเบเบฅเปเบเปเบฒเบ udf เปเบฅเบฐเปเบซเบฅเบเปเบเบฅเปเบเบตเปเบเปเบฒเบ sideload.
เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเปเปเบเบซเบเบฑเบเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเป?
เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบนเปเบชเบฐเบซเบเบญเบเปเบฎเบเปเบฎเบกเบเบฐเบกเบฒเบ 100 เบเบปเบ, เปเบเปเบฅเบฐเบเบปเบเบชเบฒเบกเบฒเบเปเบเบทเปเบญเบกเบเปเปเบซเบผเบฒเบ, เปเบซเปเปเบเบซเบฒเบกเบฑเบเปเบเบฑเบเบเปเบญเบเบเบฒเบ. เบกเบตเบเบฐเบกเบฒเบ 300 เบเปเบญเบเปเบซเบผเบปเปเบฒเบเบตเป, เปเบเปเบฅเบฐเบเปเบญเบเบเบฒเบเบชเบฒเบกเบฒเบเบฅเบปเปเบกเบฅเบปเบเปเบเป. เบเบญเบเบเบธเบ metrics เบเบตเปเบเบฑเบเบเบถเบเปเบงเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบเบฒเบกเบญเบฑเบเบเบฒเบเบงเบฒเบกเบเบดเบเบเบฒเบ (เบเปเบฒเบฎเปเบญเบเบเปเปเบฅเบฐเบเบงเบฒเบกเบเบดเบเบเบฒเบ).
เปเบเบฑเบเบซเบเบฑเบเบเปเป Grafana?
เบเบฒเบเปเบเปเบเปเบเบทเบญเบเบเปเปเบเบดเบเบเบฒเบเบเบตเปเบเบทเบเบเบฑเปเบเบเปเบฒเปเบ Grafana เบกเบตเบเปเปเปเบชเบเบซเบผเบฒเบเบขเปเบฒเบ. เบเบฒเบเบเบปเบเปเบกเปเบเบชเปเบฒเบเบฑเบ, เบเบฒเบเบเบปเบเบชเบฒเบกเบฒเบเบเบดเบเบเบฒเบเบญเบเปเบเบปเปเบฒ, เบเบถเปเบเบเบฑเบเบชเบฐเบเบฒเบเบฐเบเบฒเบ.
Grafana เบเปเปเบฎเบนเปเบงเบดเบเบตเบเบฒเบเบเบดเบเปเบฅเปเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบงเบฑเบเปเบเบ + เบเบฒเบเปเบเบทเบญเบ, เปเบเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบญเบฑเบเบเบฒ (requests-errors)/requests.
เบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเปเบเบดเปเบเบเบทเบงเปเบฒเบเปเปเบเบต:

เปเบฅเบฐเบเบงเบฒเบกเบเบปเปเบงเบฎเปเบฒเบเบซเบเปเบญเบเบฅเบปเบเปเบกเบทเปเบญเปเบเบดเปเบเบเปเบงเบเบเบฒเบเบฎเปเบญเบเบเปเบเบตเปเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ:

เบเบปเบเบฅเบปเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเบดเบเปเบฅเปเบญเบฑเบเบเบฒเบฅเปเบงเบเบซเบเปเบฒเปเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเปเบญเบ grafana, เปเบฅเบฐเปเบเบเบฒเบเบเปเบฅเบฐเบเบตเบเบตเปเบเบฐเปเบฎเบฑเบเบงเบฝเบ. เปเบเปเบเปเปเปเบกเปเบเบขเบนเปเปเบเบเบงเบเปเบฎเบปเบฒ, เปเบเบฒเบฐเบงเปเบฒ ... เบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเปเบญเบเบเบฒเบเบญเบฑเบเบเบฒเบชเปเบงเบเบเบญเบเบเบปเบเปเบญเบเปเบกเปเบเบเบทเบงเปเบฒ "เบเบปเบเบเบฐเบเบด", เปเบฅเบฐเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบฎเบฑเบเบงเบฝเบเบเบฒเบกเบเปเบฒเบเบปเบเบเบตเป (เบเบงเบเปเบฎเบปเบฒเบเบญเบเบซเบฒเบเบงเบเบกเบฑเบเบเปเบงเบเบเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเปเบฝเบเบเบงเบเบกเบฑเบเบเปเบฒเบกเบตเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบฅเบทเปเบญเบเป).
เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบ "เบเบปเบเบเบฐเบเบด" เบชเปเบฒเบฅเบฑเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเป:


เบเบงเบเปเบฎเบปเบฒเบเปเปเบชเบปเบเปเบเบเบธเบเบเบตเปเบเปเบฒเบเบกเบฒเปเบฅเบฐเบชเบปเบกเบกเบธเบเบงเปเบฒเบฎเบนเบเบเบฒเบ "เบเบปเบเบเบฐเบเบด" เปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบนเปเบชเบฐเบซเบเบญเบเบเบฑเบเบซเบกเบปเบ. เปเบเบเบฑเบเบเบธเบเบฑเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเบต, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเปเบเบเบกเบตเบเบฒเบเปเบเปเบเปเบเบทเบญเบเปเบ grafana?
เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบ, เปเบเปเบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเปเบเปเบญเบเบเบฒเบ, เปเบเบฒเบฐเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเปเบฅเบทเบญเบเบซเบเบถเปเบเปเบเบเบฒเบเปเบฅเบทเบญเบ:
เบ) เบชเปเบฒเบเบเบฒเบเบซเบผเบฒเบเบญเบฑเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเปเบญเบเปเบเบเบเปเบฒเบเบซเบฒเบ (เปเบฅเบฐเปเบเบฑเบเบเบงเบเบเบฑเบเบเบงเบเปเบเบปเบฒ)
b) เบญเบญเบเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบซเบเบถเปเบเบเบฑเบเบเบธเบเบเปเบญเบเบเบฒเบ (เปเบฅเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบชเบนเบเปเบชเบเปเบเบชเบฒเบเบเบตเปเบกเบตเบชเบตเบชเบฑเบเปเบฅเบฐเบเบฒเบเปเบเปเบเปเบเบทเบญเบเบเบตเปเบเปเบฒเบซเบเบปเบเปเบญเบ)

เบเปเบฒเบเปเบฎเบฑเบเปเบเบงเปเบเบกเบฑเบ?
เบญเบตเบเปเบเบทเปเบญ เปเบถเปเบ, เบกเบตเบเบปเบงเบขเปเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบตเปเบเบตเปเบเปเบญเบเบฐเบชเบฒเบ (), เบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบฒเบ peeked เบขเบนเปเบซเบผเบทเบเบฐเบเบดเบเบฑเบเปเบเบฑเบเบเบทเปเบเบเบฒเบเปเบเบเบฑเบเบซเบฒเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบ.
เบชเบดเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบฎเบฑเบเปเบเบเบตเปเบชเบธเบ:
- เปเบเบปเปเบฒเบฎเปเบงเบกเบชเบญเบเบเบธเบเปเบเบชเบญเบเบชเบฒเบกเบเบปเปเบงเปเบกเบ, เบเบฑเบเบเบธเปเบกเปเบเบเบเปเบญเบเบเบฒเบ;
- เบเบทเปเบกเบเปเปเบกเบนเบเปเบชเปเปเบเบเบธเบเปเบเบเบเบธเปเบกเบเปเบฒเบเปเปเบกเบตเบเปเปเบกเบนเบ;
- เบเบฝเบเบเบฝเบเบเปเบฒเบชเบฐเปเบฅเปเบเบเบญเบ 10 เบเบฒเบเบตเบเบตเปเบเปเบฒเบเบกเบฒเบเบฑเบเบเปเปเบกเบนเบเบเบตเปเบเปเบฒเบเบกเบฒ;
- เบเบงเบเปเบฎเบปเบฒเบฎเปเบญเบเบเบถเปเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบญเบเบซเบฒเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบ;
- เบเบงเบเปเบฎเบปเบฒเบเบฝเบเบญเบฑเบเบเบฒเบเบฒเบเบเบดเบเปเบฅเปเปเบฅเบฐเบเบฒเบเปเบเปเบเปเบเบทเบญเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบ influxdb;
- เบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเปเบเบทเปเบญ slack.
เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบญเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบเบฑเบเบฅเบธเบเบธเบเบชเบดเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเปเบเบเบญเบเบเปเบฒเบ (เปเบฅเบฐเปเบกเปเบเบฐเบเบฑเปเบเปเบฅเบฑเบเบเปเบญเบเบซเบผเบฒเบเบเบฑเบเบเบปเบงเบเบฑเบเบเบฒเบ) เบเบตเปเบชเบงเบเบเบฒเบกเปเบเบปเปเบฒเบเบตเปเปเบเบฑเบเปเบเปเบเป.
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเบตเป github.com ะธ script เบเบปเบเปเบเปเบฎเบฑเบ.
เบเบปเบงเบขเปเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบปเบเปเบเปเบฎเบฑเบ:
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 เปเบกเปเบเบเบตเปเบฅเบตเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบดเบเบเบฒเบก - เบเบฒเบเปเบเปเบเปเบเบทเบญเบเบเบตเปเบกเบตเบเบธเปเบกเบเบญเบเบเบธเปเบก, เบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบดเบเปเบฅเปเปเบเบตเปเบกเปเบเบตเบกเปเบเบเบญเบตเบเปเบชเป metrics เบเบตเปเบเบฑเบเบเบถเบเปเบงเปเปเบฅเปเบง, เบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเปเบฒเบซเบเบปเบเปเบญเบเปเบฅเบฐเปเบฅเปเบเบชเบฐเบเบดเบ (udf).
เบญเบธเบเบฐเบชเบฑเบเปเบเบเบฒเบเปเบเบปเปเบฒเปเบกเปเบเบเปเปเบชเบนเบเบซเบผเบฒเบ - เบฅเบญเบเบกเบฑเบเบเปเบฒ grafana เบซเบผเบทเปเบเบทเปเบญเบเบกเบทเบญเบทเปเบเปเบเปเปเบเบญเบเบชเบฐเบซเบเบญเบเบเบงเบฒเบกเบเบฒเบเบฐเบซเบเบฒเบเบญเบเปเบเบปเปเบฒเบขเปเบฒเบเบชเบปเบกเบเบนเบ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com
