Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي

سلام، Khabrovsk جي رهاڪن! ڪورس لاءِ نئين داخلا جي شروعات جي موقعي تي "DevOps طريقا ۽ اوزار" اسان توهان لاءِ دلچسپ مواد جو ترجمو تيار ڪيو آهي.

هي مضمون لوڪ جو مختصر تعارف آهي. پروجيڪٽ لوڪي Grafana جي حمايت ڪئي وئي آهي ۽ مقصد آهي لاگز جي مرڪزي گڏ ڪرڻ (سرور يا ڪنٽينرز کان).

لوڪي جو مکيه انسپائريشن هو Prometheus لاگ مئنيجمينٽ تي هن جي طريقن کي لاڳو ڪرڻ جي خيال سان:

  • ڊيٽا کي ذخيرو ڪرڻ لاء ليبل استعمال ڪندي
  • ڪجھ وسيلن جو استعمال

اسان واپس ڪنداسين ته پروميٿيس ڪيئن ڪم ڪري ٿو ۽ ڪبرنيٽس جي حوالي سان ان جي استعمال جا ڪجهه مثال ڏينداسين.

Prometheus جي باري ۾ چند لفظ

مڪمل طور تي سمجھڻ لاءِ ته لوڪي ڪيئن ڪم ڪري ٿي، اھو ضروري آھي ته ھڪ قدم پوئتي ھلجي ۽ پروميٿيس بابت ٿورو ياد رکو.

Prometheus جي مخصوص خاصيتن مان هڪ آهي ڪليڪشن پوائنٽس مان ميٽرڪس ڪڍڻ (ايڪسپورٽرز ذريعي) ۽ انهن کي TSDB (Time Series Data Base) ۾ محفوظ ڪرڻ، ليبل جي صورت ۾ ميٽا ڊيٽا جي اضافي سان.

اهو ضروري آهي ته ضروري آهي

تازو، پروميٿيوس ڪنٽينرز ۽ ڪبرنيٽس جي دنيا ۾ حقيقي معيار بڻجي چڪو آهي: ان جي تنصيب تمام سادو آهي، ۽ ڪبرنيٽس ڪلستر پروميٿيس لاءِ اصلي آخري پوائنٽ سان اچي ٿو. Prometheus مخصوص ليبلن کي محفوظ ڪرڻ دوران ڪنٽينر ۾ رکيل ايپليڪيشنن مان ميٽرڪ پڻ ڪڍي سگھي ٿو. تنهن ڪري، ايپليڪيشن جي نگراني تي عمل ڪرڻ بلڪل آسان آهي.

بدقسمتي سان، لاگ مينيجمينٽ لاء اڃا تائين ڪو به ٽرنڪي حل ناهي، ۽ توهان کي پنهنجي لاء هڪ حل ڳولڻ گهرجي:

  • مرڪزي لاگز لاءِ منظم ڪلائوڊ سروس (AWS، Azure يا گوگل)
  • مانيٽرنگ سروس "سروس جي طور تي نگراني" (مثال طور، Datadog)
  • توهان جي پنهنجي لاگ گڏ ڪرڻ جي خدمت ٺاهي.

ٽئين اختيار لاء، مون روايتي طور تي Elasticsearch استعمال ڪيو، ان حقيقت جي باوجود ته مان هميشه ان سان خوش نه هوس (خاص طور تي ان جي ڳنڀير ۽ ترتيب جي پيچيدگي).

لوڪي کي هيٺين اصولن مطابق عمل درآمد کي آسان ڪرڻ لاءِ ٺاهيو ويو:

  • شروع ڪرڻ لاء آسان ٿي
  • ڪجھ وسيلا استعمال ڪريو
  • ڪنهن به خاص سار سنڀال کان سواء آزاديء سان ڪم
  • بگ جي تحقيقات ۾ مدد ڪرڻ لاءِ Prometheus جي اضافي طور ڪم ڪريو

بهرحال، هي سادگي ڪجهه سمجھوتن جي خرچ تي اچي ٿي. انهن مان هڪ آهي مواد کي انڊيڪس نه ڪرڻ. تنهن ڪري، متن جي ڳولا تمام ڪارائتو يا امير نه آهي ۽ متن جي مواد تي انگ اکر جي اجازت نه ڏيندو آهي. پر جيئن ته لوڪي گريپ جي برابر ٿيڻ چاهي ٿو ۽ پروميٿيس جو پورو پورو، اهو ڪو نقصان ناهي.

