рд╕рдореНрднрд╡рддрдГ, рдЖрдЬ рдХрд╕реИрд▓реЗ рд╕реЛрдзреНрджреИрди рдХрд┐рди рд╕реЗрд╡рд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЕрд░реНрдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдЪрд░рдг рднрдиреЗрдХреЛ рд╕рдЩреНрдХрд▓рди рдореЗрдЯреНрд░рд┐рдХреНрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдЕрд▓рд░реНрдЯ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБ рд╣реЛ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдХрд╛ рд▓рд╛рдЧрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреНрдпрд╛рдирд▓рд╣рд░реВ (рдореЗрд▓, рд╕реНрд▓реНрдпрд╛рдХ, рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо) рдорд╛ рдбреЗрдЯрд╛рдорд╛ рдХреБрдиреИ рдкрдирд┐ рд╡рд┐рдЪрд▓рди рдмрд╛рд░реЗ рд╕реВрдЪрд┐рдд рдЧрд░реНрдиреЗрдЫред рдЕрдирд▓рд╛рдЗрди рд╣реЛрдЯрд▓ рдмреБрдХрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдорд╛
Kapacitor TICK рд╕реНрдЯреНрдпрд╛рдХрдХреЛ рдЕрдВрд╢ рд╣реЛ рдЬрд╕рд▓реЗ InfluxDB рдмрд╛рдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рд╕рдХреНрдЫред рдпрд╕рд▓реЗ рдзреЗрд░реИ рдорд╛рдкрдирд╣рд░реВ рд╕рдБрдЧреИ рдЬреЛрдбреНрди рд╕рдХреНрдЫ (рдЬреЛрдбреНрдиреБрд╣реЛрд╕реН), рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛рдмрд╛рдЯ рдХреЗрд╣реА рдЙрдкрдпреЛрдЧреА рдЧрдгрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдирддрд┐рдЬрд╛рд▓рд╛рдИ InfluxDB рдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН, Slack/Telegram/mail рдорд╛ рдЕрд▓рд░реНрдЯ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реНред
рд╕рдореНрдкреВрд░реНрдг рд╕реНрдЯреНрдпрд╛рдХ рд░рд╛рдореНрд░реЛ рд░ рд╡рд┐рд╕реНрддреГрдд рдЫ
рдЪрд▓реЛ рдЬрд╛рдиреБрд╣реЛрд╕реН!
рдлреНрд▓реЛрдЯ рд░ 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') рдХреЛ рд╕рд╛рде, рдмрд╛рд╣рд┐рд░реА рдЬреЛрдбрд┐рдиреЗрдЫ, рдЬрд╕ рдкрдЫрд┐ рддрдкрд╛рдИрдВрд▓реЗ default() рдЧрд░реНрдиреБ рдкрд░реНрдЫ рд░ рдЦрд╛рд▓реА рдорд╛рдирд╣рд░реВ рднрд░реНрдиреБ рдкрд░реНрдЫ:
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)
рд╕рдиреНрджреЗрд╢рдорд╛ рдЧреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ
рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рдкреНрдпрд╛рдХреЗрдЬрдХреЛ рдврд╛рдБрдЪрд╛рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ
рдпрджрд┐ - рдЕрд░реНрдХреЛ
рд╣рд╛рдореА рдЪреАрдЬрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рд░рд╛рдЦреНрдЫреМрдВ рд░ рдлреЗрд░рд┐ рдкрд╛рдардХреЛ рд╕рд╛рде рдорд╛рдирд┐рд╕рд╣рд░реВрд▓рд╛рдИ рдЯреНрд░рд┐рдЧрд░ рдЧрд░реНрджреИрдиреМрдВ:
|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) - рд░рдЪрдирд╛рддреНрдордХрддрд╛ рд░ рдЕрд░реВ рдХреЗрд╣рд┐ рдкрдирд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ!
рд╣рд╛рдореНрд░реЛ рдПрдЙрдЯрд╛ рдЪрд▓рди рднрдиреЗрдХреЛ рдврд┐рд▓реЛрдорд╛ рд╕реВрдЪрдирд╛рд╣рд░реВ рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдкрд╛рдЗрдерди рд▓рд┐рдкрд┐ рд╣реЛред
рд╕реБрд░реБрдорд╛, рд╣рд╛рдореА рд╕рдиреНрджреЗрд╢рдорд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг-рд╕реБрд░рдХреНрд╖рд┐рдд рдЧреНрд░рд╛рдлрд╛рдирд╛ рдЪрд┐рддреНрд░ рдкрдард╛рдЙрди рдЪрд╛рд╣рдиреНрдереНрдпреМрдВред рддреНрдпрд╕рдкрдЫрд┐, рдПрдЙрдЯреИ рд╕рдореВрд╣рдмрд╛рдЯ рдЕрдШрд┐рд▓реНрд▓реЛ рдЪреЗрддрд╛рд╡рдиреАрдорд╛ рдереНрд░реЗрдбрдорд╛ рдареАрдХ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН, рд░ рдЫреБрдЯреНрдЯреИ рд╕рдиреНрджреЗрд╢рдХреЛ рд░реВрдкрдорд╛ рд╣реЛрдЗрдиред рдХреЗрд╣реА рд╕рдордп рдкрдЫрд┐ - рд╕рдиреНрджреЗрд╢рдорд╛ рдЕрдиреНрддрд┐рдо 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 рдорд╛ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк
рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдкреНрд░рддрд┐ рдШрдгреНрдЯрд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рдпреЛрдЧрдлрд▓ (groupBy(1h)) рдХреЛ рд▓рд╛рдЧрд┐ рдЕрд▓рд░реНрдЯ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдЫреМрдВ рд░ influxdb рдорд╛ рднрдПрдХреЛ рдЕрд▓рд░реНрдЯ рд░реЗрдХрд░реНрдб рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ (рдЧреНрд░рд╛рдлрдирд╛рдорд╛ рдЧреНрд░рд╛рдлрдорд╛ рд╕рдорд╕реНрдпрд╛рдХреЛ рддрдереНрдпрд▓рд╛рдИ рд╕реБрдиреНрджрд░ рд░реВрдкрдорд╛ рджреЗрдЦрд╛рдЙрди)ред
influxDBOut() рд▓реЗ рд╕рддрд░реНрдХрддрд╛рдмрд╛рдЯ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдкрдорд╛ рд╕рдордп рдорд╛рди рд▓реЗрдЦреНрдиреЗрдЫ; рддрджрдиреБрд╕рд╛рд░, рдЪрд╛рд░реНрдЯрдорд╛ рдмрд┐рдиреНрджреБ рдЕрд▓рд░реНрдЯ рдЖрдЗрдкреБрдЧреНрдиреБ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ/рдкрдЫрд┐ рд▓реЗрдЦрд┐рдиреЗрдЫред
рдЬрдм рд╕рдЯреАрдХрддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫ: рд╣рд╛рдореА рдЕрдиреБрдХреВрд▓рди рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд▓рд╛рдИ рдХрд▓ рдЧрд░реЗрд░ рдпрд╕ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдЫреМрдВ, рдЬрд╕рд▓реЗ рд╣рд╛рд▓рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдкрдХреЛ рд╕рд╛рде influxdb рдорд╛ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдиреЗрдЫред
рдбрдХрд░, рдирд┐рд░реНрдорд╛рдг рд░ рддреИрдирд╛рддреА
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдорд╛, рдХреНрдпрд╛рдкреЗрд╕рд┐рдЯрд░рд▓реЗ [рд▓реЛрдб] рдмреНрд▓рдХрдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдмрд╛рдЯ рдХрд╛рд░реНрдпрд╣рд░реВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рд░ рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдЫред
рд╕рд╣реА рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдирд┐рдореНрди рдЪреАрдЬрд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдЫ:
- рдлрд╛рдЗрд▓рдХреЛ рдирд╛рдо - рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдИрдбреА/рдирд╛рдордорд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░рд┐рдпреЛ
- рдкреНрд░рдХрд╛рд░ - рд╕реНрдЯреНрд░рд┐рдо / рдмреНрдпрд╛рдЪ
- dbrp - рдХреБрди рдбрд╛рдЯрд╛рдмреЗрд╕ + рдиреАрддрд┐рдорд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓реНрдЫ рднрдиреЗрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрди рдЦреЛрдЬрд╢рдмреНрдж (dbrp "рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ред" "autogen")
рдпрджрд┐ рдХреЗрд╣реА рдмреНрдпрд╛рдЪ рдХрд╛рд░реНрдпрд▓реЗ dbrp рд╕рдБрдЧ рд▓рд╛рдЗрди рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрди рднрдиреЗ, рд╕рдореНрдкреВрд░реНрдг рд╕реЗрд╡рд╛ рд╕реБрд░реБ рдЧрд░реНрди рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреЗрдЫ рд░ рд▓рдЧрдорд╛ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЗрдорд╛рдирджрд╛рд░реАрдкреВрд░реНрд╡рдХ рд▓реЗрдЦреНрдиреЗрдЫред
рдХреНрд░реЛрдиреЛрдЧреНрд░рд╛рдлрдорд╛, рдпрд╕рдХреЛ рд╡рд┐рдкрд░рд┐рдд, рдпреЛ рд░реЗрдЦрд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреБ рд╣реБрдБрджреИрди; рдпреЛ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдорд╛рд░реНрдлрдд рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рд░ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред
рдХрдиреНрдЯреЗрдирд░ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛ рд╣реНрдпрд╛рдХ: рдбрдХрд░рдлрд╛рдЗрд▓ -1 рдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреНрдЫ рдпрджрд┐ рддреНрдпрд╣рд╛рдБ //.+dbrp рд╕рдБрдЧ рд▓рд╛рдЗрдирд╣рд░реВ рдЫрдиреН, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдмрд┐рд▓реНрдб рдПрд╕реЗрдореНрдмрд▓ рдЧрд░реНрджрд╛ рд╡рд┐рдлрд▓рддрд╛рдХреЛ рдХрд╛рд░рдг рддреБрд░реБрдиреНрддреИ рдмреБрдЭреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред
рдПрдХ рджреЗрдЦрд┐ рдзреЗрд░реИ рд╕рдореНрдорд┐рд▓рд┐рдд
рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдп: рддрдкрд╛рдИрдВрд▓реЗ рдПрдХ рд╣рдкреНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕реЗрд╡рд╛рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рди рд╕рдордпрдХреЛ 95 рдФрдВ рдкреНрд░рддрд┐рд╢рдд рд▓рд┐рди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЕрдиреНрддрд┐рдо 10 рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдиреЗрдЯрд▓рд╛рдИ рдпреЛ рдорд╛рдирд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рддрдкрд╛рдИрдВрд▓реЗ рдПрдХ-рджреЗрдЦрд┐-рдзреЗрд░реИ рд╕рд╛рдореЗрд▓ рд╣реБрди рд╕рдХреНрдиреБрд╣реБрдиреНрди, рдмрд┐рдиреНрджреБрд╣рд░реВрдХреЛ рд╕рдореВрд╣рдорд╛ рдЕрдиреНрддрд┐рдо/рдореАрди/рдорд╛рдзреНрдпрдХрд▓реЗ рдиреЛрдбрд▓рд╛рдИ рд╕реНрдЯреНрд░рд┐рдордорд╛ рдкрд░рд┐рдгрдд рдЧрд░реНрдЫ, рддреНрд░реБрдЯрд┐ "рдмрдЪреНрдЪрд╛ рдмреЗрдореЗрд▓ рдХрд┐рдирд╛рд░рд╣рд░реВ рдердкреНрди рд╕рдХреНрджреИрди: рдмреНрдпрд╛рдЪ -> рд╕реНрдЯреНрд░рд┐рдо" рдлрд░реНрдХрд╛рдЗрдиреЗрдЫред
рдмреНрдпрд╛рдЪрдХреЛ рдирддрд┐рдЬрд╛, рдПрдХ lambda рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдорд╛ рдЪрд░рдХреЛ рд░реВрдкрдорд╛, рдкрдирд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред
рддреНрдпрд╣рд╛рдБ рдкрд╣рд┐рд▓реЛ рдмреНрдпрд╛рдЪрдмрд╛рдЯ рдЖрд╡рд╢реНрдпрдХ рдирдореНрдмрд░рд╣рд░реВ udf рдорд╛рд░реНрдлрдд рдлрд╛рдЗрд▓рдорд╛ рдмрдЪрдд рдЧрд░реНрдиреЗ рд░ рд╕рд╛рдЗрдбрд▓реЛрдб рдорд╛рд░реНрдлрдд рдлрд╛рдЗрд▓ рд▓реЛрдб рдЧрд░реНрдиреЗ рд╡рд┐рдХрд▓реНрдк рдЫред
рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдХреЗ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдпреМрдВ?
рд╣рд╛рдореАрд╕рдБрдЧ рд▓рдЧрднрдЧ 100 рд╣реЛрдЯреЗрд▓ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рд╣рд░реВ рдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрд╕рдБрдЧ рдзреЗрд░реИ рдЬрдбрд╛рдирд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреН, рдпрд╕рд▓рд╛рдИ рдЪреНрдпрд╛рдирд▓ рднрдирд┐рдиреНрдЫред рддреНрдпрд╣рд╛рдБ рдпреА рдЪреНрдпрд╛рдирд▓рд╣рд░реВ рдордзреНрдпреЗ рд▓рдЧрднрдЧ 300 рдЫрдиреН, рдкреНрд░рддреНрдпреЗрдХ рдЪреНрдпрд╛рдирд▓ рдЦрд╕реНрди рд╕рдХреНрдЫред рд╕рдмреИ рд░реЗрдХрд░реНрдб рдЧрд░рд┐рдПрдХрд╛ рдореЗрдЯреНрд░рд┐рдХрд╣рд░реВ рдордзреНрдпреЗ, рд╣рд╛рдореА рддреНрд░реБрдЯрд┐ рджрд░ (рдЕрдиреБрд░реЛрдз рд░ рддреНрд░реБрдЯрд┐рд╣рд░реВ) рдХреЛ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдиреЗрдЫреМрдВред
рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХрд┐рди рдЫреИрди?
Grafana рдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХрд╛ рддреНрд░реБрдЯрд┐ рдЕрд▓рд░реНрдЯрд╣рд░реВ рдзреЗрд░реИ рдмреЗрдлрд╛рдЗрджрд╛рд╣рд░реВ рдЫрдиреНред рдХреЗрд╣рд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЫрдиреН, рдХреЗрд╣рд┐ рддрдкрд╛рдИрд▓реЗ рдЖрдлреНрдиреЛ рдЖрдБрдЦрд╛ рдмрдиреНрдж рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред
Grafana рдорд╛рдкрди + рдЕрд▓рд░реНрдЯрд┐рдВрдЧ рдмреАрдЪ рдХрд╕рд░реА рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдерд╛рд╣рд╛ рдЫреИрди, рддрд░ рд╣рд╛рдореАрд▓рд╛рдИ рджрд░ (рдЕрдиреБрд░реЛрдз-рддреНрд░реБрдЯрд┐рд╣рд░реВ)/рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫред
рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЦрд░рд╛рдм рджреЗрдЦрд┐рдиреНрдЫрдиреН:
рд░ рд╕рдлрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд╕рд╛рде рд╣реЗрд░реНрджрд╛ рдХрдо рдЦрд░рд╛рдм:
рдареАрдХ рдЫ, рд╣рд╛рдореА grafana рдЕрдШрд┐ рд╕реЗрд╡рд╛рдорд╛ рджрд░ рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рд░ рдХреЗрд╣рд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫред рддрд░ рд╣рд╛рдореНрд░реЛрдорд╛ рд╣реЛрдЗрди, рдХрд┐рдирдХрд┐... рдкреНрд░рддреНрдпреЗрдХ рдЪреНрдпрд╛рдирд▓рдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рдЕрдиреБрдкрд╛рдд "рд╕рд╛рдорд╛рдиреНрдп" рдорд╛рдирд┐рдиреНрдЫ, рд░ рдЕрд▓рд░реНрдЯрд╣рд░реВ рд╕реНрдерд┐рд░ рдорд╛рдирд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдЧрд░реНрджрдЫ (рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдЖрдБрдЦрд╛рд▓реЗ рд╣реЗрд░реНрдЫреМрдВ, рдмрд╛рд░рдореНрдмрд╛рд░ рдЕрд▓рд░реНрдЯрд╣рд░реВ рднрдПрдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН)ред
рдпреА рд╡рд┐рднрд┐рдиреНрди рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ "рд╕рд╛рдорд╛рдиреНрдп" рдХреЛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реБрдиреН:
рд╣рд╛рдореА рдЕрдШрд┐рд▓реНрд▓реЛ рдмрд┐рдиреНрджреБрд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрдЫреМрдВ рд░ рдорд╛рдиреНрджрдЫреМрдВ рдХрд┐ "рд╕рд╛рдорд╛рдиреНрдп" рдЪрд┐рддреНрд░ рд╕рдмреИ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рди рдЫред рдЕрдм рд╕рдмреИ рдареАрдХ рдЫ, рд░ рд╣рд╛рдореА grafana рдорд╛ рдЕрд▓рд░реНрдЯ рд╕рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ?
рд╣рд╛рдореА рд╕рдХреНрдЫреМрдВ, рддрд░ рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рдореИ рдЪрд╛рд╣рдБрджреИрдиреМрдВ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд▓реЗ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдордзреНрдпреЗ рдПрдЙрдЯрд╛ рдЫрд╛рдиреНрдиреБрдкрд░реНрдЫ:
рдХ) рдкреНрд░рддреНрдпреЗрдХ рдЪреНрдпрд╛рдирд▓рдХреЛ рд▓рд╛рдЧрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзреЗрд░реИ рдЧреНрд░рд╛рдлрд╣рд░реВ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН (рд░ рдкреАрдбрд╛рд╕рд╛рде рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рд╛рде)
рдЦ) рд╕рдмреИ рдЪреНрдпрд╛рдирд▓рд╣рд░реВрд╕рдБрдЧ рдПрдЙрдЯрд╛ рдЪрд╛рд░реНрдЯ рдЫреЛрдбреНрдиреБрд╣реЛрд╕реН (рд░ рд░рдВрдЧреАрди рд░реЗрдЦрд╛рд╣рд░реВ рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдЕрд▓рд░реНрдЯрд╣рд░реВрдорд╛ рд╣рд░рд╛рдЙрдиреБрд╣реЛрд╕реН)
рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдХрд╕рд░реА рдЧрд░реНрдиреБрднрдпреЛ?
рдлреЗрд░рд┐, рддреНрдпрд╣рд╛рдБ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рд░рд╛рдореНрд░реЛ рд╕реБрд░реВрд╡рд╛рдд рдЙрджрд╛рд╣рд░рдг рдЫ (
рд╣рд╛рдореАрд▓реЗ рдЕрдиреНрддрдорд╛ рдХреЗ рдЧрд░реНрдпреМрдВ:
- рдХреЗрд╣реА рдШрдгреНрдЯрд╛рдорд╛ рджреБрдИ рд╢реГрдЩреНрдЦрд▓рд╛рд╣рд░реВрдорд╛ рд╕рд╛рдореЗрд▓ рд╣реБрдиреБрд╣реЛрд╕реН, рдЪреНрдпрд╛рдирд▓рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣рдмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реН;
- рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдбрд╛рдЯрд╛ рдерд┐рдПрди рднрдиреЗ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рднрд░реНрдиреБрд╣реЛрд╕реН;
- рдЕрдШрд┐рд▓реНрд▓реЛ рдбреЗрдЯрд╛ рд╕рдВрдЧ рдкрдЫрд┐рд▓реНрд▓реЛ 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)
рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рд╣реЛ?
Kapacitor рд╕рдореВрд╣рд╣рд░реВрдХреЛ рдЧреБрдЪреНрдЫрд╛рдХреЛ рд╕рд╛рде рдирд┐рдЧрд░рд╛рдиреА-рдЕрд▓рд░реНрдЯрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рдкрд╣рд┐рд▓реЗ рдиреИ рд░реЗрдХрд░реНрдб рдЧрд░рд┐рдПрдХреЛ рдореЗрдЯреНрд░рд┐рдХреНрд╕рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдгрдирд╛рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди, рдЕрдиреБрдХреВрд▓рди рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд░ рд▓рд┐рдкрд┐рд╣рд░реВ (udf) рдЪрд▓рд╛рдЙрдирдорд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдЫред
рдкреНрд░рд╡реЗрд╢рдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рдзрд╛ рдзреЗрд░реИ рдЙрдЪреНрдЪ рдЫреИрди - рдпрджрд┐ рдЧреНрд░рд╛рдлрдирд╛ рд╡рд╛ рдЕрдиреНрдп рдЙрдкрдХрд░рдгрд╣рд░реВрд▓реЗ рддрдкрд╛рдЗрдБрдХреЛ рдЗрдЪреНрдЫрд╛рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╕рдиреНрддреБрд╖реНрдЯ рдЧрд░реНрджреИрди рднрдиреЗ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рд╕реНрд░реЛрдд: www.habr.com