لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن

سلام، خابروسک کے باشندوں! کورس کے لیے نئے اندراج کے آغاز کے موقع پر "DevOps طریقوں اور اوزار" ہم نے آپ کے لیے دلچسپ مواد کا ترجمہ تیار کیا ہے۔

یہ مضمون لوکی کا مختصر تعارف ہے۔ پروجیکٹ لوکی Grafana کی طرف سے حمایت کی اور اس کا مقصد لاگز (سرور یا کنٹینرز سے) کا مرکزی مجموعہ ہے۔

لوکی کے لیے بنیادی الہام تھا۔ Prometheus لاگ مینجمنٹ پر اپنے نقطہ نظر کو لاگو کرنے کے خیال کے ساتھ:

  • ڈیٹا کو ذخیرہ کرنے کے لیے لیبل استعمال کرنا
  • چند وسائل کی کھپت

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

Prometheus کے بارے میں چند الفاظ

مکمل طور پر سمجھنے کے لیے کہ لوکی کیسے کام کرتا ہے، یہ ضروری ہے کہ ایک قدم پیچھے ہٹیں اور پرومیتھیس کے بارے میں تھوڑا سا یاد رکھیں۔

Prometheus کی مخصوص خصوصیات میں سے ایک مجموعہ پوائنٹس (برآمد کنندگان کے ذریعے) سے میٹرکس کو نکالنا اور انہیں TSDB (ٹائم سیریز ڈیٹا بیس) میں ذخیرہ کرنا، لیبل کی شکل میں میٹا ڈیٹا کے اضافے کے ساتھ ہے۔

اس کی ضرورت کیوں ہے؟

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

بدقسمتی سے، لاگ مینجمنٹ کے لیے ابھی تک کوئی ٹرنکی حل نہیں ہے، اور آپ کو اپنے لیے حل تلاش کرنا چاہیے:

  • سنٹرلائزنگ لاگز کے لیے منظم کلاؤڈ سروس (AWS، Azure یا Google)
  • مانیٹرنگ سروس "ایک سروس کے طور پر مانیٹرنگ" (مثال کے طور پر، Datadog)
  • آپ کی اپنی لاگ جمع کرنے کی خدمت بنانا۔

تیسرے آپشن کے لیے، میں نے روایتی طور پر Elasticsearch کا استعمال کیا، اس حقیقت کے باوجود کہ میں ہمیشہ اس سے خوش نہیں تھا (خاص طور پر اس کی بھاری پن اور ترتیب کی پیچیدگی)۔

لوکی کو درج ذیل اصولوں کے مطابق عمل درآمد کو آسان بنانے کے لیے ڈیزائن کیا گیا تھا:

  • شروع کرنے کے لئے آسان ہو
  • کچھ وسائل استعمال کریں۔
  • کسی خاص دیکھ بھال کے بغیر آزادانہ طور پر کام کریں۔
  • بگ کی تحقیقات میں مدد کے لیے Prometheus میں اضافے کے طور پر کام کریں۔

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

واقعہ کی تحقیقات

یہ بہتر طور پر سمجھنے کے لیے کہ لوکی کو اشاریہ سازی کی ضرورت کیوں نہیں ہے، آئیے واقعے کی تفتیش کے اس طریقہ پر واپس جائیں جو لوکی ڈویلپرز نے استعمال کیا تھا:

لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن
1 الرٹ → 2 ڈیش بورڈ → 3 ایڈہاک سوال → 4 لاگ ایگریگیشن → 5 تقسیم شدہ ٹریسنگ → 6 درست کریں!
(1 وارننگ → 2 ڈیش بورڈ → 3 ایڈہاک سوال → 4 لاگ ایگریگیشن → 5 تقسیم شدہ ٹریسنگ → 6 فکسنگ!)

خیال یہ ہے کہ ہمیں کسی قسم کا الرٹ موصول ہوتا ہے (سلیک نوٹیفکیشن، ایس ایم ایس وغیرہ) اور اس کے بعد:

  • گرافانا ڈیش بورڈز کو دیکھیں
  • سروس میٹرکس کو دیکھیں (مثال کے طور پر، پرومیتھیس میں)
  • لاگ اندراجات کو دیکھیں (مثال کے طور پر، Elasticsearch میں)
  • شاید تقسیم شدہ نشانات پر ایک نظر ڈالیں (جیگر، زپکن، وغیرہ)
  • اور آخر کار اصل مسئلہ کو ٹھیک کرنا۔

یہاں، Grafana + Prometheus + Elasticsearch + Zipkin اسٹیک کے معاملے میں، آپ کو چار مختلف ٹولز استعمال کرنے ہوں گے۔ وقت کو کم کرنے کے لیے، یہ ایک ٹول کا استعمال کرتے ہوئے ان تمام مراحل کو انجام دینے کے قابل ہو جائے گا: گرافانا۔ یہ بات قابل غور ہے کہ تحقیق کے لیے اس نقطہ نظر کو گرافانا میں ورژن 6 سے لاگو کیا گیا ہے۔ اس طرح، گرافانا سے براہ راست پرومیتھیس ڈیٹا تک رسائی ممکن ہو جاتی ہے۔

لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن
Prometheus اور Loki کے درمیان ایکسپلورر اسکرین تقسیم

اس اسکرین سے آپ اسپلٹ اسکرین تصور کا استعمال کرتے ہوئے پرومیتھیس میٹرکس سے متعلق لوکی لاگز دیکھ سکتے ہیں۔ ورژن 6.5 کے بعد سے، گرافانا آپ کو اپنے پسندیدہ تقسیم شدہ ٹریسنگ ٹولز (جیگر) کے لنکس کی پیروی کرنے کے لیے لوکی لاگ انٹریز میں ٹریس آئی ڈی کو پارس کرنے کی اجازت دیتا ہے۔

مقامی لوکی ٹیسٹ

لوکی کو مقامی طور پر جانچنے کا سب سے آسان طریقہ docker-compose استعمال کرنا ہے۔ ڈاکر کمپوز فائل لوکی ریپوزٹری میں واقع ہے۔ آپ درج ذیل کمانڈ کا استعمال کرکے ذخیرہ حاصل کرسکتے ہیں۔ git:

$ git clone https://github.com/grafana/loki.git

پھر آپ کو پروڈکشن ڈائرکٹری میں جانے کی ضرورت ہے:

$ cd production

اس کے بعد آپ ڈوکر امیجز کا تازہ ترین ورژن حاصل کر سکتے ہیں:

$ docker-compose pull

آخر میں، لوکی اسٹیک کو درج ذیل کمانڈ کے ساتھ لانچ کیا گیا ہے۔

$ docker-compose up

لوکی فن تعمیر

یہاں لوکی فن تعمیر کے ساتھ ایک چھوٹا سا خاکہ ہے:

لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن
لوکی فن تعمیر کے اصول

ویب کلائنٹ سرور پر ایپلی کیشنز چلاتا ہے، پروم ٹیل لاگز اکٹھا کر کے لوکی کو بھیجتا ہے، ویب کلائنٹ لوکی کو میٹا ڈیٹا بھی بھیجتا ہے۔ لوکی ہر چیز کو جمع کرتا ہے اور اسے گرافانا میں منتقل کرتا ہے۔
لوکی کو لانچ کیا گیا ہے۔ دستیاب اجزاء کو دیکھنے کے لیے، درج ذیل کمانڈ کو چلائیں:

$ docker ps

تازہ نصب شدہ ڈوکر کی صورت میں، کمانڈ کو درج ذیل نتیجہ واپس کرنا چاہیے:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

ہم مندرجہ ذیل اجزاء دیکھتے ہیں:

  • پرومٹیل: لاگز کو مرکزی بنانے کا ذمہ دار ایجنٹ
  • گرافانا: ایک مشہور ڈیش بورڈ ٹول
  • لوکی: ڈیٹا سینٹرلائزیشن ڈیمون

ایک کلاسک انفراسٹرکچر کے حصے کے طور پر (مثال کے طور پر، ورچوئل مشینوں پر مبنی)، Promtail ایجنٹ کو ہر مشین پر تعینات کیا جانا چاہیے۔ گرافانا اور لوکی کو ایک ہی مشین پر انسٹال کیا جا سکتا ہے۔

Kubernetes میں تعیناتی

Kubernetes پر لوکی اجزاء کو انسٹال کرنا مندرجہ ذیل ہوگا:

  • سرور کلسٹر میں ہر ایک مشین پر پرامٹیل ایجنٹ کی تعیناتی کے لیے ڈیمون سیٹ
  • تعیناتی لوکی
  • اور آخری گرافانا کی تعیناتی ہے۔

خوش قسمتی سے، لوکی ہیلم پیکج کے طور پر دستیاب ہے، جس سے اسے تعینات کرنا آسان ہے۔

ہیمل کے ذریعے تنصیب

