أفضل الممارسات الخاصة بالتتبع المهيأ

اذا كنت ترغب في توسيع نطاق تتبع آلي للتداخل™ أو أكثر من spans آلية يدويا ، فاننا نوصي باتباع أفضل الممارسات التالية.

استخدام spans التي تم تعليقها بشكل جيد

للحصول على أفضل وحدة مراقبة ، والتعلم من ، والتنبيه على التطبيقات والبنية الأساسية الخاصة بك ، يقوم Incert بتنفيذ عمليات تشغيل متقدمة وتحليل على كل البيانات الواردة. وهذا يتضمن كل spans واردة من كل المصادر.

للحصول على أقصى استفادة من تحليل وتشغيل Intanass آليا ، يمكنك اضافة شارات التعليم المناسبة الى spans الخاصة بك الى Ingass للحصول على أفضل تحليل والتصرف على spans القادمة.

على سبيل المثال ، يتيح كود Python OpenTracing التالي معلومات قليلة جدا.

ملحوظة: يقوم المثال التالي باستخدام OpenTracing لتوضيحه ولكن يتم تطبيق القصد على كل أكواد التتبع المعدلة.

import opentracing

with opentracing.tracer.start_active_span('vanilla') as pscope:
  # ...
  # do something that takes 50ms
  # ...
  pscope.span.log_kv({"foo": "bar"})

من هذا الرمز ، نعرف فقط بأنه a اسم مسماةvanillaاستغرق ذلك 50 ثانية من الوقت. نحن لا نعرف نوع الامتداد كان ؛ HTTP ، RPC ، أو امتداد لبرنامج الرسائل. نحن لا نعرف ما حدث خلال ذلك الوقت ، مثل التواصل مع أي عنصر آخر في البنية التحتية الخاصة بك.

اذا قمت بادخال علامات OpenTracing السياقية المناسبة ، يقوم Intanass بتحليل واستخراج المعلومات من هذا الامتداد للعمل بها.

import opentracing
import opentracing.ext.tags as ext

with opentracing.tracer.start_active_span('webserver') as pscope:
    pscope.span.set_tag(ext.SPAN_KIND, "entry")
    pscope.span.set_tag(ext.PEER_HOSTNAME, "localhost")
    pscope.span.set_tag(ext.HTTP_URL, "/python/simple/two")
    pscope.span.set_tag(ext.HTTP_METHOD, "POST")
    pscope.span.log_kv({"foo": "bar"})

    # ...
    # work that took 50ms
    # ...

    pscope.span.set_tag(ext.HTTP_STATUS_CODE, 204)

ويشير هذا الامتداد المشروح بشكل جيد إلى أكثر من ذلك بكثير حول ما حدث في سياق الفترة. ومن خلال شارات التعليم المتاحة ، فاننا نعلم أن هذا هو طلب وحدة خدمة الانترنت الواردة الى/python/simple/twoوكود حالة HTTP الناتج هو204.

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

لمعرفة التفاصيل الخاصة بهذا المثال ، ارجع الى محددات OpenTing الذي يقوم بتعريف الكشف الموثوق به لكل علامات OpenTracing التي يتم دعمها. يتم اتاحة كشف شامل بشارات التعليم التي يتم دعمها بواسطة Ingass (وهي عبارة عن مجموعة كبيرة من علامات OpenTracing) في نهاية هذه الصفحة.

Annotating "Built-At Spans"

في بعض الحالات ، قد يكون من المنطقي اضافة بيانات توصيف اضافية الى امتداد موجود يتم اتاحته بواسطة المكتبة التي يتم اتاحتها. بالنسبة لهذه البيانات التي سيتم عرضها ، يجب أن تكون بداخلsdk.custom.tagsعنصر في التتبع.

كل مكتبة تتعامل مع هذا بطريقة مختلفة. لتفهم كيفية اضافة هذا العنصر ، ارجع الى المطبوعات الفنية الخاصة ب SDK الخاص باللغة الخاصة بك.

بدء عمليات تتبع جديدة باستخدام spans الادخال

في عملية التتبع الموزعة ، يوجد ثلاثة أنواع رئيسية من spans :

و#span.kindشارة التعليم تمثل نوع الامتداد الذي يتم تسجيله. ارجع الىspan.kindفي الجدول في نهاية هذه الصفحة أو بدلا من ذلك في محددات OpenTing للحصول على مزيد من التفاصيل.

عند بدء عمليات تتبع جديدة ، قم بالبدء باستخدام امتداد ادخال . اذا لم تقم بتحديدspan.kindشارة التعليم ، الفترة الزمنية تعتبر امتداد لنوع ادخال . تحديد هذه الشارة الى القيمة المناسبة يسمح بتشغيل أفضل ، واستخراج للتمثيل النهائي للاستدعاء ، ووضع مناظرة في Intana.

ارجع الى مثال اذهب :

// Start a new entry span and set 'kind' to Consumer (entry)
entrySpan := ot.StartSpan("RPCJobRunner")
entrySpan.SetTag(string(ext.SpanKind), string(ext.SpanKindConsumerEnum))

// Now the RPC exit span
spanName := fmt.Sprintf("%s %s", request.Service, request.Method)
clientSpan := ot.StartSpan(spanName, ot.ChildOf(entrySpan.Context()))
clientSpan.SetTag(string(ext.SpanKind), string(ext.SpanKindRPCClientEnum))
clientSpan.SetTag("rpc.call", request.Method)

// Make the RPC call

clientSpan.Finish()
entrySpan.Finish()

تعليم امتداد مع خطأ

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

سياق مرور بين خدمات متناهية الصغر

لتمرير السياق عبر الحدود مثل الأنظمة الرئيسية والصفوف والخدمات ، تتضمن عملية التتبع الموزعة طريقة. عادة ما يتم القيام بذلك باستخدام شركات النقل مثل نصوص رأس HTTP أو عناوين صف الرسائل.

للحصول على مزيد من التفاصيل ، ارجع الى الوثائق الخاصة بنا على نصوص رأس HTTP.

حدد اسم خدمة

يعد هذا المجال مجالات اختياريا. أسماء الخدمات هي أسماء يتم تطبيقها على عمليات التطبيق التي يتم مراقبتها. بالعديد من اللغات ، يمكن أن يتم اكتشاف أفضل اسم خدمة آليا بناءا على اطار العمل الذي يتم استخدامه أو سطر أمر التشغيل.

اذا كنت تريد احلال هذا ، يمكنك تحديد اسم خدمة لكل Tracter. أنظر المثال التالي للغة الذهاب.

serviceName := "default"
if *isServer {
    serviceName = "rpc-client"
} else {
    serviceName = "rpc-server"
}

opts := instana.Options{Service: serviceName})
opentracing.InitGlobalTracer(instana.NewTracerWithOptions(&opts)

تقوم كل وحدات تتبع OpenTracTing بدعم هذا التوصيف من خلال متغير بيئة التشغيل. اذا قمت بتحديد متغير بيئة التشغيلINSTANA_SERVICE_NAMEبالنسبة للعملية ، يتم استخدام القيمة كاسم خدمة للعملية. يؤدي ذلك الى تخطي أي توصيف لاسم خدمة مستوى الكود.

أنظر أيضا المطبوعات الفنية الخاصة بنظام Intana بصفة عامة تقنيات وقواعد استخراج الخدمة.

حدد نقطة نهاية واسم استدعاء

يعد هذا المجال مجالات اختياريا. في العديد من اللغات ، يتم اكتشاف نقطة النهاية وأسماء الاستدعاء آليا بناءا على نوع الخدمة.

اذا كنت تريد احلال هذا ، يمكنك تحديد نقطة النهاية واستدعاء الأسماء لكل Tracter. ارجع الى المثال التالي للغة Java.

SpanSupport.annotate(Span.Type.ENTRY, "my-custom-span", "endpoint", "endpoint-name");
SpanSupport.annotate(Span.Type.ENTRY, "my-custom-span", "call.name", "call-name");

للحصول على مزيد من المعلومات عن تقنيات وقواعد استخراج نقطة النهاية العامة لشركة Inastana ، ارجع الى docints docs.

احلال مدة الامتداد

يقوم تتبع SDK آليا باحتساب فترة الامتداد من بداية ونهاية الامتداد.

حيث يمثل عادة ما تريد قياسه ، ولكن عندما لا يكون كذلك ، يمكنك الكتابة عليه باستخدامdurationشارة التعليم.

النسق المتوقع هو بالميللي ثانية.

// Overwrite the span duration with 15 milliseconds.
SpanSupport.annotate(Span.Type.ENTRY, "my-custom-span", "duration", "15");

قوالب Path : التجميع المرئي لنقاط نهاية HTTP

يقوم Incastic بدعم التجميع الآلي لنقاط النهاية باستخدام قوالب المسار. يتم دعم هذا خارج المربع مع تتبع مسار العمل للعديد من الاطارات. باستخدام OpenTracing ، يتم طلب خطوة اضافية كما هو موضح بأسفل.

يكون للأطر المختلفة عادة نموذج لمسار REST مماثل لما يلي :

/api/query/1956-01-31/Guido-van-Rossum
/api/query/1976-04-18/Andrew-Ng
/api/query/1912-06-23/Alan-Turing

ويمكن تجميع نقاط النهاية المتشابهة هذه بالإبلاغ عنها (أ)http.path_tplالمفتاح في وحدات ربط HTTP الخاصة بك بالقيمة/api/query/{birthdate}/{name}، يقوم Intana باستخدام هذا القالب لتجميع نقاط النهاية آليا التي تتفق مع النموذج الذي تم اضافته. في واجهة التعامل البيانية الخاصة بك ، سيتم بعد ذلك تجميع نقاط نهاية HTTP على أنها نقطة نهاية مفردة :

/api/query/{birthdate}/{name}

ارجع الى ما يلي للحصول على مثال في اذهب :

span := ot.GlobalTracer().StartSpan("myTemplatedSpan", ext.RPCServerOption(incomingContext))
span.SetTag("http.path_tpl", "/api/query/{birthdate}/{name}")
span.SetTag(string(ext.SpanKind), string(ext.SpanKindRPCServerEnum))
span.SetTag(string(ext.HTTPUrl), req.URL.Path)
span.SetTag(string(ext.HTTPMethod), req.Method)
span.SetTag(string(ext.HTTPStatusCode), 200)

لاحظ أن هذه الخاصية هي Intanert محددة وليست متوافقة مع OpenTracing.

شارات التي تم تشغيلها

يعرض هذا القسم شارات التعليم المحددة التي يتم البحث عنها عند تعريف وتشغيل spans. عندما يتم ايجاد مجموعة فرعية من شارات التعليم بأسفل لفترة الامتداد ، يمكن أن تقوم شركة Intanass عندئذ بتحسين عملية وتحليل ورؤية وتنبيه التشجعات الواردة.

يجب ملاحظة أن شارات التعليم التي يتم عرضها بأسفل هي المجموعة المميزة من علامات OpenTracing القياسية. يتم تعليم كل شارة على ما اذا كان OpenTracing متوافق مع أي منهماأوxإذا لم يكن كذلك

يتم الحصول على بعض توصيفات شارات التعليم التالية مباشرة من وثيقة OpenTracing semantic.

نوع

وفي عالم التعقب الذي تم توزيعه ، توجد ثلاث فئات رئيسية منها :

  1. spans الادخال: spans التي تقوم باستلام الطلبات (مثل وحدات خدمة HTTP أو RPC) ، وتستهلك الرسائل من صف أو تقوم بتشغيل عمل.
  2. خروج من spans: spans التي تقوم بطلبات الوحدة التابعة (على سبيل المثال ، HTTP أو RPC أو قاعدة بيانات) ، قم بدفع الرسائل الى صف أو تقوم باستدعاء قاعدة بيانات الوحدة التابعة
  3. spans متوسطة: spans التي تمثل العمل الذي يتم تنفيذه في التطبيقات مثل مشاهدة التمثيل البياني أو التصرف / تشغيل وحدة التحكم.

و#span.kindشارة التعليم لفترة الامتداد تقوم بتعريف نوع الامتداد الذي يتم تسجيله. تسجيل هذه الشارة يسمح لشركة Intans باستخراج وتشغيل ومناظرة الاتصالات بين spans. وفي مجال التحريض ، نشير إلى هذا البلاغ بوصفه "دعوة".

تتيح لك هذه المعلومات امكانية عدم مراقبة spans فقط ، ولكن تقوم أيضا بمراقبة الاستدعاءات بين spans التي تتيح رؤية أفضل للاتصال بين الأنظمة الخاصة بك. ومع وجود هذا الأمر ، يمكن للاستدانة أيضا أن ترصد وتنبه إلى صحة هذه النداءات نظرا لأنه يجري الإبلاغ عن حالات التشفع.

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
span.kind مجموعة حروف اماclientأوserverللأدوار المناسبة في طلب RPC أو طلب HTTP ، وproducerأوconsumerللأدوار المناسبة في سيناريو برنامج الرسائل. القيم الأخرى المقبولة هي :entry,exitأوintermediateوهي ليست متوافقة مع OpenTracing.

HTTP

spans HTTP تمثل استدعاء الوحدة التابعة HTTP أو تشغيل طلب HTTP Server .

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
http.url مجموعة حروف عنوان HTTP URL المعرف بالكامل المستخدم في طلب الوحدة التابعة HTTP هذا أو تشغيل وحدة الخدمة.
http.method مجموعة حروف طريقة HTTP المستخدمة في طلب الوحدة التابعة HTTP هذا أو تشغيل وحدة الخدمة. الأمثلة هي "GET" ، "POST" ، "PUT" وهكذا.
http.status_code رقم صحيح كود حالة HTTP لطلب HTTP هذا.
http.status رقم صحيح x بديل الىhttp.status_code. يتم دعم كلاهما بالرغم من أنه يجب ارسال واحد فقط.
http.path مجموعة حروف x مسار HTTP الخاص بالطلب.
http.host مجموعة حروف x النظام الرئيسي عن بعد اذا كان طلب Client أو النظام الرئيسي يقوم بالتعامل مع طلب HTTP الوارد.
http.params مجموعة حروف x معاملات الاستعلام لطلب HTTP
http.error مجموعة حروف x في حالة وجود خطأ ، سيتم عرض رسالة خطأ مرفقة مع هذا الامتداد. على سبيل المثال ، "خطأ داخلي بوحدة الخدمة"
http.header مجموعة حروف x يتم استخدامه للابلاغ عن العناوين المهيأة بالنسبة لهذا الامتداد بحيث يكون مثل "X-My-Custom-Header=afd812cab"
http.path_tpl مجموعة حروف x يسمح بالتجميع المرئي لنقاط النهاية. ارجع الى وثائق نماذج المسار للحصول على مزيد من التفاصيل.

|http.route_id| String|x | كود تعريف متفرد لمسار التوجيه الخاص بك مثلblog.show؛ يكون مفيدا مع الأطر التي يتم فيها الاشارة الى نقطة نهاية مميزة بواسطة الكود

ملاحظات:

  1. مناسبspan.kindيجب أن يتم دائما ارسالها باستخدام شارات التعليم هذه.
  2. http.host,http.pathوhttp.paramsيجب أن يتم ارسالها بدلا منhttp.url. ارسال مزيج من هذه الشارات معhttp.urlغير مدعم والنتائج غير معرفة.

RPC

يعد RPC spans عبارة عن تلك التي تمثل العمل الذي تم تنفيذه في استدعاء RPC أو تشغيل استدعاء وحدة خدمة RPC.

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
rpc.call مجموعة حروف استدعاء RPC الجاري استدعائه أو خدمته (يعتمد على القيمة الخاصة به)span.kind)
rpc.host مجموعة حروف يقوم النظام الرئيسي عن بعد RPC باستدعاء Client أو النظام الرئيسي RPC الذي يقوم بالتعامل مع الطلب اذا كان قد تم تنفيذ طلب وحدة خدمة RPC.
rpc.params مجموعة حروف x المعاملات لاستدعاء RPC
rpc.port مجموعة حروف x منفذ استدعاء RPC
rpc.flavor مجموعة حروف x عبارة عن Flavor لمكتبة RPC التي يتم استخدامها مثل XMLRPC ، GGRPCIO ، وهكذا
rpc.error مجموعة حروف x رسالة الخطأ المرفقة مع استدعاء RPC

ملحوظة : يجب ارسال span.tواء مناسب مع شارات التعليم هذه.

GraphQL

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
graphql.operationType مجموعة حروف x QueryأوMutation
graphql.operationName مجموعة حروف x اسم الاستعلام أو التحول
graphql.fields JSON/object أو JSON الذي تم تحديده (أنظر أسفل) x المجالات المستخدمة كجزء من الاستعلام أو التحول
graphql.arguments JSON/object أو JSON الذي تم تحديده (أنظر أسفل) x المتغيرات المستقلة المستخدمة كجزء من الاستعلام

بخصوصgraphql.fieldsوgraphql.argumentsيجب أن تقوم باختيار نوع البيانات المناسب (JSON أو String) بناءا على ما يدعمه tracter.

أمثلة:

// NodeJS SDK => JSON
span.annotate('sdk.custom.tags.graphql.fields', {
    Account: [ 'id', 'name' ],
    User: [ 'id', 'name' ]
})
span.annotate('sdk.custom.tags.graphql.arguments', {
    User: [ 'where', 'orderBy' ]
})

// Java SDK => String
SpanSupport.annotate("graphql.fields", "{ \"Account\": [\"id\", \"name\"], \"User\": [\"id\", \"name\"] }");
SpanSupport.annotate("graphql.arguments", "{ \"User\": ["\where\", \"orderBy\"] }");

قاعدة بيانات

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
db.instance مجموعة حروف اسم نسخة قاعدة البيانات. كمثال في Java ، اذا كانjdbc.url="jdbc:mysql://127.0.0.1:3306/customers"، اسم النسخة هو "عملاء"
db.type مجموعة حروف لأي قاعدة بيانات SQL ، "sql". بالنسبة للآخرين ، فئة قاعدة البيانات ذات الحروف السفلية ، على سبيل المثال ، "cassاندرا" أو "hbase" أو "dredor".
db.statement مجموعة حروف عبارة عن عبارة قاعدة البيانات لنوع قاعدة البيانات المحدد. على سبيل المثال ، عندماdb.typeهو "SQL"-SELECT * FROM user_table; عندماdb.typeهو "redريس"-SET mykey 'WuValue'.
db.user مجموعة حروف اسم المستخدم للتوصل لقاعدة البيانات. على سبيل المثال ، "readonly_user" أو "reporting_user"
db.connection_string مجموعة حروف - عبارة الوصلة ، على سبيل المثال ،jdbc:mysql://127.0.0.1:3306/customers

برنامج الرسائل

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
message_bus.destination مجموعة حروف عبارة عن العنوان الذي يمكن أن يتم فيه تبادل الرسائل. يمكن أن يكون موضوع أو صف وهكذا.

دفعي

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
batch.job مجموعة حروف x الاسم الخاص بالعمل الذي يتم تنفيذه.

Peer

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
peer.hostname مجموعة حروف يقوم النظام الرئيسي عن بعد الخاص بفترة الخروج باجراء اتصال صادر.
peer.address مجموعة حروف عبارة عن العنوان عن بعد لمدى الخروج الذي يقوم باجراء اتصال صادر.
peer.service مجموعة حروف اسم الخدمة الخاص بالجانب البعيد من امتداد الخروج الذي يقوم باجراء اتصال صادر. لاحظ أن هذا الاختيار اختياري وقد يتم استخدامه عندما يكون الجانب عن بعد لم يتم تجهيزه بالفعل.

أخطاء

الشارة النوع OpenTracing Compliant ؟ ‏الوصف‏
error منطقي يشير الى ما اذا كان قد تم مقابلة خطأ أثناء الفترة الزمنية التي يمثلها هذا الامتداد.
message مجموعة حروف x رسالة مرفقة مع الخطأ

أنظر أيضا