Kapacitor เจตเจฟเฉฑเจš เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจŸเฉเจฐเจฟเจ•เจธ

เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉˆ, เจ…เฉฑเจœ เจ•เฉ‹เจˆ เจจเจนเฉ€เจ‚ เจชเฉเฉฑเจ›เจฆเจพ เจ•เจฟ เจธเฉ‡เจตเจพ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจจเจพ เจ•เจฟเจ‰เจ‚ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ. เจ…เจ—เจฒเจพ เจฒเจพเจœเจผเฉ€เจ•เจฒ เจ•เจฆเจฎ เจนเฉˆ เจ‡เจ•เฉฑเจ เฉ€ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฒเจˆ เจ‡เฉฑเจ• เจšเฉ‡เจคเจพเจตเจจเฉ€ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ, เจœเฉ‹ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจšเฉˆเจจเจฒเจพเจ‚ (เจฎเฉ‡เจฒ, เจธเจฒเฉˆเจ•, เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ) เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจตเจฟเฉฑเจš เจ•เจฟเจธเฉ‡ เจตเฉ€ เจตเจฟเจตเจนเจพเจฐ เจฌเจพเจฐเฉ‡ เจธเฉ‚เจšเจฟเจค เจ•เจฐเฉ‡เจ—เจพเฅค เจ”เจจเจฒเจพเจˆเจจ เจนเฉ‹เจŸเจฒ เจฌเฉเจ•เจฟเฉฐเจ— เจธเฉ‡เจตเจพ เจตเจฟเฉฑเจš Ostrovok.ru เจธเจพเจกเฉ€เจ†เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ InfluxDB เจตเจฟเฉฑเจš เจชเจพ เจฆเจฟเฉฑเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ Grafana เจตเจฟเฉฑเจš เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจšเฉ‡เจคเจพเจตเจจเฉ€ เจตเฉ€ เจ‰เฉฑเจฅเฉ‡ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค "เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจšเฉ€เจœเจผ เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธ เจจเจพเจฒ เจคเฉเจฒเจจเจพ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ" เจตเจฐเจ—เฉ‡ เจ•เจพเจฐเจœเจพเจ‚ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ•เจพเจชเฉˆเจธเฉ€เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

Kapacitor เจตเจฟเฉฑเจš เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจŸเฉเจฐเจฟเจ•เจธ
Kapacitor TICK เจธเจŸเฉˆเจ• เจฆเจพ เจนเจฟเฉฑเจธเจพ เจนเฉˆ เจœเฉ‹ InfluxDB เจคเฉ‹เจ‚ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ•เจˆ เจฎเจพเจชเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เฉ‡ เจœเฉ‹เฉœ เจธเจ•เจฆเจพ เจนเฉˆ (เจธเจผเจพเจฎเจฒ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ), เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจคเฉ‹เจ‚ เจ•เฉเจ เจฒเจพเจญเจฆเจพเจ‡เจ• เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ, เจจเจคเฉ€เจœเจพ เจตเจพเจชเจธ InfluxDB 'เจคเฉ‡ เจฒเจฟเจ– เจธเจ•เจฆเจพ เจนเฉˆ, Slack/Telegram/mail 'เจคเฉ‡ เจ‡เฉฑเจ• เจšเฉ‡เจคเจพเจตเจจเฉ€ เจญเฉ‡เจœ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจธเจพเจฐเจพ เจธเจŸเฉˆเจ• เจ เฉฐเจกเจพ เจ…เจคเฉ‡ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจนเฉˆ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ, เจชเจฐ เจ‡เฉฑเจฅเฉ‡ เจนเจฎเฉ‡เจธเจผเจพ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจšเฉ€เจœเจผเจพเจ‚ เจนเฉ‹เจฃเจ—เฉ€เจ†เจ‚ เจœเฉ‹ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจตเจฟเฉฑเจš เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจฆเจฐเจธเจพเจ เจจเจนเฉ€เจ‚ เจ—เจ เจนเจจเฅค เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจ…เจœเจฟเจนเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ‰เจชเจฏเฉ‹เจ—เฉ€, เจ—เฉˆเจฐ-เจธเจชเฉฑเจธเจผเจŸ เจธเฉเจเจพเจ… เจ‡เจ•เฉฑเจ เฉ‡ เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆ (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)

