ヘルプ APM Android APM

AndroidモバイルAPM

Site24x7モバイルAPM(Android版)では、ネイティブモバイルアプリケーションのパフォーマンスを、実際のエンドユーザーのデバイスで追跡することが可能です。たとえば、ニュースリーダーアプリケーションでは、操作を行うことができます。

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

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

APMエージェントは、トランザクションとコンポーネントを用いて、コードの実行時間を測定します。前の例では、アクティビティ開始からUI表示完成までを、1トランザクションと見なします。それぞれの動作は、HTTP、SQLite、ファイルシステム、UIなどのコンポーネントタイプに分類されます。シンプルな操作だけでトランザクションを測定できますが、複雑な場合はトランザクションをコンポーネントにあわせて測定します

モバイルAPMの追加

モバイルAPMの追加
  1. Site24x7にログインし、APMタブのAndroid OSに移動します。
  2. アプリケーションの追加ボタンをクリックします。
  3. アプリケーション名Apdexのしきい値を入力して保存をクリックします。
  4. 追加に成功すると、アプリケーションキーとライブラリファイル(Mobile_APM_Android.zip)のダウンロードリンクが取得できます。
  5. 画面のアプリケーションの名前の隣にあるハンバーガーアイコンをクリックしてアプリケーションキーをコピーします。

モバイルAPMの始め方

使用方法

Site24x7にログインし、APMアプリケーションを新規に作成します。そうすると、アプリケーションキーと、ライブラリファイルのダウンロード用URLが提示されます。 アプリケーションの全バージョンで、同じアプリケーションキーを利用してください。

  • ステップ1

モバイルAPM Android SDKをアプリケーションレベルbuild.gradleに追加します。

buildscript {
repositories {
google()
jcenter()

maven { url 'https://maven.zohodl.com' }
}
dependencies {
// These docs use an open ended version so that our plugin
// can be updated quickly in response to Android tooling updates
classpath 'com.zoho.site24x7:mobileapm-analytics-plugin:1.0'
}
}
apply plugin: 'com.android.application'
apply plugin: 'zanalytics-plugin'
repositories {
google()
jcenter()
maven { url 'https://maven.zohodl.com' }
}
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.newtestapplicaiton"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
zanalytics {
debug {
apiToken =
"Your app key"
}
release {
apiToken =
"Your app key"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v4:23.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
compile 'com.zoho.site24x7:mobileapm:1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

監視を開始するには、ハイライトされている行をアプリケーションレベルbuild.gradleに追加する必要があります

  • ステップ2 APMエージェントでは、AndroidManifest.xmlで次の権限が必要です。
    <uses-permissionandroid: name="android.permission.INTERNET"/>
    <uses-permissionandroid: name="android.permission.ACCESS_NETWORK_STATE"/>
  • ステップ3

取得したアプリケーションキーを使用して、ApplicationサブクラスのonCreate()メソッドでApm.startMonitoring()を呼び出して、APMエージェントを初期化します。APMエージェントは、デフォルトで60秒ごとにSite24x7にデータをアップロードします。このアップロード間隔を変更することも可能です。データが記録されない場合、APMエージェントはネットワーク接続を行いません。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.site24x7.android.apm.Apm;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Apm.startMonitoring(getApplicationContext());
setContentView(R.layout.activity_main);
}

メモ:トランザクションを実行して、データ収集を開始してください。

  • ステップ4 プロジェクトを構築します。

トランザクションの始め方

トランザクションの使用

Apm.startTransaction()の読み込みによってトランザクションを実行し、名前を入力します。実行の長い操作の前にトランザクションを開始して操作が完了次第、停止してください。トランザクションはスレッドセーフで、異なるスレッドから開始や停止を行うことができます。トランザクションオブジェクトは一度だけ開始と停止を行えます。同じ名前のトランザクションはアプリケーション全体で平均化されます。そのため、同じトランザクション名を用いて同じ操作が複数回実行された場合に、その平均実行時間が記録されます。

private void listArticles() {
Transaction transaction = Apm. startTransaction ( "List Articles" );
// Perform long-running operation
Apm. stopTransaction ( transaction );
}

コンポーネントを使用してトランザクション内の操作をグループ化

コンポーネントの使用

Transaction.startComponent()の呼び込みと入力によって、トランザクション内の操作をコンポーネントにグループ化することができます。Component.TYPE_HTTP, Component.TYPE_SQLITE, Component.TYPE_UIなどといった事前定義のコンポーネントの内の1つか、ユーザー定義のコンポーネントを使用することができます。コンポーネントはスレッドセーフで、異なるスレッドから起動と停止を行うことができます。コンポーネントオブジェクトは一度だけ起動と停止を行えます。親トランザクションがすでに停止している場合、コンポーネントオブジェクトは停止させることができません。トランザクション内の複数のコンポーネントは並行して実行することができます。同じ名前のトランザクションがあるコンポーネントは平均化されます。

private void listArticles() {
Transaction transaction = Apm. startTransaction ( "List Articles" );
Component httpComponent = transaction .startComponent( Component.TYPE_HTTP );
Component articlesComponent = transaction .startComponent( "Download Articles" );
// Download articles
transaction .stopComponent( articlesComponent );
for (Article article in articles ) {
Component thumbnailComponent = transaction .startComponent( "Download Thumbnail" );
// Download thumbnail
transaction .stopComponent( thumbnailComponent );
}
transaction .stopComponent( httpComponent );
Apm. stopTransaction (transaction);

}

上記の例の場合、HTTP操作(記事やサムネイルのダウンロード)で要した合計時間が Component.TYPE_HTTP によって計測され、記事のみの取得時間は "Download Articles" によって取得されます。 各サムネイルの取得時間は、ループ内で複数回実行されるため "Download Thumbnail" によって平均化されて記録されます。

データのフラッシュ

データのフラッシュ

取得されたデータを Apm.flush()メソッドを用いて、Site24x7のサーバーに手動でフラッシュすることが望ましい場合があり、特に、アプリケーションやアクティビティを削除する前にこの操作を行う必要があると思います。長い更新間隔(デフォルトでは60秒)を設定している場合、アプリケーションが削除される前に次の更新までに手動でデータをフラッシュする必要があります。

データの表示

データの表示方法
  • Site24x7アカウントにログインし、APM > Android OSの順にアクセス後、監視しているアプリケーションをクリックします。
  • 全てのモバイルアプリケーションがアップ、ダウン、クリティカル、トラブルのステータスとともにダッシュボードに表示されます。
  • 停止しているまたが設定エラーとなっているアプリケーションもここに表示されます。
  • アクティブなアプリケーションでは、次のメトリックがダッシュボードに表示されます。
    • 選択した期間の応答時間とスループットを以前の期間のものと比較
    • 選択した期間でのクラッシュ
    • 選択した期間での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 > Androidの順にアクセスします。
  2. アプリケーションを選択し、ハンバーガーアイコンより監視詳細の編集を選択します。
  3. 設定プロファイル欄のしきい値と可用性プロファイルの(+)をクリックします。
  4. 監視タイプでモバイルアプリケーションを選択し、アラート名を入力してください。
  5. 平均応答時間の値を入力します。アプリケーションの応答時間がこの値を超えた際にアラートを受け取ります。
  6. 保存をクリックします。

通知プロファイルの設定を変更することで、アプリケーションがダウンした時のアラートを受け取るタイミングを設定できます。またユーザーアラートグループの設定で、引き起こされたアラートを誰が受け取るかを選択できます。

カスタム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秒です。

構文:
/**
* Initializes the APM agent.
* @param {Context} context
* The application context.
* @param {String} appKey
* The application key.
* @param {int} uploadIntervalSeconds
* The interval in seconds at which to upload data to the site24x7 servers. The default is 60 seconds.
* @throws MalformedURLException
* if {@code serverUrl} could not be parsed.
*/
Apm.startMonitoring(getApplicationContext(), "appKey", uploadInterval)

2. カスタムユーザーID

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

構文:
/**
*@param {String} userId
*/
Apm.setUserId("user@zylker.com")

3. トランザクション

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

構文:
/**
*Transaction (can contain multiple components)
*@param {String} transactionName
*Component
*@param {String} transactionName
*@param {String} componentName
*/
Transaction transaction = Apm. startTransaction ( "List Articles" );
Component httpComponent = transaction .startComponent( Component.TYPE_HTTP );
Component articlesComponent = transaction .startComponent( "Download Articles" );
// Download articles
transaction .stopComponent( articlesComponent );
for (Article article in articles ) {
Component thumbnailComponent = transaction .startComponent( "Download Thumbnail" );
// Download thumbnail
transaction .stopComponent( thumbnailComponent );
}
transaction .stopComponent( httpComponent );
Apm. stopTransaction (transaction);

4. HTTP要求

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

  • java.net.HttpURLConnection
  • javax.net.ssl.HttpsURLConnection
  • OkHttpLibrary (will provide Interceptor)
構文:
/**
*Introducing Site24x7LoggingInterceptor for tracking HTTP calls made using OkHttp Library or Retrofit.
*/
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new Site24x7LoggingInterceptor())
.build();
Using the request body:
Request request = new Request.Builder()
.url(url)
.build();ResponseBody body = client
.newCall(request)
.execute()
.body();Using Retrofit:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_API_URL)
.client(client)
.build();

