рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдЬ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд┐рд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдЕрдЧрд▓рд╛ рддрд╛рд░реНрдХрд┐рдХ рдХрджрдо рдПрдХрддреНрд░рд┐рдд рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рд░реНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ (рдореЗрд▓, рд╕реНрд▓реИрдХ, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо) рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреИрдирд▓реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред
рдУрд╕реНрдЯреНрд░реЛрд╡реЛрдХреЙрд╡ рд╣реЛрдЯрд▓ рдХреЗ рдСрдирд▓рд╛рдЗрди рдЖрд░рдХреНрд╖рдг рд╕реЗрд╡рд╛ рдореЗрдВ, рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рднреА рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЗрдиреНрдлреНрд▓рдХреНрд╕рдмреАрдбреА рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмреБрдирд┐рдпрд╛рджреА рдЪреЗрддрд╛рд╡рдиреА рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред "рдЖрдкрдХреЛ рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ" рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдкрд╛рд╕реАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

Kapacitor рдЯрд┐рдХ рд╕реНрдЯреИрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ InfluxDB рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рд╡рд╣ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдХрдИ рдЖрдпрд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИ), рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧреА рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░, рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ InfluxDB рдкрд░ рд▓рд┐рдЦреЗрдВ, рд╕реНрд▓реИрдХ / рдЯреЗрд▓реАрдЧреНрд░рд╛рдо / рдореЗрд▓ рдХреЛ рдЕрд▓рд░реНрдЯ рднреЗрдЬреЗрдВред
рдкреВрд░реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рд╢рд╛рдВрдд рдФрд░ рд╡рд┐рд╕реНрддреГрдд
рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдРрд╕реЗ рдХрдИ рдЙрдкрдпреЛрдЧреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ (рдореВрд▓ рдЯрд┐рдХрд╕рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕
рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ ) рдФрд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
рдлреНрд▓реЛрдЯ рдФрд░ рдЗрдВрдЯ, рдЧрдгрдирд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдЬрд╛рддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
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)
рдЕрднреА рднреА рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ (рд░реЗрд╕ 1 рдпрд╛ рд░реЗрд╕ 2) рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЦрд╛рд▓реА рд╣реИрдВ, рддреЛ рдЕрдВрддрд┐рдо рд╢реНрд░реГрдВрдЦрд▓рд╛ (рдбреЗрдЯрд╛) рднреА рдЦрд╛рд▓реА рд╣реЛрдЧреАред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЬреАрдердм (
1633 ,
1871 ,
6967 ) рдкрд░ рдХрдИ рдЯрд┐рдХрдЯ рд╣реИрдВ - рд╣рдо рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдереЛрдбрд╝рд╛ рдкреАрдбрд╝рд┐рдд рд╣реИрдВред
рдЧрдгрдирд╛ рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдпрджрд┐ рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ)
|eval(lambda: if("value" > 0, true, false)
рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рдкрд╛рдЗрдк рд▓рд╛рдЗрди рд╕реЗ рдЕрдВрддрд┐рдо рдкрд╛рдВрдЪ рдорд┐рдирдЯ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреИрдЪ'рдЖрдореА рдХреЗ рд╕рд╛рде рджреЛ рдкреИрдХреЗрдЯ рдбреЗрдЯрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдмрдбрд╝реА рдЕрд╡рдзрд┐ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:
|where(lambda: duration((unixNano(now()) - unixNano("time"))/1000, 1u) < 5m)
рдЕрдВрддрд┐рдо рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмреИрд░рд┐рдпрд░рдиреЛрдб рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИ:
|barrier() .period(5m)
рд╕рдВрджреЗрд╢ рдореЗрдВ рдЧреЛ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдЯреЗрдореНрдкреНрд▓реЗрдЯ
text.template рдкреИрдХреЗрдЬ рд╕реЗ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, рдиреАрдЪреЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВред
рдЕрдЧрд░-рдмрд╛рдХреА
рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
|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" }}')
рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд░ рдХреА
рд╣реИрдВрдбрд▓рд░ рдХреА рдмрдбрд╝реА рд╕реВрдЪреА рдиреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ (рд╕реНрдЯрдбрд┐рди) рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рд░рдЪрдирд╛рддреНрдордХрддрд╛ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ!
рд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо рдЯреВрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХ рдЫреЛрдЯрд╛ рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╕реБрд╕реНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рдВрджреЗрд╢ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдПрдХ рдЧреНрд░рд╛рдлреНрдЯрд╛рдирд╛ рд╕реЗ рдПрдХ рддрд╕реНрд╡реАрд░ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдХреЗ рдмрд╛рдж - рдПрдХ рд╣реА рд╕рдореВрд╣ рд╕реЗ рдкрд┐рдЫрд▓реЗ рдЕрд▓рд░реНрдЯ рдХреЛ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдареАрдХ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж - рд╕рдВрджреЗрд╢ рдХреЗ рдЕрдВрддрд┐рдо 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
host-or-ip : 9092 рд▓реЙрдЧ lvl = рдПрд░рд░
HttpOut рдХреЗ рд╕рд╛рде рд╡реЗрд░рд┐рдПрдВрдЯ
рд╡рд░реНрддрдорд╛рди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
|httpOut('something')
рджреЗрдЦреЛ (рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ):
рд╣реЛрд╕реНрдЯ-рдпрд╛-рдЖрдИрдкреА : 9092 / kapacitor / v1 / рдХрд╛рд░реНрдп / task_name / рдХреБрдЫ
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛
- рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдЧреНрд░реЗрд╡рд┐рд╡рд┐ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд░рди рдЯреНрд░реА рджреЗрддрд╛ рд╣реИред
- рдбреЙрдЯ рдмреНрд▓реЙрдХ рд▓реЗрдВред
- рд╣рдо рджрд░реНрд╢рдХ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдирдВрдж рд▓реЗрддреЗ рд╣реИрдВ ред
рдореБрдЭреЗ рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рд░реЗрдХ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ
рд░рд╛рдЗрдЯрдмреИрдХ рдкрд░ influxdb рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддрд┐ рдШрдВрдЯреЗ (рдЧреНрд░реБрдкрдмреА) (1h) рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рд░реНрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдирдлреНрд▓рдХреНрд╕рдмрдм рдореЗрдВ рд╣реБрдП рдЕрд▓рд░реНрдЯ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЧреНрд░рд╛рдлреНрдЯрд╛рдирд╛ рдореЗрдВ рдЧреНрд░рд╛рдл рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП)ред
influxDBOut () рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдЕрд▓рд░реНрдЯ рд╕реЗ рдХреНрд░рдорд╢рдГ рд╕рдордп рдорд╛рди рд▓рд┐рдЦреЗрдЧрд╛, рдЪрд╛рд░реНрдЯ рдкрд░ рдмрд┐рдВрджреБ рдЕрд▓рд░реНрдЯ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ / рдмрд╛рдж рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЬрдм рд╕рдЯреАрдХрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд╣рдо рдПрдХ рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдлреНрд▓рдХреНрд╕рдбрдм рд▓рд┐рдЦ рджреЗрдЧрд╛ред
docker, рдирд┐рд░реНрдорд╛рдг рдФрд░ рддреИрдирд╛рддреА
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдХрд╛реЕрдкреАрд╕рд┐рдЯрд░ [рд▓реЛрдб] рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
- рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо - рдЖрдИрдбреА / рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдо рддрдХ рдлреИрд▓рддрд╛ рд╣реИ
- рдкреНрд░рдХрд╛рд░ - рдзрд╛рд░рд╛ / рдмреИрдЪ
- dbrp - рд╡рд╣ рдХреАрд╡рд░реНрдб рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ + рдиреАрддрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (dbrp "рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛" "рдСрдЯреЛрдЬреЗрди") рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдХреБрдЫ рдмреИрдЪ рдХрд╛рд░реНрдп рдореЗрдВ рдбреНрд░рдм рдХреЗ рд╕рд╛рде рдХреЛрдИ рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреВрд░реА рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджреЗрдЧреА рдФрд░ рд▓реЙрдЧ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдХреНрд░реЛрдиреЛрдЧреНрд░рдлрд╝ рдореЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред
рдХрдВрдЯреЗрдирд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рд╣реИрдХ рдХрд░реЗрдВ: рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ -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)
рдирд┐рд╖реНрдХрд░реНрд╖ рдХреНрдпрд╛ рд╣реИ?
рдХрдкрд╛рд╕реАрдЯрд░ рд╕рдореВрд╣реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдЕрд▓рд░реНрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд░реНрдЬ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдгрдирд╛ рдХрд░рдирд╛, рдХрд╕реНрдЯрдо рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдирд╛ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ (udf)ред
рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ - рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдпрджрд┐ рдЧреНрд░рд╛рдлреНрдЯрд╛рдирд╛ рдпрд╛ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдЖрдкрдХреА рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред