توصيف Python -توصيف مجموعة برامج Intana

عام

تهدف مجموعة برامج Incitation Python الى أن تكون الحل الآلي بدون اتصال كامل بالنسبة الى Python المراقبة ولكن لا يزال يتم توصيفه بالكامل عند الحاجة. توضح هذه الصفحة الاختيارات المتاحة في توصيف مجموعة البرامج هذه.

تتبع آلي

وبصفة مفترضة ، تقوم شركة Incastic باتاحة تقنية بدون اتصال أو تقنية لمراقبة الأداء عن بعد والتي تسمى تتبع آلي للتداخل™.

وهذا يعني :

  1. لا يتطلب تركيب مجموعة برامج Python
  2. لا يوجد توصيف مطلوب
  3. لا توجد تغييرات في بيئة التشغيل الخاصة بك
  4. لا توجد تغييرات في الكود مطلوبة
  5. لا تقوم باعادة نشر التطبيقات أو العمال أو الصفوف
  6. لا يتم اعادة بدء عملية

خطوات مستخدم صفر المطلوبة منك أو من فريق العمل الخاص بك ويمكنك الحصول على رؤية 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 هو :

تحذير : يعتمد 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 الدعم اليدوي للبيراميد. لاضافة امكانية الرؤية الى التطبيق على أساس الهرم الخاص بك :

  1. بالتأكيد ،instanaيتم اضافة مجموعة البرامج الى requirements.txt وتم تركيبها في بيئة التشغيل الظاهرية أو الحاوية
  2. ‏إضافة‏import instanaالى الجزء العلوي منك__init__.pyملف لتطبيق Pyramid الخاص بك
  3. اضافة أجهزة 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 مراقبة المستخدم النهائي الذي يقوم بربط تتبعات جانب وحدة الخدمة بأحداث برنامج الاستعراض لمنحك مشاهدة كاملة من وحدة الخدمة الى برنامج الاستعراض.

ارجع الى صفحة انهاء مراقبة المستخدم للحصول على مزيد من التفاصيل.

أنظر أيضا