iOS APM

ご利用手順

概要

Site24x7モバイルAPM(iOS版)では、ネイティブ モバイル アプリのパフォーマンスを、エンドユーザーの実機で追跡できます。たとえば、ニュースリーダーアプリが、内部的に、次の作業を実行しているとします。

  • もくじへ移動し、記事リストを表示
  • REST APIで記事のリストを読み込み
  • SQLiteデータベースに記事リストをキャッシュ
  • 記事ごとに、サムネイルをダウンロード
  • サムネイルをファイルにキャッシュ
  • カスタムテーブルやセルスタイルなどの複雑なUI構築

上記のすべては、時間がかかることがあり、ユーザー体験に影響します。そのため、これら動作のベンチマークと最適化を、各種デバイスむけに行うことが重要です。Site24x7モバイルAPMは、エージェントをライブラリとしてアプリケーションに埋め込み、地球上のすべてのユーザーから、メトリックを収集・集約します。

APMエージェントは、トランザクションとコンポーネントを用いて、コードの実行時間を測定します。上記の例では、ページ遷移の開始から、最終的なUIのレンダリングまでを、トランザクションのシーケンスとみなします。個別の作業は、HTTP、SQLite、ファイル、UIなど、コンポーネントタイプごとに分類します。シンプルな作業はトランザクションだけで測定できますが、作業が複雑な場合、トランザクションにコンポーネントをあわせ、測定します。

モバイルAPMの追加

1. Site24x7にログインして、APMタブにあるiOSセクションへ移動します。

2. アプリケーション追加ボタンをクリック。

3. アプリケーション名とApdexしきい値を入力。

4. 追加に成功すれば、アプリケーションキーとライブラリファイル(Mobile_APM_iOS.zip)のダウンロードURLが提供されます。アプリケーションの全バージョンに、同じアプリケーション キーを利用してください。

使い方

はじめに、Site24x7のWebサイトにログインし、新規のモバイルAPMアプリケーションを作成します。アプリケーションキーと、ライブラリファイルをダウンロードするためのURLが提供されます。アプリケーションのすべてに、同じアプリケーションキーを利用してください。

ライブラリには2種類があります。デプロイ版とリリース版です。デプロイ版は、デバイスでもシミュレーターでも動作します。他方、リリース版はデバイスでのみ稼働し、App Storeへ提出するのは、こちらの側です。デプロイ版からリリース版への切り替えにあたっては、XcodeのDerivedDataフォルダー削除と、プロジェクト消去を推奨します。はじめに、デプロイ版のAPM.frameworkを、Xcodeプロジェクトにバイナリとして埋め込みます。

アプリケーションは、APMフレームワークの利用にあたり、iOS 8.0以上を対象としてください。

初期化

最初に、APMフレームワークのインポートを行います。

@import  APM;

APMエージェントを、main.mで、入手したアプリケーションキーを用いて初期化してください。APMエージェントは、デフォルトでは60秒ごとに、Site24x7にデータをアップロードします。アップロード間隔をどう設定しても、記録データがなければ、APMエージェントは不要なネットワーク接続を行いません。

int  main(int  argc, char  * argv[]) {
        [S24APM  startWithAppKey :@"0123456789abcdef0123456789abcdef" ];
        @autoreleasepool  {
                return  UIApplicationMain (argc, argv, nil NSStringFromClass ([AppDelegate class]));
        }
}

トランザクションの利用

トランザクションは、時間のかかる操作の前にはじめ、作業完了しだい、停止してください。トランザクションはスレッドセーフであり、他スレッドからの開始と停止が可能です。トランザクションオブジェクトは、1回のみ、開始・停止できます。同名のトランザクションについては、アプリケーション内横断で平均をとります。すなわち、同じトランザクション名で、同じオペレーションが複数回行われば、平均実行時間が記録されます。

- (void )listArticles {
      S24Transaction  *transaction = [S24APM  startTransactionWithName :@"List Articles" ];
        // ここで、時間のかかる処理を実行
        [S24APM  stopTransaction :transaction];
}

コンポーネントの利用

トランザクション内のオペレーションは、ことなるコンポーネントへグループ分けできます。S24HttpComponent.TYPE_HTTP、Component.TYPE_SQLITE、Component.TYPE_UIなどの定義済みタイプも、独自のタイプも利用可能です。コンポーネントはスレッドセーフで、別スレッドからの開始と停止ができます。コンポーネントオブジェクトは、1回限り、開始・停止できますが、親トランザクションが停止した後は、停止できません。複数コンポーネントがトランザクション内で重複し、並列実行されることがあります。1トランザクション内の同一名トランザクションについては、平均をインストルメントします。

- (void )listArticles {
  S24Transaction  *transaction = [S24APM startTransactionWithName :@"List Articles" ];
    S24Component  *httpComponent = [transaction startComponentWithType :S24HttpComponent ];
    S24Component  *articlesComponent = [transaction startComponentWithType :@"Download Articles" ];
     // 記事のダウンロード
    [transaction stopComponent :articlesComponent];
    for  (Article  *article in  articles) {
        S24Component  *thumbnailComponent = [transaction  startComponentWithType :@"Download Thumbnail" ];
        // サムネイルのダウンロード
        [transaction  stopComponent :thumbnailComponent];
    }
    [transaction  stopComponent :httpComponent];
    [ S24APM  stopTransaction :transaction];
}

上記の例では、HTTP作業の総時間(記事とサムネイルのダウンロード)は、S24HttpComponentで測定する一方、記事本体については、「Download Article」で測ります。サムネイルのダウンロード平均時間の記録には、別途、「Download Thumbnail」で対応し、複数画像をループで処理しています

データのフラッシュ

データは、時折、Site24x7サーバーへとフラッシュしてください(更新情報の強制送信)。アプリケーションの終了直前に、トランザクションをサーバーに記録する場合は、この方法で対応できます。ただし、デフォルトでは60秒のアップロード間隔を大きくする場合、アプリケーションが次のアップロード時刻を待たず終了すれば、必要に応じて、手作業でデータのフラッシュをしてください。

[ S24APM  flush]

データの表示

To view the data:
  • Site24x7にログインし、APM > iOSの順にクリックし、アプリケーションをクリックします。
  • ダッシュボードには、すべてのモバイルアプリと、アップ、ダウン、クリティカル、トラブルのステータスが表示されます。
  • 停止や設定エラーとなっているアプリケーションが、ここに表示されます。
  • アクティブなアプリケーションの場合、次のメトリックがダッシュボードに表示されます。
    • 選択したと以前の期間の応答時間とスループットを比較します。
    • 選択した期間のクラッシュ
    • 選択した期間のApdexスコアとユーザー数

メトリック

モバイルアプリケーションのAPMインサイトAPIを設定すると、アプリに関する次のメトリックが表示されます。
  1. ワールドワイドサマリー
  2. 応答時間とスループット
  3. 地域、キャリア、OSごとの応答時間
  4. 応答時間の合計、スループット、個々のトランザクションごとの応答時間の内訳
  5. クラッシュ分析

1. ワールドワイドサマリーレポート

ワールドワイドサマリーレポートで、指定した期間の全地域にわたるパフォーマンスを表示します。Apdexスコアは0から1の値で、色ごとに判定できます。ユーザー体感に不満をもっているときは0、満足している場合は1を示します。マップで各リージョンにカーソルを当てると、Apdexスコア、平均応答時間、スループット、エラーが、ロケーションごとに表示されます。

2.アプリの応答時間とスループット

選択した期間のアプリの応答時間の合計とスループットを、管理タブから表示できます。

3.地域、キャリア、デバイス、OSバージョンごとの応答時間の内訳

アプリケーション以外にも様々な要因で、アプリケーションの応答時間に影響を与えることがあります。

地域、機器、OSバージョンごとにアプリの応答時間を比較して、問題について分析します。

地域およびキャリアごとの応答時間は、地域タブで表示されます。

様々なデバイスとOSバージョンの応答時間は、機器タイプタブで表示されます。

4.トランザクションの応答時間

個々のトランザクションの応答時間、スループット、数(トランザクションが要求された回数)は、トランザクションタブで表示されます。

5.クラッシュ分析

クラッシュ分析タブで、選択した期間のクラッシュ回数を表示できます。スタックグラフにカーソルを合わせると、各デバイスのクラッシュ回数、問題の数、クラッシュに影響されたユーザー数を表示できます。中間の帯では、クラッシュ数の合計の増減変化のパーセンテージとともに、クラッシュの影響を受けていないユーザー数が表示されます。

クラッシュサマリーで、例外が表示されます。例外をクリックすると、そのエラー行を把握できます。

アラート設定

アラートの設定で、アプリケーションの応答時間が、指定したしきい値を超過した際に、通知を受け取ります。

重要度ごとにトラブルやクリティカルのアラートを設定できます。

アラートの設定方法は次のとおりです。

  1. Site24x7にログインし、> APM > iOSの順に移動します。
  2. アプリケーションを選択し、ハンバーガーアイコンにカーソルを合わせて、監視詳細の編集をクリックします。
  3. 設定プロファイル配下で、(+)をクリックすると、しきい値と可用性プロファイルを新規作成できます。
  4. 監視タイプで、モバイルアプリケーションを選択し、アラート名を入力します。
  5. 平均応答時間の値を入力します。このしきい値を超過した際に、アラートが受信されます。
  6. Click Save

