توصيف
Python -توصيف مجموعة برامج Intana
عام
تهدف مجموعة برامج Incitation Python الى أن تكون الحل الآلي بدون اتصال كامل بالنسبة الى Python المراقبة ولكن لا يزال يتم توصيفه بالكامل عند الحاجة. توضح هذه الصفحة الاختيارات المتاحة في توصيف مجموعة البرامج هذه.
تتبع
آلي
وبصفة مفترضة ، تقوم شركة Incastic باتاحة تقنية بدون اتصال أو تقنية لمراقبة الأداء عن بعد والتي تسمى تتبع آلي للتداخل™.
وهذا يعني :
- لا يتطلب تركيب مجموعة برامج Python
- لا يوجد توصيف مطلوب
- لا توجد تغييرات في بيئة التشغيل الخاصة بك
- لا توجد تغييرات في الكود مطلوبة
- لا تقوم باعادة نشر التطبيقات أو العمال أو الصفوف
- لا يتم اعادة بدء عملية
خطوات مستخدم صفر المطلوبة منك أو من فريق العمل الخاص بك ويمكنك الحصول على رؤية Python بالكامل.
ملحوظة : نعم يتضمن ذلك أيضا المقاييس المترية وعمليات التتبع لكل مكونات Python المدعمة.
Once the Instana host agent is installed on your host, it will periodically scan for running Python processes and automatically apply the Instana Python instrumentation transparently.
يتم التحكم في هذه العملية بواسطة agent host agent ويمكن تهيئتها مع التغييرات الخاصة بكconfiguration.yamlملف. ارجع الى صفحة توصيف Agent للحصول على تفاصيل كاملة عن هذا الملف ولكن للحصول على تفاصيل عن Python، استمر في القراءة.
يمكن توصيف Python Automatic instrumentation اختياريا مع الكتلة التالية في Inttainagent host agent الخاص بكconfiguration.yaml. شرح ما يقدمه كل اختيار في خط-السطر.
com.instana.plugin.python:
# Python AutoTrace will automatically find and instrument Python processes.
# This is supported on Linux 64bit Python processes.
autotrace:
# Valid values: true, false
enabled: true
# The AutoTrace includes are used to identify python processes. They are applied
# _before_ the excludes to get a list of potential candidate processes. The
# includes are used to create a list of processes that contain the following strings
# in their command line. Items specified here will _override_ the defaults.
# Matching is case sensitive.
includes:
- 'gunicorn'
- 'uwsgi'
- 'python'
# The AutoTrace excludes used to identify processes to ignore. It is applied
# _after_ the includes. Any processes that have the following strings in their
# command line will be ignored. Items specified here will be added to the built
# in defaults.
# Matching is case sensitive.
excludes:
- 'pipenv' # pipenv processes
- 'setup.py' # Package development
Notes & Limitations
Python AutoTrace هو :
- مدعم على Linux 64bit binaries فقط
- لا يتم دعمه حاليا على مناظير Alpine (musl)
تحذير : يعتمد Python AutoTrace علىptraceاستدعاء النظام ، وقد لا يتم السماح بالاستدعاء بناءا على محددات نظام السرية. بين العديد من الآخرين ،SELinux,AppArmorوseccompمن المعروف أنه لديه المحددات لعدم السماح بهptraceاستدعاء النظام. وبصفة خاصة ، تقوم وحدة برامج Yama Linux Security Module بتقييد استخدامptraceبالنسبة للعملية الأصلية افتراضيا. اذا كانت kernel تحتوي على وحدة برامج Yama ، قم بالتحقق من محددات نطاق pecart عن طريق تشغيل الأمر التالي : اذا تم ارجاع الأمر0، فهذا يعني أن AutoTrace لا يتم تحديده بواسطة وحدة برامج Yama :
cat /proc/sys/kernel/yama/ptrace_scope
اذا كنت تقوم باضافة كود مهيأ للتطبيق الخاص بك (مثل OpenTracing) ، فيجب أن تقوم باستخدام أحد طرق التركيب اليدوية بدلا من ذلك.
ملف مواصفات آلي™
يقوم ملف المواصفات الآلي بتكوين وتقارير ملفات مواصفات العملية الى Intana آليا وبشكل مستمر. التعرف على المزيد عن ملفات المواصفات في القسم تحليل ملفات المواصفات .
لاتاحة AutoProfile قم بتحديد متغير بيئة التشغيلINSTANA_AUTOPROFILE=true. ملف المواصفات الآلي يتم دعمه حاليا الى تركيب يدوي فقط. برجاء التأكد من أن جهاز الاستشعار الخاص به قد تم اعداده للبدء في سلسلة العمليات الرئيسية.
الاتصال بعميل النظام الرئيسي
تحاول مجموعة برامج Intries Python الاتصال بوكيل Ingasseries من خلال IP 127.0.0.1 وكوسيلة fallback من خلال gateway المفترض للنظام الرئيسي لبيئات التشغيل التي يتم استخدامها في contained. في حالة عدم اتاحة Agent في أي من هذه الأماكن ، يمكنك استخدام متغيرات بيئة التشغيل لتوصيف المكان الذي سيتم البحث فيه عن Intana Host Agent.
يجب أن يتم تحديد متغيرات بيئة التشغيل في بيئة التشغيل الخاصة بعملية التشغيل.
export INSTANA_AGENT_HOST = '127.0.0.1'
export INSTANA_AGENT_PORT = '42699'
ارجع أيضا الى:
تحديد اسم الخدمة
افتراضيا ، سيقوم Intanasing ببذل قصارى جهدك لتسمية الخدمات الخاصة بك بطريقة مناسبة. اذا كنت تريد لأي سبب من الأسباب أن تقوم بتعديل كيفية تسمية الخدمات ، يمكنك القيام بذلك من خلال تحديد متغير بيئة التشغيل :
export INSTANA_SERVICE_NAME=myservice
أنظر أيضا مرجع عام : متغيرات بيئة التشغيل لوحدات استشعار اللغة
تحديد اسم العملية
الاستخدامINSTANA_PROCESS_NAMEلتحديد علامة مميزة مهيأة لكيان البنية التحتية التي تمثل عملية Python .
توصيف مجموعة برامج 
تتضمن مجموعة برامج Intana وحدة برامج توصيف التشغيل التي تقوم بادارة توصيف المكونات المختلفة.
ملحوظة : كلما تم تطوير مجموعة البرامج ، سيتم اضافة المزيد من الاختيارات هنا
from instana.configurator import config
# To enable tracing context propagation across Asyncio ensure_future and create_task calls
# Default is false
config['asyncio_task_context_propagation']['enabled'] = True
Debugging & More Verbosity
المحدداتINSTANA_DEBUGبالنسبة للقيمة غير nil سيتم اتاحة مخرجات التسجيل الاضافية بصفة عامة مفيدة للتطوير وتصحيح الأخطاء.
export INSTANA_DEBUG="true"
أنظر أيضا مرجع عام : متغيرات بيئة التشغيل لوحدات استشعار اللغة
عدم اتاحة الأجهزة الآلية
تتضمن مجموعة برامج Incastic هذه الأجهزة الآلية التي تم اعدادها للبدء في تحميل مجموعة البرامج. تتيح هذه الأدوات معلومات التتبع التي تم توزيعها لواجهة التعامل البيانية الخاصة بك. لمشاهدة الكشف الكامل للأجهزة الآلية ، ارجع الى وثيقة النسخ المدعمة .
يمكنك ايقاف اتاحة الأدوات الآلية (التتبع) من خلال تحديد متغير بيئة التشغيلINSTANA_DISABLE_AUTO_INSTR. سيؤدي ذلك الى منع تحميل الأجهزة التي تم تكوينها-الى وحدة الاستشعار.
Kubernetes & OpenShift
في بعض السيناريوهات على بيئة التشغيل هذه ، قد لا يتمكن جهاز استشعار Python من ايجاد والاتصال بوكيل النظام الرئيسي الى Intana آليا. لحل هذه العملية ، ارجع الى قسم توصيف Agent Network Access for Kubernies في المطبوعات الفنية.
ارجع أيضا الى:
اطار عمل
Jango (Manual)
عندماAUTOWRAPT_BOOTSTRAP=instanaيتم تحديد متغير بيئة التشغيل ، ويجب أن يتم اكتشاف اطار عمل جانغو آليا وأن يتم اعداده. اذا كان لسبب ما ، تفضل أو تحتاج الى لصك يدويا ، يمكنك بدلا من ذلك اضافةinstana.instrumentation.django.middleware.InstanaMiddlewareالى كشف MIDDLEWARE الخاص بك فيsettings.py:
import os
import instana
# ... <snip> ...
MIDDLEWARE = [
'instana.instrumentation.django.middleware.InstanaMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
هرم
منذ : Intana Python Package 1.22.0
تتضمن حزمة Inastana الدعم اليدوي للبيراميد. لاضافة امكانية الرؤية الى التطبيق على أساس الهرم الخاص بك :
- بالتأكيد ،
instanaيتم اضافة مجموعة البرامج الى requirements.txt وتم تركيبها في بيئة التشغيل الظاهرية أو الحاوية - إضافة
import instanaالى الجزء العلوي منك__init__.pyملف لتطبيق Pyramid الخاص بك - اضافة أجهزة Tinto الى التوصيف الخاص بك
import instana
with Configurator(settings=settings) as config:
# ...
config.include('instana.instrumentation.pyramid.tweens')
# ...
على سبيل المثال:

في حال كان لديكpyramid.tweensتحديد الاختيار فيproduction.iniconfig ، تأكد من أنinstana.instrumentation.pyramid.tweens.InstanaTweenFactoryهو أول ادخال في هذا الكشف :
pyramid.tweens =
instana.instrumentation.pyramid.tweens.InstanaTweenFactory
# other tweens
في النسخة المستقبلية من حزمة Incettana ، لن تكون هذه الخطوات اليدوية مطلوبة وسيتم تنفيذها آليا عند اكتشاف هرم هرمي.
WSGI & ASGI Stacks
يتضمن المجس الخاص بوحدة الاستشعار WSGI و ASGI middleware الذي يمكن اضافته الى أي مجموعة متوافقة. وهذا أمر آلي لمجموعة متنوعة ، ولكن يمكن أيضا القيام به يدويا لأولئك الذين لم يضاف إليهم دعم ضمني حتى الآن.
بمجرد تركيب مجموعة برامج Intana Python (viapip install instana) ، الاستخدام العام هو :
import instana
from instana.middleware import InstanaWSGIMiddleware
# or
from instana.middleware import InstanaASGIMiddleware
# Wrap the wsgi app in Instana middleware (InstanaWSGIMiddleware)
wsgiapp = InstanaWSGIMiddleware(MyWSGIApplication())
نحن نعمل على أتمتة هذا لجميع الأطر الرئيسية ولكن في الوقت الحالي ، هنا بعض البدء السريع المحدد لتلك التي ليس لدينا دعم آلي لها حتى الآن.
ملحوظة : نموذج الاستقبال السابق منfrom instana.wsgi import iWSGIMiddlewareلا تزال تعمل ولكن تم استنكارها. سيتم ازالة الدعم لنموذج الاستقبال هذا في نسخة مستقبلية.
Bottle WSGI
# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware
from bottle import Bottle, run
app = Bottle()
@app.route('/hello')
def hello():
return "Hello World!"
# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)
# Alternative method for reference
# app = InstanaWSGIMiddleware(bottle.default_app())
run(app, host='localhost', port=8080)
CheryPy WSGI
import cherrypy
# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware
# My CherryPy application
class Root(object):
@cherrypy.expose
def index(self):
return "hello world"
cherrypy.config.update({'engine.autoreload.on': False})
cherrypy.server.unsubscribe()
cherrypy.engine.start()
# Wrap the application with the Instana WSGI Middleware
wsgiapp = InstanaWSGIMiddleware(cherrypy.tree.mount(Root()))
في هذا المثال ، قمنا باستخدام uwsgi كوحدة خدمة الانترنت وتم بدء تشغيلها بواسطة :
uwsgi --socket 127.0.0.1:8080 --enable-threads --protocol=http --wsgi-file mycherry.py --callable wsgiapp -H ~/.local/share/virtualenvs/cherrypyapp-C1BUba0z
أين~/.local/share/virtualenvs/cherrypyapp-C1BUba0zهو المسار الى vaensalenv محلي من pipenv
Falcon WSGI
يمكن أيضا تجهيز اطار عمل Falcon من خلال WWSGI wrapper بهذه :
import falcon
# Import Instana and the Instana WSGI middleware wrapper
import instana
from instana.middleware import InstanaWSGIMiddleware
app = falcon.API()
# ...
# Wrap the application with the Instana WSGI Middleware
app = InstanaWSGIMiddleware(app)
ثم بدء تشغيل المجموعة الخاصة بك باستخدامuwsgi --http :9000 --enable-threads --module=myfalcon.appكمثال
تطبيقات
gevent Based
يقوم Incasانه بدعم التطبيقات بناءا علىgeventالنسخ 1.4 وأكبر.
بالنسبة الى مراقبة Auto-اللمس AutoTrace Pythonالمفترض ، لا توجد حاجة لخطوات المستخدم.
اذا كنت تقوم باستقبال مجموعة برامج Intana Python يدويا ، تأكد من أنgeventالاستيراد وتسجيل القرد يحدث أولا.
from gevent import monkey
monkey.patch_all()
import instana # <--- after the gevent monkey patching of stdlib
ملحوظة:geventالتطبيقات القائمة على أساس يجب ألا تستخدم طريقة تشغيل بدون تغييرات الكود لتشغيل مجموعة البرامج (باستخدامAUTOWRAPT_BOOTSTRAPمتغير بيئة التشغيل). لسوء الحظ ، لن تعمل هذه الطريقة بسببgeventأول طلب لرقع القرد على النحو الموصوف أعلاه. في هذه الحالة ، برجاء استخدام تتبع آلي أو طريقة تشغيل مع تغييرات الكود .
أدوات 
وحدات خدمة الانترنت
وحدة خدمة
uWSGI Webserver
tlr ; تأكدenable-threadsيتم اتاحته الى uwssgi.
Threads
تقوم أجهزة Python هذه باستخدام سلسلة عمليات خلفية خفيفة الوزن لتجميع وتسجيل قياسات العملية بصفة دورية. وبصفة مفترضة ، يتم الغاء اتاحة GIL و threading تحت uWSGI. اذا كنت ترغب في أن تقوم بتشغيل التطبيق الخاص بك تحت uWSGI ، تأكد من أنك تقوم باتاحة سلاسل العمليات بواسطة المرور--enable-threads(أوenable-threads = trueفي نمط ميني). مزيد من التفاصيل في المطبوعات الفنية الى uWSGI.
uWSGI مثال : سطر الأمر
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi -p 4 --enable-threads
مثال
uWSGI : ملف ini
[uwsgi]
http = :5000
master = true
processes = 4
enable-threads = true # required
End User Monitoring (EUM)
يوفر Intabasa مراقبة المستخدم النهائي الذي يقوم بربط تتبعات جانب وحدة الخدمة بأحداث برنامج الاستعراض لمنحك مشاهدة كاملة من وحدة الخدمة الى برنامج الاستعراض.
ارجع الى صفحة انهاء مراقبة المستخدم للحصول على مزيد من التفاصيل.