ื˜ืจื™ืงืก ืคึฟืึทืจ ืคึผืจืึทืกืขืกื™ื ื’ ืžืขื˜ืจื™ืงืก ืื™ืŸ ืงืึทืคึผืึทืกื™ื˜ืึธืจ

ืจื•ื‘ึฟ ืžืกืชึผืžื, ื”ื™ื™ึทื ื˜ ืงื™ื™ืŸ ืื™ื™ื ืขืจ ืคืจืขื’ื˜ ื•ื•ืึธืก ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ื–ืึทืžืœืขืŸ ืกืขืจื•ื•ื™ืก ืžืขื˜ืจื™ืงืก. ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืœืึทื“ื–ืฉื™ืงืึทืœ ืฉืจื™ื˜ ืื™ื– ืฆื• ืฉื˜ืขืœืŸ ืึท ืคืœื™ื ืง ืคึฟืึทืจ ื“ื™ ื’ืขื–ืืžืœื˜ ืžืขื˜ืจื™ืงืก, ื•ื•ืึธืก ื•ื•ืขื˜ ื’ืขื‘ื  ืฆื• ื•ื•ื™ืกืŸ ื•ื•ืขื’ืŸ ืงื™ื™ืŸ ื“ื™ื•ื•ื™ื™ื™ืฉืึทื ื– ืื™ืŸ ื“ื™ ื“ืึทื˜ืŸ ืื™ืŸ ื˜ืฉืึทื ืึทืœื– ื•ื•ืึธืก ื–ืขื ืขืŸ ื‘ืึทืงื•ื•ืขื ืคึฟืึทืจ ืื™ืจ (ืคึผืึธืกื˜, ืกืœืึทืงืง, ื˜ืขืœืขื’ืจืึทื). ืื™ืŸ ื“ื™ ืึธื ืœื™ื™ืŸ ื”ืึธื˜ืขืœ ื‘ื•ืงื™ื ื’ ื“ื™ื ืกื˜ Ostrovok.ru ืึทืœืข ืžืขื˜ืจื™ืงืก ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื‘ืึทื“ื™ื ื•ื ื’ืก ื–ืขื ืขืŸ ืื•ื™ืกื’ืขื’ืืกืŸ ืื™ืŸ ื™ื ืคืœื•ืงืกื“ื‘ ืื•ืŸ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ 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) ืื™ื– ืœื™ื™ื“ื™ืง, ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ืกืขืจื™ืข (ื“ืึทื˜ืŸ) ื•ื•ืขื˜ ืื•ื™ืš ื–ื™ื™ืŸ ืœื™ื™ื“ื™ืง. ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ื˜ื™ืงื™ืฅ ืื•ื™ืฃ ื“ืขื ื˜ืขืžืข ืื•ื™ืฃ ื’ื™ื˜ื”ื•ื‘ (1633, 1871, 6967) - ืžื™ืจ ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ืคื™ืงืกื™ื– ืื•ืŸ ืœื™ื™ื“ืŸ ืึท ื‘ื™ืกืœ.

ื ื™ืฆืŸ ื˜ื ืึธื™ื ืื™ืŸ ื—ืฉื‘ื•ื ื•ืช (ืื•ื™ื‘ ืื™ืŸ ืœืึทืžื‘ื“ืึท)

|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/ืขืคึผืขืก

ื“ื•ืจื›ืคื™ืจื•ื ื’ ื“ื™ืึทื’ืจืึทืžืข

  • ื™ืขื“ืขืจ ืึทืจื‘ืขื˜ ืงืขืจื˜ ืึทืŸ ื“ื•ืจื›ืคื™ืจื•ื ื’ ื‘ื•ื™ื ืžื™ื˜ ื ื•ืฆื™ืง ื ื•ืžืขืจืŸ ืื™ืŸ ื“ืขื ืคึฟืึธืจืžืึทื˜ graphviz.
  • ื ืขืžืขืŸ ืึท ื‘ืœืึธืง ืคึผื•ื ืงื˜.
  • ืคึผืึทืคึผ ืขืก ืื™ืŸ ืฆื•ืงื•ืงืขืจ, ื”ื ืื”.

ื•ื•ื• ืึทื ื“ืขืจืฉ ืงืขื ืขืŸ ืื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ื’ืจืึทื‘ืœื™ืข?

