Aplikacje mobilne Monitoring

Instana obsługuje monitorowanie aplikacji mobilnych, analizując rzeczywiste czasy żądań URL, co pozwala uzyskać szczegółowe informacje na temat doświadczeń użytkowników aplikacji i uzyskać wgląd w ścieżki wywołań aplikacji. Rozwiązanie do monitorowania aplikacji Instana działa z użyciem agenta iOS/Android, który jest instalowany jako zależność od aplikacji mobilnych.

Monitorowanie użytkownika końcowego (EUM) lub monitorowanie użytkownika rzeczywistego (Real-User Monitoring-RUM) jest ważnym narzędziem umożliwiającym zrozumienie interakcji użytkownika z aplikacjami mobilnymi.

Instalacja

iOS

Aby zainstalować agenta iOS , należy użyć programu Swift Package Manager (przez Xcode) lub CocoaPods.

Wymagania

  • iOS 11 lub nowszy
  • swift 5.1 lub nowszy

Menedżer pakietów Swift

  1. Otwórz kod Xcode.
  2. Wybierz opcję Plik-> Pakiety Swift-> Dodaj zależność od pakietu-> Projekt Xcode.
  3. Wprowadź repozytorium produktu https://github.com/instana/iOSAgent .

CocoaPods

  1. W specyfikacji Podfile dodaj komendy:

    pod 'InstanaAgent'
    
  2. Aby pobrać zależności, uruchom plik pod install.

Konfiguracja produktu

Więcej informacji na temat procesu konfiguracji zawiera sekcja Interfejs API agenta systemuiOS.

Android

Agent dla systemu Android składa się z wtyczki Gradle i biblioteki SDK. Zastosuj wtyczkę do modułu aplikacji i dodaj pakiet SDK jako zależność.

Wymagania

  • Android 4.1+ (poziom interfejsu API 16 +)
  • Java 8 +
  • Gradle 7.3.3+
  • AndroidX
  • targetSdk 33 +

Uwaga: Aby w projekcie użyć agenta Gradle w wersji starszej niż 7.3.3 , należy użyć agenta systemu Android w wersji starszej niż 6.0.0.

Wtyczka Instana dla systemu Android

W pliku build.gradle na poziomie projektu dodaj następujący kod:

buildscript {
   repositories {
        google()
        mavenCentral()
    }
   dependencies {
      classpath "com.instana:android-agent-plugin:6.0.0"
    }
}

W pliku modułu (na poziomie aplikacji) Gradle (zwykle app/build.gradle) po zastosowaniu wtyczki com.android.application dodaj następujący kod:

apply plugin: 'com.android.application'
apply plugin: 'com.instana.android-agent-plugin'

Instana Android SDK

W pliku build.gradle na poziomie projektu dodaj następujący kod:

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

W pliku modułu (na poziomie aplikacji) Gradle (zwykle app/build.gradle) dodaj następujący kod:

dependencies {
    implementation 'com.instana:android-agent-runtime:6.0.0'
}

Zgodność środowiska Java 1.8

Uwaga: Ten krok należy wykonać, jeśli wartość parametru minSdkVersion jest niższa niż 24.

W pliku modułu (na poziomie aplikacji) Gradle (zwykle app/build.gradle) dodaj następujący kod:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Żądanie uprawnienia READ_PHONE_STATE (opcjonalne)

Gdy użytkownik uzyskuje dostęp do Internetu przez sieć komórkową, agent Instana może zgłosić konkretny typ sieci komórkowej.

Aby włączyć raportowanie typu sieci komórkowej, aplikacja musi mieć uprawnienie READ_PHONE_STATE . Więcej informacji na temat żądania uprawnień zawiera sekcja Request App Permissions w oficjalnej dokumentacji systemu Android.

Jeśli aplikacja nie żąda uprawnień lub jeśli użytkownik odmawia uprawnień, agent Instana nie zgłasza typu sieci komórkowej.

Podstawowe inicjowanie

W klasie, która rozszerza klasę Application, należy zastąpić wartości YOUR_REPORTING_URL i YOUR_APP_KEY wartościami konfiguracyjnymi, które znajdują się na panelu kontrolnym Instana:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = "YOUR_APP_KEY",
                reportingURL = "YOUR_REPORTING_URL"
            )
        )
    }
}

Użycie zaawansowane

Pełną listę opcji inicjowania, śledzenia widoku i innych opcji zawiera sekcja Interfejs API agenta systemu Android.

React Native

Agent Rreaguj rodzimy zapewnia obsługę zarówno platform Android, jak i iOS .

Wymagania

Patrz Instana React Native Agent (Instana React Native Agent).

Dodaj zależność

Uruchom następującą komendę w katalogu głównym projektu:

npm install @instana/react-native-agent --save