آپ کو پہلے ہی ہیمل انسٹال ہونا چاہئے۔ اسے پروجیکٹ کے GitHub ذخیرہ سے ڈاؤن لوڈ کیا جا سکتا ہے۔ یہ آپ کے فن تعمیر سے متعلق آرکائیو کو کھول کر اور اس میں ہیلم شامل کرکے انسٹال کیا جاتا ہے۔ $PATH.

نوٹ: ہیلم کا ورژن 3.0.0 حال ہی میں جاری کیا گیا تھا۔ چونکہ اس میں بہت سی تبدیلیاں کی گئی ہیں، اس لیے قارئین کو مشورہ دیا جاتا ہے کہ اسے استعمال کرنے سے پہلے تھوڑا انتظار کریں۔.

ہیلم کے لیے ایک ذریعہ شامل کرنا

پہلا قدم درج ذیل کمانڈ کا استعمال کرتے ہوئے "لوکی" ذخیرہ کو شامل کرنا ہے۔

$ helm add loki https://grafana.github.io/loki/charts

اس کے بعد، آپ "لوکی" نامی پیکجز تلاش کر سکتے ہیں:

$ helm search loki

نتیجہ:

loki/loki       0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2  v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail   0.13.1 v0.4.0 Responsible for gathering logs and...

ان پیکجوں میں درج ذیل خصوصیات ہیں:

  • پیکیج لوکی/لوکی صرف لوکی سرور سے میل کھاتا ہے۔
  • پیکیج loki/fluent-bit آپ کو Promtail کے بجائے لاگز جمع کرنے کے لیے fluent-bin کا ​​استعمال کرتے ہوئے DaemonSet تعینات کرنے کی اجازت دیتا ہے
  • پیکیج loki/promtail لاگ فائل کلیکشن ایجنٹ پر مشتمل ہے۔
  • پیکیج loki/loki-stack، آپ کو فوری طور پر پرومٹیل کے ساتھ مل کر لوکی کو تعینات کرنے کی اجازت دیتا ہے۔

لوکی انسٹال کرنا

لوکی کو کبرنیٹس میں تعینات کرنے کے لیے، "مانیٹرنگ" نام کی جگہ میں درج ذیل کمانڈ کو چلائیں:

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

ڈسک میں محفوظ کرنے کے لیے، پیرامیٹر شامل کریں۔ --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

نوٹ: اگر آپ ایک ہی وقت میں گرافانا کو تعینات کرنا چاہتے ہیں، تو پیرامیٹر شامل کریں۔ --set grafana.enabled = true

جب آپ یہ کمانڈ چلاتے ہیں تو آپ کو درج ذیل آؤٹ پٹ ملنا چاہیے:

LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
…
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.

"مانیٹرنگ" نام کی جگہ میں پوڈز کی حالت کو دیکھتے ہوئے، ہم دیکھ سکتے ہیں کہ سب کچھ تعینات ہے:

$ kubectl -n monitoring get pods -l release=loki

نتیجہ:

NAME                 READY  STATUS   RESTARTS  AGE
loki-0               1/1    Running  0         147m
loki-promtail-9zjvc  1/1    Running  0         3h25m
loki-promtail-f6brf  1/1    Running  0         11h
loki-promtail-hdcj7  1/1    Running  0         3h23m
loki-promtail-jbqhc  1/1    Running  0         11h
loki-promtail-mj642  1/1    Running  0         62m
loki-promtail-nm64g  1/1    Running  0         24m

تمام پھلیاں چل رہی ہیں۔ اب یہ کچھ ٹیسٹ کرنے کا وقت ہے!

گرافانا سے جڑ رہا ہے۔

Kubernetes کے تحت Grafana سے جڑنے کے لیے، آپ کو اس کے پوڈ کے لیے ایک سرنگ کھولنے کی ضرورت ہے۔ نیچے گرافانا پوڈ کے لیے پورٹ 3000 کھولنے کا حکم ہے:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

ایک اور اہم نکتہ Grafana ایڈمنسٹریٹر پاس ورڈ کو بازیافت کرنے کی ضرورت ہے۔ پاس ورڈ خفیہ رکھا جاتا ہے۔ loki-grafana میدان میں .data.admin-user بیس 64 فارمیٹ میں۔

اسے بحال کرنے کے لیے، آپ کو درج ذیل کمانڈ کو چلانے کی ضرورت ہے۔

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

اس پاس ورڈ کو ڈیفالٹ ایڈمنسٹریٹر اکاؤنٹ (ایڈمن) کے ساتھ مل کر استعمال کریں۔

گرافانا میں لوکی ڈیٹا سورس کی وضاحت کرنا

