React Native-Überwachungs-API
Erfahren Sie, wie Sie die React Native API nutzen können, um Ihre React Native-Anwendungen mit Instana zu überwachen und zu instrumentieren. Dies ermöglicht Echtzeitbeobachtung und Leistungseinblicke für hybride mobile Anwendungen.
React Native-Agenten-API von Instana
Sie können den Instana React Native Agent über die Methoden der Klasse Instana
verwenden, die hier erklärt werden.
Der React Native Agent unterstützt TypeScript ab Version 2.0.6.
Einrichtung
Initialisieren Sie Instana in Ihrer Klasse App
componentDidMount()
:
export default class App extends Component {
componentDidMount() {
Instana.setup(YOUR_INSTANA_APP_KEY, YOUR_INSTANA_REPORTING_URL, null);
// Alternatively with configuration options
Instana.setup(YOUR_INSTANA_APP_KEY, YOUR_INSTANA_REPORTING_URL, {'collectionEnabled': false});
}
}
Der folgende Code ist eine TypeScript :
setup(your_instana_app_key: string, your_instana_app_reportingUrl: string, options?: Object): void;
setup(your_instana_app_key: string, your_instana_app_reportingUrl: string, {collectionEnabled: boolean}): void;
Setup-Parameter
In der folgenden Tabelle sind die Einrichtungsparameter aufgeführt:
Parameter
|
Beschreibung |
---|---|
key (String ) |
Instana-Überwachungskonfigurationsschlüssel |
reportingURL (String ) |
Die URL, die auf die Instana-Instanz verweist, an die die Überwachungsdaten gesendet werden sollen |
Sitzungs-ID
Jede Instana-Agentinstanz hat einen eindeutigen Sitzungsbezeichner, den Sie für andere Zwecke in Ihrer Anwendung verwenden können.
static getSessionID()
Der folgende Code ist eine TypeScript :
getSessionID(): Promise<string>;
Parameter zur Sitzungskennung
Gibt Folgendes zurück: Promise(String)
Beispiel für einen Sitzungsidentifikator
var sessionID = await Instana.getSessionID();
Automatische HTTP-Überwachung
Der Instana-Agent bietet eine automatische Überwachung von HTTP.
Ansichten
Instana kann Mobile-App-Einsichten in logische Ansichten segmentieren. Sie können den Namen der Ansicht mit Hilfe der Methode Instana.setView(String)
festlegen. Die Ansicht wird dann mit allen überwachten Baken verknüpft, bis die Ansicht durch einen erneuten Aufruf von setView
geändert wird.
Verwenden Sie keine technischen oder generischen Namen wie Class (z. B. WebViewActivity
), um Ansichten zu definieren. Verwenden Sie stattdessen lesbare Namen für die Ansichten (z. B. product detail page
oder payment selection
). Durch die Fokussierung auf die Nutzererfahrungen können auch Teammitglieder, die keine intime Kenntnis der Codebasis haben, die gewonnenen Erkenntnisse verstehen.
Instana.setView(String)
wird aufgerufen, wenn dem Benutzer ein Bildschirm präsentiert wird, und nicht, wenn ein Bildschirm erstellt wird (wie bei einem Fragment, das einmal erstellt, aber mehrmals angezeigt werden kann). Wenn Sie den Namen der Ansicht festlegen, kann Instana seitenübergänge zusätzlich zum Laden der Seite verfolgen.
static setView(String name)
Der folgende Code ist eine TypeScript :
setView(name: string): void;
Ansichten Parameter
In der folgenden Tabelle sind die Parameter der Ansichten aufgeführt:
Parameter
|
Beschreibung |
---|---|
name (String ) |
Der Name der Ansicht. |
Beispiel für Ansichten
Instana.setView('Webview: FitBit authorization');
Benutzer identifizieren
Benutzerspezifische Informationen können optional mit den an Instana übermittelten Daten gesendet werden. Diese Informationen können dann verwendet werden, um weitere Funktionen freizuschalten, wie z. B.:
- Berechnen Sie die Anzahl der von Fehlern betroffenen Benutzer
- Daten für bestimmte Benutzer filtern
- Sehen Sie, welcher Benutzer eine Ansichtsänderung oder eine HTTP initiiert hat
Instana verknüpft standardmäßig keine benutzeridentifizierbaren Informationen mit Beacons. Sie müssen sich der jeweiligen Datenschutzgesetze bewusst sein. Identifizieren Sie Benutzer durch eine Benutzer-ID. Für Instana ist es eine transparente String
, die nur zur Berechnung bestimmter Metriken verwendet wird. userName
und userEmail
können auch verwendet werden, um Zugang zu mehr Filtern und einer besseren Darstellung der Benutzerinformationen zu haben.
In Fällen, in denen Sie mit anonymen Benutzern arbeiten und daher keinen Zugang zu Benutzer-IDs haben, können Sie alternativ Sitzungs-IDs verwenden. Sitzungs-IDs sind nicht so hilfreich wie Benutzer-IDs, wenn Sie Daten filtern, aber sie sind ein guter Indikator für die Berechnung von Metriken für betroffene oder eindeutige Benutzer. Legen Sie einen Benutzernamen wie Anonymous
fest, um eine klare Unterscheidung zwischen authentifizierten und nicht authentifizierten Benutzern zu haben. Sitzungs-IDs können sensible Daten sein (je nach verwendetem Framework oder Plattform). Erwägen Sie das Hashing von Sitzungs-IDs, um die Übertragung von Daten an Instana zu vermeiden, die Zugriff gewähren können.
Daten, die bereits an den Server von Instana übermittelt wurden, können nicht mehr rückwirkend aktualisiert werden. Aus diesem Grund ist es wichtig, diese API so früh wie möglich im Startprozess der App aufzurufen.
static setUserID(String ID)
static setUserName(String email)
static setUserEmail(String name)
Der folgende Code ist eine TypeScript :
setUserID(id: string): void;
setUserName(name: string): void;
setUserEmail(email: string): void;
Benutzerparameter
In der folgenden Tabelle sind die Benutzerparameter aufgeführt:
Parameter
|
Beschreibung |
---|---|
ID (String ) |
Eine Kennung für den Benutzer. |
email (String ) |
Die E-Mail-Adresse des Benutzers. |
name (String ) |
Der Name des Benutzers. |
Benutzerbeispiel
export default class App extends Component {
componentDidMount() {
Instana.setup(YOUR_INSTANA_APP_KEY, YOUR_INSTANA_REPORTING_URL);
Instana.setUserID('1234567890');
Instana.setUserEmail('instana@example.com');
Instana.setUserName('instana react-native agent demo');
}
}
Metadaten
An alle Daten, die an Instana übermittelt werden, können beliebige Metadaten angehängt werden. Sie können damit UI-Konfigurationswerte, Einstellungen, Funktionsflags und jeden zusätzlichen Kontext verfolgen, der für die Analyse nützlich sein könnte.
Instana unterstützt derzeit bis zu 50 Meta-Schlüssel-Wert-Paare.
static setMeta(String key, String value)
Der folgende Code ist eine TypeScript :
setMeta(key: string, value: string): void;
Metadaten-Parameter
In der folgenden Tabelle sind die Metadatenparameter aufgeführt:
Parameter
|
Beschreibung |
---|---|
value (String ) |
Der Wert (value ) des Schlüsselwertpaares, das Sie als Metadaten hinzufügen möchten. |
key (String ) |
Der Wert (key ) des Schlüsselwertpaares, das Sie als Metadaten hinzufügen möchten. |
Beispiel für Metadaten
export default class App extends Component {
componentDidMount() {
Instana.setMeta('randomKey1', 'randomValue1');
Instana.setMeta('randomKey2', 'randomValue2');
}
}
Angepasste Ereignisse melden
Benutzerdefinierte Ereignisse ermöglichen die Berichterstattung über nicht standardmäßige Aktivitäten, wichtige Interaktionen und benutzerdefinierte Zeitpunkte an Instana. Es kann besonders hilfreich sein, wenn Sie nicht abgefangene Fehler (Breadcrumbs) analysieren und weitere Leistungsmetriken verfolgen wollen.
static reportEvent(String eventName, {
startTime: Number startTime,
duration: Number duration,
viewName: String viewName,
backendTraceId: String backendTraceId,
meta: Map meta
})
Der folgende Code ist eine TypeScript :
reportEvent(eventName: string, options?: {
startTime?: number;
duration?: number;
viewName?: string;
meta?: Map<string, string>;
backendTracingId?: string;
customMetric?: number;
}): void;
Parameter für benutzerdefinierte Ereignisse
In der folgenden Tabelle sind die Parameter für benutzerdefinierte Ereignisse aufgeführt:
Parameter
|
Beschreibung |
---|---|
eventName (String ) |
Legt fest, welche Art von Ereignis, das in Ihrer Anwendung eintritt, zur Übertragung eines benutzerdefinierten Beacons führen soll |
startTime ( Number , optional) |
Eine Zeitmarke in Millisekunden seit der Epoche, die angibt, zu welchem Zeitpunkt das Ereignis begonnen hat. Wechselt zurück zu now() - duration , wenn nicht definiert. |
duration ( Number , optional) |
Die Dauer in Millisekunden, wie lange das Ereignis dauerte. Der Standardwert ist null. |
viewName ( String , optional) |
Eine Zeichenkette, die Sie übergeben können, um die Anfrage in einer Ansicht zu gruppieren. Wenn Sie explizit nil senden, wird der viewName ignoriert. Alternativ können Sie auch den Parameter viewName weglassen, um den aktuellen Namen der Ansicht zu verwenden, den Sie unter setView(String name) festgelegt haben.) |
backendTracingId ( String , optional) |
Kennung zur Erstellung eines Backend-Trace für dieses Ereignis |
meta ( object , optional) |
Ein JavaScript mit String-Werten, das verwendet werden kann, um Metadaten an Instana nur für dieses einzelne Ereignis zu senden. Im Gegensatz zur Verwendung der Metadaten-API werden diese Metadaten nicht in nachfolgende Beaconnachrichten einbezogen. |
customMetric ( double , optional) |
Benutzerdefinierte metrische Daten mit einer Genauigkeit von bis zu 4 Dezimalstellen. Nehmen Sie keine sensiblen Informationen in diese Metrik auf. |
Beispiel für benutzerdefinierte Ereignisse
Instana.reportEvent('myCustomEvent', {
startTime: Date.now() - 500,
duration: 300,
viewName: 'overridenViewName',
backendTracingId: '31ab91fc1092',
meta: {
state: 'running'
},
customMetric: 123.4567
});
URLs aus der Überwachung ausschließen
URLs können ignoriert werden, indem man reguläre Ausdrücke angibt oder sie der Liste ignoreURLs
hinzufügt. Diese Funktion ist nützlich, wenn Sie alle HTTP ignorieren möchten, die sensible Daten wie z. B. ein Kennwort enthalten.
Der Agent muss jede Zeichenkette, die Sie der Methode setIgnoreURLsByRegex
übergeben, in einen nativen Regex-Ausdruck für jede unterstützte Plattform umwandeln. Sie können Ablehnungen von Zusagen verfolgen, die Sie über jedes Problem informieren, auf das der Agent gestoßen ist, während Sie Ihre Eingaben interpretiert haben.
static setIgnoreURLsByRegex([]String regexArray)
Der folgende Code ist eine TypeScript :
setIgnoreURLsByRegex(regexArray: Array<string>): Promise<any>;
URL ausschließen
In der folgenden Tabelle sind die auszuschließenden URL aufgeführt:
Parameter
|
Beschreibung |
---|---|
regexArray |
Ein Array von String -Objekten, der das Regex enthält, das mit den URLs übereinstimmt, die Sie ignorieren möchten. |
Rückgabe: Promise(Boolean)
. Bei Ablehnung enthält die Ausnahme eine Liste aller Parameter, die nicht in native Regex konvertiert werden konnten.
URL ausschließen
export default class App extends Component {
componentDidMount() {
setIgnoreURLsByRegex();
async function setIgnoreURLsByRegex() {
try {
await Instana.setIgnoreURLsByRegex(["http:\/\/localhost:8081.*", "/.*([&?])password=.*/i"]);
} catch (e) {
console.warn(e);
}
}
}
}
Das Beispiel ignoriert alle Abfragen an den Metro-Bundler und alle URLs, die ein Kennwort in der Abfrage enthalten.
URL redigieren
Abfrageparameter in den gesammelten URLs können sensible Daten enthalten. Daher unterstützt der Instana-Agent die Angabe von Regex-Mustern für Abfrageparameterschlüssel, deren Werte geschwärzt werden müssen. Jeder Wert, der unkenntlich gemacht werden muss, wird durch die Zeichenfolge <redacted>
ersetzt. Die Redigierung erfolgt innerhalb des Instana-Agenten, bevor der Agent an den Instana-Server berichtet. Daher erreichen die Geheimnisse nicht die Instana-Server zur Verarbeitung und stehen nicht für die Analyse in der Instana-Benutzeroberfläche oder den Abruf über die Instana-API zur Verfügung.
Standardmäßig ist der Instana-Agent mit einer Liste von drei Regex-Mustern konfiguriert, um Abfrageparameterwerte für die Schlüssel "password", "key" und "secret" automatisch zu redigieren.
static setRedactHTTPQueryByRegex([]String regexArray)
Der folgende Code ist eine TypeScript :
setRedactHTTPQueryByRegex(regexArray: Array<string>): Promise<any>;
URL redigieren
In der folgenden Tabelle sind die URL aufgeführt:
Parameter
|
Beschreibung |
---|---|
regex ([NSRegularExpression] ) |
Ein Array von String , das den Schlüsseln für die Werte entspricht, die Sie schwärzen möchten. |
Beispiel für eine redigierte URL
export default class App extends Component {
componentDidMount() {
setRedactHTTPQueryByRegex();
async function setRedactHTTPQueryByRegex() {
try {
await Instana.setRedactHTTPQueryByRegex(["pass(word|wort)"]);
} catch (e) {
console.warn(e);
}
}
}
}
In diesem Beispiel werden die Werte für die HTTP "password" oder "passwort" unkenntlich gemacht.
Die erfasste URL https://example.com/accounts/?password=123&passwort=459
wird gesammelt und als https://example.com/accounts/?password=<redacted>&passwort=<redacted>
angezeigt.
Der Instana-Agent unterstützt nicht die Behandlung von Pfadparametern (/account/<account id>/status
) oder Matrixparametern (/account;accountId=<account id>/status
) als Geheimnisse.
Erfassen von HTTP
Optional kann der Instana-Agent die HTTP jeder verfolgten Anfrage und Antwort erfassen.
Es kann eine Liste von Regex-Mustern definiert werden, um zu bestimmen, welche Kopfzeilen erfasst werden sollen.
Wenn derselbe Kopfzeilenname sowohl in einer Anfrage als auch in ihrer Antwort vorhanden ist, wird nur der Kopfzeilenwert der Antwort berücksichtigt.
static setCaptureHeadersByRegex([]String regexArray)
Der folgende Code ist eine TypeScript :
setCaptureHeadersByRegex(regexArray: Array<string>): Promise<any>;
Beispiel für die Erfassung von HTTP
export default class App extends Component {
componentDidMount() {
setCaptureHeadersByRegex();
async function setCaptureHeadersByRegex() {
try {
await Instana.setCaptureHeadersByRegex(["cache-control", "etag"]);
} catch (e) {
console.warn(e);
}
}
}
}
Langsamer Sendebetrieb
Standardmäßig ist die Funktion "Langsames Senden" deaktiviert. Falls erforderlich, können Sie diese Funktion aktivieren.
Wenn das Senden eines Beacons fehlschlägt, versucht der Instana-Agent standardmäßig, das Beacon erneut zu senden, bis das Beacon erfolgreich gesendet wurde. Allerdings funktioniert dieses Verhalten bei einigen Mobilfunknetzen nicht gut. Wenn Sie die Funktion "Langsames Senden" aktivieren, können Sie das Sendeintervall der Bake auf den Zeitwert ändern, der dem Parameter slowSendInterval
parameter zugeordnet ist. Jede Sendung besteht aus nur einer Bake anstelle eines Stapels (maximal 100 Baken in einem Stapel). Der Instana-Agent bleibt im langsamen Sendemodus, bis ein Beacon erfolgreich gesendet wurde.
Der gültige Zeitbereich für den Parameter slowSendInterval
parameter beträgt 2-3600 Sekunden.
Der folgende Code ist eine TypeScript :
setup(key: string, reportingUrl: string, {slowSendInterval: number}): void;
Beispiel für einen langsamen Sendemodus
export default class App extends Component {
componentDidMount() {
var options = {}
options.slowSendInterval = 120.0;
Instana.setup('<your key>', '<your reporting url>', options);
}
}
ID der Benutzersitzung
Standardmäßig wird die Benutzersitzung nachverfolgt und ein Universally Unique Identifier (UUID) nach dem Zufallsprinzip erzeugt. Diese ID bleibt unverändert, solange die App installiert ist. Sie können die Verfallszeit der Benutzersitzungsnummer mit dem usiRefreshTimeIntervalInHrs
parameter.
Die folgenden Parameterwerte geben den Status der Benutzersitzungsnummer an:
Negative Zahl: Dieser Wert zeigt an, dass die Benutzersitzungs-ID niemals abläuft. Der Standardwert ist -1.
Positive Zahl: Dieser Wert bedeutet, dass die Benutzersitzungs-ID nach der eingestellten Zeit aufgefrischt wird. Eine neue UUID wird erzeugt und verwendet.
Null: Dieser mit 0.0 bezeichnete Wert bedeutet, dass die Benutzersitzungsnummer deaktiviert ist.
Der folgende Code ist eine TypeScript :
setup(key: string, reportingUrl: string, {usiRefreshTimeIntervalInHrs: number}): void;
Beispiel einer Benutzersitzungs-ID
export default class App extends Component {
componentDidMount() {
var options = {}
options.usiRefreshTimeIntervalInHrs = 24.0;
Instana.setup('<your key>', '<your reporting url>', options);
}
}
Begrenzte Anzahl von Baken
Mit diesem Parameter können Sie die Grenzwerte für die Anzahl der Beacons, die innerhalb eines bestimmten Zeitintervalls gesendet werden können, anpassen. In der folgenden Tabelle sind die verfügbaren Optionen und die entsprechenden Grenzwerte für Baken aufgeführt. Standardmäßig ist 0
(DEFAULT_LIMITS
) ausgewählt.
Verfügbare Grenzwerte
|
Option 'counts' |
---|---|
0 (DEFAULT_LIMITS ) |
- 500 Baken pro 5 Minuten - 20 Baken pro 10 Sekunden |
1 (MID_LIMITS ) |
- 1000 Baken pro 5 Minuten - 40 Baken pro 10 Sekunden |
2 (MAX_LIMITS ) |
- 2500 Baken pro 5 Minuten - 100 Baken pro 10 Sekunden |
Beispiel
class App extends Component {
componentDidMount() {
let options = {};
options.suspendReporting = Instana.androidSuspendReport.LOW_BATTERY_OR_CELLULAR_CONNECTION;
options.rateLimits = 2;
Instana.setup('<your key>', '<your reporting url>', options);
}
}
Backend-Korrelation mit W3CHeaders
Wenn die enableW3CHeaders
(Boolean
, optional) aktiviert ist, schließt der react-native Agent die Header traceparent
und tracestate
in alle überwachten API-Aufrufe ein. Diese Header ermöglichen eine Backend-Korrelation, selbst wenn das Backend nicht mit dem Instana-Agenten instrumentiert ist. In solchen Fällen müssen Sie ein kompatibles Überwachungstool (z. B. OpenTelemetry ) für den Export von Backend-Trace-Details in das Instana-Backend verwenden. Wenn diese Option deaktiviert ist, ist eine Backend-Korrelation nur möglich, wenn das Backend auch vom Instana-Agenten überwacht wird.
Der Standardwert ist false
.
Beispiel
class App extends Component {
componentDidMount() {
let options = {};
options.enableW3CHeaders = true;
Instana.setup('<your key>', '<your reporting url>', options);
}
}