Loki - جمع السجلات باستخدام نهج بروميثيوس

تحية يا خبروفيتس! تحسبًا لبدء مجموعة جديدة لدورة ممارسات وأدوات DevOps ، أعددنا لك ترجمة لمواد مثيرة للاهتمام.





هذه المقالة هي مقدمة موجزة لوكي. يتم دعم مشروع Loki من قبل Grafana ويهدف إلى جمع السجلات بشكل مركزي (من الخوادم أو الحاويات).

كان المصدر الرئيسي للإلهام لـ Loki هو Prometheus بفكرة تطبيق نهج إدارة السجلات:

  • استخدام الملصقات لتخزين البيانات
  • استهلاك منخفض للموارد

سنعود إلى مبادئ بروميثيوس وسنقدم بعض الأمثلة على استخدامه في سياق Kubernetes.

بضع كلمات حول بروميثيوس


لفهم كيفية عمل Loki بشكل كامل ، من المهم أن تتراجع إلى الوراء وتتذكر Prometheus قليلاً.

واحدة من السمات المميزة لـ Prometheus هي استخراج المقاييس من نقاط التجميع (من خلال المصدرين) وتخزينها في TSDB (قاعدة بيانات السلاسل الزمنية ، قاعدة بيانات السلاسل الزمنية) مع إضافة البيانات الوصفية في شكل ملصقات.

لماذا هو ضروري


في الآونة الأخيرة ، أصبحت بروميثيوس المعيار الفعلي في عالم الحاويات و Kubernetes: تركيبها بسيط جدًا ، ومجموعة Kubernetes لديها في البداية نقطة نهاية لبروميثيوس. يمكن لـ Prometheus أيضًا استرداد المقاييس من التطبيقات المنشورة في حاوية ، مع الاحتفاظ ببعض العلامات. لذلك ، من السهل جدًا تنفيذ تطبيقات المراقبة.

لسوء الحظ ، لا يوجد حتى الآن حل جاهز لإدارة السجلات ، ويجب عليك إيجاد حل لنفسك:

  • خدمة سحابية مُدارة لمركزة السجلات (AWS أو Azure أو Google)
  • المراقبة كخدمة مراقبة خدمة (على سبيل المثال ، Datadog)
  • إنشاء خدمة جمع السجلات الخاصة بك.

بالنسبة للخيار الثالث ، كنت أستخدم Elasticearch بشكل تقليدي ، على الرغم من أنني لم أكن دائمًا سعيدًا به (خاصة شدته وتعقيد الإعدادات).

تم تصميم Loki لتبسيط التنفيذ وفقًا للمبادئ التالية:

  • من السهل البدء
  • تستهلك القليل من الموارد
  • العمل بشكل مستقل دون أي صيانة خاصة
  • تكمل بروميثيوس للمساعدة في التحقيق في الأخطاء

ومع ذلك ، يتم تحقيق هذه البساطة من خلال بعض التنازلات. واحد منهم ليس لفهرسة المحتوى. لذلك ، البحث عن النص ليس فعالًا جدًا أو غنيًا ولا يسمح بإحصاءات حول محتوى النص. ولكن بما أن Loki يريد أن يكون ما يعادل grep ويكمل Prometheus ، فهذا ليس عيبًا.

تحقيق الحادثة


لفهم سبب عدم احتياج Loki إلى الفهرسة ، دعنا نعود إلى طريقة التحقيق في الحوادث التي يستخدمها مطورو Loki:


تنبيه واحد → 2 لوحة معلومات → 3 استعلام Adhoc → 4 تجميع السجلات → 5 تتبع الموزع → 6 إصلاح!
(1 تحذير ← 2 لوحات تحكم ← 3 استعلام Adhoc ← 4 تجميع السجل ← 5 تتبع الموزع ← 6 التصحيح!)


الفكرة هي أننا نتلقى بعض التنبيه (إعلام Slack ، SMS ، إلخ) وبعد ذلك:

  • Grafana
  • (, Prometheus)
  • (, Elasticsearch)
  • , (Jaeger, Zipkin .)
  • , , .

