Python -konfigurowanie pakietu Instana

Ogólne

Pakiet Instana Python ma być w pełni bezdotykowym automatycznym rozwiązaniem do monitorowania Python , ale w razie potrzeby może być w pełni konfigurowalny. Na tej stronie przedstawiono opcje dostępne podczas konfigurowania tego pakietu.

Nieaktualne: Wcześniejsza automatyczna instalacja programu Python AutoTrace za pośrednictwem agenta hosta

Preferowanym podejściem do monitorowania aplikacji Python jest AutoTrace WebHook. Jednak to podejście działa tylko na platformie Kubernetes/OpenShift. Klienci, którzy nie znajdują się w systemie Kubernetesi nie ukończyli jeszcze instrumentacji ręcznej , mogą tymczasowo wykonać następujące czynności:

Po zainstalowaniu agenta Instana Host Agent na komputerze hosta, może on okresowo skanować w poszukiwaniu procesów Python i automatycznie stosować instrumentację Instana Python z mocą wsteczną.

Ten proces jest kontrolowany przez agenta hosta Instana i można go dostosować, wprowadzając zmiany w pliku configuration.yaml . Szczegółowe informacje na temat tego pliku można znaleźć na stronie Konfiguracja agenta , ale szczegółowe informacje na temat tego pliku znajdują się w sekcji Python.

Automatyczną instrumentację Python można opcjonalnie włączyć i skonfigurować, korzystając z następującego bloku w pliku configuration.yaml agenta hosta Instana. Aby sprawdzić, co robi każda opcja, zapoznaj się z wyjaśnieniami w linii:

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:
      - '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

Uwagi i ograniczenia

Python AutoTrace to:

  • obsługiwane tylko w plikach binarnych Linux 64bit
  • obecnie nieobsługiwane w plikach binarnych opartych na Alpine (musl)

Ostrzeżenie: Opcja Python AutoTrace jest zależna od wywołania systemowego ptrace i może nie być dozwolona w zależności od ustawień systemu zabezpieczeń. Wśród wielu innych znane są ustawienia SELinux, AppArmor i seccomp , które uniemożliwiają wywołanie systemowe ptrace . W szczególności moduł zabezpieczeń Linux Yama ogranicza domyślnie użycie języka ptrace do procesu nadrzędnego. Jeśli jądro ma moduł Yama, sprawdź ustawienia ptrace scope , uruchamiając następującą komendę: Jeśli komenda zwróci wartość 0, oznacza to, że opcja AutoTrace nie jest ograniczona przez moduł Yama:

    cat /proc/sys/kernel/yama/ptrace_scope

AutoProfile™

AutoProfile generuje i raportuje profile procesów na Instana automatycznie i w sposób ciągły. Więcej informacji o profilach zawiera sekcja Analiza profili .

Aby włączyć opcję AutoProfile , należy ustawić zmienną środowiskową INSTANA_AUTOPROFILE=true. Opcja AutoProfile jest obecnie obsługiwana tylko w przypadku instalacji ręcznej . Upewnij się, że czujnik Instana został zainicjowany w głównym wątku.

Komunikacja agenta hosta

Pakiet Instana Python próbuje komunikować się z agentem Instana za pośrednictwem adresu IP 127.0.0.1 i jako rozwiązanie zapasowe za pośrednictwem domyślnej bramy hosta dla środowisk kontenerowych. Jeśli agent nie jest dostępny w żadnym z tych miejsc, można użyć zmiennych środowiskowych, aby skonfigurować miejsce, w którym ma być odszukać agenta hosta Instana.

Zmienne środowiskowe powinny być ustawione w środowisku działającego procesu.

export INSTANA_AGENT_HOST = '127.0.0.1'
export INSTANA_AGENT_PORT = '42699'

Patrz także:

Ustawianie nazwy usługi

Domyślnie Instana dołoży wszelkich starań, aby odpowiednio nazwać swoje usługi. Jeśli z jakiegoś powodu chcesz dostosować sposób nazywania usług, możesz to zrobić, ustawiając zmienną środowiskową:

export INSTANA_SERVICE_NAME=myservice

Patrz także General Reference: Environment Variables for Language Sensors (Informacje ogólne: zmienne środowiskowe dla czujników języka).

Ustawianie nazwy procesu

Użyj INSTANA_PROCESS_NAME , aby ustawić niestandardową etykietę dla obiektu infrastruktury, który reprezentuje proces Python .

Konfiguracja pakietu

Pakiet Instana zawiera moduł konfiguracji środowiska wykonawczego, który zarządza konfiguracją różnych komponentów.

Uwaga: w miarę rozwoju pakietu w tym miejscu zostaną dodane dodatkowe opcje

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

Debugowanie i większa szczegółowość

Ustawienie wartości INSTANA_DEBUG na wartość inną niż nil spowoduje włączenie dodatkowych danych wyjściowych rejestrowania, które są zwykle przydatne podczas programowania i rozwiązywania problemów.

export INSTANA_DEBUG="true"

Patrz także General Reference: Environment Variables for Language Sensors (Informacje ogólne: zmienne środowiskowe dla czujników języka).

Wyłączanie automatycznej instrumentacji

Ten pakiet Instana zawiera automatyczną instrumentację, która jest inicjowana podczas ładowania pakietu. Ta instrumentacja dostarcza informacje o rozproszonym śledzeniu do panelu kontrolnego Instana. Pełną listę automatycznej instrumentacji zawiera dokument Obsługiwane wersje .

Można wyłączyć automatyczną instrumentację (śledzenie), ustawiając zmienną środowiskową INSTANA_DISABLE_AUTO_INSTR. Spowoduje to zablokowanie ładowania wbudowanej w czujnik oprzyrządowania.

Kubernetes

W niektórych scenariuszach na tej platformie czujnik Python może nie być w stanie automatycznie zlokalizować i skontaktować się z agentem hosta Instana. Aby rozwiązać ten problem, należy zapoznać się z sekcją Configuring Agent Network Access for Kubernetes w dokumentacji.

Patrz także:

Środowiska

Django (ręcznie)

Po ustawieniu zmiennej środowiskowej AUTOWRAPT_BOOTSTRAP=instana środowisko Django powinno być automatycznie wykrywane i instrumentowane. Jeśli z jakiegoś powodu preferujesz lub chcesz ręcznie instrumentować Django, możesz zamiast tego dodać instana.instrumentation.django.middleware.InstanaMiddleware do listy MIDDLEWARE w 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',
]

Piramida

Od: Instana Python Package 1.22.0

Pakiet Instana zawiera ręczne wsparcie dla Pyramid. Aby dodać widoczność do aplikacji opartej na piramidzie:

  1. Upewnij się, że pakiet instana został dodany do pliku requirements.txt i zainstalowany w środowisku wirtualnym lub kontenerze.
  2. Dodaj import instana na początku pliku __init__.py dla aplikacji Piramida
  3. Dodaj oprzyrządowanie Instana Tween do konfiguracji
import instana

with Configurator(settings=settings) as config:
    # ...
    config.include('instana.instrumentation.pyramid.tweens')
    # ...

Na przykład:

Piramidowy

Jeśli opcja pyramid.tweens jest ustawiona w pliku konfiguracyjnym production.ini , upewnij się, że instana.instrumentation.pyramid.tweens.InstanaTweenFactory jest pierwszą pozycją na tej liście:

pyramid.tweens =
    instana.instrumentation.pyramid.tweens.InstanaTweenFactory
    # other tweens

W przyszłej wersji pakietu Instana, te kroki ręczne nie będą wymagane i nastąpi automatycznie po wykryciu piramidy.

Stosy WSGI i ASGI

Czujnik Instana zawiera oprogramowanie pośrednie WSGI i ASGI, które można dodać do dowolnego zgodnego stosu. Jest to zautomatyzowane dla różnych stosów, ale może być również wykonane ręcznie dla tych, które nie zostały dodane niejawne wsparcie dla jeszcze.