واقعي جي تحقيق

بهتر سمجھڻ لاءِ ته لوڪ کي انڊيڪسنگ جي ضرورت ڇو نه آهي، اچو ته واقعي جي جاچ واري طريقي ڏانهن واپس وڃون جيڪو لوڪي ڊولپر استعمال ڪيو:

Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي
1 الرٽ → 2 ڊيش بورڊ → 3 ايڊهاڪ سوال → 4 لاگ ايگريگيشن → 5 ورهايل ٽريڪنگ → 6 درست ڪريو!
(1 خبردار → 2 ڊيش بورڊ → 3 ايڊهاڪ سوال → 4 لاگ ايگريگيشن → 5 ورهايل ٽريڪنگ → 6 درست ڪرڻ!)

خيال اهو آهي ته اسان کي ڪنهن قسم جي خبرداري ملي ٿي (سليڪ نوٽيفڪيشن، ايس ايم ايس، وغيره) ۽ ان کان پوءِ:

  • ڏسو Grafana ڊيش بورڊ
  • خدمت جي ماپ کي ڏسو (مثال طور، پروميٿيوس ۾)
  • log entries کي ڏسو (مثال طور، Elasticsearch ۾)
  • ٿي سگهي ٿو ورهايل نشانن تي هڪ نظر وٺو (جيگر، زپڪن، وغيره)
  • ۽ آخر ۾ اصل مسئلو حل.

هتي، Grafana + Prometheus + Elasticsearch + Zipkin اسٽيڪ جي صورت ۾، توهان کي چار مختلف اوزار استعمال ڪرڻا پوندا. وقت گھٽائڻ لاءِ، اھو سٺو لڳندو ھو ته انھن مڙني مرحلن کي ھڪ اوزار استعمال ڪندي انجام ڏئي سگھوٿا: گرافانا. اها ڳالهه نوٽ ڪرڻ جي قابل آهي ته تحقيق جو اهو طريقو گرافانا ۾ نسخو 6 کان لاڳو ڪيو ويو آهي. اهڙيء طرح، اهو ممڪن آهي ته Prometheus ڊيٽا کي سڌو Grafana کان رسائي حاصل ڪري.

Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي
Prometheus ۽ Loki جي وچ ۾ ايڪسپلورر اسڪرين ورهايو

ھن اسڪرين مان توھان ڏسي سگھوٿا لوڪي لاگز سان لاڳاپيل پروميٿيوس ميٽرڪس کي استعمال ڪندي تقسيم اسڪرين تصور. نسخو 6.5 کان وٺي، گرافانا توهان کي اجازت ڏئي ٿو ته ٽريڪ id کي لوڪي لاگ انٽريز ۾ پارس ڪرڻ لاءِ توهان جي پسنديده ورهايل ٽريڪنگ ٽولز (جيگر) جي لنڪ جي پيروي ڪرڻ لاءِ.

مقامي لوڪ ٽيسٽ

لوڪي کي مقامي طور تي جانچڻ جو آسان طريقو استعمال ڪرڻ آهي docker-compose. Docker-compose فائل Loki مخزن ۾ واقع آهي. توھان ھيٺ ڏنل حڪم استعمال ڪندي مخزن حاصل ڪري سگھو ٿا git:

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

پوء توھان کي وڃڻ جي ضرورت آھي پيداوار ڊاريڪٽري:

$ cd production

ان کان پوء توهان حاصل ڪري سگهو ٿا جديد نسخو Docker تصويرن جو:

$ docker-compose pull

آخرڪار، لوڪي اسٽيڪ کي ھيٺ ڏنل حڪم سان شروع ڪيو ويو آھي:

$ docker-compose up

لوڪ فن تعمير

هتي لوڪي فن تعمير سان گڏ هڪ ننڍڙو ڊراگرام آهي:

Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي
لوڪ فن تعمير جا اصول