เจœเฉเจ†เจ‡เจจ เจญเจฐเฉ‹ (เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจฌเจจเจพเจฎ เจฌเจพเจนเจฐเฉ€)

เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจœเฉเฉœเจจเจพ เจ‰เจนเจจเจพเจ‚ เจชเฉเจ†เจ‡เฉฐเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฐเฉฑเจฆ เจ•เจฐ เจฆเฉ‡เจตเฉ‡เจ—เจพ เจœเจฟเฉฑเจฅเฉ‡ เจ•เฉ‹เจˆ เจกเจพเจŸเจพ (เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€) เจจเจนเฉ€เจ‚ เจนเฉˆเฅค
เจญเจฐเจจ ('เจจเจฒ') เจฆเฉ‡ เจจเจพเจฒ, เจ‡เฉฑเจ• เจฌเจพเจนเจฐเฉ€ เจœเฉ‹เฉœเจจ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ, เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจกเจฟเจซเจพเจฒเจŸ() เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ…เจคเฉ‡ เจ–เจพเจฒเฉ€ เจฎเฉเฉฑเจฒ เจญเจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

var data = res1
    |join(res2)
        .as('res1', 'res2)
        .fill('null')
    |default()
        .field('res1.value', 0.0)
        .field('res2.value', 100.0)

เจ‡เฉฑเจฅเฉ‡ เจ…เจœเฉ‡ เจตเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจ–เจฎเจคเจพ เจนเฉˆ. เจ‰เจชเจฐเฉ‹เจ•เจค เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจœเฉ‡เจ•เจฐ เจ‡เฉฑเจ• เจฒเฉœเฉ€ (res1 เจœเจพเจ‚ res2) เจ–เจพเจฒเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจฒเฉœเฉ€ (เจกเฉ‡เจŸเจพ) เจตเฉ€ เจ–เจพเจฒเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค Github 'เจคเฉ‡ เจ‡เจธ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจ•เจˆ เจŸเจฟเจ•เจŸเจพเจ‚ เจนเจจ (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" }}')

เจ•เจธเจŸเจฎ เจนเฉˆเจ‚เจกเจฒเจฐ เจฆเจพ

เจนเฉˆเจ‚เจกเจฒเจฐเจพเจ‚ เจฆเฉ€ เจตเฉฑเจกเฉ€ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš 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 เจนเฉ‹เจธเจŸ-เจœเจพเจ‚-เจ†เจˆเจชเฉ€:9092 เจฒเจพเจ— lvl=เจ—เจฒเจคเฉ€

httpOut เจฆเฉ‡ เจจเจพเจฒ เจตเจฟเจ•เจฒเจช

เจฎเฉŒเจœเฉ‚เจฆเจพ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเจพ เจนเฉˆ:

|httpOut('something')

เจฆเฉ‡เจ–เฉ‹ (เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹): เจนเฉ‹เจธเจŸ-เจœเจพเจ‚-เจ†เจˆเจชเฉ€:9092/kapacitor/v1/tasks/task_name/something

เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจกเจพเจ‡เจ—เฉเจฐเจพเจฎ

  • เจนเจฐเฉ‡เจ• เจ•เฉฐเจฎ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจธเฉฐเจ–เจฟเจ†เจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจŸเฉเจฐเฉ€ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ—เฉเจฐเจพเจซเจตเจฟเจœเจผ.
  • เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจฒเจตเฉ‹ เจฌเจฟเฉฐเจฆเฉ€.
  • เจ‡เจธเจจเฉ‚เฉฐ เจฆเจฐเจธเจผเจ• เจตเจฟเฉฑเจš เจชเฉ‡เจธเจŸ เจ•เจฐเฉ‹ เจ†เจจเฉฐเจฆ เจฎเจพเจฃเฉ‹.

เจคเฉเจธเฉ€เจ‚ เจฐเฉˆเจ• เจ•เจฟเฉฑเจฅเฉ‹เจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹?

เจฐเจพเจˆเจŸเจฌเฉˆเจ• 'เจคเฉ‡ influxdb เจตเจฟเฉฑเจš เจŸเจพเจˆเจฎเจธเจŸเฉˆเจ‚เจช

เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเจคเฉ€ เจ˜เฉฐเจŸเจพ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจœเฉ‹เฉœ (groupBy(1h)) เจฒเจˆ เจ‡เฉฑเจ• เจšเฉ‡เจคเจพเจตเจจเฉ€ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ influxdb เจตเจฟเฉฑเจš เจ†เจˆ เจšเฉ‡เจคเจพเจตเจจเฉ€ เจจเฉ‚เฉฐ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚ (เจ—เจฐเจพเจซเจจเจพ เจตเจฟเฉฑเจš เจ—เฉเจฐเจพเจซ 'เจคเฉ‡ เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ‡ เจคเฉฑเจฅ เจจเฉ‚เฉฐ เจธเฉเฉฐเจฆเจฐเจคเจพ เจจเจพเจฒ เจฆเจฟเจ–เจพเจ‰เจฃ เจฒเจˆ)เฅค

influxDBOut() เจšเฉ‡เจคเจพเจตเจจเฉ€ เจคเฉ‹เจ‚ เจŸเจพเจˆเจฎเจธเจŸเฉˆเจ‚เจช เจคเฉฑเจ• เจธเจฎเฉ‡เจ‚ เจฆเจพ เจฎเฉเฉฑเจฒ เจฒเจฟเจ–เฉ‡เจ—เจพ; เจ‡เจธเจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจšเจพเจฐเจŸ 'เจคเฉ‡ เจฌเจฟเฉฐเจฆเฉ‚ เจšเฉ‡เจคเจพเจตเจจเฉ€ เจ†เจ‰เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚/เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจœเจพเจตเฉ‡เจ—เจพเฅค

เจœเจฆเฉ‹เจ‚ เจธเจผเฉเฉฑเจงเจคเจพ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ: เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ•เจธเจŸเจฎ เจนเฉˆเจ‚เจกเจฒเจฐ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจ•เฉ‡ เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ‡ เจนเฉฑเจฒ เจฒเจˆ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจฎเฉŒเจœเฉ‚เจฆเจพ เจŸเจพเจˆเจฎเจธเจŸเฉˆเจ‚เจช เจฆเฉ‡ เจจเจพเจฒ influxdb เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพ เจฒเจฟเจ– เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจกเฉŒเจ•เจฐ, เจฌเจฟเจฒเจก เจ…เจคเฉ‡ เจกเจฟเจชเจฒเจพเจ‡เจฎเฉˆเจ‚เจŸ

เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจธเจฎเฉ‡เจ‚, kapacitor [load] เจฌเจฒเจพเจ• เจตเจฟเฉฑเจš เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจจเจฟเจฐเจงเจพเจฐเจฟเจค เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจคเฉ‹เจ‚ เจŸเจพเจธเจ•, เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจ…เจคเฉ‡ เจนเฉˆเจ‚เจกเจฒเจฐ เจฒเฉ‹เจก เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

  1. เจซเจพเจˆเจฒ เจฆเจพ เจจเจพเจฎ - เจธเจ•เฉเจฐเจฟเจชเจŸ เจ†เจˆเจกเฉ€/เจจเจพเจฎ เจตเจฟเฉฑเจš เจซเฉˆเจฒเจพเจ‡เจ† เจ—เจฟเจ†
  2. เจ•เจฟเจธเจฎ - เจธเจŸเฉเจฐเฉ€เจฎ/เจฌเฉˆเจš
  3. dbrp - เจธเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฟเจธ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ + เจจเฉ€เจคเฉ€ เจตเจฟเฉฑเจš เจšเจฒเจฆเฉ€ เจนเฉˆ เจ‡เจน เจฆเจฐเจธเจพเจ‰เจฃ เจฒเจˆ เจ•เฉ€เจตเจฐเจก (dbrp "เจธเจชเจฒเจพเจ‡เจฐ." "เจ†เจŸเฉ‹เจœเจจ")

เจœเฉ‡เจ•เจฐ เจ•เฉเจ เจฌเฉˆเจš เจŸเจพเจธเจ• เจตเจฟเฉฑเจš dbrp เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเจพเจˆเจจ เจธเจผเจพเจฎเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจชเฉ‚เจฐเฉ€ เจธเฉ‡เจตเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจ‡เจจเจ•เจพเจฐ เจ•เจฐ เจฆเฉ‡เจตเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจฒเฉŒเจ— เจตเจฟเฉฑเจš เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ‡เจฎเจพเจจเจฆเจพเจฐเฉ€ เจจเจพเจฒ เจฒเจฟเจ– เจฆเฉ‡เจตเฉ‡เจ—เฉ€เฅค

เจ•เฉเจฐเฉ‹เจจเฉ‹เจ—เฉเจฐเจพเจซ เจตเจฟเฉฑเจš, เจ‡เจธเจฆเฉ‡ เจ‰เจฒเจŸ, เจ‡เจน เจฒเจพเจˆเจจ เจฎเฉŒเจœเฉ‚เจฆ เจจเจนเฉ€เจ‚ เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€; เจ‡เจน เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉเจ†เจฐเจพ เจธเจตเฉ€เจ•เจพเจฐ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจชเฉˆเจฆเจพ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจ•เฉฐเจŸเฉ‡เจจเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจนเฉˆเจ• เจ•เจฐเฉ‹: เจกเฉŒเจ•เจฐเจซเจพเจˆเจฒ -1 เจจเจพเจฒ เจฌเจพเจนเจฐ เจจเจฟเจ•เจฒเจฆเฉ€ เจนเฉˆ เจœเฉ‡เจ•เจฐ //.+dbrp เจจเจพเจฒ เจฒเจพเจˆเจจเจพเจ‚ เจนเจจ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจฟเจฒเจก เจจเฉ‚เฉฐ เจ…เจธเฉˆเจ‚เจฌเจฒ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจ…เจธเจซเจฒเจคเจพ เจฆเฉ‡ เจ•เจพเจฐเจจ เจจเฉ‚เฉฐ เจคเฉเจฐเฉฐเจค เจธเจฎเจเจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเฉ‡เจตเฉ‡เจ—เฉ€เฅค

เจ‡เฉฑเจ• เจคเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเฉ‹เจตเฉ‹

เจ‰เจฆเจพเจนเจฐเจจ เจ•เจพเจฐเจœ: เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจนเจซเจผเจคเฉ‡ เจฒเจˆ เจธเฉ‡เจตเจพ เจฆเฉ‡ เจธเฉฐเจšเจพเจฒเจจ เจธเจฎเฉ‡เจ‚ เจฆเจพ 95เจตเจพเจ‚ เจชเฉเจฐเจคเฉ€เจธเจผเจค เจฒเฉˆเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ‡เจธ เจฎเฉเฉฑเจฒ เจจเจพเจฒ เจ†เจ–เจฐเฉ€ 10 เจฆเฉ‡ เจนเจฐเฉ‡เจ• เจฎเจฟเฉฐเจŸ เจฆเฉ€ เจคเฉเจฒเจจเจพ เจ•เจฐเฉ‹เฅค

เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ•-เจคเฉ‹เจ‚-เจ•เจˆ เจœเฉเจ†เจ‡เจจ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจฌเจฟเฉฐเจฆเฉ‚เจ†เจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจ‰เฉฑเจคเฉ‡ เจ†เจ–เจฐเฉ€/เจฎเฉ€เจจ/เจฎเฉ€เจกเฉ€เจ…เจจ เจจเฉ‹เจก เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเจŸเฉเจฐเฉ€เจฎ เจตเจฟเฉฑเจš เจฌเจฆเจฒ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจ—เจฒเจคเฉ€ "เจšเจพเจˆเจฒเจก เจฎเฉ‡เจฒ เจจเจพ เจนเฉ‹เจฃ เจตเจพเจฒเฉ‡ เจ•เจฟเจจเจพเจฐเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ€: เจฌเฉˆเจš -> เจธเจŸเฉเจฐเฉ€เจฎ" เจตเจพเจชเจธ เจ† เจœเจพเจตเฉ‡เจ—เฉ€เฅค

เจ‡เฉฑเจ• เจฌเฉˆเจš เจฆเจพ เจจเจคเฉ€เจœเจพ, เจ‡เฉฑเจ• เจฒเฉˆเจ‚เจฌเจกเจพ เจธเจฎเฉ€เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจœเฉ‹เจ‚, เจตเฉ€ เจฌเจฆเจฒเจฟเจ† เจจเจนเฉ€เจ‚ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจชเจนเจฟเจฒเฉ‡ เจฌเฉˆเจš เจคเฉ‹เจ‚ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจจเฉฐเจฌเจฐเจพเจ‚ เจจเฉ‚เฉฐ udf เจฐเจพเจนเฉ€เจ‚ เจ‡เฉฑเจ• เจซเจผเจพเจˆเจฒ เจตเจฟเฉฑเจš เจธเฉ‡เจต เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธ เจซเจผเจพเจˆเจฒ เจจเฉ‚เฉฐ เจธเจพเจˆเจกเจฒเฉ‹เจก เจฐเจพเจนเฉ€เจ‚ เจฒเฉ‹เจก เจ•เจฐเจจ เจฆเจพ เจตเจฟเจ•เจฒเจช เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจ‡เจธ เจจเจพเจฒ เจ•เฉ€ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ?

เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจฒเจ—เจญเจ— 100 เจนเฉ‹เจŸเจฒ เจธเจชเจฒเจพเจ‡เจฐ เจนเจจ, เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจนเจฐ เจ‡เฉฑเจ• เจฆเฉ‡ เจ•เจˆ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ, เจ†เจ“ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจšเฉˆเจจเจฒ เจ•เจนเฉ€เจเฅค เจ‡เจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเจ—เจญเจ— 300 เจšเฉˆเจจเจฒ เจนเจจ, เจนเจฐ เจ‡เฉฑเจ• เจšเฉˆเจจเจฒ เจกเจฟเฉฑเจ— เจธเจ•เจฆเจพ เจนเฉˆเฅค เจธเจพเจฐเฉ‡ เจฐเจฟเจ•เจพเจฐเจก เจ•เฉ€เจคเฉ‡ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจตเจฟเฉฑเจšเฉ‹เจ‚, เจ…เจธเฉ€เจ‚ เจ—เจฒเจคเฉ€ เจฆเจฐ (เจฌเฉ‡เจจเจคเฉ€ เจ…เจคเฉ‡ เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚) เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ—เฉเจฐเจพเจซเจพเจจเจพ เจ•เจฟเจ‰เจ‚ เจจเจนเฉ€เจ‚?

เจ—เฉเจฐเจพเจซเจพเจจเจพ เจตเจฟเฉฑเจš เจธเฉฐเจฐเจšเจฟเจค เจ—เจฒเจคเฉ€ เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจฆเฉ‡ เจ•เจˆ เจจเฉเจ•เจธเจพเจจ เจนเจจเฅค เจ•เฉเจ เจจเจพเจœเจผเฉเจ• เจนเจจ, เจ•เฉเจ เจคเฉเจธเฉ€เจ‚ เจธเจฅเจฟเจคเฉ€ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจฟเจ†เจ‚ เจ†เจชเจฃเฉ€เจ†เจ‚ เจ…เฉฑเจ–เจพเจ‚ เจฌเฉฐเจฆ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ—เฉเจฐเจพเจซเจพเจจเจพ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเจพ เจ•เจฟ เจฎเจพเจช + เจšเฉ‡เจคเจพเจตเจจเฉ€ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจ—เจฃเจจเจพ เจ•เจฐเจจเฉ€ เจนเฉˆ, เจชเจฐ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฆเจฐ (เจฌเฉ‡เจจเจคเฉ€-เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚)/เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ—เจฒเจคเฉ€เจ†เจ‚ เจญเฉˆเฉœเฉ€เจ†เจ‚ เจฒเฉฑเจ—เจฆเฉ€เจ†เจ‚ เจนเจจ:

Kapacitor เจตเจฟเฉฑเจš เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจŸเฉเจฐเจฟเจ•เจธ

เจ…เจคเฉ‡ เจธเจซเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเจพเจฒ เจฆเฉ‡เจ–เฉ‡ เจœเจพเจฃ 'เจคเฉ‡ เจ˜เฉฑเจŸ เจฌเฉเจฐเจพเจˆ:

Kapacitor เจตเจฟเฉฑเจš เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจŸเฉเจฐเจฟเจ•เจธ

เจ เฉ€เจ• เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ—เฉเจฐเจพเจซเจพเจจเจพ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจธเฉ‡เจตเจพ เจตเจฟเฉฑเจš เจฆเจฐ เจฆเฉ€ เจชเฉ‚เจฐเจต-เจ—เจฃเจจเจพ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ•เฉเจ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ‡เจน เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพ. เจชเจฐ เจธเจพเจกเฉ‡ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจ•เจฟเจ‰เจ‚เจ•เจฟ... เจนเจฐเฉ‡เจ• เจšเฉˆเจจเจฒ เจฒเจˆ เจ‡เจธเจฆเจพ เจ†เจชเจฃเจพ เจ…เจจเฉเจชเจพเจค "เจ†เจฎ" เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจธเจฅเจฟเจฐ เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ (เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ€เจ†เจ‚ เจ…เฉฑเจ–เจพเจ‚ เจจเจพเจฒ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‡เจ•เจฐ เจ…เจ•เจธเจฐ เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฆเฉ‡ เจนเจพเจ‚)เฅค

เจ‡เจน เจตเฉฑเจ–-เจตเฉฑเจ– เจšเฉˆเจจเจฒเจพเจ‚ เจฒเจˆ "เจ†เจฎ" เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจนเจจ:

Kapacitor เจตเจฟเฉฑเจš เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจŸเฉเจฐเจฟเจ•เจธ

Kapacitor เจตเจฟเฉฑเจš เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจŸเฉเจฐเจฟเจ•เจธ

เจ…เจธเฉ€เจ‚ เจชเจฟเจ›เจฒเฉ‡ เจฌเจฟเฉฐเจฆเฉ‚ เจจเฉ‚เฉฐ เจจเจœเจผเจฐเจ…เฉฐเจฆเจพเจœเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจน เจฎเฉฐเจจเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ "เจ†เจฎ" เจคเจธเจตเฉ€เจฐ เจธเจพเจฐเฉ‡ เจธเจชเจฒเจพเจ‡เจฐเจพเจ‚ เจฒเจˆ เจธเจฎเจพเจจ เจนเฉˆเฅค เจนเฉเจฃ เจธเจญ เจ•เฉเจ เจ เฉ€เจ• เจนเฉˆ, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ—เฉเจฐเจพเจซเจพเจจเจพ เจตเจฟเฉฑเจš เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚?
เจ…เจธเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจชเจฐ เจ…เจธเฉ€เจ‚ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจเฉ€ เจชเจตเฉ‡เจ—เฉ€:
a) เจนเจฐเฉ‡เจ• เจšเฉˆเจจเจฒ เจฒเจˆ เจตเฉฑเจ–เจฐเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ—เฉเจฐเจพเจซ เจฌเจฃเจพเจ“ (เจ…เจคเฉ‡ เจฆเจฐเจฆ เจจเจพเจฒ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ)
b) เจธเจพเจฐเฉ‡ เจšเฉˆเจจเจฒเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจšเจพเจฐเจŸ เจ›เฉฑเจกเฉ‹ (เจ…เจคเฉ‡ เจฐเฉฐเจ—เฉ€เจจ เจฒเจพเจˆเจจเจพเจ‚ เจ…เจคเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจ—เฉเจ†เจš เจœเจพเจ“)

Kapacitor เจตเจฟเฉฑเจš เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธ เจ•เจฐเจจ เจฒเจˆ เจŸเฉเจฐเจฟเจ•เจธ

เจคเฉเจธเฉ€เจ‚ เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉ€เจคเจพ?

เจฆเฉเจฌเจพเจฐเจพ, เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจšเฉฐเจ—เฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจ‰เจฆเจพเจนเจฐเจฃ เจนเฉˆ (เจœเฉเฉœเฉ€เจ†เจ‚ เจฒเฉœเฉ€ เจตเจฟเฉฑเจš เจฆเจฐเจพเจ‚ เจฆเฉ€ เจ—เจฃเจจเจพ เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ) เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจœเจพเจ‚ เจธเจฎเจพเจจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเฉ‡ เจ†เจงเจพเจฐ เจตเจœเฉ‹เจ‚ เจฒเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจ•เฉ€ เจ•เฉ€เจคเจพ:

  • เจšเฉˆเจจเจฒเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจนเฉ€เจ•เจฐเจจ, เจ•เฉเจ เจ˜เฉฐเจŸเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจฆเฉ‹ เจฒเฉœเฉ€ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเฉ‹เจตเฉ‹;
  • เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจกเจพเจŸเจพ เจจเจนเฉ€เจ‚ เจธเฉ€ เจคเจพเจ‚ เจธเจฎเฉ‚เจน เจฆเฉเจ†เจฐเจพ เจฒเฉœเฉ€ เจญเจฐเฉ‹;
  • เจชเจฟเจ›เจฒเฉ‡ 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