أفضل الممارسات الخاصة بالتتبع المهيأ
اذا كنت ترغب في توسيع نطاق تتبع آلي للتداخل™ أو أكثر من spans آلية يدويا ، فاننا نوصي باتباع أفضل الممارسات التالية.
- استخدام span مشروحة بشكل جيد
- بدء عمليات تتبع جديدة باستخدام spans الادخال
- تعليم امتداد مع خطأ
- سياق السرية بين خدمات microservices
- تحديد اسم خدمة
- تحديد نقطة النهاية واسم الاستدعاء
- احلال مدة الامتداد
- قوالب المسار : التجميع المرئي لنقاط نهاية HTTP
- شارات تم تشغيلها
- ارجع أيضا الى
استخدام 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.
نوع
وفي عالم التعقب الذي تم توزيعه ، توجد ثلاث فئات رئيسية منها :
- spans الادخال: spans التي تقوم باستلام الطلبات (مثل وحدات خدمة HTTP أو RPC) ، وتستهلك الرسائل من صف أو تقوم بتشغيل عمل.
- خروج من spans: spans التي تقوم بطلبات الوحدة التابعة (على سبيل المثال ، HTTP أو RPC أو قاعدة بيانات) ، قم بدفع الرسائل الى صف أو تقوم باستدعاء قاعدة بيانات الوحدة التابعة
- 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؛ يكون مفيدا مع الأطر التي يتم فيها الاشارة الى نقطة نهاية مميزة بواسطة الكود
ملاحظات:
- مناسب
span.kindيجب أن يتم دائما ارسالها باستخدام شارات التعليم هذه. 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 | رسالة مرفقة مع الخطأ |