ويب ڪلائنٽ سرور تي ايپليڪيشنون هلائي ٿو، پرومٽيل لاگ گڏ ڪري ٿو ۽ انهن کي لوڪي ڏانهن موڪلي ٿو، ويب ڪلائنٽ پڻ ميٽا ڊيٽا کي لوڪي ڏانهن موڪلي ٿو. لوڪي هر شي کي گڏ ڪري ٿو ۽ ان کي گرافانا ڏانهن منتقل ڪري ٿو.
لوڪ لانچ ڪيو ويو آهي. دستياب اجزاء کي ڏسڻ لاء، ھيٺ ڏنل حڪم ھلايو:

$ 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: ايجنٽ مرڪزي لاگز لاء ذميوار
  • گرافانا: هڪ مشهور ڊيش بورڊ اوزار
  • لوڪي: ڊيٽا سينٽرلائيزيشن ڊيمون

هڪ کلاسک انفراسٽرڪچر جي حصي جي طور تي (مثال طور، مجازي مشينن تي ٻڌل)، Promtail ايجنٽ کي هر مشين تي مقرر ڪيو وڃي. Grafana ۽ Loki هڪ ئي مشين تي نصب ڪري سگهجي ٿو.

ڪبرنيٽس تائين پهچائڻ

Kubernetes تي لوڪي اجزاء کي انسٽال ڪرڻ ھيٺ ڏنل ھوندو:

  • سرور ڪلستر ۾ هر هڪ مشين تي Promtail ايجنٽ کي ترتيب ڏيڻ لاءِ daemonSet
  • لڳائڻ لوڪي
  • ۽ آخري هڪ Grafana جي تعیناتي آهي.

خوش قسمت، لوڪي هڪ هيلم پيڪيج جي طور تي دستياب آهي، انهي کي ترتيب ڏيڻ آسان بڻائي ٿي.

Heml ذريعي انسٽاليشن

توهان کي اڳ ۾ ئي Heml انسٽال ڪرڻ گهرجي. اهو ڊائون لوڊ ڪري سگھجي ٿو پروجيڪٽ جي 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 سرور سان ملندو آهي
  • نوٽس loki/fluent-bit توهان کي اجازت ڏئي ٿو هڪ DaemonSet استعمال ڪندي fluent-bin استعمال ڪندي لاگ گڏ ڪرڻ لاءِ Promtail جي بدران
  • نوٽس loki/promtail لاگ فائل گڏ ڪرڻ واري ايجنٽ تي مشتمل آهي
  • نوٽس loki/loki-stack، توهان کي فوري طور تي Loki کي گڏ ڪرڻ جي اجازت ڏئي ٿي Promtail سان.

Loki انسٽال ڪرڻ

لوڪي کي ڪبرنيٽس کي ترتيب ڏيڻ لاء، "مانيٽرنگ" نالي جي جاء تي هيٺ ڏنل حڪم هلائي.

$ 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

سڀئي پوڊ هلندا آهن. هاڻي اهو وقت آهي ڪجهه ٽيسٽ ڪرڻ جو!

Grafana سان ڳنڍڻ

Kubernetes تحت Grafana سان ڳنڍڻ لاء، توهان کي ان جي پوڊ ڏانهن هڪ سرنگ کولڻ جي ضرورت آهي. هيٺ ڏنل حڪم آهي پورٽ 3000 کولڻ لاءِ گرافانا پوڊ لاءِ:

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

ٻيو اهم نقطو گرافانا ايڊمنسٽريٽر پاسورڊ ٻيهر حاصل ڪرڻ جي ضرورت آهي. پاسورڊ راز ۾ رکيو ويو آهي loki-grafana ميدان ۾ .data.admin-user بنيادي 64 فارميٽ ۾.

ان کي بحال ڪرڻ لاء، توھان کي ھيٺ ڏنل حڪم هلائڻ جي ضرورت آھي:

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

هي پاسورڊ استعمال ڪريو ڊفالٽ ايڊمنسٽريٽر اڪائونٽ (ايڊمنسٽريٽر) سان گڏ.

گرافانا ۾ لوڪي ڊيٽا جو ذريعو بيان ڪرڻ

سڀ کان پهريان، پڪ ڪريو ته لوڪي ڊيٽا جو ذريعو ٺاهيو ويو آهي (Configuration/Datasource).
هتي هڪ مثال آهي:

Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي
لوڪي لاءِ ڊيٽا جو ماخذ قائم ڪرڻ جو مثال

