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.
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.