ืฆื™ื™ื˜ ืกื˜ืึทืžืคึผ ืื™ืŸ ื™ื ืคืœื•ืงืกื“ื‘ ืื•ื™ืฃ ืฉืจื™ื™ื‘ื‘ืึทืง

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ ืึท ืคืœื™ื ืง ืคึฟืึทืจ ื“ื™ ืกืึทื›ืึทืงืœ ืคื•ืŸ ืจื™ืงื•ื•ืขืก ืคึผืขืจ ืฉืขื” (ื’ืจื•ืคึผื‘ื™ื™ (1 ื”)) ืื•ืŸ ื•ื•ื™ืœืŸ ืฆื• ืจืขืงืึธืจื“ื™ืจืŸ ื“ื™ ืคืœื™ื ืง ื•ื•ืึธืก ืื™ื– ืคืืจื’ืขืงื•ืžืขืŸ ืื™ืŸ ื™ื ืคืœื•ืงืกื“ื‘ (ืฆื• ื‘ื™ื•ื˜ืึทืคืœื™ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืคืึทืงื˜ ืคื•ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื ืื•ื™ืฃ ื“ื™ ื’ืจืึทืคื™ืง ืื™ืŸ ื’ืจืึทืคืึทื ืึท).

influxDBOut () ื•ื•ืขื˜ ืฉืจื™ื™ึทื‘ืŸ ื“ื™ ืฆื™ื™ื˜ ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ ืคืœื™ื ืง ืฆื• ื“ื™ ืฆื™ื™ื˜ ืฉื˜ืขืžืคึผืœ ืึทืงืึธืจื“ื™ื ื’ืœื™, ื“ื™ ืคื•ื ื˜ ืื•ื™ืฃ ื“ื™ ื˜ืฉืึทืจื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืคืจื™ืขืจ / ืฉืคึผืขื˜ืขืจ ื•ื•ื™ ื“ื™ ืคืœื™ื ืง ืื ื’ืขืงื•ืžืขืŸ.

ื•ื•ืขืŸ ื’ืขื ื•ื™ืงื™ื™ื˜ ืื™ื– ืคืืจืœืื ื’ื˜: ืžื™ืจ ืึทืจื‘ืขื˜ืŸ ืึทืจื•ื ื“ืขื ืคึผืจืึธื‘ืœืขื ื“ื•ืจืš ืจื•ืคืŸ ืึท ืžื ื”ื’ ื”ืึทื ื“ืœืขืจ, ื•ื•ืึธืก ื•ื•ืขื˜ ืฉืจื™ื™ึทื‘ืŸ ื“ืึทื˜ืŸ ืฆื• ื™ื ืคืœื•ืงืกื“ื‘ ืžื™ื˜ ื“ืขื ืงืจืึทื ื˜ ืฆื™ื™ื˜ ืกื˜ืึทืžืคึผ.

ื“ืึธืงืงืขืจ, ื‘ื•ื™ืขืŸ ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืื™ืŸ ืกื˜ืึทืจื˜ืึทืคึผ, ืงืึทืคึผืึทืกื™ื˜ืึธืจ ืงืขื ืขืŸ ืœืึธื“ืŸ ื˜ืึทืกืงืก, ื˜ืขืžืคึผืœืึทื˜ืขืก ืื•ืŸ ื”ืึทื ื“ืœืขืจืก ืคึฟื•ืŸ ื“ืขืจ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ืงืึธื ืคื™ื’ ืื™ืŸ ื“ื™ [ืœืึธืึทื“] ื‘ืœืึธืง.

ืฆื• ืžืึทื›ืŸ ืึท ืึทืจื‘ืขื˜ ืจื™ื›ื˜ื™ืง, ืื™ืจ ื“ืึทืจืคึฟืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ื™ื ื’ื–:

  1. ื˜ืขืงืข ื ืึธืžืขืŸ - ื™ืงืกืคึผืึทื ื“ื™ื“ ืื™ืŸ ืฉืจื™ืคื˜ ืฉื™ื™ึทืŸ / ื ืึธืžืขืŸ
  2. ื˜ื™ืคึผ - ื˜ื™ื™ึทืš / ืคึผืขืงืœ
  3. 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

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster