chikurin

2014.12.11

NewRelicを使ってAndroidアプリのモニタリングをする(Advent Calendar 11日目)

アライドアーキテクツAdvent Calendar11日目の記事になります。

お久しぶりです、11日目担当のちくりんです。

今回は、先日知ったNewRelicを使ってAndroidアプリをモニタリングする際の導入手順と、実際にどのような情報がモニタリング出来るのかを簡単に紹介します。

NewRelicってなに?

パフォーマンスの監視サービスです。
クライアントサイド、サーバサイド両方のモニタリングができ、なおかつ導入が容易ということで話題?になりました。
サーバのモニタリングに関しては、恐らくこの辺りを読んだ方が分かりやすいので、Androidなんか知ったこっちゃねーっていう人は以下をご参照ください。

このNewRelicがモバイル(iOS, Android, Titanium)にも対応してまして、Androidへの導入と、モニタリングの様子について紹介します。

Androidアプリへの導入

NewRelic for Android

  • Gradle(Android Studio)以外に、Ant, Mavenでの導入もサポート。Eclipseを使っていても安心。
  • 今回掲載しているのはGradleを使う際の利用手順
  • 掲載時点での最新バージョンは4.120.0 使ったのもこれになります
  • 実装環境はAndroid Studioのバージョン0.8.9
  • MavenRepoにあるので気になるならリンクを参照
    http://mvnrepository.com/artifact/com.newrelic.agent.android

以下公式Doc
Installing Android apps with Gradle and Android Studio | New Relic Documentation

手順

アプリの登録

まずはアプリの登録です。アカウント登録は済んでる前提で進めます。
NewRelicのページからMobileを選択して登録画面へ

NewRelic_00_addApp

登録するアプリの名前は後から変更可能です。
入力が完了するとNewRelicのトークンが表示されるのでそれをメモっておきましょう。
登録に関しては特に面倒な所は無いと思われますので、これ以降Androidプロジェクトの設定に移ります。

Gradleなどの設定

設定するのは大まかに以下の3つになります。

  • AndroidManifest.xml
  • プロジェクト、アプリのbuild.gradleの両方
  • ProGuardの設定

まずはAndroidManifest.xmlにパーミッションの追加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

ネットワークを使うならいつもの2つですね。

続いてbuild.gradle(project)に依存関係を記述

最後にbuild.gradle(app)に

  • NewRelicプラグインを使用する事をapply pluginで宣言
  • ライブラリの取得先、ビルドの設定

の2つを追加

Proguardを使用している場合

NewRelicでは、クラッシュレポートを表示してくれる機能があります。
Google Analytics(以下、GAと省略)にも有りますが、さわりだけ使った所感としては、NewRelicの方が楽かつ使いやすいと思います。
これらのサービスを開発者が見るとは限らないので、そもそもの目的が異なるのですが…
ユーザの利用状況など、運用ならGA、保守ならNewRelicと言った感じでしょうか?

兎も角、ProGuardを使用している場合、難読化されてクラッシュレポートが見難いケースがあります。その点NewRelicでは、Mapファイルを簡単にアップロードする仕組みが備わっており、それを利用する事で難読化前の状態で確認することが可能です。

まずはプロジェクトのルートにnewrelic.propertiesファイルを作成して、以下の1行を追加

Proguardのルールファイルに以下を追加

これで設定は完了です。
後はApplicationクラスを拡張したクラス内でNewRelicの初期化を行います。

以上で設定は完了です。
アプリをビルドしてNewRelicが動作しているのを確認してください。


続いて幾つかサービスの方を確認してみます。

モニタリング

まずはOverviewから頻繁に使いそうな機能を確認します。

Overview

NewRelic_03_monitoring

これはAndroidの勉強がてらに作っていた、CroudiaというT◯itterっぽいSNSクライアントをモニタリングしたものです。レスポンスタイム以外に、アプリのバージョンやクラッシュの状況も確認できます。

続いてクラッシュリスト

Crash list

NewRelic_04_monitoring_crashlist01

だいぶNullPointerで死んでますが、この記事のためにあれこれ弄ってる非公開バージョンなので、もともとのプログラムの構成はさておき、無害です。

クラッシュの原因をクリックすると、以下のようにStackTraceが表示されます。

NewRelic_05_monitoring_crashlist02

VolleyのImageLoader前で死んでいるので、恐らくDLする画像のURL辺りがおかしかったのでしょう。

HTTP requests

続いてリクエスト状況です。
こちらではAPI毎の所要時間が確認できます。

NewRelic_05_monitoring_net

認証関係と思われるoauthやaccountが頻繁にリクエストされている事が分かります。
statuses/public_timelineは、その名の通りTimelineを取ってくるAPIなので、認証関係のAPIがこれだけの頻度で呼び出されているのは明らかにおかしいですね。修正いたします…

終わりに

このような感じで意外と簡単にパフォーマンスの確認が出来るようになります。
処理に時間のかかっているメソッドやその頻度、API毎の時間などが確認できるので、チューニングする際にも便利かと思います。
今回は紹介しませんでしたが、キャリアやアプリバージョン毎、アラートの設定なども可能です。

話は変わりますがAndroid Studioの正式版がリリースされましたね。
1.0になってRC4でビルドできていたものが出来なくなったという話もちらほら…
僕の環境はまだ0.8.9なので、1.0に上げて悲鳴を上げている高畑パイセンの報告を待ちたいと思います。

ともあれ、GradleのBuildプロパティに関しては、以下のサイトを見ておけば多少被害は軽減できそうです。
Migrating Gradle Projects to version 1.0.0 – Android Tools Project Site

長くなりましたが僕の回はこの辺りで、明日は香取さんの出番です。