سب سے پہلے، اس بات کو یقینی بنائیں کہ لوکی ڈیٹا سورس بنا دیا گیا ہے (کنفیگریشن/ڈیٹا سورس)۔
یہاں ایک مثال یہ ہے:

لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن
لوکی کے لیے ڈیٹا سورس ترتیب دینے کی مثال

"ٹیسٹ" پر کلک کر کے آپ لوکی کے ساتھ کنکشن چیک کر سکتے ہیں۔

لوکی سے درخواستیں کرنا

اب Grafana پر "Explore" سیکشن میں جائیں۔ کنٹینرز سے لاگ وصول کرتے وقت، لوکی Kubernetes سے میٹا ڈیٹا شامل کرتا ہے۔ اس طرح، کسی مخصوص کنٹینر کے لاگز کو دیکھنا ممکن ہو جاتا ہے۔

مثال کے طور پر، پرومٹیل کنٹینر لاگز کو منتخب کرنے کے لیے، آپ درج ذیل استفسار استعمال کر سکتے ہیں: {container_name = "promtail"}.
یہاں لوکی ڈیٹا سورس کو منتخب کرنا بھی یاد رکھیں۔

یہ استفسار کنٹینر کی سرگرمی کو اس طرح لوٹائے گا:

لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن
Grafana میں سوال کا نتیجہ

ڈیش بورڈ میں شامل کریں۔

Grafana 6.4 کے ساتھ شروع کرتے ہوئے، آپ لاگ انفارمیشن کو براہ راست ڈیش بورڈ پر رکھ سکتے ہیں۔ اس کے بعد، صارف اپنی سائٹ پر درخواستوں کی تعداد اور درخواست کے نشانات کے درمیان تیزی سے سوئچ کر سکے گا۔

ذیل میں ایک ڈیش بورڈ کی ایک مثال ہے جو اس تعامل کو نافذ کرتا ہے:

لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن
Prometheus میٹرکس اور لوکی لاگ کے ساتھ نمونہ ڈیش بورڈ

لوکی کا مستقبل

میں نے لوکی کو مئی/جون میں ورژن 0.1 کے ساتھ استعمال کرنا شروع کیا۔ آج ورژن 1، اور یہاں تک کہ 1.1 اور 1.2 پہلے ہی جاری ہو چکے ہیں۔

یہ تسلیم کرنا ضروری ہے کہ ورژن 0.1 کافی مستحکم نہیں تھا۔ لیکن 0.3 نے پہلے ہی پختگی کی حقیقی علامات ظاہر کیں، اور اس کے بعد کے ورژن (0.4، پھر 1.0) نے صرف اس تاثر کو مضبوط کیا۔

1.0.0 کے بعد، کسی کے پاس بھی اس شاندار ٹول کو استعمال نہ کرنے کا کوئی عذر نہیں ہو سکتا۔

مزید بہتری لوکی کے بارے میں نہیں ہونی چاہیے، بلکہ اس کا بہترین گرافانا کے ساتھ انضمام ہونا چاہیے۔ درحقیقت، گرافانا 6.4 میں پہلے سے ہی ڈیش بورڈز کے ساتھ اچھا انضمام ہے۔

گرافانا 6.5، جو حال ہی میں جاری کیا گیا تھا، JSON فارمیٹ میں لاگ مواد کو خود بخود پہچان کر اس انضمام کو مزید بہتر بناتا ہے۔

نیچے دی گئی ویڈیو اس میکانزم کی ایک چھوٹی سی مثال دکھاتی ہے:

لوکی - پرومیتھیس اپروچ کا استعمال کرتے ہوئے لاگ کلیکشن
گرافانا میں بے نقاب لوکی تاروں کا استعمال

JSON فیلڈز میں سے کسی ایک کو استعمال کرنا ممکن ہو جاتا ہے، مثال کے طور پر، کے لیے:

  • بیرونی ٹول کے لنکس
  • لاگ مواد کو فلٹر کرنا

مثال کے طور پر، آپ Zipkin یا Jaeger پر جانے کے لیے traceId پر کلک کر سکتے ہیں۔

ہمیشہ کی طرح، ہم آپ کے تبصروں کے منتظر ہیں اور آپ کو مدعو کرتے ہیں۔ اوپن ویبینارجہاں ہم 2019 کے دوران DevOps انڈسٹری کی ترقی کے بارے میں بات کریں گے اور 2020 کے لیے ممکنہ ترقی کے راستوں پر بات کریں گے۔

ماخذ: www.habr.com