پیچیدہ انتباہات کے ساتھ آسان کام۔ یا بیلرٹر کی تخلیق کی تاریخ

پیچیدہ انتباہات کے ساتھ آسان کام۔ یا بیلرٹر کی تخلیق کی تاریخ

ہر کوئی انتباہات سے محبت کرتا ہے۔

بلاشبہ، بیٹھ کر گرافس کو دیکھنے اور بے ضابطگیوں کو تلاش کرنے سے کہیں بہتر ہے کہ جب کچھ ہو گیا ہو (یا طے ہو جائے) تو مطلع کیا جائے۔

اور اس کے لیے بہت سے اوزار بنائے گئے ہیں۔ Prometheus ایکو سسٹم سے الرٹ مینیجر اور VictoriaMetrics پروڈکٹ گروپ سے vmalert۔ Grafana میں Zabbix اطلاعات اور انتباہات۔ bash اور ٹیلیگرام بوٹس میں خود لکھی ہوئی اسکرپٹس جو وقتاً فوقتاً کچھ URL کھینچتی ہیں اور آپ کو بتاتی ہیں کہ کیا کچھ غلط ہے۔ ہر چیز کا بہت کچھ۔

ہم نے، اپنی کمپنی میں، مختلف حل بھی استعمال کیے جب تک کہ ہم پیچیدگی، یا، بلکہ، پیچیدہ، جامع انتباہات تخلیق کرنے کے ناممکنات کا شکار نہ ہو جائیں۔ ہم کیا چاہتے تھے اور جو ہم نے ختم کیا وہ کٹ کے نیچے ہے۔ TLDR: اوپن سورس پروجیکٹ اس طرح ظاہر ہوا۔ بیلرٹر

کافی عرصے تک ہم گرافانا میں ترتیب دیے گئے الرٹس کے ساتھ اچھی طرح رہتے تھے۔ ہاں، یہ بہترین طریقہ نہیں ہے۔ ہمیشہ کچھ مخصوص حل استعمال کرنے کی سفارش کی جاتی ہے، جیسے الرٹ مینیجر۔ اور ہم نے بھی ایک سے زیادہ بار آگے بڑھنے کی طرف دیکھا۔ اور پھر، آہستہ آہستہ، ہم مزید چاہتے تھے۔

بتائیں کہ جب ایک مخصوص چارٹ میں M گھنٹے کی پچھلی مدت کے مقابلے میں XX% کی کمی/اضافہ ہوا ہے اور N منٹ تک موجود ہے؟ ایسا لگتا ہے کہ آپ اسے Grafana یا Alertmanager کے ساتھ لاگو کرنے کی کوشش کر سکتے ہیں، لیکن یہ اتنا آسان نہیں ہے۔ (یا شاید یہ ممکن نہیں، میں ابھی نہیں کہوں گا)

معاملات اور بھی پیچیدہ ہو جاتے ہیں جب الرٹ کا فیصلہ مختلف ذرائع کے ڈیٹا کی بنیاد پر کیا جانا چاہیے۔ زندہ مثال:

ہم کلک ہاؤس کے دو ڈیٹا بیس سے ڈیٹا چیک کرتے ہیں، پھر پوسٹگریس کے کچھ ڈیٹا سے اس کا موازنہ کرتے ہیں، اور الرٹ کا فیصلہ کرتے ہیں۔ سگنل یا منسوخ کریں۔

ہم نے اپنے فیصلے کے بارے میں سوچنے کے لیے بہت سی اسی طرح کی خواہشات جمع کر رکھی ہیں۔ اور پھر ہم نے اس سروس کی ضروریات/صلاحیتوں کی پہلی فہرست مرتب کرنے کی کوشش کی، جو ابھی تک نہیں بن سکی ہے۔

  • ڈیٹا کے مختلف ذرائع تک رسائی حاصل کریں۔ مثال کے طور پر، Prometheus، Clickhouse، Postgres

  • مختلف چینلز کو الرٹ بھیجیں - ٹیلیگرام، سلیک وغیرہ۔

  • سوچنے کے عمل میں، یہ واضح ہو گیا کہ میں اعلانیہ وضاحت نہیں چاہتا، لیکن اسکرپٹ لکھنے کی صلاحیت

  • ایک شیڈول پر سکرپٹ چل رہا ہے

  • سروس کو دوبارہ شروع کیے بغیر اسکرپٹ کی آسان اپ ڈیٹ

  • سورس کوڈز سے سروس کو دوبارہ بنائے بغیر کسی نہ کسی طرح فعالیت کو بڑھانے کی صلاحیت

یہ فہرست تخمینی ہے اور غالباً بہت درست نہیں ہے۔ کچھ پوائنٹ بدل گئے، کچھ مر گئے۔ سب کچھ معمول کے مطابق ہے۔

دراصل، بیلرٹر کی تاریخ کا آغاز اس طرح ہوا۔

پیچیدہ انتباہات کے ساتھ آسان کام۔ یا بیلرٹر کی تخلیق کی تاریخ

