الشروع في العمل مع Grafana Tempo
نشرت: 2021-04-19دعنا نتعلم أساسيات Grafana Tempo ، خلفية التتبع الموزعة.
التتبع الموزع هو طريقة للحصول على معلومات دقيقة حول أداء النظام. إنها طريقة لتصور دورة حياة طلب يمر عبر التطبيق. يمكن أن يتكون التطبيق من خدمات متعددة موجودة على عقدة واحدة أو موزعة عبر العقد.
لذلك ، باستخدام التتبع الموزع ، يمكنك الحصول على عرض موحد لجميع الخدمات. و Grafana Tempo هو كل شيء عن ذلك.
ما هو جرافانا تيمبو؟
كانت هناك بعض التحديثات الرئيسية من Grafana Labs في مؤتمر ObservabilityCon هذا العام ، وكان Grafana Tempo أحدها. أضافت Grafana Labs مشروعًا آخر ، "Grafana Tempo" إلى محفظتها مفتوحة المصدر.
Grafana Tempo هي واجهة خلفية تتبع موزعة مفتوحة المصدر وقابلة للتطوير بدرجة كبيرة وسهلة الاستخدام. يتوافق Tempo تمامًا مع بروتوكولات التتبع الأخرى مثل Zipkin و Jaeger و OpenTelemetry و OpenCensus. حاليًا ، يدعم محرك اكتشاف بيانات Tempo في Loki ، ومنصات المراقبة مثل Prometheus و Grafana. يقدم Grafana 7.3+ تجربة سلسة بين Grafana و Tempo.
لماذا تستخدم Tempo؟
يستخدم Tempo لربط المقاييس والتتبعات والسجلات. هناك حالات حيث يتلقى المستخدم نفس النوع من الخطأ عدة مرات. إذا أردت أن أفهم ما يحدث ، فسوف أحتاج إلى إلقاء نظرة على الآثار الدقيقة. ولكن بسبب الاختزال ، فقد ضاعت بعض المعلومات القيمة التي قد أبحث عنها. مع Tempo ، لا نحتاج الآن إلى اختزال بيانات التتبع الموزعة. يمكننا تخزين التتبع الكامل في تخزين العناصر مثل S3 أو GCS ، مما يجعل Tempo فعالاً للغاية من حيث التكلفة.
أيضًا ، يمكّنك Tempo من تصحيح الأخطاء / استكشاف الأخطاء وإصلاحها بشكل أسرع من خلال السماح لك بسرعة بالانتقال من المقاييس إلى الآثار ذات الصلة بالسجلات المحددة التي سجلت بعض المشكلات.
فيما يلي خيارات التكوين المستخدمة في Tempo.
- الموزع : تُستخدم هذه لتكوين خيارات الاستلام لتلقي الامتدادات ثم إرسالها إلى المستوطنين.
- Ingester : تُستخدم لإنشاء مجموعات من الآثار وإرسالها إلى TempoDB للتخزين.
- الضاغطة : تقوم بدفق الكتل من التخزين مثل S3 أو GCS ، وتجمعها وتعيد كتابتها إلى وحدة التخزين.
- التخزين : يستخدم هذا لتكوين TempoDB. تحتاج إلى ذكر اسم الواجهة الخلفية للتخزين (S3 أو GCS) مع معلمات أخرى في هذا التكوين.
- قائمة الأعضاء : تستخدم للتنسيق بين مكونات Tempo.
- المصادقة / الخادم : يستخدم Tempo خادم Weaveworks / Common. يتم استخدامه لضبط تكوينات الخادم.
الهندسة المعمارية تيمبو

يوضح الرسم البياني أعلاه بنية العمل في Grafana Tempo.
أولاً ، يتلقى الموزع امتدادات بتنسيقات مختلفة من Zipkin و Jaeger و OpenTelemetry و OpenCensus ويرسل هذه الامتدادات إلى المبتدئين عن طريق تجزئة معرف التتبع. يقوم Ingester بعد ذلك بإنشاء مجموعات من الآثار تسمى الكتل.
ثم يرسل تلك الكتل إلى مخزن الواجهة الخلفية (S3 / GCS). عندما يكون لديك معرف تتبع تريد استكشافه وإصلاحها ، ستستخدم Grafana UI وتضع معرف التتبع في شريط البحث. الآن querier هو المسؤول عن الحصول على التفاصيل من إما الإدخال أو تخزين الكائن حول معرف التتبع الذي أدخلته.
أولاً ، يتحقق مما إذا كان معرف التتبع هذا موجودًا في المستحضر ؛ إذا لم يتم العثور عليه ، فإنه يتحقق من الخلفية التخزينية. يستخدم نقطة نهاية HTTP بسيطة لفضح التتبع. وفي الوقت نفسه ، تأخذ الضاغطة الكتل من التخزين وتجمعها وترسلها مرة أخرى إلى التخزين لتقليل عدد الكتل في التخزين.
قم بإعداد Tempo باستخدام Docker
في هذا القسم ، سأقوم بإعداد Grafana Tempo خطوة بخطوة باستخدام Docker. أولاً ، أنت بحاجة إلى خلفية Tempo ، لذا قم بإعداد شبكة عامل ميناء.
[[email protected] ~]$ docker network create docker-tempoقم بتنزيل ملف تكوين Tempo.
[[email protected] ~]$ curl -o tempo.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-local.yamlفيما يلي قائمة بخيارات البروتوكول التي تحصل عليها:
| بروتوكول | ميناء |
| افتح القياس عن بعد | 55680 |
| جايجر - التوفير المضغوط | 6831 |
| جايجر - التوفير ثنائي | 6832 |
| جايجر - التوفير HTTP | 14268 |
| جيجر - GRPC | 14250 |
| زيبكين | 9411 |
باستخدام ملف تكوين الإيقاع ، قم بتشغيل حاوية عامل إرساء. أنا هنا أختار تنسيق Jaeger - Thrift Compact (المنفذ 6831) لإرسال الآثار.
[[email protected] ~]$ docker run -d --rm -p 6831:6831/udp --name tempo -v $(pwd)/tempo-local.yaml:/etc/tempo-local.yaml --network docker-tempo grafana/tempo:latest -config.file=/etc/tempo-local.yamlأنت الآن بحاجة إلى تشغيل حاوية استعلام Tempo. لذلك أولاً ، قم بتنزيل ملف تكوين استعلام الإيقاع.
[[email protected] ~]$ curl -o tempo-query.yaml https://raw.githubusercontent.com/grafana/tempo/master/example/docker-compose/etc/tempo-query.yamlباستخدام ملف تكوين استعلام الإيقاع ، قم بتشغيل حاوية عامل إرساء.
[[email protected] ~]$ docker run -d --rm -p 16686:16686 -v $(pwd)/tempo-query.yaml:/etc/tempo-query.yaml --network docker-tempo grafana/tempo-query:latest --grpc-storage-plugin.configuration-file=/etc/tempo-query.yamlالآن سيتم الوصول إلى Jaeger UI على http: // localhost: 16686 ، كما هو موضح أدناه.


في شريط البحث ، يمكنك إضافة معرف التتبع من السجل الذي تريد استكشاف أخطاءه وإصلاحها ، وسيُنشئ التتبع لك.

تشغيل تطبيق تجريبي على Tempo
حان الوقت لتشغيل مثال تجريبي قدمته Grafana Tempo. سأقوم بتشغيل مثال إنشاء عامل الإرساء ، لذلك إذا كنت تحاول نفس الشيء ، فيجب أن يكون لديك عامل إنشاء مثبت على جهازك.
قم بتنزيل ملف Grafana Tempo المضغوط المضغوط: https://github.com/grafana/tempo
استخرجه في المجلد الرئيسي وانتقل إلى دليل docker-compose. سوف تجد أمثلة متعددة من عامل البناء ؛ أنا أستخدم المثال حيث يتم تخزين بيانات التطبيق محليًا.
[[email protected] ~]$ cd tempo-master/example/docker-compose/ [[email protected] docker-compose]$ ls docker-compose.loki.yaml docker-compose.s3.minio.yaml docker-compose.yaml etc example-data readme.md tempo-link.pngقم بتشغيل الأمر أدناه لبدء المكدس.
[[email protected] docker-compose]$ docker-compose up -d Starting docker-compose_prometheus_1 ... done Starting docker-compose_tempo_1 ... done Starting docker-compose_grafana_1 ... done Starting docker-compose_tempo-query_1 ... done Starting docker-compose_synthetic-load-generator_1 ... doneيمكنك أن ترى ، لقد بدأت حاويات لـ Grafana و Loki و Tempo و Tempo-query و Prometheus.
[[email protected] docker-compose]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84cd557ce07b grafana/tempo-query:latest "/go/bin/query-linux…" 10 minutes ago Up 4 seconds 0.0.0.0:16686->16686/tcp docker-compose_tempo-query_1 f7cd9cf460d9 omnition/synthetic-load-generator:1.0.25 "./start.sh" 10 minutes ago Up 4 seconds docker-compose_synthetic-load-generator_1 6d9d9fbdb8f1 grafana/grafana:7.3.0-beta1 "/run.sh" 10 minutes ago Up 6 seconds 0.0.0.0:3000->3000/tcp docker-compose_grafana_1 d8574ea25028 grafana/tempo:latest "/tempo -config.file…" 10 minutes ago Up 6 seconds 0.0.0.0:49173->3100/tcp, 0.0.0.0:49172->14268/tcp docker-compose_tempo_1 5f9e53b5a09c prom/prometheus:latest "/bin/prometheus --c…" 10 minutes ago Up 6 seconds 0.0.0.0:9090->9090/tcp docker-compose_prometheus_1يمكنك أيضًا الانتقال إلى متصفحك والتحقق مما إذا كان Grafana و Jaeger UI و Prometheus قيد التشغيل.


الآن يعمل مولد الحمل الاصطناعي الذي يعمل داخل الحاوية على توليد معرفات أثر تضعها داخل الإيقاع. قم بتشغيل الأمر أدناه ، ويمكنك عرض السجلات.
[[email protected] docker-compose]$ docker-compose logs -f synthetic-load-generator Attaching to docker-compose_synthetic-load-generator_1 synthetic-load-generator_1 | using params: --jaegerCollectorUrl http://tempo:14268 synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /product, 2880 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /cart, 14400 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:34 INFO ScheduledTraceGenerator: Starting trace generation for service frontend, route /checkout, 480 traces/hr synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 17867942c5e161f2 for service frontend route /currency synthetic-load-generator_1 | 21/04/17 14:24:37 INFO ScheduledTraceGenerator: Emitted traceId 3d9cc23c8129439f for service frontend route /shipping synthetic-load-generator_1هذه هي معرفات التتبع التي تحتاج إلى تمريرها لإنشاء التتبع.

أقوم بنسخ أحد معرفات التتبع ووضعه في شريط بحث Jaeger UI.

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