تم الانتهاء من إعداد Opentelemetry في التطبيق وتشغيل Otel Collector وLoki وTempo وGrafana محليًا لعرض التتبع في المنشور السابق
كل ما تبقى الآن هو النظر في التتبع ليس محليًا فحسب، بل أيضًا في بيئة الإنتاج الفعلية.
ما هو مطلوب لذلك هو "حفظ السجلات والتتبعات على السحابة".
قم بتحريك مُجمع Opentelemetry Collector (Loki، Tempo، وما إلى ذلك) في مكان ما وقم بتعيين عنوان OLTP الذي يرسله التطبيق إلى هذا المجمع.
بدلاً من ذلك، لتحسين قابلية التوسع، هناك طريقة لتثبيت بوابة لموازنة التحميل، واستقبال OLTP من البوابة، وتمريرها إلى المجمعات الداخلية.
Grafana Alloy عبارة عن مجمع قياس مفتوح قابل للتكوين مقدم من Grafana.
إذا قمت بالنشر باستخدام Docker أو Kubernates الذي استخدمته مسبقًا، فيمكنك إضافته كعقدة جديدة.
هذه طريقة لإرسال OLTP مباشرة إلى الواجهة الخلفية (Loki، Tempo، Jaeger، إلخ) بدون أداة تجميع.
يمكن استخدام Loki وTempo من Grafana Cloud كواجهة خلفية، لذا فهي تتمتع بميزة تقديمها بسرعة دون نشر.
بدلاً من ذلك، تختفي المزايا مثل قابلية التوسع والمعالجة التي يمكن الحصول عليها باستخدام Collector.
أردت نشر Collector واستخدامه بطريقة رائعة، لكنني اعتقدت أن نشر Collector وإعداده بشكل منفصل في بيئة لا يتم فيها استخدام Kubernetes، سيستغرق الكثير من الوقت، لذلك اخترت تشغيله مباشرةً باستخدام Grafana سحاب.
في الواقع، نحن نقدمه للتجريب، وبما أنها شركة ناشئة، فإن قابلية التوسع ليست مهمة جدًا (نظرًا لأنها تقوم بالتسجيل) ويمكننا القيام بذلك بسرعة، لذا فهو ليس قرارًا خياليًا، ولكنه قرار جيد قرار.
تغيير الكود بسيط للغاية. كل ما عليك فعله هو ضبط نقطة نهاية OLTP والبروتوكول بشكل صحيح.
import { OTLPTraceExporter as PROTOOTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"; const oltpTraceExporter = new PROTOOTLPTraceExporter({ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT "/v1/traces", headers: { Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
نقطة النهاية (سحابة Grafana) التي ستتلقى التتبع الذي سنصوره تتلقى بروتوكول http/protobuf، لذا يجب استيراده واستخدامه من Exporter-trace-otlp-proto.
const logExporter = new OTLPLogExporter({ url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT "/v1/logs", headers: { Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION, }, });
كان برنامج Logger يستخدم بالفعل بروتوكول Http، لذلك يمكن استخدام OTLPLogExporter كما هو.
يرجى ملاحظة أنه في NestJS، يتم تعيين متغيرات البيئة عند تهيئة AppModule، لذلك لا يمكن استخدامها في إعدادات التتبع والمسجل التي يجب إكمالها قبل إنشاء AppModule.
إذا كنت تستخدم dotenv، فيجب عليك الاتصال به أولاً.
// eslint-disable-next-line import/order import { config } from "dotenv"; // eslint-disable-next-line import/order import { getEnvFilePath } from "@/lib/utils/env-loader"; config(); // load env before loading tracer and logger // eslint-disable-next-line import/order import otelSDK from "./tracer"; // otelSDK should be imported before any other imports // eslint-disable-next-line import/order import createLogger from "./logger";قيمة متغيرة البيئة
قم بتشغيل Grafana Cloud
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3