さらに多くのHTTP要求を追加したい場合、次のAPIを使用します。

構文:
/**
*@param {String} url
*@param {String} requestMethod
*@param {long} startTime
You can get it from System.currentTimeMillis()
*@param {long} loadTime
Measured in Millis
*@param {int} responseCode
*@param{String} screen
The screen in which the HTTP call is made.
*/
Apm.addHttpCalls("https://www.example.com", "GET", 1642743078700, 526, 200, "paymentscreen" )

5. 画面

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

構文:
/**
*@param {String} screenName
*@param {String} orientation
*@param {long} loadTime measured in millis
*@param {long} startTime measured in millis
*/
Apm.addScreen("DetailScreen", "portrait", 50, 1642743078700)

6. 環境

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

構文:
/**
*@param {String} environment
Custom environment types like debug, release, or beta release.
*/
Apm.setEnvironment("release")

7. フラッシュ

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

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

8. HTTP要求の除外

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

構文:
/**
@param {Lis<String>} listOfUrls
*/
Apm.excludeHttpCalls( Arrays.asList("example.com") )

9. 画面の除外

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

構文:
/**
@param {List<String>} listOfScreens
*/
Apm.excludeScreens( Arrays.asList("customScreenName") )

10. フラグメントサポート

次のコードを使用して、フラグメントを自動で追跡します。

構文:
this.getSupportFragmentManager().registerFragmentLifecycleCallbacks(new Site24x7FragmentLifeCycleCallbacks(), true);

Add the above line to the onCreate method of the Launching Activity.

/**
*Enables fragment support for other activities
*/
Apm.enableFragmentSupport()

リリースノート

バージョン2.1.0

2022/5/13

不具合修正:
  • java.lang.IllegalStateException- 例外"Monitoring already started"を修正しました。
  • java.lang.ClassCastException- フラグメント収集中に発生する例外を修正しました。
新機能
機能強化:
  • クラッシュ分析サポートを機能強化しました。

Version 2.0.0

2021/6/4

機能強化:
  • リクエストメソッド、応答時間、スループット、ステータスコード、プラットフォーム、画面を用いたHTTP要求をサポートしました。
  • 応答時間、スループット、数ベースの画面追跡をサポートしました。
  • ビューおよびナビゲーションの自動追跡をサポートしました。
  • ビューの追跡をサポートしました。
  • ユーザーセッションの追跡を有効化しました。セッションタイムアウトは60分です。
  • ユーザーIDの手動追加をサポートしました。
  • 次のパッケージで全HTTP容共の追跡をサポートしました。
    • java.net.HttpURLConnection
    • javax.net.ssl.HttpsURLConnection
  • その他HTTP要求の手動追加をサポートしました。