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.
- Postanowienia ogólne
- Nieaktualne: Wcześniejsza automatyczna instalacja programu Python AutoTrace za pośrednictwem agenta hosta
- AutoProfile™
- Komunikacja agenta hosta
- Ustawianie nazwy usługi
- Ustawianie nazwy procesu
- Konfiguracja pakietu
- Debugowanie i większa szczegółowość
- Wyłączanie automatycznej instrumentacji
- Kubernetes
- Środowiska
- Narzędzia
- Serwery WWW
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:
- Upewnij się, że pakiet
instanazostał dodany do pliku requirements.txt i zainstalowany w środowisku wirtualnym lub kontenerze. - Dodaj
import instanana początku pliku__init__.pydla aplikacji Piramida - Dodaj oprzyrządowanie Instana Tween do konfiguracji
import instana
with Configurator(settings=settings) as config:
# ...
config.include('instana.instrumentation.pyramid.tweens')
# ...
Na przykład:

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 .