Allied ArchitectsAllied ArchitectsEngineer Blog

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

2014/12/11 Android

アライドアーキテクツ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

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

chikurin
  • chikurin
  • Androidエンジニア
  • 多少道草を食っていたため、3年遅れの2014年新卒ですが無害です。 はじめてのWeb系と思いきや、いつの間にかAndroidに関わることになりました。Android初心者ですがご容赦を。

RELATION ENTRY

Facebook広告における各種Feedについて

Facebook広告における各種Feed...

2017/10/4 Facebook

お久しぶりです、ちくりんです。 Androidアプリの開発から離れて1年が経ちました。 今は社内のSNS広告の運用部署とかに配属になりまして、運用のサポートツールやらなにやらの開発を推進したりコンバージョンタグの問い合わせサポートをしたりLetroの設計したりなんぞを行って日々生きています。 今回...

続きを読む

Androidのセオリーに従ってLayoutを修正する

Androidのセオリーに従ってLayo...

2014/12/18 Android

アライドアーキテクツ AdventCalendar18日目担当、2回目となりますちくりんです。 先日、再生機器がないのに購入した楽園追放の限定版が届きまして、サントラにテーマ曲のディンゴ版やFS版が収録されていることを期待してましたが、入ってませんでした... 残念でなりません、今後に期待します。...

続きを読む

chikurinの記事一覧へ

ページTOPへ