通知プロファイルの設定で、ダウンの際のアラート条件を設定できます。これに加えて、ユーザーアラートグループsの作成で、アラート受信者を設定できます。

カスタムAPI

カスタムAPIはユーザーID、カスタムイベントの追跡、画面取得などの動的値の設定に使用されます。このドキュメントではSite24x7で使用できるカスタムAPIの各タイプとその構文のについての使用方法について記載しています。

使用できるAPI:

  1. SDKの起動
  2. カスタムユーザーID
  3. トランザクション
  4. HTTP要求
  5. 画面
  6. 環境
  7. フラッシュ
  8. HTTP要求の除外
  9. 画面の除外
  10. フラグメンサポート

1. SDKの起動

次のAPIを使用して、カスタムなアップロード間隔でSDKを起動できます。デフォルトのデータアップロード間隔は60秒です。

Objective-Cの構文:

Objective-C
/**
* Initializes the APM agent.
* @param {NSString*} appKey
* The application key.
* @param {NSUInteger} intervel
* The interval in seconds at which to upload data to the server. The default is 60 seconds.
*/
[S24APM startWithAppKey:@"App_Key" interval:30]

Swiftの構文:

Swift
/**
* Initializes the APM agent.
* @param {String} appKey
* The application key.
* @param {int} intervel
* The interval in seconds at which to upload data to the server. The default is 60 seconds.
*/
S24APM.start(withAppKey:"App_Key", interval: 15);


2. カスタムユーザーID

デフォルトでSDKにより一意のユーザーIDが生成されます。カスタムユーザーIDをカスタマイズしたい場合、次の構文を指定することで行えます。メトリックの追跡や特定のユーザーに特有の問題をデバッグしたい場合に役立てられます。

Objective-Cの構文:

Objective-C/**
*@param {NSString*} userId
*/
[S24APM setUserId:@"user@example.com" ]

Syntax for Swift:

Swift
/**
*@param {String} userId
*/
S24APM.setUserId("user@zylker.com")


3. トランザクション

次のAPIを使用して、アプリケーション特有のタイミングでイベントを追跡できます。

Objective-Cの構文:

Objective-C
/**
*Transaction (can contain multiple components)
*@param {NSString*} transactionName
*Component
*@param {NSString*} transactionName
*@param {NSString*} componentName
*/
S24Transaction *transaction = [S24APM startTransactionWithName:@"List Articles"];
S24Component *httpComponent = [transaction startComponentWithType:S24HttpComponent];
S24Component *articlesComponent = [transaction startComponentWithType:@"Download Articles"];
// Download articles
[transaction stopComponent:articlesComponent];
for (Article *article in articles) {
S24Component *thumbnailComponent = [transaction startComponentWithType:@"Download Thumbnail"];
// Download thumbnail
[transaction stopComponent:thumbnailComponent];
}
[transaction stopComponent:httpComponent];
[S24APM stopTransaction:transaction];

Swiftの構文:

Swift
/**
*Transaction (can contain multiple components)
*@param {String} transactionName
*Component
*@param {String} transactionName
*@param {String} componentName
*/
S24Transaction *transaction = [S24APM startTransactionWithName:@"List Articles"];
S24Component *httpComponent = [transaction startComponentWithType:S24HttpComponent];
S24Component *articlesComponent = [transaction startComponentWithType:@"Download Articles"];
// Download articles
[transaction stopComponent:articlesComponent];
for (Article *article in articles) {
S24Component *thumbnailComponent = [transaction startComponentWithType:@"Download Thumbnail"];
// Download thumbnail
[transaction stopComponent:thumbnailComponent];
}
[transaction stopComponent:httpComponent];
[S24APM stopTransaction:transaction];


4. HTTP要求

デフォルトで、次のネットワーキングライブラリを用いて、ネットワークリクエストが自動取得されます。

  • NSUrlSession
  • NSUrlConnection

他のHTTP要求を追加したい場合は次のAPIを使用してください。

Objective-Cの構文:

Objective-C

/**
*@param {NSString*} name
*@param {NSUInteger} duration measured in millis
*@param {NSString*} startTime
*@param {NSUInteger} respCode
*@paramt {NSString*} httpMethod
*/
[S24APM addHttpCall:@"example.com" withTime:60 startTime:@"1642750130310" respCode:200 httpMethod:@"GET"]

Swiftの構文:

Swift
/**
*@param {String} name
*@param {int} duration measured in millis
*@param {String} startTime
*@param {int} respCode
*@paramt {String} httpMethod
*/
S24APM.addHttpCall("example.com", withTime:60, startTime: "1642750130310", respCode: 200, httpMethod: "GET");


