React Native Monitoring API

Instana React Native 代理程式 API

下一節說明 Instana React Native 代理程式的用法。 Instana 的 React Native 代理程式可以透過這裡說明的 Instana 類別方法來使用。

設定

儘早在 App 類別 ' componentDidMount()中起始設定 Instana:

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});
  }
}

參數

參數
說明
key (String) Instana 監視配置金鑰
reportingURL (String) 指向要將監視資料傳送至其中的 Instana 實例的 URL

階段作業 ID

每一個 Instana 代理程式實例都有唯一的階段作業 ID ,您可以在應用程式中用於其他用途。

static getSessionID()

參數

傳回: Promise(String)

範例

var sessionID = await Instana.getSessionID();

自動 HTTP 監視

視圖

Instana 可以依邏輯視圖將行動式應用程式見解分段。 如果要這麼做,請透過 Instana.setView(String) 方法來設定視圖名稱。 然後,該視圖將與所有受監視信標相關聯,直到再次呼叫 setView 之後該視圖變更為止。

我們建議不要使用「類別」之類的技術或通用名稱 (例如 WebViewActivity) 以定義視圖。 建議使用視圖的可讀名稱,例如 product detail pagepayment selection。 聚焦於使用者體驗,可讓團隊成員在對程式碼庫沒有深入瞭解的情況下,瞭解所提供的見解。

附註: 當畫面呈現給使用者時,應該會呼叫 Instana.setView(String) ,而不是在建立畫面時 (例如在可以建立一次但顯示多次的「片段」中)。 設定視圖名稱也會啟用 Instana ,以追蹤 除了頁面載入之外的頁面轉移

static setView(String name)

參數

參數
說明
name (String) 視圖的名稱。

範例

Instana.setView('Webview: FitBit authorization');

識別使用者

使用者特定資訊可以選擇性地與傳輸至 Instana 的資料一起傳送。 然後可以使用此資訊來解除鎖定更多功能,例如:

  • 計算受錯誤影響的使用者數目,
  • 過濾特定使用者的資料
  • 以查看哪個使用者起始視圖變更或 HTTP 要求。

依預設, Instana 不會將任何使用者識別資訊與信標相關聯。 當您選擇這樣做時,請注意個別的資料保護法。 透過使用者 ID 來識別使用者。 對於 Instana ,它是透通的 String ,僅用於計算特定度量值。 userNameuserEmail 也可以用來存取更多過濾器,以及更愉快地呈現使用者資訊。

在您處理匿名使用者因而無權存取使用者 ID 的情況下,您可以選擇使用階段作業 ID。 當您過濾資料時,階段作業 ID 沒有使用者 ID 那麼有用,但它們是用來計算受影響或唯一使用者度量值的良好指標。 設定使用者名稱 (例如 Anonymous ) ,以明確區分已鑑別與未經鑑別的使用者。 階段作業 ID 可以是機密資料 (視使用的架構或平台而定)。 考量雜湊階段作業 ID ,以避免將資料傳輸至可授與存取權的 Instana。

請務必注意,已傳輸至 Instana 伺服器的資料無法追溯更新。 基於此原因,請務必在應用程式啟動程序中儘早呼叫此 API。

static setUserID(String id)
static setUserName(String email)
static setUserEmail(String name)

參數

參數
說明
id (String) 使用者的 ID。
email (String) 使用者的電子郵件位址。
name (String) 使用者的名稱。

範例

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');
  }
}

meta 資料

任意 meta 資料可以附加至傳輸至 Instana 的所有資料。 請考量使用它來追蹤使用者介面配置值、設定、特性旗標 ... 任何可能有助於分析的其他環境定義。

附註 :Instana 目前最多支援 50 個 meta 鍵值組。

static setMeta(String key, String value)

參數

參數
說明
value (String) 您要新增為 meta 資料之鍵值組的 value
key (String) 您要新增為 meta 資料之鍵值組的 key

範例

export default class App extends Component {
  componentDidMount() {
    Instana.setMeta('randomKey1', 'randomValue1');
    Instana.setMeta('randomKey2', 'randomValue2');
  }
}

報告自訂事件

自訂事件可讓您將非標準活動、重要互動及自訂計時報告給 Instana。 當您分析未捕捉的錯誤 (瀏覽途徑) 並追蹤更多效能度量值時,它特別有用。

static reportEvent(String eventName, {
  startTime: Number startTime,
  duration: Number duration,
  viewName: String viewName,
  backendTraceId: String backendTraceId,
  meta: Map meta
})

參數

參數
說明
eventName (String) 定義應用程式中發生的應導致傳輸自訂信標的事件類型。
startTime (Number,選用) 自 Epoch 以來的時間戳記 (毫秒) ,指出事件開始的時間。 未定義時回復為 now() - duration
duration (Number,選用) 事件持續多久的持續時間 (毫秒)。 預設值為零
viewName (String,選用) 您可以傳遞字串,將要求分組至視圖。 如果您明確傳送零,則會忽略 viewName 。 或者,您可以省略參數 viewName ,以使用您在 setView(String name)中設定的現行視圖名稱)
backendTracingId (String,選用) 用來建立此事件的後端追蹤的 ID。
meta (object,選用) 具有字串值的 JavaScript 物件,可用來僅針對此單一事件將 meta 資料傳送至 Instana。 相對於 meta 資料 API 的使用,此 meta 資料未包含在後續的引標中。

範例

Instana.reportEvent('myCustomEvent', {
  startTime: Date.now() - 500,
  duration: 300,
  viewName: 'overridenViewName',
  backendTracingId: '31ab91fc1092',
  meta: {
    state: 'running'
  }
});

