Gawé gampang sareng panggeuing kompleks. Atawa sajarah Balerter

Gawé gampang sareng panggeuing kompleks. Atawa sajarah Balerter

Sarerea mikanyaah ngabejaan.

Tangtosna, langkung saé dibéjaan nalika aya kajadian (atanapi parantos dibenerkeun) tibatan calik sareng ningali grafik sareng milarian anomali.

Sareng seueur alat anu diciptakeun pikeun ieu. Alertmanager ti ékosistem Prometheus sarta vmalert ti grup produk VictoriaMetrics. Bewara sareng panggeuing Zabbix di Grafana. Skrip tulisan diri dina bot bash sareng Telegram anu périodik narik sababaraha URL sareng nyarioskeun ka anjeun upami aya anu salah. Loba sagalana.

Kami, di perusahaan kami, ogé nganggo solusi anu béda-béda dugi ka urang ngalaman pajeulitna, atanapi, langkung-langkung, teu mungkin nyiptakeun peringatan komposit anu kompleks. Naon anu urang pikahoyong sareng naon anu urang laksanakeun nyaéta di handap. TLDR: Ieu kumaha proyék open source mucunghul Balerter

Pikeun lila urang hirup ogé kalawan ngabejaan ngonpigurasi di Grafana. Leres, ieu sanés cara anu pangsaéna. Sok disarankeun pikeun nganggo sababaraha solusi khusus, sapertos Alertmanager. Sareng urang ogé ningali ka arah gerak langkung ti sakali. Lajeng, saeutik demi saeutik, urang hayang leuwih.

Sebutkeun lamun bagan nu tangtu geus murag / ngaronjat ku XX% sarta geus aya pikeun N menit dibandingkeun periode saméméhna M jam? Sigana anjeun tiasa nyobian ngalaksanakeun ieu sareng Grafana atanapi Alertmanager, tapi éta henteu gampang. (Atawa meureun teu mungkin, kuring moal nyebutkeun ayeuna)

Hal-hal janten langkung rumit nalika kaputusan waspada kedah dilakukeun dumasar kana data tina sumber anu béda. conto hirup:

Urang pariksa data tina dua basis data Clickhouse, lajeng ngabandingkeun eta kalawan sababaraha data ti Postgres, sarta mutuskeun dina waspada. Sinyal atanapi ngabolaykeun

Kami parantos ngumpulkeun seueur kahayang anu sami pikeun urang mikirkeun kaputusan urang. Teras kami nyobian nyusun daptar sarat / kamampuan jasa ieu, anu henteu acan didamel.

  • ngakses sumber data béda. Contona, Prometheus, Clickhouse, Postgres

  • ngirim panggeuing ka sababaraha saluran - telegram, slack, jsb.

  • dina prosés mikir, janten jelas yén kuring henteu hoyong déskripsi déklaratif, tapi kamampuan nyerat naskah.

  • ngajalankeun skrip dina jadwal

  • update skrip gampang tanpa ngamimitian deui jasa

  • kamampuhan pikeun kumaha bae dilegakeun fungsionalitas tanpa ngawangun deui layanan ti kode sumber

Daptar ieu perkiraan sareng paling dipikaresep henteu akurat pisan. Sababaraha titik robah, sababaraha maot. Sadayana sapertos biasa.

Sabenerna, ieu kumaha sajarah Balerter dimimitian.

Gawé gampang sareng panggeuing kompleks. Atawa sajarah Balerter

Kuring bakal coba ngajelaskeun sakeudeung naon anu lumangsung dina tungtungna jeung kumaha gawéna. (Sumuhun, tangtosna, ieu teu tungtungna. Aya loba rencana pikeun ngembangkeun produk. Kuring ngan bakal eureun di dinten ieu)

Kumaha carana sangkan eta pagawean?

Anjeun nulis naskah di Lua dimana anjeun eksplisit ngirim requests (ka Prometheus, Clickhouse, jsb). Anjeun nampi jawaban sareng kumaha waé prosés sareng ngabandingkeunana. Teras hurungkeun / pareumkeun sababaraha jinis waspada. Balerter sorangan bakal ngirim bewara ka saluran nu tos Anjeun ngonpigurasi (Email, telegram, slack, jsb). Skrip dieksekusi dina interval anu ditangtukeun. Sareng ... sacara umum, éta sadayana)

Hadé pisan mun éta némbongkeun kalawan conto:

-- @interval 10s
-- @name script1

local minRequestsRPS = 100

local log = require("log")
local ch1 = require("datasource.clickhouse.ch1")

local res, err = ch1.query("SELECT sum(requests) AS rps FROM some_table WHERE date = now()")
if err ~= nil then
    log.error("clickhouse 'ch1' query error: " .. err)
    return
end

local resultRPS = res[1].rps

if resultRPS < minResultRPS then
    alert.error("rps-min-limit", "Requests RPS are very small: " .. tostring(resultRPS))
else
    alert.success("rps-min-limit", "Requests RPS ok")