هنا ، في حالة مكدس Grafana + Prometheus + Elasticsearch + Zipkin ، سيكون عليك استخدام أربع أدوات مختلفة. لتقليل الوقت ، سيكون من الجيد أن تتمكن من تنفيذ كل هذه الخطوات بأداة واحدة: Grafana. تجدر الإشارة إلى أنه تم تنفيذ هذا النهج في البحث في Grafana منذ الإصدار 6. وبالتالي ، يصبح من الممكن الوصول إلى بيانات Prometheus مباشرة من Grafana.


انقسام شاشة المستكشف بين Prometheus و Loki

في هذه الشاشة ، يمكنك عرض سجلات Loki المتعلقة بمقاييس Prometheus باستخدام مفهوم تقسيم الشاشة. بدءًا من الإصدار 6.5 ، تتيح لك Grafana معالجة معرف التتبع في إدخالات سجل Loki لمتابعة الروابط إلى أدوات التتبع الموزعة المفضلة لديك (Jaeger).

اختبار لوكي المحلي


أسهل طريقة لاختبار Loki محليًا هي استخدام Docker-compose. ملف إنشاء عامل الميناء في مستودع Loki. يمكنك الحصول على المستودع باستخدام الأمر التالي git:

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


ثم تحتاج للذهاب إلى دليل الإنتاج:

$ cd production

بعد ذلك ، يمكنك الحصول على أحدث نسخة من صور Docker:

$ docker-compose pull

أخيرًا ، يتم تشغيل مكدس Loki بالأمر التالي:

$ docker-compose up

لوكي العمارة


هنا رسم تخطيطي صغير مع بنية Loki:


مبادئ بنية Loki يقوم

عميل الويب بتشغيل التطبيقات على الخادم ، ويقوم Promtail بجمع السجلات وإرسالها إلى Loki ، كما يرسل عميل الويب البيانات الوصفية إلى Loki. يقوم Loki بتجميع كل شيء ونقله إلى Grafana.
لوكي قيد التشغيل. لعرض المكونات المتوفرة ، قم بتشغيل الأمر التالي:

$ docker ps


في حالة Docker مثبتة حديثًا ، يجب أن يعرض الأمر النتيجة التالية:

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: وكيل لمركزة السجلات
  • جرافانا: أداة لوحة أجهزة القياس الشهيرة
  • Loki: خفية مركزة البيانات

في إطار البنية التحتية الكلاسيكية (على سبيل المثال ، بناءً على الأجهزة الافتراضية) ، يجب نشر وكيل Promtail على كل جهاز. يمكن تثبيت Grafana و Loki على نفس الجهاز.

نشر Kubernetes


سيكون تثبيت مكونات Loki على Kubernetes على النحو التالي:

  • daemonSet لنشر وكيل Promtail على كل جهاز في كتلة الخادم
  • نشر لوكي
  • وأخيرا نشر جرافانا.

لحسن الحظ ، يتوفر Loki كحزمة Helm ، مما يسهل نشره.

التثبيت عبر هيلم


يجب تثبيت Helm بالفعل. يمكن تنزيله من مستودع GitHub للمشروع. يتم تثبيته عن طريق تفريغ الأرشيف الذي يطابق الهندسة الخاصة بك وإضافة الدفة إلى $PATH.

ملاحظة: تم إصدار Helm الإصدار 3.0.0 مؤخرًا. نظرًا لوجود الكثير من التغييرات فيه ، ينصح القارئ بالانتظار قليلاً قبل استخدامه أولاً .


إضافة مصدر هيلم


الخطوة الأولى هي إضافة مستودع "loki" باستخدام الأمر التالي:

$ helm add loki https://grafana.imtqy.com/loki/charts

بعد ذلك ، يمكنك البحث عن الحزم المسماة "loki":

$ 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 فقط مع خادم Loki
  • تسمح لك حزمة loki / بطلاقة بت نشر DaemonSet باستخدام حاوية بطلاقة لجمع السجلات بدلاً من Promtail
  • تحتوي حزمة loki / promtail على ملفات سجل وكيل مجموعة
  • تتيح لك حزمة loki / loki-stack نشر Loki على الفور مع Promtail.

تركيب لوكي


