ืจืืึฟ ืืกืชึผืื, ืืืึทื ื ืงืืื ืืืื ืขืจ ืคืจืขืื ืืืึธืก ืขืก ืืื ื ืืืืืง ืฆื ืืึทืืืขื ืกืขืจืืืืก ืืขืืจืืงืก. ืืขืจ ืืืืึทืืขืจ ืืึทืืืฉืืงืึทื ืฉืจืื ืืื ืฆื ืฉืืขืื ืึท ืคืืื ืง ืคึฟืึทืจ ืื ืืขืืืืื ืืขืืจืืงืก, ืืืึธืก ืืืขื ืืขืื ืฆื ืืืืกื ืืืขืื ืงืืื ืืืืืืืืฉืึทื ื ืืื ืื ืืึทืื ืืื ืืฉืึทื ืึทืื ืืืึธืก ืืขื ืขื ืืึทืงืืืขื ืคึฟืึทืจ ืืืจ (ืคึผืึธืกื, ืกืืึทืงืง, ืืขืืขืืจืึทื). ืืื ืื ืึธื ืืืื ืืึธืืขื ืืืงืื ื ืืื ืกื ืึทืืข ืืขืืจืืงืก ืคืื ืืื ืืืขืจ ืืึทืืื ืื ืืก ืืขื ืขื ืืืืกืืขืืืกื ืืื ืื ืคืืืงืกืื ืืื ืืขืืืืื ืืื Grafana, ืืื ืืงืขืจืืืง ืึทืืขืจืืื ื ืืื ืืืื ืงืึทื ืคืืืืขืจื ืืึธืจื. ืคึฟืึทืจ ืืึทืกืงืก ืืื "ืืืจ ืืึทืจืคึฟื ืฆื ืจืขืืขื ืขื ืขืคึผืขืก ืืื ืคืึทืจืืืืึทืื ืืื ืืื," ืืืจ ื ืืฆื ืงืึทืคึผืึทืกืืืึธืจ.

