புரோஹோஸ்டர் > Блог > நிர்வாகம் > சிக்கலான விழிப்பூட்டல்களுடன் எளிதான வேலை. அல்லது Balerter உருவாக்கிய வரலாறு
சிக்கலான விழிப்பூட்டல்களுடன் எளிதான வேலை. அல்லது Balerter உருவாக்கிய வரலாறு
எல்லோரும் விழிப்பூட்டல்களை விரும்புகிறார்கள்.
நிச்சயமாக, ஏதாவது நடந்தால் (அல்லது சரி செய்யப்பட்டது) அறிவிப்பது மிகவும் சிறந்தது, உட்கார்ந்து வரைபடங்களைப் பார்த்து முரண்பாடுகளைத் தேடுவதை விட.
மேலும் இதற்காக பல கருவிகள் உருவாக்கப்பட்டுள்ளன. Prometheus சுற்றுச்சூழல் அமைப்பிலிருந்து எச்சரிக்கை மேலாளர் மற்றும் VictoriaMetrics தயாரிப்பு குழுவிலிருந்து vmalert. கிராஃபானாவில் Zabbix அறிவிப்புகள் மற்றும் விழிப்பூட்டல்கள். பாஷ் மற்றும் டெலிகிராம் போட்களில் சுயமாக எழுதப்பட்ட ஸ்கிரிப்ட்கள் அவ்வப்போது சில URLகளை மேலே இழுத்து ஏதாவது தவறு இருந்தால் உங்களுக்குத் தெரிவிக்கும். எல்லாம் நிறைய.
நாங்கள், எங்கள் நிறுவனத்தில், சிக்கலான, கூட்டு விழிப்பூட்டல்களை உருவாக்குவது சாத்தியமற்றதாக இருக்கும் வரை பல்வேறு தீர்வுகளைப் பயன்படுத்தினோம். நாம் விரும்பியது மற்றும் என்ன செய்து முடித்தோம் என்பது வெட்டிற்கு கீழே உள்ளது. TLDR: திறந்த மூல திட்டம் தோன்றியது இப்படித்தான் பலேர்ட்டர்
கிராஃபானாவில் உள்ளமைக்கப்பட்ட விழிப்பூட்டல்களுடன் நாங்கள் நீண்ட காலமாக நன்றாக வாழ்ந்தோம். ஆம், இது சிறந்த வழி அல்ல. Alertmanager போன்ற சில சிறப்பு தீர்வுகளைப் பயன்படுத்த எப்போதும் பரிந்துரைக்கப்படுகிறது. மேலும் நாங்கள் ஒன்றுக்கு மேற்பட்ட முறை நகர்வதை நோக்கிப் பார்த்தோம். பின்னர், கொஞ்சம் கொஞ்சமாக, நாங்கள் இன்னும் அதிகமாக விரும்பினோம்.
ஒரு குறிப்பிட்ட விளக்கப்படம் XX% குறைந்துள்ளது/அதிகரித்து, முந்தைய M மணிநேரத்துடன் ஒப்பிடும்போது N நிமிடங்களாக இருந்ததைக் கூறவும்? நீங்கள் இதை Grafana அல்லது Alertmanager மூலம் செயல்படுத்த முயற்சி செய்யலாம் என்று தோன்றுகிறது, ஆனால் இது மிகவும் எளிதானது அல்ல. (அல்லது ஒருவேளை அது சாத்தியமில்லை, நான் இப்போது சொல்ல மாட்டேன்)
வெவ்வேறு ஆதாரங்களில் இருந்து தரவுகளின் அடிப்படையில் எச்சரிக்கை முடிவை எடுக்க வேண்டியிருக்கும் போது விஷயங்கள் இன்னும் சிக்கலாகின்றன. நேரடி உதாரணம்:
இரண்டு Clickhouse தரவுத்தளங்களிலிருந்து தரவைச் சரிபார்த்து, Postgres இன் சில தரவுகளுடன் ஒப்பிட்டு, விழிப்பூட்டலைத் தீர்மானிக்கிறோம். சமிக்ஞை அல்லது ரத்துசெய்
எங்கள் முடிவைப் பற்றி சிந்திக்க நாங்கள் நிறைய ஒத்த ஆசைகளைக் குவித்துள்ளோம். இந்த சேவையின் தேவைகள் / திறன்களின் முதல் பட்டியலை தொகுக்க முயற்சித்தோம், இது இன்னும் உருவாக்கப்படவில்லை.
வெவ்வேறு தரவு மூலங்களை அணுகவும். உதாரணமாக, Prometheus, Clickhouse, Postgres
பல்வேறு சேனல்களுக்கு விழிப்பூட்டல்களை அனுப்பவும் - டெலிகிராம், ஸ்லாக் போன்றவை.
சிந்தனை செயல்பாட்டில், நான் ஒரு அறிவிப்பு விளக்கத்தை விரும்பவில்லை என்பது தெளிவாகியது, ஆனால் ஸ்கிரிப்ட்களை எழுதும் திறன்
ஒரு அட்டவணையில் ஸ்கிரிப்ட்களை இயக்குகிறது
சேவையை மறுதொடக்கம் செய்யாமல் ஸ்கிரிப்ட்களை எளிதாக புதுப்பித்தல்
மூலக் குறியீடுகளிலிருந்து சேவையை மீண்டும் உருவாக்காமல் எப்படியாவது செயல்பாட்டை விரிவாக்கும் திறன்
இந்த பட்டியல் தோராயமானது மற்றும் மிகவும் துல்லியமாக இல்லை. சில புள்ளிகள் மாறியது, சில இறந்தன. எல்லாம் வழக்கம் போல்.
உண்மையில், பலேர்டரின் வரலாறு இப்படித்தான் தொடங்கியது.
இறுதியில் என்ன நடந்தது மற்றும் அது எவ்வாறு செயல்படுகிறது என்பதை சுருக்கமாக விவரிக்க முயற்சிக்கிறேன். (ஆம், நிச்சயமாக, இது முடிவல்ல. தயாரிப்பு மேம்பாட்டிற்கு பல திட்டங்கள் உள்ளன. இன்றுடன் நிறுத்திக் கொள்கிறேன்)
இது எப்படி வேலை செய்கிறது?
நீங்கள் லுவாவில் ஒரு ஸ்கிரிப்டை எழுதுகிறீர்கள், அங்கு நீங்கள் வெளிப்படையாக கோரிக்கைகளை அனுப்புகிறீர்கள் (ப்ரோமிதியஸ், கிளிக்ஹவுஸ், முதலியன). நீங்கள் பதில்களைப் பெற்று, எப்படியாவது அவற்றைச் செயலாக்கி ஒப்பிட்டுப் பாருங்கள். பின்னர் ஒருவித எச்சரிக்கையை இயக்கவும்/முடக்கவும். நீங்கள் கட்டமைத்த சேனல்களுக்கு (மின்னஞ்சல், டெலிகிராம், ஸ்லாக் போன்றவை) 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 (இணைப்பு கட்டமைப்பில் கட்டமைக்கப்பட்டுள்ளது)
கிளிக்ஹவுஸுக்கு ஒரு கோரிக்கையை அனுப்பவும்
பிழை ஏற்பட்டால், பதிவில் ஒரு செய்தியைக் காட்டி வெளியேறுவோம்
வினவல் முடிவை மாறிலியுடன் ஒப்பிடுக (நேரடி எடுத்துக்காட்டில், இந்த மதிப்பை நாம் பெறலாம், எடுத்துக்காட்டாக, Postgres தரவுத்தளத்திலிருந்து)
ஐடியுடன் விழிப்பூட்டலை இயக்கவும் அல்லது முடக்கவும் 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-limit அழைக்கப்பட்டதா என்பதை நாங்கள் சரிபார்க்கிறோம்
rps-min-limit எச்சரிக்கை முடக்கப்படவில்லை என்பதைச் சரிபார்க்கவும் (வெற்றி)
Balerter வேறு என்ன செய்ய முடியும்?
நான் மிக முக்கியமான, என் கருத்து, Balerter திறன்களை தொட முயற்சிப்பேன். அதிகாரப்பூர்வ இணையதளத்தில் எல்லாவற்றையும் விரிவாகக் காணலாம் https://balerter.com
இலிருந்து தரவைப் பெறுங்கள்
கிளிக்ஹவுஸ்
postgres
MySQL
ப்ரோமிதியஸ்
லோகி
சேனல்களுக்கு அறிவிப்புகளை அனுப்பவும்
மந்தமாக
தந்தி
இந்த syslog
அறிவிக்கவும் (உங்கள் கணினியில் UI அறிவிப்புகள்)
மின்னஞ்சல்
கூறின
உங்கள் தரவின் அடிப்படையில் வரைபடங்களை உருவாக்கவும், படத்தை S3 இணக்கமான சேமிப்பகத்தில் பதிவேற்றவும் மற்றும் அறிவிப்புகளுடன் இணைக்கவும் (படங்களுடன் உதாரணம்)
ஸ்கிரிப்டுகளுக்கு இடையில் தரவைப் பரிமாற உங்களை அனுமதிக்கிறது - உலகளாவிய விசை/மதிப்பு சேமிப்பு
உங்கள் சொந்த நூலகங்களை லுவாவில் எழுதி அவற்றை ஸ்கிரிப்ட்களில் பயன்படுத்தவும் (இயல்புநிலையாக, json, csv உடன் பணிபுரிய lua நூலகங்கள் வழங்கப்படுகின்றன)
உங்கள் ஸ்கிரிப்ட்களிலிருந்து HTTP கோரிக்கைகளை அனுப்பவும் (நிச்சயமாக பதில்களைப் பெறவும்)
API ஐ வழங்குகிறது (நாம் விரும்பும் அளவுக்கு இன்னும் செயல்படவில்லை)
Prometheus வடிவத்தில் அளவீடுகளை ஏற்றுமதி செய்கிறது
நீங்கள் வேறு என்ன செய்ய விரும்புகிறீர்கள்?
தொடரியலைப் பயன்படுத்தி ஸ்கிரிப்ட்களின் வெளியீட்டைக் கட்டுப்படுத்தும் திறனைப் பயனர்களும் நாமும் விரும்புகிறோம் என்பது ஏற்கனவே தெளிவாக உள்ளது கிரான். இது பதிப்பு v1.0.0 க்கு முன் செய்யப்படும்
மேலும் தரவு மூலங்கள் மற்றும் அறிவிப்பு டெலிவரி சேனல்களை ஆதரிக்க விரும்புகிறேன். உதாரணமாக, யாராவது மோங்கோடிபியை நிச்சயமாக தவறவிடுவார்கள். சிலருக்கு மீள் தேடல். உங்கள் மொபைல் ஃபோனுக்கு SMS அனுப்பவும் மற்றும்/அல்லது அழைப்புகளை மேற்கொள்ளவும். ஸ்கிரிப்ட்களை கோப்புகளிலிருந்து மட்டும் பெற முடியாது, எடுத்துக்காட்டாக, தரவுத்தளத்திலிருந்தும் பெற விரும்புகிறோம். முடிவில், மிகவும் பயனர் நட்பு இணையதளத்தையும் திட்டத்திற்கான சிறந்த ஆவணங்களையும் நாங்கள் விரும்புகிறோம்.
யாரோ எப்பொழுதும் எதையாவது தவறவிடுகிறார்கள்) இங்கு முன்னுரிமைகளை சரியாக அமைக்க சமூகத்தின் கோரிக்கையை நாங்கள் நம்புகிறோம். மேலும் அனைத்தையும் உணர சமூகத்தின் உதவி
முடிவில்
நாம் பயன்படுத்த பலேர்ட்டர் நான் இப்போது சில நேரம் அதை உண்டு. டஜன் கணக்கான ஸ்கிரிப்டுகள் நம் மன அமைதியைக் காக்கின்றன. இந்த வேலை மற்றவர்களுக்கு பயனுள்ளதாக இருக்கும் என்று நம்புகிறேன்.