میں مختصراً بیان کرنے کی کوشش کروں گا کہ آخر میں کیا ہوا اور یہ کیسے کام کرتا ہے۔ (جی ہاں، بالکل، یہ اختتام نہیں ہے. مصنوعات کی ترقی کے لئے بہت سے منصوبے ہیں. میں صرف آج ہی روکوں گا)

یہ کس طرح کام کرتا ہے؟

آپ Lua میں ایک اسکرپٹ لکھتے ہیں جہاں آپ واضح طور پر درخواستیں بھیجتے ہیں (Prometheus، Clickhouse، وغیرہ کو)۔ آپ کو جوابات موصول ہوتے ہیں اور کسی نہ کسی طرح عمل کرتے ہیں اور ان کا موازنہ کرتے ہیں۔ پھر کسی قسم کا الرٹ آن/آف کریں۔ بیلرٹر خود ان چینلز کو ایک اطلاع بھیجے گا جنہیں آپ نے کنفیگر کیا ہے (ای میل، ٹیلی گرام، سلیک وغیرہ)۔ اسکرپٹ کو مخصوص وقفوں پر عمل میں لایا جاتا ہے۔ اور... عام طور پر، بس اتنا ہے)

مثال کے ساتھ دکھانا بہتر ہے:

-- @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 ڈیٹا بیس سے)

  • 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-limit کال کی گئی تھی۔

  • چیک کریں کہ rps-min-limit الرٹ کو غیر فعال نہیں کیا گیا تھا (کامیابی)

بیلرٹر اور کیا کر سکتا ہے؟

میں سب سے اہم، میری رائے میں، بیلرٹر کی مہارت کو چھونے کی کوشش کروں گا۔ آپ سرکاری ویب سائٹ پر ہر چیز کو تفصیل سے دیکھ سکتے ہیں۔ https://balerter.com

  • سے ڈیٹا حاصل کریں۔

    • کلک ہاؤس

    • پوسٹ گریڈ

    • ایس کیو ایل

    • prometheus

    • لوکی

  • چینلز کو اطلاعات بھیجیں۔

    • سست

    • تار

    • syslog

    • مطلع کریں (آپ کے کمپیوٹر پر UI اطلاعات)

    • ای میل

    • اختلاف

  • اپنے ڈیٹا کی بنیاد پر گراف بنائیں، تصویر کو S3 ہم آہنگ اسٹوریج پر اپ لوڈ کریں اور اسے اطلاعات کے ساتھ منسلک کریں (تصویروں کے ساتھ مثال)

  • آپ کو اسکرپٹس کے درمیان ڈیٹا کا تبادلہ کرنے کی اجازت دیتا ہے - عالمی کلید/ویلیو اسٹوریج

  • Lua میں اپنی لائبریریاں لکھیں اور انہیں اسکرپٹ میں استعمال کریں (بطور ڈیفالٹ، lua لائبریریاں json، csv کے ساتھ کام کرنے کے لیے فراہم کی جاتی ہیں)

  • اپنے اسکرپٹس سے HTTP درخواستیں بھیجیں (اور یقیناً جوابات وصول کریں)

  • ایک API فراہم کرتا ہے (ابھی تک اتنا فعال نہیں جتنا ہم چاہیں گے)

  • Prometheus فارمیٹ میں میٹرکس برآمد کرتا ہے۔

آپ اور کیا کرنے کے قابل ہونا چاہیں گے؟

یہ پہلے ہی واضح ہے کہ صارفین اور ہم نحو کا استعمال کرتے ہوئے اسکرپٹ کے آغاز کو کنٹرول کرنے کی صلاحیت چاہتے ہیں۔ کرون. یہ ورژن v1.0.0 سے پہلے کیا جائے گا۔

میں مزید ڈیٹا ذرائع اور اطلاع کی ترسیل کے چینلز کو سپورٹ کرنا چاہوں گا۔ مثال کے طور پر، کوئی یقینی طور پر MongoDB کی کمی محسوس کرے گا۔ کچھ کے لیے لچکدار تلاش۔ اپنے موبائل فون پر SMS بھیجیں اور/یا کال کریں۔ ہم نہ صرف فائلوں سے، بلکہ مثال کے طور پر، ڈیٹا بیس سے بھی اسکرپٹس حاصل کرنے کے قابل ہونا چاہتے ہیں۔ آخر میں، ہم اس منصوبے کے لیے زیادہ صارف دوست ویب سائٹ اور بہتر دستاویزات چاہتے ہیں۔

کوئی نہ کوئی ہمیشہ کچھ کھو رہا ہے) یہاں ہم ترجیحات کو درست طریقے سے ترتیب دینے کے لیے کمیونٹی کی درخواست پر بھروسہ کرتے ہیں۔ اور ہر چیز کا احساس کرنے کے لئے کمیونٹی کی مدد کے لئے

آخر میں

ہم استعمال کرتے ہیں بیلرٹر میرے پاس یہ کافی عرصے سے ہے۔ درجنوں اسکرپٹ ہمارے ذہنی سکون کی حفاظت کرتے ہیں۔ مجھے امید ہے کہ یہ کام کسی اور کے کام آئے گا۔

اور اپنے شمارے اور PR کے ساتھ خوش آمدید۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں