اوپن ٹیلی میٹری کلیکٹر کا استعمال کرتے ہوئے پرومیتھیس ہسٹگرام کو او ٹی ایل پی میں کیسے تبدیل کیا جائے۔

جدید ایپلی کیشنز اکثر اس طرح کے میٹرکس کو بے نقاب کرتی ہیں: /metrics Prometheus فارمیٹ کا استعمال کرتے ہوئے ایک اختتامی نقطہ۔

ان میٹرکس میں، ہسٹوگرام خاص طور پر مفید ہیں۔ یہ ظاہر کرتا ہے کہ کتنی کثرت سے قدریں جیسے HTTP درخواست کا دورانیہ، ڈیٹا بیس استفسار کا وقت، اور قطار پروسیسنگ میں تاخیر مختلف رینجز میں آتی ہے۔

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

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

تاہم، تمام بیک اینڈز میں پرومیتھیس میٹرکس کی مقامی سمجھ نہیں ہے۔ اسے بہت سے جدید مشاہداتی پلیٹ فارمز نے ترجیح دی ہے۔ اوپن ٹیلی میٹری پروٹوکول (OTLP). تبدیلی کے بغیر پرومیتھیس میٹرکس کو پاس کرنے سے ڈیٹا نامکمل یا غلط تشریح ہو سکتا ہے۔ یہی وجہ ہے کہ ہمیں OTLP کو ہسٹوگرامس کو کھرچنے، تبدیل کرنے اور برآمد کرنے کے لیے ایک پائپ لائن کی ضرورت ہے تاکہ یہ یقینی بنایا جا سکے کہ ہماری آبزرویبلٹی پائپ لائن مستقل اور قابل عمل رہے۔

اس آرٹیکل میں، ہم اپنی ایپلیکیشن سے Prometheus histograms کو کھرچنے کے لیے OpenTelemetry کلکٹر کا استعمال کرتے ہیں۔ /metrics OpenTelemetry ہسٹوگرام ڈیٹا ماڈل کے اختتامی نقطوں کا نقشہ بنائیں اور انہیں OTLP کا استعمال کرتے ہوئے مشاہداتی پس منظر میں برآمد کریں۔ مانیٹرنگ پلیٹ فارمز کے ساتھ مطابقت کو یقینی بناتے ہوئے کلیکٹر ڈیٹا کی وفاداری کو برقرار رکھنے کے لیے ایک پل کا کام کرتا ہے۔

اس کنکریٹ کو بنانے کے لیے، ہم ایک چھوٹی FastAPI ایپلیکیشن استعمال کریں گے جو ادائیگی کے لین دین کی نقل کرتی ہے۔ ہم دو پرومیتھیس میٹرکس کو بے نقاب کرتے ہیں: payment_transaction_duration_seconds (ایک ہسٹوگرام جو ٹریک کرتا ہے کہ ہر لین دین میں کتنا وقت لگتا ہے) اور payment_transactions_total (مکمل لین دین کا کاؤنٹر)۔ کوئی بھی چیز جو Prometheus میٹرکس کو بے نقاب کرتی ہے اس کی پیروی آپ کی اپنی انسٹرومینٹیشن ایپلی کیشن کے ذریعے کی جا سکتی ہے۔ /metrics یہ اسی طرح کام کرتا ہے۔ یہ وہ میٹرکس ہیں جن کو ایپلی کیشن سے لے کر آبزرویبلٹی بیک اینڈ تک پیروی کرنا ہے۔

ہم کیا احاطہ کریں گے:

شرائط

شروع کرنے سے پہلے، درج ذیل کو چیک کریں:

  • ڈوکر انسٹال ہے۔

  • ایپلی کیشنز جو پرومیتھیس میٹرکس کو ظاہر کرتی ہیں۔ /metrics اختتامی نقطہ

  • OTLP کے موافق آبزرویبلٹی بیک اینڈ

  • Prometheus میٹرکس کا بنیادی علم

  • YAML کا بنیادی علم

  • ڈوکر اور اوپن ٹیلی میٹری کا بنیادی علم

اس ٹیوٹوریل پر عمل کرنے کے لیے آپ کو اوپن ٹیلی میٹری کے جدید علم کی ضرورت نہیں ہے۔ آئیے Prometheus ہسٹوگرام پر ایک نظر ڈالیں اور دکھائیں کہ جب ہم اسے OpenTelemetry کلکٹر کے ذریعے منتقل کرتے ہیں تو کیا ہوتا ہے۔

1. Prometheus Receiver کے ساتھ میٹرکس کو کیسے کھرچنا ہے۔

سب سے پہلے، اپنی درخواست سے میٹرکس جمع کریں۔ ڈیمو ایپلیکیشن مندرجہ ذیل مقامات پر پرومیتھیس میٹرکس کو بے نقاب کرتی ہے: /metrics آپ کے پاس ایک اختتامی نقطہ ہے، اور ایک Prometheus وصول کنندہ وقتا فوقتا اس اختتامی نقطہ کو آپ کی مشاہداتی پائپ لائن میں میٹرکس جمع کرنے کے لیے کھرچتا ہے۔ میں ٹیسٹ بھی کر سکتا ہوں۔ /metrics کلکٹر کے پڑھنے سے پہلے آپ ڈیٹا کو براہ راست دیکھ سکتے ہیں۔

ترتیب کی ترتیبات کی مثال:

receivers:
  prometheus:
    config:
      scrape_configs:
        - job_name: payment-demo
          scrape_interval: 15s
          static_configs:
            - targets: ["payment-api:8080"]

یہاں واپس کیا ہو رہا ہے؟

scrape_interval کنٹرول کرتا ہے کہ کلکٹر کتنی بار ہدف کو کھرچتا ہے۔ یہاں ہم 15 سیکنڈ کا استعمال کرتے ہیں۔ اسے اس بنیاد پر ایڈجسٹ کریں کہ آپ کو کتنی بار اپنے میٹرکس کو اپ ڈیٹ کرنے کی ضرورت ہے اور آپ کی ایپلیکیشن کس بوجھ کو سنبھال سکتی ہے۔

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

targets مخصوص اختتامی پوائنٹس کی فہرست جو پرومیتھیس میٹرکس کو ظاہر کرتے ہیں۔ اگر آپ کو ایک سے زیادہ خدمات کو ختم کرنے کی ضرورت ہے، تو آپ متعدد اہداف شامل کر سکتے ہیں۔

آخر کار job_name شناخت کنندگان جو آپ کو منطقی طور پر میٹرکس کو گروپ کرنے میں مدد کرتے ہیں، ان کے پس منظر تک پہنچنے کے بعد ان کا نظم اور تجزیہ کرنا آسان بنا دیتے ہیں۔

خاکہ OpenTelemetry کلکٹر کو دکھا رہا ہے جو میٹرک اہداف کو دریافت کرتا ہے، اہداف تفویض کرتا ہے، اختتامی نقطوں سے استفسار کرتا ہے، اور میٹرکس کو سکریپ کرتا ہے۔

2. پرومیتھیس ہسٹوگرام کی تبدیلی

ایک بار میٹرکس کو سکریپ کرنے کے بعد، اگلا مرحلہ تبدیلی ہے۔ Prometheus ہسٹگرامس کو ایک سے زیادہ ٹائم سیریز کے طور پر دکھاتا ہے۔

  • _bucket ان درخواستوں کی تعداد دکھاتا ہے جو ایک مخصوص مدت سے کم ہیں۔

  • _sum یہ تمام مشاہدہ شدہ ادوار کا مجموعہ ہے۔

  • _count مشاہدات کی تعداد۔

کہ payment_transaction_duration_seconds ہسٹوگرام ہر ادائیگی کے لین دین میں لگنے والے وقت کو ریکارڈ کرتا ہے۔ پرومیتھیس اس کو یوں بیان کرتا ہے: _bucket, _countاور _sum سیریز جب Prometheus وصول کنندہ ان میٹرکس کو جمع کرتا ہے، تو یہ انہیں OpenTelemetry ہسٹوگرام ڈیٹا ماڈل میں تبدیل کر دیتا ہے۔ اس کے بعد انہیں OTLP کے ذریعے ایکسپورٹ کیا جا سکتا ہے جبکہ لین دین میں تاخیر کا تجزیہ کرنے اور پرسنٹائل کا حساب لگانے کے لیے درکار معلومات کو محفوظ رکھا جا سکتا ہے۔

ہسٹوگرام کے بغیر، ہم مبہم تاخیر کی تقسیم کا اوسط لیتے ہیں۔ جب کہ زیادہ تر درخواستیں 50ms کے اندر مکمل ہوتی ہیں، 5% 2 سیکنڈ سے زیادہ وقت لیتے ہیں، اوسطاً 150ms کارکردگی کے سنگین مسائل کو چھپاتے ہیں۔ ہسٹوگرام ان مشاہدات کی تعداد کو ریکارڈ کر کے پوری تصویر کھینچتا ہے جو ہر لیٹنسی بالٹی میں آتے ہیں۔

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

اصلی پرومیتھیس ہسٹوگرام

یہ آپ کا اصل طریقہ ہے۔ /metrics مثال کے طور پر، آؤٹ پٹ ہے:

Prometheus/metrics آؤٹ پٹ ادائیگی کے لین دین کا دورانیہ ہسٹوگرام دکھا رہا ہے _بکٹ ٹائم سیریز کے ساتھ مختلف تاخیر کی حدود کے ساتھ

اوپن ٹیلی میٹری ہسٹوگرام کی اصل نمائندگی اس طرح ہے:

OpenTelemetry کلکٹر آؤٹ پٹ ادائیگی_ٹرانزیکشن_دورانی_سیکنڈز میٹرک کو بطور ہسٹوگرام بالٹی کی حدود اور شماروں کے ساتھ دکھا رہا ہے۔

اوپر والا آؤٹ پٹ وہی ٹرانزیکشن دورانیے کا ڈیٹا دکھاتا ہے جو اوپن ٹیلی میٹری ہسٹوگرام کے طور پر ظاہر ہوتا ہے۔ تین الگ الگ Prometheus سیریز کے بجائے، کلکٹر کے پاس اب ایک ہسٹوگرام ہے جس میں شمار، رقم، واضح بالٹی باؤنڈریز، اور بالٹی کی گنتی ہیں۔

3. OTLP کے ذریعے میٹرکس برآمد کریں۔

ایک بار میٹرکس کو سکریپ اور پروسیس کرنے کے بعد، کلکٹر انہیں OTLP کا استعمال کرتے ہوئے آبزرویبلٹی بیک اینڈ پر بھیجتا ہے۔ OTLP ایکسپورٹ پروسیسرڈ میٹرکس بشمول ہسٹوگرام، کاؤنٹرز اور گیجز کو بیک اینڈ پر بھیجتا ہے۔

exporters:
  otlp:
    endpoint: "otlp.backend.example.com:4317"
    tls:
      insecure: false

endpoint OTLP میٹرکس حاصل کرنے کے لیے بیک اینڈ ایڈریس بتاتا ہے۔ یہ عام طور پر ایک مرکزی مشاہداتی پلیٹ فارم سے مراد ہے جو پورے انفراسٹرکچر میں متعدد سروسز سے میٹرکس کو جمع کرتا ہے۔

tls جمع کرنے والوں اور پسدید کے درمیان محفوظ ڈیٹا کی منتقلی کو یقینی بناتا ہے۔ سیٹ insecure: true صرف اس صورت میں جب جان بوجھ کر کسی ایسے اینڈ پوائنٹ سے منسلک ہو جو TLS کا استعمال نہیں کرتا، جیسے کہ کچھ مقامی ترقیاتی سیٹ اپ میں۔

4. پائپ لائن کنکشن

ہم نے پائپ لائن کے ہر حصے کو انفرادی طور پر دیکھا۔ اب آئیے ان کو جوڑتے ہیں اور ایپلی کیشن سے بیک اینڈ تک میٹرکس کو ٹریک کرتے ہیں۔

service:
  pipelines:
    metrics:
      receivers: [prometheus]
      exporters: [otlp]

یہ ہمارا کامل طریقہ ہے۔ payment_transaction_duration_seconds میٹرکس فاسٹ اے پی آئی ایپلیکیشن سے آبزرویبلٹی بیک اینڈ کی طرف جاتا ہے۔ اوپر کا خاکہ اس بہاؤ کو ظاہر کرتا ہے۔ اگلا سیکشن آپ کو اس کے بارے میں بتائے گا کہ اسے کیسے بنایا جائے اور اسے کیسے چلایا جائے اور SigNoz سے منسلک کیا جائے۔

پائپ لائن کا بہاؤ:

پائپ لائن کے بہاؤ کا فن تعمیر

اوپر دیا گیا آرکیٹیکچر ڈایاگرام ایک FastAPI ایپلیکیشن دکھاتا ہے جو میٹرکس کو /میٹرکس کے ذریعے ظاہر کرتا ہے، OpenTelemetry کلکٹر میٹرکس کو پرومیتھیس سننے والے کے لیے سکریپ کرتا ہے، میٹرکس پر کارروائی کرتا ہے، اور انہیں OTLP کے ذریعے مشاہداتی بیک اینڈ پر ایکسپورٹ کرتا ہے۔

5. OpenTelemetry کلیکٹر چلائیں۔

پوری پائپ لائن چلائیں اور لین دین کے میٹرکس کو اپنی درخواست سے SigNoz میں منتقل کرتے ہوئے دیکھیں۔ ان اقدامات پر عمل کریں (ہم ذیل میں آپ کو ان کے بارے میں تفصیل سے بتائیں گے):

  1. SignNoz کلاؤڈ کی ترتیبات: اختتامی نقطہ اور جمع کرنے کی کلید کو ترتیب دیں جسے کلکٹر استعمال کرے گا۔

  2. FastAPI ایپلیکیشن شروع کریں۔ آپ کی درخواست مندرجہ ذیل مقامات پر پرومیٹیس میٹرکس کو ظاہر کرتی ہے: /metrics.

  3. OpenTelemetry کلکٹر شروع کریں۔ کلکٹر آپ کی درخواست کو سکریپ کرنا شروع کر دیتا ہے۔ /metrics ایک اختتامی نقطہ جو پرومیتھیس سننے والا استعمال کرتا ہے۔

  4. ایک ٹیسٹ ٹرانزیکشن بنائیں: لین دین کے دورانیے کی پیمائش پیدا کرنے کے لیے اپنی درخواست پر ایک درخواست بھیجیں۔

  5. کلکٹر اور بیک اینڈ کو چیک کریں۔ یہ یقینی بنانے کے لیے کلکٹر لاگ کو چیک کریں کہ آپ کی پائپ لائن چل رہی ہے، پھر SigNoz اور کھولیں۔ payment_transaction_duration_seconds میٹرک سسٹم آ گیا ہے۔

  6. مسئلہ حل

5.1 SignNoz کلاؤڈ کی ترتیبات

SigNoz ایک مشاہداتی پس منظر فراہم کرتا ہے جو OpenTelemetry کلکٹر سے برآمد کردہ میٹرکس وصول کرتا ہے۔ یہ ڈیمو SigNoz Cloud کو مشاہدے کے پس منظر کے طور پر استعمال کرتا ہے، لہذا مقامی طور پر انسٹال کرنے کے لیے کچھ نہیں ہے۔

سب سے پہلے، signoz.io پر مفت اکاؤنٹ کے لیے سائن اپ کریں۔ اپنے SignNoz کلاؤڈ ڈیش بورڈ سے، یہاں جائیں: سیٹنگز → کلیکشن کیز. صفحہ مجموعہ URL، علاقہ، اور مجموعہ کلید دکھاتا ہے۔

یہ .env پروجیکٹ ڈائرکٹری میں فائلیں:

SIGNOZ_INGESTION_KEY=your-real-key
SIGNOZ_OTLP_ENDPOINT=ingest..signoz.cloud:443

اپنی کلیکشن کیز کو پاس ورڈز کی طرح سمجھیں اور ان کا ارتکاب یا عوامی طور پر اشتراک نہ کریں۔

کلکٹر کنفیگریشن میں اس متغیر کو دیکھیں۔

exporters:
  otlp:
    endpoint: "${SIGNOZ_OTLP_ENDPOINT}"
    tls:
      insecure: false
    headers:
      signoz-ingestion-key: "${SIGNOZ_INGESTION_KEY}"

پھر شامل کریں۔ .env آپ کو .gitignore تو کلید کا ارتکاب نہیں کیا جاتا۔

echo ".env" >> .gitignore

5.2 فاسٹ اے پی آئی ایپلیکیشن شروع کریں۔

پورٹ 8080 پر ایپلیکیشن شروع کریں۔

uvicorn app.main:app --reload --port 8080

یقینی بنائیں کہ ایپلیکیشن چل رہی ہے۔

curl http://localhost:8080/

FastAPI ادائیگی کا ڈیمو مقامی طور پر 127.0.0.1:8080 پر چل رہا ہے، JSON جواب دکھا رہا ہے کہ ادائیگی کے لین دین کا ڈیمو چل رہا ہے

آئیے اب پرومیتھیس میٹرکس کا جائزہ لیتے ہیں:

curl -Ls http://localhost:8080/metrics

براؤزر FastAPI ادائیگی کا ڈیمو دکھا رہا ہے جو لوکل ہوسٹ: 8080 پر کامیابی سے چل رہا ہے۔

کہ /metrics اختتامی نقطہ آپ کی درخواست کے لیے Prometheus میٹرکس کو ظاہر کرتا ہے، بشمول: payment_transaction_duration_seconds یہ وہ ہسٹوگرام ہے جسے کلکٹر کھرچ دے گا۔

5.3 کلکٹر شروع کرنا

ایک بار جب ایپلی کیشن چل رہی ہو اور کلکٹر کی تشکیل مکمل ہو جائے تو کلکٹر شروع کریں۔

docker compose up --build

ڈوکر کمپوز لاگ پیمنٹ API کو چل رہا ہے اور کلکٹر کامیابی کے ساتھ اپنے /میٹرکس اینڈ پوائنٹ کو سکریپ کر رہا ہے۔

یہ یقینی بنانے کے لیے اپنے کلکٹر لاگز کو چیک کریں کہ آپ کی پائپ لائن چل رہی ہے اور میٹرکس پر کارروائی ہو رہی ہے۔

یہ ہے payment-api تصویر سے دونوں کنٹینرز شروع کریں، شیئر کریں۔ telemetry آپ نیٹ ورک سے جڑ جائیں گے اور کلکٹر فوراً سکریپ کرنا شروع کر دے گا۔ /metrics اپنی درخواست سے سائن نوز کلیکشن کی اور اینڈ پوائنٹ کو پڑھنے کے لیے پرومیتھیس سننے والے کا استعمال کریں۔ .env خود بخود

5.4 ٹیسٹ ٹرانزیکشن بنائیں

مختلف پروسیسنگ اوقات کے ساتھ لین دین بنائیں۔

curl -X POST "http://localhost:8080/transactions?delay_ms=50"

curl -X POST "http://localhost:8080/transactions?delay_ms=250"

curl -X POST "http://localhost:8080/transactions?delay_ms=2500"

اگر آپ ہسٹوگرام میں مزید مشاہدات چاہتے ہیں، تو براہ کرم ایک اضافی درخواست بنائیں۔

یہ درخواستیں لین دین کے دورانیے کے مشاہدات تیار کرتی ہیں جو لاگ ان ہوتے ہیں: payment_transaction_duration_seconds ہسٹوگرام۔ کلکٹر اگلی سکریپنگ کے دوران اپ ڈیٹ شدہ میٹرکس اٹھاتا ہے۔

5.5 بیک اینڈ رسید کی تصدیق

سائن نوز کلاؤڈ کھولیں اور تلاش کریں:

payment_transaction_duration_seconds

آپ کے میٹرکس اس طرح نظر آنے چاہئیں: ہسٹوگرامبالٹی تعیناتی _bucket, _sumاور _count اسے بیک اینڈ میں غیر متعلقہ Prometheus سیریز کے طور پر ظاہر کیے بغیر استعمال کیا جا سکتا ہے۔

SigNoz Metrics Explorer، OpenTelemetry Collector کے ذریعے برآمد کیا گیا اور متعلقہ بالٹی، گنتی، اور کل ڈیٹا کے ساتھ ایک ہسٹوگرام کے طور پر Payment_transaction_duration_seconds ڈسپلے کر رہا ہے۔

5.6 ٹربل شوٹنگ

اگر میٹرکس درست طریقے سے نہیں چل رہے ہیں، تو پہلے لاگز کو چیک کریں۔

docker logs 

کنکشن کی خرابیاں، تصدیق کی ناکامیاں، سکریپنگ کی ناکام کوششیں، یا کنفیگریشن کی خرابیاں تلاش کریں۔

درج ذیل کو بھی چیک کریں:

  • ایک FastAPI ایپلیکیشن چل رہی ہے۔

  • /metrics یہ قابل رسائی ہے۔

  • کلکٹر کو درخواست تک رسائی حاصل ہے۔

  • SigNoz اینڈ پوائنٹ اور کلیکشن کلید درست ہیں۔

  • کہ .env متغیرات کو کلکٹر میں استعمال کیا جا سکتا ہے۔

  • وصول کنندہ اور برآمد کے نام آپ کی پائپ لائن کی ترتیب سے مماثل ہیں۔

استعمال کریں --dry-run اگر تعیناتی سے پہلے اس کی توثیق کی جا سکتی ہے تو پرچم لگائیں۔

نتیجہ

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

اس ٹیوٹوریل میں ہم نے پیروی کی: payment_transaction_duration_seconds فاسٹ اے پی آئی ایپلیکیشن میں /metrics OpenTelemetry کلکٹر کے ذریعے SigNoz کو اینڈ پوائنٹس بھیجیں۔

پرومیتھیس سننے والے نے نقشہ بنایا ہے: _bucket, _countاور _sum بیک اینڈ تجزیہ کے لیے لین دین کے دورانیے کی تقسیم کو محفوظ رکھنے کے لیے OpenTelemetry ہسٹوگرام ڈیٹا ماڈل کو سیریلائز کریں۔

یہ ہسٹوگرام کو دستی طور پر دوبارہ تعمیر کیے بغیر ایک ہی میٹرکس کو پرومیتھیس انسٹرومینٹیشن ایپلیکیشن سے OTLP پر مبنی مشاہداتی پلیٹ فارم پر منتقل کرنے کی اجازت دیتا ہے۔

اوپر تک سکرول کریں۔