end 

Naon anu lumangsung di dieu:

  • kami nunjukkeun yén naskah ieu kedah dieksekusi unggal 10 detik

  • nunjukkeun nami naskah (pikeun API, pikeun tampilan dina log, kanggo dianggo dina tés)

  • nyambungkeun modul pikeun kaluaran log

  • sambungkeun modul pikeun ngakses clickhouse kalawan nami ch1 (sambungan sorangan geus ngonpigurasi dina config nu)

  • ngirim pamundut ka clickhouse

  • bisi aya kasalahan, urang nembongkeun pesen dina log sarta kaluar

  • bandingkeun hasil pamundut sareng konstanta (dina conto langsung, urang tiasa nampi nilai ieu, contona, tina database Postgres)

  • ngaktipkeun atawa nganonaktipkeun ngageter kalawan ID rps-min-limit

  • Anjeun bakal nampa bewara lamun status ngageter geus robah

conto anu cukup basajan tur kaharti. Nanging, tangtosna, dina naskah kahirupan nyata tiasa rada panjang sareng rumit. Gampang bingung sareng ngalakukeun kasalahan.

Ku alatan éta, kahayang logis geus matured - bisa nulis tés pikeun naskah Anjeun. Sarta dina versi v0.4.0 ieu mucunghul.

Nguji naskah

Tés conto pikeun naskah urang tina conto di luhur:

-- @test script1
-- @name script1-test

test = require('test')

local resp = {
    {
        rps = 10
    }
} 

test.datasource('clickhouse.ch1').on('query', 'SELECT sum(requests) AS rps FROM some_table WHERE date = now()').response(resp)

test.alert().assertCalled('error', 'rps-min-limit', 'Requests RPS are very small: 10')
test.alert().assertNotCalled('success', 'rps-min-limit', 'Requests RPS ok')

Step by step:

  • nuduhkeun ngaran naskah anu tés ditulis

  • ngaran tés (pikeun log)

  • nyambungkeun modul nguji

  • urang nyebutkeun naon hasilna kudu balik pikeun pamundut husus ka clickhouse nu ch1

  • urang pariksa yen ngageter (kasalahan) rps-mnt-wates jeung pesen dieusian disebut

  • pariksa yen rps-min-wates ngageter teu ditumpurkeun (sukses)

Naon deui anu tiasa dilakukeun ku Balerter?

Kuring baris coba noél dina pangpentingna, dina pamadegan mah, kaahlian Balerter. Anjeun tiasa ningali sadayana sacara rinci dina halaman wéb resmi https://balerter.com

  • nampi data ti

    • clickhouse

    • postgres

    • MySQL

    • prometheus

    • loki

  • ngirim bewara ka saluran

    • slack

    • telegram

    • syslog

    • bewara (bewara UI dina komputer anjeun)

    • email

    • discord

  • ngawangun grafik dumasar kana data anjeun, unggah gambar ka panyimpenan anu cocog sareng S3 teras pasangkeun kana béwara (Contona jeung gambar)

  • ngidinan Anjeun pikeun tukeur data antara Aksara - global Key / Panyimpenan nilai

  • Tulis perpustakaan anjeun sorangan dina Lua sareng dianggo dina skrip (sacara standar, perpustakaan lua disayogikeun pikeun damel sareng json, csv)

  • kirimkeun pamundut HTTP tina skrip anjeun (sareng nampi réspon, tangtosna)

  • nyadiakeun API (teu acan sakumaha fungsi sakumaha urang hoyong)

  • métrik ékspor dina format Prometheus

Naon deui anu anjeun hoyong laksanakeun?

Éta parantos jelas yén pangguna sareng urang hoyong kamampuan pikeun ngontrol peluncuran naskah nganggo sintaksis Cron. Ieu bakal dilakukeun sateuacan versi v1.0.0

Abdi hoyong ngadukung langkung seueur sumber data sareng saluran pangiriman bewara. Contona, batur pasti bakal sono MongoDB. Pilarian elastis pikeun sababaraha. Kirim SMS sareng/atawa nelepon kana telepon sélulér anjeun. Kami hoyong tiasa nampi naskah sanés ngan ukur tina file, tapi ogé, contona, tina pangkalan data. Tungtungna, urang hoyong halaman wéb anu langkung ramah-pamaké sareng dokuméntasi anu langkung saé pikeun proyék éta.

Batur sok leungit hiji hal) Di dieu urang ngandelkeun paménta masarakat dina raraga nangtukeun prioritas bener. Jeung ka bantuan masarakat pikeun ngawujudkeun sagalana

dina kacindekan

Kami nganggo Balerter Kuring geus rada lila ayeuna. Puluhan naskah ngajaga katengtreman pikiran urang. Mugi-mugi karya ieu tiasa mangfaat kanggo batur.

Sareng wilujeng sumping sareng Masalah sareng PR anjeun.

sumber: www.habr.com

Tambahkeun komentar