5. 画面

デフォルトで、すべての画面が取得されます。また、不足している画面を追加したい場合は、以下のAPIを使用してください。

Objective-Cの構文:

Objective-C
/**
*@param {NSString*} screen
*@param {NSUInteger} duration measured in millis
*@param {NSString*} startTime
*/
[S24APM addScreen:@"DetailScreen" withTime:60 startTime:@"1642750130310"]

Swiftの構文:

Swift
/**
*@param {String} screen
*@param {int} duration measured in millis
*@param {String} startTime
*/
S24APM.addScreen("DetailScreen", withTime: 60, startTime: "1642750130310");


6. 環境

次のAPIを使用して、開発、デバッグ、本番、リリースといった各環境の設定にわたるデータをフィルターするためのカスタムな環境情報を設定します。

Objective-Cの構文:

Objective-C
/**
*@param {NSString*} environment
Custom environment types like debug, release, or beta release.
*/
[S24APM setEnvironment:@"release"]

Swiftの構文:

Swift
/**
*@param {String} environment
Custom environment types like debug, release, beta-release, etc.
*/
S24APM.setEnvironment("release");


7. フラッシュ

次のAPIを使用して、次のアップロードまで待つことなく、サーバーにレコードデータをアップロードします。デフォルトで、フラッシュ間隔は60秒です。

Objective-Cの構文:

Objective-C
[S24APM flush]

Swiftの構文:

Swift
S24APM.flush()


使用できるネットワークがない場合、次のアップロード間隔まで、データはキューに保管されます。長いアップロード間隔を設定している場合、 アクティビティまたはサービスが破棄された場合、手動でデータをフラッシュする必要があります。


8. HTTP要求の除外

URLのリストを引数として次のAPIにパスすることで、指定したURLを監視から除外できます。

Objective-Cの除外:

Objective-C
/**
@param {NSArray<NSString *> *} listOfUrls
*/
[S24APM enableHttpTracking:@[@"example.com"]]

Swiftの構文:

Swift
/**
@param {var} listOfUrls
*/
S24APM.enableHttpTracking(["example.com"]);


9. 画面の除外

画面のリストを引数としてAPIにパスすることで、指定した画面を監視から除外します。

Objective-Cの構文:

Objective-C
/**
@param {NSArray<NSString *> *} listOfScreens
*/
[S24APM ignoreScreens:@["DetailScreen"]]

Swiftの構文:

Swift
/**
@param {var} listOfScreens
*/
S24APM.ignoreScreens(["DetailScreen"]);

リリースノート

バージョン2.1.0

2022/5/20

新機能

機能強化

  • クラッシュ分析の強化

バージョン2.0.4

2022/3/4

機能強化:

  • SwiftベースのiOSアプリケーションで、HTTP要求をサポートしました。

バージョン2.0.3

2022/1/19

不具合修正:

  • 細かなバグの修正を行いました。

バージョン2.0.2

12 January 2022

機能強化:

  • 各アップロード間隔の時間で、直近の20の画面とHTTP要求を取得できるようになりました。
  • シミュレータと実際のデバイスの両方をサポートするXCFrameworksを導入しました。
  • カスタム環境設定のAPIをサポートしました。

バージョン2.0.1

2022/1/11

不具合修正:

  • バックグラウンドスレッドで要求されるUI APIの不具合を修正しました。

バージョン2.0.0

2021/6/4

機能強化:

  • リクエストメソッド、応答時間、スループット、ステータスコード、プラットフォーム、画面を用いたHTTP要求をサポートしました。
  • 応答時間、スループット、数ベースの画面追跡をサポートしました。
  • ビューおよびナビゲーションの自動追跡をサポートしました。
  • ビューの追跡をサポートしました。
  • ユーザーセッションの追跡を有効化しました。セッションタイムアウトは60分です。
  • ユーザーIDの手動追加をサポートしました。
  • 次のパッケージで全HTTP容共の追跡をサポートしました。
    • NSURLSession methods
      - dataTaskWithURL
      - dataTaskWithURL completionHandler
      - dataTaskWithRequest
      - dataTaskWithRequest completionHandler
      - downloadTaskWithURL
      - downloadTaskWithURL completionHandler
      - downloadTaskWithRequest
      - downloadTaskWithRequest completionHandler
      - uploadTaskWithRequest fromData
      - uploadTaskWithRequest fromData completionHandler
      - uploadTaskWithRequest fromFile
      - uploadTaskWithRequest fromFile completionHandler
    • NSURLConnection methods
      - sendAsynchronousRequest queue completionHandler
      - dataTaskWithURL completionHandler
  • その他HTTP要求の手動追加をサポートしました。

トップ