Python Rozwiązywanie problemów
Pakiet Instana jest w pełni automatyczny, ale jeśli coś pójdzie nie tak, zapisz bilet.
Na poniższej stronie przedstawiono niektóre kroki, które można wykonać w celu zdiagnozowania ewentualnych problemów.
- Obsługiwane komponenty
- Rejestrowanie i zmienne środowiskowe
- Problemy z monitorowaniem
- Obszary problemów ogólnych
- Brak danych śledzenia z aplikacji Python
- Śledzenie powoduje awarię procesu Python , w którym nie można uruchomić nowego komunikatu wątku
- AutoTrace powoduje awarie procesu Python
- AUTOWRAPT_BOOTSTRAP, gevent & RecursionError
- "Nie powiodło się zainstalowanie pakietu Instana Python w pliku /tmp/.instana/python"
- Migracja do serwisu Instana AutoTrace WebHook
- Patrz także:
Obsługiwane komponenty
Przed poświęceniem zbyt wiele czasu na diagnozowanie problemu należy najpierw upewnić się, że dany komponent jest obsługiwany. Listę wszystkich obsługiwanych komponentów można znaleźć na stronie Python Supported Components & Versions (Obsługiwane komponenty i wersje języka Python).
Rejestrowanie i zmienne środowiskowe
Domyślnie pakiet rejestruje tylko te komunikaty, które wskazują, czy wystąpiły jakiekolwiek problemy. Aby uzyskać bardziej szczegółowe dane wyjściowe rejestrowania, należy ustawić zmienną środowiskową INSTANA_DEBUG . Włącza rejestrowanie na poziomie debugowania w gem Instana.
Istnieje jeszcze więcej metod sterowania danymi wyjściowymi rejestrowania. Więcej informacji na ten temat zawiera strona KonfiguracjaPython .
Problemy z programem
Monitoring
Funkcja AutoTrace™ wykorzystująca agenta hosta nie powiodła się
Typ problemu monitorowania: python_autotrace_failed
Autotracing na podstawie nieaktualnego agenta hosta Instana próbował automatycznie instrumentować proces Python zgodnie z opisem w sekcji Instalacja automatyczna , ale próby nie powiodły się.
Potencjalne rozwiązania
- Jeśli procesy Python działają w systemie Kubernetes lub podobnym systemie PaaS, należy zapoznać się z dokumentem Configuring Network Access for Monitored Applications(Konfigurowanie dostępu do sieci dla monitorowanych aplikacji) i postępować zgodnie z nim.
Jeśli powyższe nie rozwiąże problemu, przeczytaj sekcję rozwiązywania problemów ProcesPython nie jest wyświetlany w panelu kontrolnym.
Czujnik
Python nie jest zainstalowany
Typ problemu monitorowania: python_sensor_not_installed
Proces Python działa na platformie, na której nie jest obsługiwana automatyczna instrumentacja, a do instrumentowania procesu nie użyto metod Aktywowanie bez zmian kodu ani Aktywowanie ze zmianami kodu .
Potencjalne rozwiązania
- Użyj instrukcji instalacji ręcznej , aby prawidłowo monitorować aplikacje Python .
Sprawdzanie wymagań wstępnych dla agenta hosta AutoTrace™ nie powiodło się
Typ problemu monitorowania: python_autotrace_prerequisites_failed
Potencjalne rozwiązania
Aby funkcja AutoTrace™ nieaktualnego agenta hosta działała, należy spełnić kilka wymagań wstępnych. Należy sprawdzić, czy spełnione są następujące wymagania wstępne:
- System na poziomie
piplubpip3dostępny dla agenta hosta Instana - Wymagane zależności mogły zostać znalezione i zainstalowane przez agenta (patrz plik dziennika agenta z włączonym rejestrowaniem na poziomie DEBUG)
- System na poziomie
Obszary problemów ogólnych
Python Proces nie jest wyświetlany na panelu kontrolnym
Sprawdź dzienniki agenta hosta Instana, aby sprawdzić, czy jakiekolwiek komunikaty są związane z tym procesem Python .
Wiele procesów Python będzie automatycznie zdalnie instrumentowanych. W przypadkach, gdy nie jest to możliwe, agent hosta może zarejestrować komunikat wskazujący na problem.
Sprawdź, czy środowisko jest obsługiwane i czy używana jest obsługiwana wersja środowiska Python .
Przed poświęceniem zbyt wiele czasu na diagnozowanie problemu należy najpierw upewnić się, że dany komponent i środowisko jest obsługiwane. Listę wszystkich obsługiwanych komponentów można znaleźć na stronie Python Supported Components & Versions (Obsługiwane komponenty i wersje języka Python).
Sprawdź poprawność kroków instalacji
Czy ten proces był instrumentowany za pomocą funkcji AutoTrace lub ręcznie?
Jeśli używane jest AutoTrace, należy upewnić się, że skonfigurowana biała lista jest zgodna z procesem kandydującym, który ma być instrumentowany.
W przypadku instalacji ręcznej sprawdź, czy kroki instalacji ręcznej zostały wykonane poprawnie.
Sprawdź, czy pakiet Instana Python jest zainstalowany i dostępny dla aplikacji.
Poprawność tę można sprawdzić, sprawdzając plik
instanaw pliku Pythonrequirements.txt.Alternatywnie z poziomu Pythonmożna uruchomić komendę
pip list. Spowoduje to wyświetlenie listy wszystkich pakietów Python dostępnych dla aplikacji Python . Sprawdź, czy pakiety Instana Python znajdują się na tej liście.Upewnij się, że pakiet Instana jest najnowszą wersją.
Najnowszą wersję można znaleźć na stronie Pypi.
W pliku
requirements.txtpowinna być wyświetlana najnowsza wersja pakietu Instana Python wraz z nazwą, taką jakinstana==x.x.x. Programpip listzapisuje również numery wersji na wygenerowanej liście.Sprawdź, czy w danych wyjściowych dziennika aplikacji znajduje się nazwa Instana.
Dzienniki aplikacji i/lub kontenera powinny zawsze zawierać komunikat startowy podobny do następującego:
Stan is on the scene. Starting Instana instrumentation version x.x.xJeśli tego nie ma, bardzo prawdopodobne jest, że pakiet nie został zainstalowany lub nie wykonano kroków instalacji ręcznej.
Włącz dane wyjściowe debugowania i ponownie sprawdź dzienniki aplikacji lub kontenera.
Ustaw zmienną środowiskową
INSTANA_DEBUG=truedla procesu Python i ponownie sprawdź poprawność dzienników aplikacji lub kontenera (tak samo, jak w przypadku #6).Należy zwrócić szczególną uwagę, aby sprawdzić, czy są jakieś komunikaty o błędach związanych z Instana.
Spróbuj uruchomić aplikację Python w trybie szczegółowym z konsoli
Przykład, w jaki sposób można to zrobić, zależy w dużej mierze od danej aplikacji Python . Na przykład, jeśli aplikacja Python znajduje się w katalogu
app.py, można uruchomić następujące komendy:export INSTANA_DEBUG=true python app.pyNależy zwrócić szczególną uwagę, aby sprawdzić, czy w danych wyjściowych aplikacji Python nie ma komunikatów o błędach związanych z Instana.
Jeśli używana jest nieaktualna zmienna środowiskowa AutoTracing oparta na agencie hosta, upewnij się, że zmienna środowiskowa TERM nie jest ustawiona i że proces nie znajduje się na liście wykluczonych procesów.
Nieaktualne narzędzie AutoTracing oparte na agencie hosta pominie próbę śledzenia wszystkich procesów, które mają ustawioną zmienną środowiskową
TERMlub są skonfigurowane w sekcjiexcludeskonfiguracji agenta.Zwykle ta wartość jest ustawiana tylko podczas uruchamiania procesu Python z terminalu przyłączonego do aktywnej sesji użytkownika. Aby sprawdzić, czy opcja
TERMjest ustawiona, uruchom komendęcat /proc/<pid>/environ, gdzie<pid>jest identyfikatorem danego procesu Python .Jeśli należy ustawić parametr
TERM, a proces musi być instrumentowany, należy rozważyć zastosowanie alternatywnych metod instrumentacji, takich jak Instana AutoTrace WebHook lub Aktywowanie bez zmian kodu.Zapisz zgłoszenie problemu.
Jeśli sprawdzono poprawność każdego z kroków, a proces Python nadal nie jest wyświetlany na panelu kontrolnym Instana, zapisz zgłoszenie.
Zgłoszenie wsparcia powinno zawierać:
- Szczegóły środowiska; platforma, wersja Python , używane środowiska
- Podsumowanie wszystkich powyższych operacji sprawdzania poprawności.
Brakujące dane śledzenia z aplikacji Python
Upewnij się, że używane środowiska i biblioteki są obsługiwane, odwołując się do strony Obsługiwane wersje .
Upewnij się, że proces aplikacji jest wyświetlany w panelu kontrolnym Instana pod danym hostem.
Jeśli aplikacja nie jest wyświetlana w panelu kontrolnym Instana, należy zapoznać się z poprzednią sekcją.
Ustaw środowisko
INSTANA_DEBUG=truedla procesu aplikacji Python i zrestartuj proces.Po ustawieniu tej zmiennej środowiskowej powinny zostać wyświetlone dane wyjściowe dziennika z procesu aplikacji Python podobne do następujących:
DEBUG instana: initializing agent INFO instana: Stan is on the scene. Starting Instana instrumentation version: 1.22.1 DEBUG instana: initializing fsm DEBUG instana: Instrumenting asyncio DEBUG instana: Instrumenting aiohttp client DEBUG instana: Instrumenting aiohttp server DEBUG instana: Instrumenting asynqp DEBUG instana: Instrumenting cassandra DEBUG instana: Instrumenting couchbase DEBUG instana: Instrumenting flask (without blinker support) DEBUG instana: Instrumenting gevent: gevent not detected or loaded. Nothing done. DEBUG instana: Instrumenting grpcio DEBUG instana: Instrumenting tornado client DEBUG instana: Instrumenting tornado server DEBUG instana: Instrumenting logging DEBUG instana: Instrumenting pymysql DEBUG instana: Instrumenting psycopg2 DEBUG instana: Instrumenting redis DEBUG instana: Instrumenting sqlalchemy DEBUG instana: Instrumenting suds-jurko DEBUG instana: Instrumenting urllib3 DEBUG instana: Instrumenting django DEBUG instana: Instana host agent found on localhost:42699 DEBUG instana: Attempting to make an announcement to the agent on localhost:42699 DEBUG instana: Spawning metric & span reporting threads DEBUG instana: -> Metric reporting thread is now alive DEBUG instana: -> Span reporting thread is now alive DEBUG instana: Announced pid: 34287 (true pid: 34287). Waiting for Agent Ready... DEBUG instana: Instrumenting pymongo DEBUG instana: uwsgi hooks: decorators not available: likely not running under uWSGI INFO instana: Instana host agent available. We're in business. Announced pid: 34287 (true pid: 34287) DEBUG instana: Sending process snapshot dataUpewnij się, że oczekiwane komponenty znajdują się na tej liście dla poprawnej widoczności.
Sprawdź nagłówki kontekstu żądania w nagłówkach odpowiedzi
Aby sprawdzić nagłówki odpowiedzi zwrócone z aplikacji, należy wysłać do aplikacji żądanie przy użyciu komendy
curllubwget.Na przykład użycie opcji
-idlacurlspowoduje wytworzenie nagłówków odpowiedzi:curl -i http://127.0.0.1:8000/ HTTP/1.1 200 OK Date: Wed, 10 Jun 2020 08:55:25 GMT Server: WSGIServer/0.2 CPython/3.6.9 Content-Type: text/html; charset=utf-8 X-Instana-T: 495b8301e86286c4 X-Instana-S: 495b8301e86286c4 X-Instana-L: 1 Server-Timing: intid;desc=495b8301e86286c4 Connection: closeW danych wyjściowych powinny być wyświetlane nagłówki
X-Instana-T,X-Instana-SiX-Instana-L.Jeśli te nagłówki zostaną wyświetlone w danych wyjściowych, można wyszukać konkretne dane śledzenia w programie Query Analyze, używając filtru
trace.id equals 495b8301e86286c4przy założeniu, że używane okno czasowe obejmuje okres, w którym żądanie zostało wykonane.Zapisz zgłoszenie obsługi
Jeśli uruchomione jest jedno z obsługiwanych środowisk lub komponentów, a nagłówki odpowiedzi X-Instana-T, X-Instana-Si X-Instana-L z poprzedniego kroku nie są wyświetlane, należy umieścić w pliku zgłoszenie obsługi. ` ` `
Dołącz następujące elementy do zgłoszenia problemu:
- Aplikacja
requirements.txtlub lista używanych pakietów Python (dane wyjściowe zpip list) - Odsyłacz panelu kontrolnego do obiektu aplikacji z kroku #2
- Dane wyjściowe z kroku #3
- Dane wyjściowe z kroku #4
Śledzenie powoduje awarię procesu Python z komunikatem o nieuruchomieniu nowego wątku
Jeśli aplikacja Python uległa awarii w wyniku śledzenia, a w dziennikach aplikacji pojawia się komunikat RuntimeError: can't start new thread , najbardziej prawdopodobną przyczyną jest konieczność przyznania jej uprawnień. Więcej informacji na temat śledzenia i uprawnień do uruchamiania wątków zawiera sekcja Śledzenie uwag i ograniczeń.
AutoTrace powoduje awarie procesu Python
- Zapisz zgłoszenie obsługi
Jeśli opcja AutoTrace powoduje awarię procesu Python , należy umieścić w pliku zgłoszenie.
Zaktualizuj host agenta Instana
configuration.yaml, aby zmodyfikować zachowanie funkcji AutoTrace .Ta strona dokumentacji wyjaśnia, w jaki sposób skonfigurować program Python AutoTrace. Dzięki temu można wykluczyć proces powodujący awarię lub całkowicie wyłączyć opcję AutoTrace . Może to działać jako tymczasowe obejście do czasu zidentyfikowania i usunięcia podstawowej przyczyny awarii.
Użyj metody instalacji ręcznej
W tym czasie można również użyć metody instalacji ręcznej dla widoczności Python .
AUTOWRAPT_BOOTSTRAP, gevent & RecursionError
Program gevent monkey poprawia wiele standardowych bibliotek w języku Python i jednym z wymagań programu geventjest to, że jest to wykonywane tak szybko, jak to możliwe w procesie startowym.
Jeśli używana jest metoda instalacji Aktywowanie bez zmian kodu (ze zmienną środowiskową AUTOWRAPT_BOOTSTRAP ) i pakiet gevent , mogą wystąpić błędy, takie jak:
RecursionError: maximum recursion depth exceeded while calling a Python object
[Previous line repeated 212 more times]
super(SSLContext, SSLContext).options.__set__(self, value)
Dzieje się tak, ponieważ autowrapt ładuje pakiet instana Python przed wszystkimi innymi pakietami (nawet gevent).
W takim przypadku zaleca się przeprowadzenie migracji do środowiska Python AutoTrace lub przełączenie na metodę instalacji ręcznej (przez dodanie do kodu parametru import instana ).
"Nie powiodło się zainstalowanie pakietu Instana Python w pliku /tmp/.instana/python"
Taka sytuacja może wystąpić w przypadku użycia nieaktualnego AutoTracing agenta hosta z różnych powodów. Aby zdiagnozować:
- Włącz
DEBUGpoziom rejestrowania agenta , aby uzyskać szczegółowe informacje na temat niepowodzenia. - Jeśli agent działa bezpośrednio na hoście (nie w kontenerze), upewnij się, że komenda
pipsystemu została zaktualizowana za pomocą komendypip install -U pip. Niektóre wczesne wersje pip są znane powodować problemy w pewnych okolicznościach.
Migracja na Instana AutoTrace WebHook
Usługa Instana AutoTrace WebHook jest obecnie obsługiwaną metodą automatycznej instrumentacji aplikacji Python monitorowanych przez Instana.
Aby w pełni przeprowadzić migrację do produktu AutoTrace WebHook, należy usunąć z aplikacji następujące elementy:
Pakiet Instana Python
Instana AutoTrace WebHook niezależnie zarządza pakietem Instana Python dla aplikacji. Nie ma potrzeby, aby użytkownik lub organizacja instalowała go ręcznie.
Upewnij się, że pakiet
instanaPython został usunięty zrequirements.txt,Pipfilelubvirtualenv.Uwaga: Jeśli wykonywane są wywołania funkcji API OpenTracing , należy jawnie zaimportować plik
opentracingi upewnić się, że wywołania są wykonywane względem tego pakietu (np.opentracing.tracer.start_active_span). Program Instana nadal będzie otrzymywać wyniki śledzenia.Usuń zmienną środowiskową AUTOWRAPT_BOOTSTRAP
Ta zmienna środowiskowa jest używana do ładowania pakietu Instana Python bez konieczności wprowadzania zmian w kodzie. W przypadku Instana AutoTrace WebHooknie jest to już potrzebne.
Usuń wszystkie wywołania
import instanaPython AutoTrace automatycznie zastosuje pakiet Instana Python do aplikacji Python . Ręczne importowanie pakietu Instana Python może zostać usunięte.