సంక్లిష్ట హెచ్చరికలతో సులభమైన పని. లేదా బాలెర్టర్ సృష్టి చరిత్ర

సంక్లిష్ట హెచ్చరికలతో సులభమైన పని. లేదా బాలెర్టర్ సృష్టి చరిత్ర

ప్రతి ఒక్కరూ హెచ్చరికలను ఇష్టపడతారు.

అయితే, గ్రాఫ్‌లను చూస్తూ కూర్చోవడం మరియు క్రమరాహిత్యాల కోసం వెతకడం కంటే ఏదైనా జరిగినప్పుడు (లేదా పరిష్కరించబడినప్పుడు) తెలియజేయడం చాలా ఉత్తమం.

మరియు దీని కోసం అనేక సాధనాలు సృష్టించబడ్డాయి. ప్రోమెథియస్ పర్యావరణ వ్యవస్థ నుండి హెచ్చరిక మేనేజర్ మరియు VictoriaMetrics ఉత్పత్తి సమూహం నుండి vmalert. గ్రాఫానాలో Zabbix నోటిఫికేషన్‌లు మరియు హెచ్చరికలు. బాష్ మరియు టెలిగ్రామ్ బాట్‌లలో స్వీయ-వ్రాతపూర్వక స్క్రిప్ట్‌లు క్రమానుగతంగా కొంత URLని పైకి లాగి, ఏదైనా తప్పు ఉంటే మీకు తెలియజేస్తాయి. ప్రతిదీ చాలా.

మేము, మా కంపెనీలో, మేము సంక్లిష్టతలోకి పరిగెత్తే వరకు విభిన్న పరిష్కారాలను కూడా ఉపయోగించాము, లేదా, సంక్లిష్టమైన, మిశ్రమ హెచ్చరికలను సృష్టించడం అసంభవం. మేము కోరుకున్నది మరియు మేము ఏమి చేసాము అనేది కట్ క్రింద ఉంది. TLDR: ఓపెన్ సోర్స్ ప్రాజెక్ట్ ఇలా కనిపించింది బాలేటర్

మేము చాలా కాలం పాటు గ్రాఫానాలో కాన్ఫిగర్ చేసిన హెచ్చరికలతో బాగా జీవించాము. అవును, ఇది ఉత్తమ మార్గం కాదు. Alertmanager వంటి కొన్ని ప్రత్యేక పరిష్కారాలను ఉపయోగించడం ఎల్లప్పుడూ సిఫార్సు చేయబడింది. మరియు మేము కూడా ఒకటి కంటే ఎక్కువ సార్లు కదిలే వైపు చూసాము. ఆపై, కొద్దిగా, మేము మరింత కోరుకున్నారు.

ఒక నిర్దిష్ట చార్ట్ ఎప్పుడు పడిపోయింది/XX% పెరిగింది మరియు M గంటల మునుపటి వ్యవధితో పోల్చితే N నిమిషాల పాటు అక్కడ ఉందో చెప్పండి? మీరు దీన్ని గ్రాఫానా లేదా అలర్ట్‌మేనేజర్‌తో అమలు చేయడానికి ప్రయత్నించవచ్చు, కానీ ఇది అంత సులభం కాదు. (లేదా అది సాధ్యం కాకపోవచ్చు, నేను ఇప్పుడు చెప్పను)

వివిధ మూలాల నుండి వచ్చిన డేటా ఆధారంగా హెచ్చరిక నిర్ణయం తీసుకున్నప్పుడు విషయాలు మరింత క్లిష్టంగా మారతాయి. ప్రత్యక్ష ఉదాహరణ:

మేము రెండు క్లిక్‌హౌస్ డేటాబేస్‌ల నుండి డేటాను తనిఖీ చేస్తాము, ఆపై దానిని పోస్ట్‌గ్రెస్ నుండి కొంత డేటాతో సరిపోల్చండి మరియు హెచ్చరికపై నిర్ణయం తీసుకుంటాము. సిగ్నల్ లేదా రద్దు చేయండి

మా నిర్ణయం గురించి ఆలోచించడం కోసం మేము ఇలాంటి కోరికలను చాలా సేకరించాము. ఆపై మేము ఈ సేవ యొక్క అవసరాలు/సామర్థ్యాల యొక్క మొదటి జాబితాను కంపైల్ చేయడానికి ప్రయత్నించాము, ఇది ఇంకా సృష్టించబడలేదు.

  • విభిన్న డేటా మూలాలను యాక్సెస్ చేయండి. ఉదాహరణకు, ప్రోమేతియస్, క్లిక్‌హౌస్, పోస్ట్‌గ్రెస్

  • వివిధ ఛానెల్‌లకు హెచ్చరికలను పంపండి - టెలిగ్రామ్, స్లాక్, మొదలైనవి.

  • ఆలోచనా ప్రక్రియలో, నాకు డిక్లరేటివ్ వివరణ అవసరం లేదని, స్క్రిప్ట్‌లను వ్రాయగల సామర్థ్యం ఉందని స్పష్టమైంది

  • షెడ్యూల్‌లో స్క్రిప్ట్‌లను అమలు చేస్తోంది

  • సేవను పునఃప్రారంభించకుండానే స్క్రిప్ట్‌లను సులభంగా నవీకరించడం

  • సోర్స్ కోడ్‌ల నుండి సేవను పునర్నిర్మించకుండా కార్యాచరణను విస్తరించే సామర్థ్యం