Podstawowe inicjowanie

W pliku klasy App.js zastąp wartości YOUR_INSTANA_APP_KEY i YOUR_INSTANA_REPORTING_URL wartościami konfiguracyjnymi, które znajdują się na panelu kontrolnym Instana:

export default class App extends Component {
  componentDidMount() {
    Instana.setup(YOUR_INSTANA_APP_KEY, YOUR_INSTANA_REPORTING_URL, null);
  }
}

Zalecenie

Aby zapobiec komunikowaniu się śledzenia agenta Instana z pakunkiem Metro, należy dodać parametr http://localhost:8081 do listy ignorowanych adresów URL:

Instana.setIgnoreURLsByRegex(['http://localhost:8081.*']);

iOS

Projekt powinien zawierać co najmniej jeden plik Swift (może być pusty).

Jeśli nie masz żadnych plików Swift, otwórz projekt Xcode w katalogu <YourReactNativeProject>/ios , a następnie dodaj pusty plik Swift. Pozwól Xcode utworzyć nagłówek mostu dla Ciebie.

Android

Użyj wtyczki Instana Android w wersji odpowiedniej dla Twojej wersji React Native:

  • Reaguj na rodzimą wersję 0.63.3 lub wcześniejszą: użyj wtyczki Instana dla systemu Android 1.5.3
  • Reaguj na rodzimą wersję 0.63.4 lub nowszą: użyj wtyczki Instana dla systemu Android 5.2.2

Aby włączyć automatyczne monitorowanie HTTP, wykonaj następujące kroki:

  1. W pliku /android/build.gradle dodaj następujący kod:

    buildscript {
        dependencies {
            classpath "com.instana:android-agent-plugin:$INSTANA_ANDROID_PLUGIN_VERSION"
        }
    }
    
  2. W pliku /android/app/build.gradle dodaj następujący kod:

    apply plugin: 'com.android.application'
    apply plugin: 'com.instana.android-agent-plugin'
    
Znane problemy
fetch (adres URL)

Jeśli aplikacja używa serwera fetch do obsługi żądań sieciowych, może wystąpić awaria aplikacji w czasie wykonywania, gdy używana jest baza danych fetch : No virtual method toString(Z)Ljava/lang/String;

Ten problem powinien zostać rozwiązany przez problemy z produktem React Native (27250 i 28425). W przypadku napotkania tego problemu można zastosować następujące obejście.

W pliku Gradle na poziomie modułu systemu Android (zwykle app/gradle.build) dodaj następujący kod:

dependencies {
    implementation "com.squareup.okhttp3:okhttp:4.3.1"
    implementation "com.squareup.okhttp3:okhttp-urlconnection:4.3.1"
}
Execution failed for task ':app:transformClassesWithDexBuilderForDevDebug'

Jeśli przeprowadzono aktualizację do React Native 0.63.4 z poprzedniej wersji, należy sprawdzić, czy

  • Wtyczka Instana dla systemu Android 4.5.3
  • Gradle 6.5: distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip w android/gradle/wrapper/gradle-wrapper.properties
  • Android Gradle 5.2.2: classpath("com.android.tools.build:gradle:4.1.0") w android/build.gradle

Użycie zaawansowane

Pełną listę opcji inicjowania, śledzenia widoku i innych opcji zawiera sekcja React Native agent API.

trzepotanie

Agent Flutter zapewnia obsługę zarówno platform Android, jak i iOS .

Uwaga: Agent Flutter nie udostępnia automatycznego śledzenia HTTP. Śledzenie HTTP musi być ręcznie skonfigurowane przez programistę (przykład znajduje się w tej dokumentacji).

Wymagania

  • Trzepotanie w wersji 1.20.0 lub nowszej
  • Wersja dart od 2.12.0 do 3.0.0

Dodawanie pakietu do aplikacji

Pakiet Flutter agenta Instana jest dostępny pod adresem pub.dev.

Aby dodać pakiet do aplikacji, wykonaj następujące kroki:

  1. Otwórz plik pubspec.yaml znajdujący się w folderze aplikacji, a następnie dodaj plik instana_agent: w katalogu dependencies.

  2. Zainstaluj pakiet, używając jednej z następujących metod:

    • Z poziomu konsoli uruchom komendę flutter pub get .
    • W programie Android Studio lub IntelliJ: kliknij opcję Pakiety pobierz na wstążce działania pubspec.yaml .
    • Z poziomu kodu VS: kliknij opcję Pobierz pakiety na wstążce działania produktupubspec.yaml .

Inicjowanie

Zaimportuj pakiet do swoich plików dart:

import 'package:instana_agent/instana_agent.dart';

W razie potrzeby zatrzymaj i zrestartuj aplikację.

Ustaw Instana tak szybko jak to możliwe. Na przykład w pliku initState()należy dodać następujący kod:

@override
  void initState() {
    super.initState();
    InstanaAgent.setup(key: 'YOUR-INSTANA-KEY', reportingUrl: 'YOUR-REPORTING_URL');
  }

Jeśli planowane jest budowanie dla systemu iOS, należy skonfigurować minimalną wersję platformy w pliku ${appFolder}/ios/Podspec , podając minimalną wartość 11.0.

Śledzenie zmian widoku

W dowolnym momencie po zainicjowaniu agenta Instana dodaj wpis InstanaAgent.setView('Home');:

import 'package:instana_agent/instana_agent.dart';

[...]

InstanaAgent.setView('Home');

Śledzenie żądań HTTP

W dowolnym momencie po zainicjowaniu agenta Instana uruchom przechwytywanie żądań HTTP:

import 'package:instana_agent/instana_agent.dart';

[...]

InstanaAgent.startCapture(url: 'https://example.com/success', method: 'GET').then((marker) => marker
    ..responseStatusCode = 200
    ..responseSizeBody = 1000
    ..responseSizeBodyDecoded = 2400
    ..finish());

Utwórz własne InstrumentedHttpClient rozszerzanie http.BaseClient , jak pokazano w poniższym przykładzie:

class _InstrumentedHttpClient extends BaseClient {
   _InstrumentedHttpClient(this._inner);

   final Client _inner;

   @override
   Future<StreamedResponse> send(BaseRequest request) async {
      final Marker marker = await InstanaAgent.startCapture(url: request.url.toString(), method: request.method);

      StreamedResponse response;
      try {
         response = await _inner.send(request);
         marker
            ..responseStatusCode = response.statusCode
            ..responseSizeBody = response.contentLength
            ..backendTracingID = BackendTracingIDParser.fromHeadersMap(response.headers);
      } finally {
         await marker.finish();
      }

      return response;
   }
}

class _MyAppState extends State<MyApp> {

   [...]

   Future<void> httpRequest() async {
      final _InstrumentedHttpClient httpClient = _InstrumentedHttpClient(Client());
      final Request request = Request("GET", Uri.parse("https://www.ibm.com/products/instana"));
      httpClient.send(request);
   }

   [...]
}

Panele kontrolne

Podsumowanie

Główny panel kontrolny podsumowuje wszystkie ważne dane w skrócie.

Przegląd panelu kontrolnego

Żądania HTTP

Dowiedz się, które żądania HTTP są powolne lub problematyczne. Wybór konkretnego źródła zapewnia wgląd w przepustowość i opóźnienie oraz szybkość błędów i analizę opóźnień.

Szczegóły żądania HTTP

Widoki

Często ważne jest wyodrębnienie konkretnych widoków i przeanalizowanie ich wydajności, co jest również świetnym sposobem na znalezienie widoku o największym natężeniu ruchu. Wybierz konkretny widok, aby wyświetlić wszystkie wielkości mierzone dla tego widoku.

Szczegóły

Inteligentne alerty

Wyświetl listę wszystkich skonfigurowanych alertów inteligentnych. Kliknij alert, aby wyświetlić jego konfigurację, zmodyfikować go lub wyświetlić jego historię podwersji. W razie potrzeby można również wyłączyć lub usunąć alert.

Więcej informacji na temat dodawania alertu zawiera sekcja Inteligentne alerty.

Analizy

Podobnie jak w przypadku funkcji analitycznych dla wywołań i śledzenia, widok analityczny dla danych monitorowania aplikacji mobilnych może być używany do odpowiadania na konkretne pytania, które nie są objęte wstępnie skonfigurowanymi panelami kontrolnymi. Pojedynczy fragment danych monitorowania aplikacji jest nazywany sygnalizator. Istnieje kilka typów sygnalizatorów, tj. żądania uruchomienia sesji i żądania HTTP. Dla wygody każdy typ sygnalizatora ma swoją główną pozycję nawigacji w widoku analizy.

Dane sygnalizacyjne mogą być używane do filtrowania i grupowania. Grupowanie domyślne zależy od wybranego typu sygnalizatora. Grupowanie można usunąć w celu sprawdzenia pojedynczego sygnalizatora, który jest zgodny z filtrami.

Szczegóły

Dane geograficzne

Instana odwzorowuje adresy IP użytkowników na dane geograficzne na podstawie bazy danych GeoLite2 , która jest dostarczana przez MaxMind. Adresy IP są gromadzone za pomocą odwrotnego serwera proxy. W przypadku instalacji z własnym hostem skonfiguruj adres URL punktu końcowego monitorowania użytkownika jako adres URL raportowania dla agenta. W przeciwnym razie adresy IP nie będą gromadzone, a powiązane informacje o szczegółach geograficznych nie będą dostępne.