Po zainstalowaniu pakietu Instana Python (za pośrednictwem programu pip install instana), ogólna składnia jest następująca:

import instana

from instana.middleware import InstanaWSGIMiddleware
# or
from instana.middleware import InstanaASGIMiddleware

# Wrap the wsgi app in Instana middleware (InstanaWSGIMiddleware)
wsgiapp = InstanaWSGIMiddleware(MyWSGIApplication())

Pracujemy nad tym, aby zautomatyzować to dla wszystkich głównych struktur, ale w międzyczasie, oto niektóre konkretne szybkie starty dla tych, dla których nie mamy jeszcze automatycznego wsparcia.

Uwaga: Poprzedni formularz importu from instana.wsgi import iWSGIMiddleware nadal działa, ale jest nieaktualny. Obsługa tego formularza importu zostanie usunięta w przyszłej wersji.

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)

CherryPy 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()))

W tym przykładzie używamy uwsgi jako serwera WWW i uruchamiamy z:

uwsgi --socket 127.0.0.1:8080 --enable-threads --protocol=http --wsgi-file mycherry.py --callable wsgiapp -H ~/.local/share/virtualenvs/cherrypyapp-C1BUba0z

Gdzie ~/.local/share/virtualenvs/cherrypyapp-C1BUba0z jest ścieżką do lokalnego środowiska wirtualnego z pipenv

Sokół WSGI

Środowisko Falcon może być również instrumentowane za pośrednictwem opakowania WSGI jako takie:

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)

Następnie należy uruchomić stos, podając jako przykład uwsgi --http :9000 --enable-threads --module=myfalcon.app .

Aplikacje oparte na zdarzeniach gevent

Instana obsługuje aplikacje oparte na gevent w wersji 1.4 i nowszych.

W przypadku domyślnej bazy danych monitorowanie AutoTrace Python typu zero-touchnie są wymagane żadne kroki użytkownika.

Jeśli pakiet Instana Python jest importowany ręcznie, należy upewnić się, że najpierw stosowane są poprawki importu i małpy gevent .

    from gevent import monkey
    monkey.patch_all()
    import instana # <--- after the gevent monkey patching of stdlib

Uwaga: Aplikacje oparte na systemie gevent nie powinny używać metody Aktywowanie bez zmian kodu aktywowania pakietu (za pomocą zmiennej środowiskowej AUTOWRAPT_BOOTSTRAP ). Niestety ta metoda nie będzie działać z powodu opisanych powyżej wymagań dotyczących poprawek dla małp pierwszego zamówienia w systemie gevent. W takim przypadku należy użyć metody AutoTrace lub metody Activating With Code Changes .

Narzędzia

Serwery WWW

uWSGI Serwer WWW

tldr; Upewnij się, że opcja enable-threads jest włączona dla uwsgi.

Wątki

Ta instrumentacja Python tworzy uproszczony wątek tła, który okresowo gromadzi i raportuje metryki procesu. Domyślnie język GIL i wielowątkowość są wyłączone w katalogu uWSGI. Aby instrumentować aplikację działającą w środowisku uWSGI, należy włączyć wątki, przekazując łańcuch --enable-threads (lub enable-threads = true w stylu ini). Więcej szczegółów zawiera dokumentacjauWSGI.

uWSGI Przykład: wiersz komend

uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi -p 4 --enable-threads

uWSGI Przykład: plik ini

[uwsgi]
http = :5000
master = true
processes = 4
enable-threads = true # required

Monitorowanie użytkownika końcowego (EUM)

Instana umożliwia głębokie monitorowanie użytkowników końcowych, które łączy śledzenie po stronie serwera ze zdarzeniami przeglądarki, aby uzyskać pełny widok od serwera do przeglądarki.

Więcej informacji na ten temat zawiera strona Monitorowanie użytkownika końcowego .

Patrz także