ఈ జాబితా సుమారుగా ఉంది మరియు చాలా ఖచ్చితమైనది కాదు. కొన్ని పాయింట్లు మారాయి, కొన్ని చనిపోయాయి. అంతా మామూలుగానే ఉంది.

నిజానికి, బాలెర్టర్ చరిత్ర ఇలా మొదలైంది.

సంక్లిష్ట హెచ్చరికలతో సులభమైన పని. లేదా బాలెర్టర్ సృష్టి చరిత్ర

చివరికి ఏమి జరిగిందో మరియు అది ఎలా పనిచేస్తుందో నేను క్లుప్తంగా వివరించడానికి ప్రయత్నిస్తాను. (అవును, వాస్తవానికి, ఇది ముగింపు కాదు. ఉత్పత్తి అభివృద్ధికి అనేక ప్రణాళికలు ఉన్నాయి. నేను ఈ రోజుతో ఆపివేస్తాను)

అది ఎలా పనిచేస్తుంది?

మీరు లువాలో స్క్రిప్ట్‌ను వ్రాస్తారు, అక్కడ మీరు అభ్యర్థనలను స్పష్టంగా పంపుతారు (ప్రోమేతియస్, క్లిక్‌హౌస్, మొదలైనవి). మీరు సమాధానాలను స్వీకరిస్తారు మరియు వాటిని ఎలాగోలా ప్రాసెస్ చేసి సరిపోల్చండి. ఆపై ఒక రకమైన హెచ్చరికను ఆన్/ఆఫ్ చేయండి. Balerter స్వయంగా మీరు కాన్ఫిగర్ చేసిన ఛానెల్‌లకు నోటిఫికేషన్‌ను పంపుతుంది (ఇమెయిల్, టెలిగ్రామ్, స్లాక్, మొదలైనవి). స్క్రిప్ట్ నిర్దిష్ట వ్యవధిలో అమలు చేయబడుతుంది. మరియు ... సాధారణంగా, అంతే)

ఉదాహరణతో చూపించడం ఉత్తమం:

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

ఏమి జరుగుతుంది ఇక్కడ:

  • ఈ స్క్రిప్ట్ ప్రతి 10 సెకన్లకు అమలు చేయబడాలని మేము సూచిస్తున్నాము

  • స్క్రిప్ట్ పేరును సూచించండి (API కోసం, లాగ్‌లలో ప్రదర్శన కోసం, పరీక్షలలో ఉపయోగం కోసం)

  • లాగ్‌లను అవుట్‌పుట్ చేయడానికి మాడ్యూల్‌ను కనెక్ట్ చేయండి

  • పేరుతో క్లిక్‌హౌస్‌ను యాక్సెస్ చేయడానికి మాడ్యూల్‌ను కనెక్ట్ చేయండి ch1 (కనెక్షన్ కాన్ఫిగర్‌లో కాన్ఫిగర్ చేయబడింది)

  • క్లిక్‌హౌస్‌కి అభ్యర్థనను పంపండి

  • లోపం సంభవించినట్లయితే, మేము లాగ్‌లో సందేశాన్ని ప్రదర్శిస్తాము మరియు నిష్క్రమిస్తాము

  • ప్రశ్న ఫలితాన్ని స్థిరాంకంతో సరిపోల్చండి (ప్రత్యక్ష ఉదాహరణలో, మేము ఈ విలువను పొందవచ్చు, ఉదాహరణకు, పోస్ట్‌గ్రెస్ డేటాబేస్ నుండి)

  • IDతో హెచ్చరికను ప్రారంభించండి లేదా నిలిపివేయండి rps-min-limit

  • హెచ్చరిక స్థితి మారినట్లయితే మీరు నోటిఫికేషన్‌ను అందుకుంటారు

ఉదాహరణ చాలా సులభం మరియు అర్థమయ్యేలా ఉంది. అయితే, నిజ జీవితంలో స్క్రిప్ట్‌లు చాలా పొడవుగా మరియు సంక్లిష్టంగా ఉంటాయి. గందరగోళం చెందడం మరియు తప్పులు చేయడం సులభం.

అందువల్ల, ఒక తార్కిక కోరిక పరిపక్వం చెందింది - మీ స్క్రిప్ట్‌ల కోసం పరీక్షలు రాయగలగాలి. మరియు వెర్షన్ v0.4.0లో ఇది కనిపించింది.

స్క్రిప్ట్‌లను పరీక్షిస్తోంది

పై ఉదాహరణ నుండి మా స్క్రిప్ట్ కోసం ఉదాహరణ పరీక్ష:

-- @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')