ืงืึทืคึผืึทืกืืืึธืจ ืืื ืึท ืืืื ืคืื ืื TICK ืึธื ืืืืื ืืืึธืก ืงืขื ืขื ืคึผืจืึธืฆืขืก ืืขืืจืืงืก ืคึฟืื InfluxDB. ืขืก ืงืขื ืขื ืคืึทืจืืื ืื ืขืืืขืืข ืืขืืฉืขืจืืึทื ืฅ ืฆืืืึทืืขื (ืคืึทืจืืื ืื), ืจืขืืขื ืขื ืขืคึผืขืก ื ืืฆืืง ืคืื ืื ืืืงืืืขื ืืึทืื, ืฉืจืืึทืื ืื ืจืขืืืืืึทื ืฆืืจืืง ืฆื ืื ืคืืืงืกืื, ืฉืืงื ืึท ืคืืื ืง ืฆื ืกืืึทืงืง / ืืขืืขืืจืึทื / ืคึผืึธืกื.
ืื ืืื ืฆืข ืกืืึทืง ืืื ืงืื ืืื ืืืืืืื , ืึธืืขืจ ืขืก ืืืขื ืฉืืขื ืืืง ืืืื ื ืืฆืืง ืืืื ืืืึธืก ืืขื ืขื ื ืืฉื ืืคืืจืืฉ ืื ืืขืืืืื ืืื ืื ืืึทื ืืืึทืื. ืืื ืืขื ืึทืจืืืงื, ืืื ืืึทืฉืืึธืกื ืฆื ืืึทืืืขื ืึท ื ืืืขืจ ืคืื ืึทืืึท ื ืืฆืืง, ื ืื ืงืืึธืจ ืืื ืืขืจ ืืึธื ืขืฆืืช (ืื ืืงืขืจืืืง ืกืื ืืึทืงืก ืคืื TICKscipt ืืื ืืืกืงืจืืืื ) ืืื ืืืืึทืื ืืื ืืื ืงืขื ืขื ืืืื ืืขืืืขื ืื ืืื ืึท ืืืึทืฉืคึผืื ืคืื ืกืึทืืืืื ื ืืืื ืขืจ ืคืื ืืื ืืืขืจ ืคึผืจืึธืืืขืืก.
ืืื ืก ืืืื!
ืืึธืื ืฉืืืืืขื & ืื ื, ืืขืืฉืื ืขืจืจืึธืจืก
ืึทื ืืขืืึทืืจืข ื ืึธืจืืึทื ืคึผืจืึธืืืขื, ืกืึทืืืื ืืืจื ืงืึทืกืฅ:
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) ืืื ืืืืืืง, ืื ืจืืืึทืืืื ื ืกืขืจืืข (ืืึทืื) ืืืขื ืืืื ืืืื ืืืืืืง. ืขืก ืืขื ืขื ืขืืืขืืข ืืืงืืฅ ืืืืฃ ืืขื ืืขืืข ืืืืฃ ืืืืืื (, , ) - ืืืจ ืืืืจืื ืคึฟืึทืจ ืคืืงืกืื ืืื ืืืืื ืึท ืืืกื.
ื ืืฆื ืื ืึธืื ืืื ืืฉืืื ืืช (ืืืื ืืื ืืึทืืืืึท)
|eval(lambda: if("value" > 0, true, false)
ืืขืฆืืข ืคืื ืฃ ืืื ืื ืคืื ืื ืจืขืจื - ืืื ืืข ืคึฟืึทืจ ืื ืฆืืึทื
ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืืึทืจืคึฟื ืฆื ืคืึทืจืืืืึทืื ืื ืืืึทืืืขืก ืคืื ืื ืืขืฆืืข ืคืื ืฃ ืืื ืื ืืื ืื ืคืจืืขืจืืืงืข ืืืึธื. ืืืจ ืงืขื ืขื ื ืขืืขื ืฆืืืื ืืึทืืฉืึทื ืคืื ืืึทืื ืืื ืฆืืืื ืืึทืืื ืืขืจ ืืึทืืฉืึทื ืึธืืขืจ ืขืงืกืืจืึทืงื ืืืื ืคืื ืื ืืึทืื ืคึฟืื ืึท ืืจืขืกืขืจืข ืฆืืื:
|where(lambda: duration((unixNano(now()) - unixNano("time"))/1000, 1u) < 5m)
ืึทื ืึธืืืขืจื ืึทืืืื ืคึฟืึทืจ ืื ืืขืฆืืข ืคืื ืฃ ืืื ืื ืืืึธืื ืืืื ืฆื ื ืืฆื ืึท BarrierNode, ืืืึธืก ืฉื ืืึทืื ืึทืืืขืง ืืึทืื ืืืืืขืจ ืื ืกืคึผืขืกืืคืืขื ืฆืืื:
|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" }}')
ืื ืื ืืึทื ืืืขืจืก
ืื ืืจืืืก ืจืฉืืื ืคืื ืืึทื ืืืขืจืก ืืืื ืขืงืกืขืง, ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ืืืกืคืืจื ืืืื ืฉืจืืคื ืืื ืื ืืืจืืืขืืื ืืขื ืคึผืึทืจืึทืืขืืขืจืก (ืกืืืื) - ืฉืขืคึฟืขืจืืฉืงืืื ืืื ืืึธืจื ืืฉื ืืขืจ!
ืืืื ืขืจ ืคืื ืืื ืืืขืจ ืืื ืืืื ืืื ืึท ืงืืืื ืคึผืืืืึธื ืฉืจืืคื ืคึฟืึทืจ ืฉืืงื ื ืึธืืืึทืคืึทืงืืืฉืึทื ื ืฆื ืกืืึทืง.
ืืื ืขืจืฉืืขืจ, ืืืจ ืืขืืืืื ืฆื ืฉืืงื ืึท ืืขืจืืืืืขื ืืฉ-ืคึผืจืึธืืขืงืืขื ืืจืึทืคืึทื ืึท ืืืื ืืื ืึท ืึธื ืืึธื. ืืขืจื ืึธืืืขื, ืฉืจืืื 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")
ืืืึทื (ืงืื): ืงืึทืคึผืึทืกืืืึธืจ -URL :9092 ืืึธืืก ืืืื = ืืขืืช
ืึธืคึผืฆืืข ืืื httpOut
ืืืืืื ืืึทืื ืืื ืื ืงืจืึทื ื ืจืขืจื - ืืื ืืข:
|httpOut('something')
ืืขื (ืืึทืงืืืขื): :9092/capacitor/v1/tasks/task_name/ืขืคึผืขืก
ืืืจืืคืืจืื ื ืืืึทืืจืึทืืข
- ืืขืืขืจ ืึทืจืืขื ืงืขืจื ืึทื ืืืจืืคืืจืื ื ืืืื ืืื ื ืืฆืืง ื ืืืขืจื ืืื ืืขื ืคึฟืึธืจืืึทื .
- ื ืขืืขื ืึท ืืืึธืง .
- ืคึผืึทืคึผ ืขืก ืืื ืฆืืงืืงืขืจ, .
ืืื ืึทื ืืขืจืฉ ืงืขื ืขื ืืืจ ืืึทืงืืืขื ืึท ืืจืึทืืืืข?
ืฆืืื ืกืืึทืืคึผ ืืื ืื ืคืืืงืกืื ืืืืฃ ืฉืจืืืืืึทืง
ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืฉืืขืื ืึทืจืืืฃ ืึท ืคืืื ืง ืคึฟืึทืจ ืื ืกืึทืืึทืงื ืคืื ืจืืงืืืขืก ืคึผืขืจ ืฉืขื (ืืจืืคึผืืื (1 ื)) ืืื ืืืืื ืฆื ืจืขืงืึธืจืืืจื ืื ืคืืื ืง ืืืึธืก ืืื ืคืืจืืขืงืืืขื ืืื ืื ืคืืืงืกืื (ืฆื ืืืืืึทืคืื ืืืืึทืื ืื ืคืึทืงื ืคืื ืื ืคึผืจืึธืืืขื ืืืืฃ ืื ืืจืึทืคืืง ืืื ืืจืึทืคืึทื ืึท).
influxDBOut () ืืืขื ืฉืจืืึทืื ืื ืฆืืื ืืืขืจื ืคืื ืื ืคืืื ืง ืฆื ืื ืฆืืื ืฉืืขืืคึผื ืึทืงืึธืจืืื ืืื, ืื ืคืื ื ืืืืฃ ืื ืืฉืึทืจื ืืืขื ืืืื ืืขืฉืจืืื ืคืจืืขืจ / ืฉืคึผืขืืขืจ ืืื ืื ืคืืื ืง ืื ืืขืงืืืขื.
ืืืขื ืืขื ืืืงืืื ืืื ืคืืจืืื ืื: ืืืจ ืึทืจืืขืื ืึทืจืื ืืขื ืคึผืจืึธืืืขื ืืืจื ืจืืคื ืึท ืื ืื ืืึทื ืืืขืจ, ืืืึธืก ืืืขื ืฉืจืืึทืื ืืึทืื ืฆื ืื ืคืืืงืกืื ืืื ืืขื ืงืจืึทื ื ืฆืืื ืกืืึทืืคึผ.
ืืึธืงืงืขืจ, ืืืืขื ืืื ืืืคึผืืืืืึทื ื
ืืื ืกืืึทืจืืึทืคึผ, ืงืึทืคึผืึทืกืืืึธืจ ืงืขื ืขื ืืึธืื ืืึทืกืงืก, ืืขืืคึผืืึทืืขืก ืืื ืืึทื ืืืขืจืก ืคึฟืื ืืขืจ ืืืขืืืืืึทืืขืจ ืกืคึผืขืกืืคืืขื ืืื ืื ืงืึธื ืคืื ืืื ืื [ืืึธืึทื] ืืืึธืง.
ืฆื ืืึทืื ืึท ืึทืจืืขื ืจืืืืืง, ืืืจ ืืึทืจืคึฟื ืื ืคืืืืขื ืืข ืืื ืื:
- ืืขืงืข ื ืึธืืขื - ืืงืกืคึผืึทื ืืื ืืื ืฉืจืืคื ืฉืืึทื / ื ืึธืืขื
- ืืืคึผ - ืืืึทื / ืคึผืขืงื
- dbrp - ืงืืืืขืจื ืฆื ืึธื ืืืืึทืื ืืื ืืืึธืก ืืึทืืึทืืืืก + ืคึผืึธืืืืืง ืื ืฉืจืืคื ืืืืคื (dbrp "ืกืคึผืืืืขืจ." "ืึทืืืึธืืขื")
ืืืื ืขืืืขืืข ืคึผืขืงื ืึทืจืืขื ืืื ื ืืฉื ืึทื ืืืึทืืื ืึท ืฉืืจื ืืื dbrp, ืื ืืื ืฆืข ืืื ืกื ืืืขื ืึธืคึผืืึธืื ืฆื ืึธื ืืืืื ืืื ืืืขื ืืึธื ืขืกืืื ืฉืจืืึทืื ืืืขืื ืืื ืืื ืื ืงืืึธืฅ.
ืืื ืืฉืจืึธื ืึธืืจืึทืฃ, ืืืืฃ ืื ืคืึทืจืงืขืจื, ืืขื ืฉืืจื ืืึธื ื ืืฉื ืขืงืกืืกืืืจื ืขืก ืืื ื ืืฉื ืื ืืขื ืืืขื ืืืจื ืื ืฆืืืื ื ืืื ืืืฉืขื ืขืจืืืฅ ืึท ืืขืืช.
ืืึทืง ืืืขื ืืืจ ืืืืขื ืึท ืงืึทื ืืืื ืขืจ: Dockerfile ืืืื ืึทืจืืืก ืืื -1 ืืืื ืขืก ืืขื ืขื ืฉืืจืืช ืืื //.+dbrp, ืืืึธืก ืืืขื ืืึธืื ืืืจ ืืืืื ืคึฟืึทืจืฉืืืื ืื ืกืืื ืคึฟืึทืจ ืื ืืืจืืคืึทื ืืืขื ืึทืกืขืืืึทืืื ื ืื ืืืืขื.
ืคืึทืจืืื ืื ืืืื ืขืจ ืฆื ืคืืืข
ืืืึทืฉืคึผืื ืึทืจืืขื: ืืืจ ืืึทืจืคึฟื ืฆื ื ืขืืขื ืื 95 ืคึผืจืึธืฆืขื ื ืคืื ืื ืึทืคึผืขืจืืืืื ื ืฆืืื ืคืื ืื ืกืขืจืืืืก ืคึฟืึทืจ ืึท ืืืึธื, ืคืึทืจืืืืึทืื ืืขืืขืจ ืืื ืื ืคืื ืื ืืขืฆืืข 10 ืืื ืืขื ืืืขืจื.
ืืืจ ืงืขื ืขื ื ืืฉื ืืึธื ืึท ืืืื-ืฆื-ืคืืืข ืคืึทืจืืื ืื, ืืขืฆืืข / ืืืื ืขื / ืืืืืึทื ืืืืขืจ ืึท ืืจืืคึผืข ืคืื โโโโื ืงืืืืช ืืืจื ืก ืื ื ืึธืืข ืืื ืึท ืืืึทื, ืืขืจ ืืขืืช "ืงืขื ืขื ื ืื ืืืืื ืงืื ื ืืืกืืึทืืฉื ืขืืืฉืึทื: ืคึผืขืงื -> ืืืึทื" ืืืขื ืืืื ืืืืืขืงืขืจื.
ืืขืจ ืจืขืืืืืึทื ืคืื ืึท ืคึผืขืงื, ืืื ืึท ืืืึทืืขืืืืืง ืืื ืึท ืืึทืืืืึท ืืืืกืืจืืง, ืืื ืืืื ื ืืฉื ืกืึทืืกืืึทืืืืึทื.
ืขืก ืืื ืึทื ืึธืคึผืฆืืข ืฆื ืจืึทืืขืืืขื ืื ื ืืืืืง ื ืืืขืจื ืคืื ืืขืจ ืขืจืฉืืขืจ ืคึผืขืงื ืฆื ืึท ืืขืงืข ืืืจื UDF ืืื ืืึธืื ืืขื ืืขืงืข ืืืจื ืกืืืืืึธืึทื.
ืืืึธืก ืืึธืื ืืืจ ืกืึทืืืื ืืื ืืขื?
ืืืจ ืืึธืื ืืืขืื 100 ืืึธืืขื ืกืึทืคึผืืืืขืจื, ืืขืืขืจ ืคืื ืืื ืงืขื ืขื ืืึธืื ืขืืืขืืข ืงืึทื ืขืงืฉืึทื ื, ืืึธืื ืืื ืื ืจืืคื ืขืก ืึท ืงืึทื ืึทื. ืขืก ืืขื ืขื ืืขืขืจืขื 300 ืคืื ืื ืืฉืึทื ืึทืื, ืืขืืขืจ ืคืื ืื ืืฉืึทื ืึทืื ืงืขื ืขื ืคืึทืื ืึทืืืขืง. ืคืื ืึทืืข ืื ืจืขืงืึธืจืืขื ืืขืืจืืงืก, ืืืจ ืืืขืื ืืึธื ืืืึธืจ ืื ืืขืืช ืงืืจืก (ืจืืงืืืขืก ืืื ืขืจืจืึธืจืก).
ืคืืจืืืืก ื ืืฉื ืืจืืคืื ื?
ืืขืืช ืึทืืขืจืฅ ืงืึทื ืคืืืืขืจื ืืื Grafana ืืึธืื ืขืืืขืืข ืืืกืึทืืืืึทื ืืืืืฉืื. ืขืืืขืืข ืืขื ืขื ืงืจืืืืฉ, ืขืืืขืืข ืืืจ ืงืขื ืขื ื ืึธืขื ื ืืืื ืืืืื, ืืืคึผืขื ืืื ื ืืืืฃ ืื ืกืืืืึทืฆืืข.
ืืจืึทืคืึทื ืึท ืืืืืกื ื ืืฉื ืืื ืฆื ืจืขืืขื ืขื ืฆืืืืฉื ืืขืืฉืขืจืืึทื ืฅ + ืึทืืขืจืืื ื, ืึธืืขืจ ืืืจ ืืึทืจืคึฟื ืึท ืงืืจืก (ืจืืงืืืขืก-ืขืจืจืึธืจืก) / ืจืืงืืืขืก.
ืื ืขืจืจืึธืจืก ืงืืงื ืคึผืึทืกืงืืื ืข:

ืืื ืืืืื ืืงืขืจ ืืืื ืืืขื ืืืืื ืืื ืืฆืืื ืจืืงืืืขืก:

ืึธืืงืื, ืืืจ ืงืขื ืขื ืคืึทืจ-ืจืขืืขื ืขื ืื ืงืืจืก ืืื ืื ืกืขืจืืืืก ืืืืืขืจ ืืจืึทืคืึทื ืึท, ืืื ืืื ืขืืืขืืข ืงืึทืกืขืก ืืึธืก ืืืขื ืึทืจืืขืื. ืึธืืขืจ ื ืืฉื ืืื ืืื ืืืขืจ, ืืืืึทื ... ืคึฟืึทืจ ืืขืืขืจ ืงืึทื ืึทื ืืืื ืืืืืขื ืข ืคืึทืจืืขืืืขื ืืฉ ืืื ืืขืจืขืื ื ืืื "ื ืึธืจืืึทื", ืืื ืึทืืขืจืฅ ืึทืจืืขื ืืืื ืกืืึทืืืง ืืืึทืืืขืก (ืืืจ ืงืืงื ืืื ืืื ืืืขืจ ืืืืื, ืืืืฉื ืืืื ืขืก ืืขื ืขื ืึธืคื ืึทืืขืจืฅ).
ืืึธืก ืืขื ืขื ืืืืฉืคืืื ืคืื "ื ืึธืจืืึทื" ืคึฟืึทืจ ืคืึทืจืฉืืืขื ืข ืืฉืึทื ืึทืื:


ืืืจ ืืืื ืึธืจืืจื ืื ืคืจืืขืจืืืงืข ืคืื ื ืืื ืืืขืจื ืขืืขื ืึทื ืื "ื ืึธืจืืึทื" ืืืื ืืื ืขื ืืขื ืคึฟืึทืจ ืึทืืข ืกืึทืคึผืืืืขืจื. ืืืฆื ืึทืืฅ ืืื ืืื, ืืื ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืืืจื ืึทืืขืจืฅ ืืื ืืจืึทืคืึทื ืึท?
ืืืจ ืงืขื ืขื, ืึธืืขืจ ืืืจ ืืึทืงืข ืืึธื ื ืืฉื ืืืขืื ืฆื, ืืืืึทื ืืืจ ืืึธืื ืฆื ืงืืืึทืื ืืืื ืขืจ ืคืื ืื ืึธืคึผืฆืืขืก:
ืึท) ืืึทืื ืึท ืคึผืืึทืฅ ืคืื ืืจืึทืคืก ืคึฟืึทืจ ืืขืืขืจ ืงืึทื ืึทื ืกืขืคึผืขืจืึทืืื (ืืื ืคึผืืื ืคืึทืื ืืึทืืืืืื ืืื)
ื) ืืึธืื ืืืื ืืฉืึทืจื ืืื ืึทืืข ืืฉืึทื ืึทืื (ืืื ืืึทืงืืืขื ืคืึทืจืคืึทืื ืืื ืื ืคืึทืจืืืง ืฉืืจืืช ืืื ืงืึทืกืืึทืืืืื ืึทืืขืจืฅ)

ืืื ืืืกืื ืขืก ืืขืืื?
ืืืืืขืจ, ืขืก ืืื ืึท ืืื ืกืืึทืจืืื ื ืืืึทืฉืคึผืื ืืื ืื ืืึทืงืืืืขื ืืืืฉืึทื (), ืงืขื ืขื ืืืื ืคึผืืงื ืึธืืขืจ ืืขื ืืืขื ืืื ืึท ืืงืขืจ ืืื ืขื ืืขื ืคึผืจืึธืืืขืืก.
ืืืึธืก ืืืจ ืืึธืื ืืขืืื ืืื ืื ืกืืฃ:
- ืคืึทืจืืื ืื ืฆืืืื ืกืขืจืืข ืืื ืึท ืืืกื ืฉืขื, ืืจืืคึผืื ื ืืืจื ืืฉืึทื ืึทืื;
- ืคึผืืึธืืืืจื ืื ืกืขืจืืข ืืืจื ืืจืืคึผืข ืืืื ืขืก ืืื ืงืืื ืืึทืื;
- ืคืึทืจืืืืึทืื ืื ืืืืืึทื ืคืื ืื ืืขืฆืืข 10 ืืื ืื ืืื ืคืจืืึทืขืจืืืง ืืึทืื;
- ืืืจ ืฉืจืืืขื ืืืื ืืืจ ืืขืคืื ืขื ืขืคึผืขืก;
- ืืืจ ืฉืจืืึทืื ืื ืงืึทืืงืืึทืืืืืื ืจืืืฅ ืืื ืึทืืขืจืฅ ืืืึธืก ืืขื ืขื ืคืืจืืขืงืืืขื ืืื ืื ืคืืืงืกืื;
- ืฉืืงื ืึท ื ืืฆืืง ืึธื ืืึธื ืฆื ืกืืึทืง.
ืืื ืืืื ืืืื ืื ื, ืืืจ ืืขืจืืื ืฆื ืืขืจืืจืืืื ืึทืืฅ ืืืจ ืืขืืืืื ืฆื ืืึทืงืืืขื ืืื ืื ืกืืฃ (ืืื ืืคืืื ืึท ืืืกื ืืขืจ ืืื ืื ืื ืืึทื ืืืขืจืก) ืืื ืืืืืึทืคืื ืืื ืืขืืืขื.
ืืืจ ืงืขื ื ืืขื 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
