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

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

  1. 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

  1. 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

  1. 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 pip lub pip3 dostę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)

Obszary problemów ogólnych

Python Proces nie jest wyświetlany na panelu kontrolnym

  1. 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.

  2. 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).

  3. 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.

  4. Sprawdź, czy pakiet Instana Python jest zainstalowany i dostępny dla aplikacji.

    Poprawność tę można sprawdzić, sprawdzając plik instana w pliku Python requirements.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.

  5. 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ą jak instana==x.x.x. Program pip list zapisuje również numery wersji na wygenerowanej liście.

  6. 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.x

    Jeśli tego nie ma, bardzo prawdopodobne jest, że pakiet nie został zainstalowany lub nie wykonano kroków instalacji ręcznej.

  7. Włącz dane wyjściowe debugowania i ponownie sprawdź dzienniki aplikacji lub kontenera.

    Ustaw zmienną środowiskową INSTANA_DEBUG=true dla 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.

  8. 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.py
    

    Należ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.

  9. 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ą TERM lub są skonfigurowane w sekcji excludes konfiguracji agenta.

    Zwykle ta wartość jest ustawiana tylko podczas uruchamiania procesu Python z terminalu przyłączonego do aktywnej sesji użytkownika. Aby sprawdzić, czy opcja TERM jest 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.

  10. 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ć:

  1. Szczegóły środowiska; platforma, wersja Python , używane środowiska
  2. Podsumowanie wszystkich powyższych operacji sprawdzania poprawności.

Brakujące dane śledzenia z aplikacji Python

  1. Upewnij się, że używane środowiska i biblioteki są obsługiwane, odwołując się do strony Obsługiwane wersje .

  2. 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ą.

  3. Ustaw środowisko INSTANA_DEBUG=true dla 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 data
    

    Upewnij się, że oczekiwane komponenty znajdują się na tej liście dla poprawnej widoczności.

  4. 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 curl lub wget .

    Na przykład użycie opcji -i dla curl spowoduje 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: close
    

    W danych wyjściowych powinny być wyświetlane nagłówki X-Instana-T, X-Instana-S i X-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 495b8301e86286c4 przy założeniu, że używane okno czasowe obejmuje okres, w którym żądanie zostało wykonane.

  5. 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:

  1. Aplikacja requirements.txt lub lista używanych pakietów Python (dane wyjściowe z pip list)
  2. Odsyłacz panelu kontrolnego do obiektu aplikacji z kroku #2
  3. Dane wyjściowe z kroku #3
  4. 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

  1. Zapisz zgłoszenie obsługi

Jeśli opcja AutoTrace powoduje awarię procesu Python , należy umieścić w pliku zgłoszenie.

  1. 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.

  2. 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ć:

  1. Włącz DEBUG poziom rejestrowania agenta , aby uzyskać szczegółowe informacje na temat niepowodzenia.
  2. Jeśli agent działa bezpośrednio na hoście (nie w kontenerze), upewnij się, że komenda pip systemu została zaktualizowana za pomocą komendy pip 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:

  1. 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 instana Python został usunięty z requirements.txt, Pipfile lub virtualenv.

    Uwaga: Jeśli wykonywane są wywołania funkcji API OpenTracing , należy jawnie zaimportować plik opentracing i 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.

  2. 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.

  3. Usuń wszystkie wywołania import instana

    Python AutoTrace automatycznie zastosuje pakiet Instana Python do aplikacji Python . Ręczne importowanie pakietu Instana Python może zostać usunięte.

Patrz także