لنشر Loki في Kubernetes ، قم بتشغيل الأمر التالي في مساحة اسم "المراقبة":

$ 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

ملاحظة: إذا كنت تريد نشر Grafana في نفس الوقت ، فأضف المعلمة--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 ، تحتاج إلى فتح نفق إلى أسفله. ما يلي هو الأمر لفتح منفذ 3000 لموقد Grafana:

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

نقطة أخرى مهمة هي الحاجة إلى استعادة كلمة مرور مسؤول Grafana. تبقى كلمة المرور سرية loki-grafanaفي حقل .data.admin-userبتنسيق base64.

لاستعادته ، يجب تشغيل الأمر التالي:

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

استخدم كلمة المرور هذه مع حساب المسؤول الافتراضي (المشرف).

تحديد مصدر بيانات Loki في Grafana


بادئ ذي بدء ، تأكد من إنشاء مصدر بيانات Loki (التكوين / مصدر البيانات).
فيما يلي مثال:


مثال على إعداد مصدر بيانات لـ Loki

بالنقر فوق "اختبار" ، يمكنك التحقق من الاتصال بـ Loki.

تقديم طلبات لوكي


انتقل الآن إلى قسم "الاستكشاف" في Grafana. عند تلقي السجلات من الحاويات ، يضيف Loki بيانات وصفية من Kubernetes. وبالتالي ، يصبح من الممكن عرض سجلات حاوية معينة.

: على سبيل المثال ، يمكن استخدام promtail الاستعلام التالي لتحديد سجلات الحاوية {container_name = "promtail"}.
تأكد أيضًا من تحديد مصدر بيانات Loki هنا.

سيعيد هذا الطلب نشاط الحاويات على النحو التالي:


نتيجة الطلب في جرافانا

إضافة إلى لوحة القيادة


بدءًا من Grafana 6.4 ، يمكنك وضع معلومات حول السجلات مباشرةً في لوحة البيانات. بعد ذلك ، سيتمكن المستخدم من التبديل بسرعة بين عدد الطلبات على موقعه إلى آثار التطبيق.

فيما يلي مثال على لوحة أجهزة القياس التي تنفذ هذا التفاعل:


مثال على لوحة أجهزة القياس مع مقاييس Prometheus وسجلات Loki

لوكي المستقبل


لقد بدأت في استخدام Loki في مايو / يونيو مع الإصدار 0.1. اليوم تم إصدار الإصدار 1 بالفعل ، وحتى 1.1 و 1.2.

من المسلم به أن الإصدار 0.1 لم يكن مستقرًا بما يكفي. لكن 0.3 أظهر بالفعل علامات نضج حقيقية ، والإصدارات التالية (0.4 ، ثم 1.0) عززت هذا الانطباع فقط.

بعد 1.0.0 ، لا يمكن لأي شخص أن يكون لديه أي أعذار لعدم استخدام هذه الأداة الرائعة.

لا ينبغي أن تتعلق التحسينات الإضافية بـ Loki ، بل بدمجها مع شركة Grafana الممتازة. في الواقع ، لدى Grafana 6.4 بالفعل تكامل جيد مع لوحات العدادات.

يعمل Grafana 6.5 ، الذي تم إصداره مؤخرًا ، على تحسين هذا التكامل من خلال التعرف تلقائيًا على محتويات السجلات بتنسيق JSON.

يُظهر الفيديو التالي مثالاً صغيراً على هذه الآلية:


باستخدام سلاسل Loki المعروضة في Grafana

يصبح من الممكن استخدام أحد حقول JSON ، على سبيل المثال ، من أجل:

  • روابط الأداة الخارجية
  • تصفية محتوى السجل

على سبيل المثال ، يمكنك النقر فوق traceId للانتقال إلى Zipkin أو Jaeger.

تقليديا ، نحن في انتظار تعليقاتك ، ونحن ندعوك لحضور ندوة عبر الإنترنت مفتوحة حيث سنتحدث عن كيفية تطور صناعة DevOps خلال 2019 ومناقشة مسارات التطوير المحتملة لعام 2020.

Source: https://habr.com/ru/post/undefined/


All Articles