"Test" تي ڪلڪ ڪندي توهان لوڪي سان ڪنيڪشن چيڪ ڪري سگهو ٿا.

لوڪ کي درخواستون ڏيڻ

ھاڻي Grafana ڏانھن وڃو "Explore" سيڪشن. جڏهن ڪنٽينرز کان لاگز وصول ڪري رهيا آهن، لوڪي شامل ڪري ٿو ميٽاداٽا ڪبرنيٽس کان. اهڙيء طرح، اهو ممڪن آهي ته هڪ مخصوص ڪنٽينر جي لاگز کي ڏسڻ لاء.

مثال طور، promtail ڪنٽينر لاگز کي چونڊڻ لاءِ، توھان ھيٺ ڏنل سوال استعمال ڪري سگھو ٿا: {container_name = "promtail"}.
هتي پڻ ياد رکو ته لوڪي ڊيٽا جو ذريعو چونڊيو.

ھي سوال ھيٺ ڏنل ڪنٽينر سرگرمي واپس ڪندو:

Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي
Grafana ۾ سوال جو نتيجو

ڊيش بورڊ ۾ شامل ڪريو

Grafana 6.4 سان شروع ڪندي، توهان لاگ انفارميشن سڌو سنئون ڊيش بورڊ تي رکي سگهو ٿا. ان کان پوء، صارف جلدي جلدي پنھنجي سائيٽ تي درخواستن جي تعداد ۽ ايپليڪيشن جي نشانين جي وچ ۾ تبديل ڪري سگھندا.

هيٺ هڪ ڊيش بورڊ جو هڪ مثال آهي جيڪو هن رابطي کي لاڳو ڪري ٿو:

Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي
نموني ڊيش بورڊ سان گڏ Prometheus metrics ۽ Loki لاگ

لوڪ جو مستقبل

مون لوڪي واپس استعمال ڪرڻ شروع ڪيو مئي/جون ۾ ورجن 0.1 سان. اڄ جو نسخو 1، ۽ اڃا تائين 1.1 ۽ 1.2 اڳ ۾ ئي جاري ڪيو ويو آهي.

اهو تسليم ڪيو وڃي ٿو ته نسخو 0.1 ڪافي مستحڪم نه هو. پر 0.3 اڳ ۾ ئي پختگي جي حقيقي نشانين کي ظاهر ڪيو، ۽ ايندڙ ورزن (0.4، پوء 1.0) صرف هن تاثر کي مضبوط ڪيو.

1.0.0 کان پوء، ڪو به عذر نه ٿي سگھي ته هي شاندار اوزار استعمال نه ڪرڻ لاء.

وڌيڪ بهتري لوڪي بابت نه هجڻ گهرجي، بلڪه ان جي انضمام شاندار گرافانا سان. حقيقت ۾، گرافانا 6.4 اڳ ۾ ئي ڊيش بورڊ سان گڏ سٺو انضمام آهي.

گرافانا 6.5، جيڪو تازو جاري ڪيو ويو هو، هن انضمام کي وڌيڪ بهتر بڻائي ٿو خودڪار طور تي JSON فارميٽ ۾ لاگ مواد کي سڃاڻڻ سان.

هيٺ ڏنل وڊيو هن ميڪانيزم جو هڪ ننڍڙو مثال ڏيکاري ٿو:

Loki - لاگ گڏ ڪرڻ پروميٿيوس طريقي سان استعمال ڪندي
گرافانا ۾ ظاهر ڪيل لوڪي اسٽرنگ استعمال ڪندي

اهو ممڪن آهي ته هڪ JSON فيلڊ استعمال ڪرڻ، مثال طور، لاء:

  • ٻاهرين اوزار سان ڳنڍيل
  • فلٽرنگ لاگ مواد

مثال طور، توھان ڪلڪ ڪري سگھو ٿا traceId ڏانھن وڃڻ لاءِ Zipkin يا Jaeger.

هميشه وانگر، اسان توهان جي تبصرن جا منتظر آهيون ۽ توهان کي دعوت ڏيو ٿا کليل ويبينار، جتي اسان ڳالهائينداسين ته ڪيئن DevOps صنعت 2019 دوران ترقي ڪئي ۽ 2020 لاءِ ممڪن ترقي جي رستن تي بحث ڪيو.

جو ذريعو: www.habr.com