從監視排除 URL

如果要忽略 URL ,請提供正規表示式,並將它們新增至 ignoreURLs 清單。 使用此功能的良好實務範例是忽略包含任何機密資料 (例如密碼) 的所有 HTTP 要求。

請記住,代理程式需要將您提供給 setIgnoreURLsByRegex 方法的每一個字串轉換為每一個受支援平台的原生正規表示式。 我們強烈鼓勵您追蹤任何 Promise 拒絕,這會通知您代理程式在解譯您的輸入時所遇到的任何問題。

static setIgnoreURLsByRegex([]String regexArray)

參數

參數
說明
regexArray String 物件的陣列,其中包含符合您要忽略之 URL 的正規表示式。

傳回: Promise(Boolean)。 如果拒絕,異常狀況會包含無法轉換成原生正規表示式的所有參數清單

範例

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);
      }
    }
  }

此範例會忽略 Metro bundler 的所有查詢,以及在查詢中包含密碼的所有 URL。

編寫 URL 查詢參數

所收集 URL 中的查詢參數可能包含機密資料。 因此, Instana 代理程式支援為需要編寫其值的查詢參數索引鍵指定 regex 型樣。 任何需要編寫的值都將取代為字串 <redacted>。 在 Instana 代理程式向 Instana 伺服器報告之前,會先在 Instana 代理程式內進行編寫。 因此,密鑰將無法到達 Instana 伺服器進行處理,且無法在 Instana 使用者介面中進行分析或使用 Instana API 進行擷取。

依預設, Instana 代理程式會配置三個正規表示式型樣的清單,以自動編寫索引鍵 "password"、"key" 及 "secret" 的查詢參數值。

static setRedactHTTPQueryByRegex([]String regexArray)
```#### <a href="#parameters-7"><img src="../ecosystem/icons2/anchor.svg" width="15px" height="15px"></img></a> Parameters
{: #parameters-7}

| <div style="width:230px">Parameter</div>                              | Description                               |
| --------------------------------- | --------------------------------------------- |
| `regex ` (`[NSRegularExpression]`)  | An array of `String ` matching the keys for the values that you want to redact. |

#### <a href="#example-6"><img src="../ecosystem/icons2/anchor.svg" width="15px" height="15px"></img></a> Example {: #example-6}
```javascript {: codeblock}
export default class App extends Component {
  componentDidMount() {
    setRedactHTTPQueryByRegex();
    async function setRedactHTTPQueryByRegex() {
      try {
        await Instana.setRedactHTTPQueryByRegex(["pass(word|wort)"]);
      } catch (e) {
        console.warn(e);
      }
    }
  }

此範例會編寫 http 參數金鑰 "password" 或 "passwort" 的值。 擷取的 URL https://example.com/accounts/?password=123&passwort=459 將收集並顯示為 https://example.com/accounts/?password=<redacted>&passwort=<redacted>

附註: Instana 代理程式不支援處理路徑參數 (/account//status) 或 matrix 參數 (/account;accountId=/status) 作為密鑰。

擷取 HTTP 標頭

Instana 代理程式可以選擇性地擷取每一個追蹤要求/回應的 HTTP 標頭。

可以定義正規表示式型樣清單,以決定將擷取哪些標頭。

如果要求及其回應中都有相同的標頭名稱,則只會保留回應的標頭值。

static setCaptureHeadersByRegex([]String regexArray)

範例

export default class App extends Component {
  componentDidMount() {
    setCaptureHeadersByRegex();
    async function setCaptureHeadersByRegex() {
      try {
        await Instana.setCaptureHeadersByRegex(["cache-control", "etag"]);
      } catch (e) {
        console.warn(e);
      }
    }
  }

慢速傳送模式

附註: 依預設,會停用慢速傳送模式特性。 必要的話,您可以啟用此特性。

依預設,如果傳送信標失敗, Instana 代理程式會嘗試重新傳送信標,直到傳送成功為止。 然而,此行為在某些行動網路中無法正常運作。 透過啟用慢速傳送模式特性,信標傳送間隔會變更為指派給 slowSendInterval 參數的時間值。 每一個傳送只包含一個引標,而不是一個批次 (批次中最多 100 個引標)。 Instana 代理程式會保持慢速傳送模式,直到順利傳送一個引標為止。

slowSendInterval 參數的有效時間範圍是 2-3600 秒。

範例

export default class App extends Component {
  componentDidMount() {
    var options = {}
    options.slowSendInterval = 120.0;
    Instana.setup('<your key>', '<your reporting url>', options);
  }
}

使用者階段作業 ID

依預設,會追蹤使用者階段作業,且 ID 是隨機產生的「通用唯一 ID (UUID)」。 安裝應用程式時,此 ID 保持不變。 您可以使用 usiRefreshTimeIntervalInHrs 參數來配置使用者階段作業 ID 的有效期限。 下列參數值指出使用者階段作業 ID 的狀態:

  • 負數: 此值指出使用者階段作業 ID 永不到期。 預設值為 -1。

  • 正數: 此值表示在設定時間之後重新整理使用者階段作業 ID ,亦即產生並使用新的 UUID。

  • 零: 以 0.0 表示的這個值表示已停用使用者階段作業 ID。

範例

export default class App extends Component {
  componentDidMount() {
    var options = {}
    options.usiRefreshTimeIntervalInHrs = 24.0;
    Instana.setup('<your key>', '<your reporting url>', options);
  }
}