స్టెప్ బై స్టెప్:

  • పరీక్ష వ్రాసిన స్క్రిప్ట్ పేరును సూచించండి

  • పరీక్ష పేరు (లాగ్‌ల కోసం)

  • పరీక్ష మాడ్యూల్‌ను కనెక్ట్ చేయండి

  • క్లిక్‌హౌస్‌కి నిర్దిష్ట అభ్యర్థన కోసం ఏ ఫలితాన్ని అందించాలో మేము చెబుతాము ch1

  • పేర్కొన్న సందేశంతో హెచ్చరిక (ఎర్రర్) rps-min-పరిమితి కాల్ చేయబడిందని మేము తనిఖీ చేస్తాము

  • rps-min-పరిమితి హెచ్చరిక నిలిపివేయబడలేదని తనిఖీ చేయండి (విజయం)

బాలెర్టర్ ఇంకా ఏమి చేయగలడు?

నేను చాలా ముఖ్యమైన, నా అభిప్రాయం ప్రకారం, బాలర్టర్ నైపుణ్యాలను తాకడానికి ప్రయత్నిస్తాను. మీరు అధికారిక వెబ్‌సైట్‌లో ప్రతిదీ వివరంగా చూడవచ్చు https://balerter.com

  • నుండి డేటాను స్వీకరించండి

    • క్లిక్‌హౌస్

    • postgres

    • mysql

    • ప్రోమేతియస్

    • Loki

  • ఛానెల్‌లకు నోటిఫికేషన్‌లను పంపండి

    • మందగింపు

    • టెలిగ్రామ్

    • సిస్లాగ్

    • తెలియజేయి (మీ కంప్యూటర్‌లో UI నోటిఫికేషన్‌లు)

    • ఇమెయిల్

    • అసమ్మతి

  • మీ డేటా ఆధారంగా గ్రాఫ్‌లను రూపొందించండి, చిత్రాన్ని S3 అనుకూల నిల్వకు అప్‌లోడ్ చేయండి మరియు నోటిఫికేషన్‌లకు అటాచ్ చేయండి (చిత్రాలతో ఉదాహరణ)

  • స్క్రిప్ట్‌ల మధ్య డేటాను మార్పిడి చేసుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది - గ్లోబల్ కీ/వాల్యూ స్టోరేజ్

  • లువాలో మీ స్వంత లైబ్రరీలను వ్రాయండి మరియు వాటిని స్క్రిప్ట్‌లలో ఉపయోగించండి (డిఫాల్ట్‌గా, json, csvతో పనిచేయడానికి lua లైబ్రరీలు సరఫరా చేయబడతాయి)

  • మీ స్క్రిప్ట్‌ల నుండి HTTP అభ్యర్థనలను పంపండి (మరియు ప్రతిస్పందనలను స్వీకరించండి, అయితే)

  • APIని అందిస్తుంది (ఇంకా మనం కోరుకున్నంత ఫంక్షనల్ కాదు)

  • ప్రోమేథియస్ ఆకృతిలో కొలమానాలను ఎగుమతి చేస్తుంది

మీరు ఇంకా ఏమి చేయాలనుకుంటున్నారు?

సింటాక్స్‌ని ఉపయోగించి స్క్రిప్ట్‌ల లాంచ్‌ను నియంత్రించే సామర్థ్యాన్ని వినియోగదారులు మరియు మేము కోరుకుంటున్నామని ఇప్పటికే స్పష్టమైంది క్రాన్. ఇది వెర్షన్ v1.0.0కి ముందు చేయబడుతుంది

నేను మరిన్ని డేటా సోర్స్‌లు మరియు నోటిఫికేషన్ డెలివరీ ఛానెల్‌లకు మద్దతు ఇవ్వాలనుకుంటున్నాను. ఉదాహరణకు, ఎవరైనా ఖచ్చితంగా MongoDBని కోల్పోతారు. కొందరి కోసం సాగే శోధన. మీ మొబైల్ ఫోన్‌కి SMS పంపండి మరియు/లేదా కాల్‌లు చేయండి. మేము ఫైల్‌ల నుండి మాత్రమే కాకుండా, ఉదాహరణకు, డేటాబేస్ నుండి కూడా స్క్రిప్ట్‌లను స్వీకరించగలగాలి. చివరికి, మేము ప్రాజెక్ట్ కోసం మరింత వినియోగదారు-స్నేహపూర్వక వెబ్‌సైట్ మరియు మెరుగైన డాక్యుమెంటేషన్ కావాలి.

ఎవరైనా ఎల్లప్పుడూ ఏదో కోల్పోతున్నారు) ఇక్కడ మేము ప్రాధాన్యతలను సరిగ్గా సెట్ చేయడానికి సంఘం అభ్యర్థనపై ఆధారపడతాము. మరియు ప్రతిదీ గ్రహించడానికి సంఘం సహాయం కోసం

ముగింపులో

మేము ఉపయోగిస్తాము బాలేటర్ నేను ఇప్పుడు చాలా కాలంగా దాన్ని కలిగి ఉన్నాను. డజన్ల కొద్దీ స్క్రిప్ట్‌లు మన మనశ్శాంతిని కాపాడతాయి. ఈ పని మరొకరికి ఉపయోగపడుతుందని ఆశిస్తున్నాను.

మరియు మీ ఇష్యూ మరియు PRతో స్వాగతం.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి