KonifarPod

newrelic.android.jarの仕様でエラーが出てハマった

   

Pocket

※ この記事は、2013年11月時点での情報です。もしかしたらもう仕様が変わってるかもしれません。

NewRelicは、サーバーやフロントのパフォーマンスをレポートしてくれるモニタリングツールです。どれだけイケてるかはこちらを見てみてください。

実はすでにAndroid、iOS向けのSDKもリリースしていて、簡単な手順で組み込めるようになっています。AndroidSDKを導入してみたのですが、manifestとActivityにちょちょっと書くだけで簡単に導入できちゃいました。aspectで動的にレポート用のコードを組み込んでいるようです。

そんな素晴らしいNewRelicですが、SDK部分でハマってしまって運営に問い合わせた結果、仕様だということがわかったので備忘を記録しようと思います。

 

1.あるHTTPリクエストを送ったらエラーが出た

ことの発端は、あるHTTPリクエスト送信時にエラーが発生したことでした。以下のスタックが吐き出されていました。

08-08 19:35:10.471: W/System.err(1451): at java.lang.String.startEndAndLength(String.java:593)
08-08 19:35:10.471: W/System.err(1451): at java.lang.String.substring(String.java:1474)
08-08 19:35:10.471: W/System.err(1451): at com.newrelic.agent.android.instrumentation.TransactionStateUtil.inspectAndInstrument(TransactionStateUtil.java:107)
08-08 19:35:10.471: W/System.err(1451): at com.newrelic.agent.android.instrumentation.Instrumentation._(Instrumentation.java:189)
08-08 19:35:10.471: W/System.err(1451): at com.newrelic.agent.android.instrumentation.Instrumentation.execute(Instrumentation.java:104)
08-08 19:35:10.481: W/System.err(1451): at com.xxx.net.PreloadTask.doInBackground(PreloadTask.java:49)
08-08 19:35:10.481: W/System.err(1451): at com.xxx.net.PreloadTask.doInBackground(PreloadTask.java:1)
08-08 19:35:10.481: W/System.err(1451): at android.os.AsyncTask$2.call(AsyncTask.java:264)
08-08 19:35:10.481: W/System.err(1451): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-08 19:35:10.481: W/System.err(1451): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-08 19:35:10.481: W/System.err(1451): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-08 19:35:10.481: W/System.err(1451): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-08 19:35:10.481: W/System.err(1451): at java.lang.Thread.run(Thread.java:864)

なんか明らかにcom.newrelicあたりでエラーが出てるんですけど・・・と思いながらググってみても特に情報はありませんでした。

 

2.newrelic.android.jarを外すとエラーが出ない

まさかまさかと思いながらnewrelic.android.jarを外してみると、なんとエラーが解消しました。

こいつは問い合わせるしかないと思い、サポートセンターにメールを送ることにしました。

 

3.メールで問い合わせる

とりあえずNewRelicへの感謝の気持ちも添えて、以下のメールを送ってみました。

Hi. I am Yusuke Konishi, Japanese Android Developer.
Thanks for newrelic, it is easy to monitor performance. Thank you NewRelic!

Today, I want to ask NewRelic team about Mobile Monitoring.
I use Android Monitoring, but sometimes newrelic.android.jar occers error.

This is stacktrace.
————————————

・・・

————————————

The thing I did is to request data by DefaultHttpClient.

PreloadTask.java:49
HttpResponse response = client.execute(new HttpHost(Consts.APP_HOST), request);

Once I remove newrelic.android.jar, error didnot occur.
So I need your help. Please tell me the solution.

Yusuke Konishi

 

すると、自動的に返信が来て、なんと専用のIssueとして扱うサポートページが作られていました。NewRelicすごい・・・。サポート体制までバッチリです。とりあえず返信を待ってとのことだったので、待つ間に切り分けをしてみることにしました。

 

4.URLが短いとダメだった

requestのURLが、/xxxx と4文字だったのですが、これを/xxxxxxxxxx と10文字にしてみたところ、エラーがでなくなりました。文字数を変えて検証すると、最低でもリクエストURLが10文字以上でないとダメみたいでした。

これはきな臭いなぁと思いながらサポートページにこの結果をコメントで追記しておいたところ、返事が来ました。

Newrelic1

 

「リクエストURLは最低でも10文字はなきゃダメだよ。http://とドメインをつけて試してみて!」

とのこと・・・。やっぱりね、となったのでした。

 

(結論)NewRelicのサポートすごい

なんでそんな仕様なのかはわかりませんが、一応直りました。仕様は置いておいて、NewRelicのサポート体制はすごかったです。すごい効率的にサポートしてるんだろうなぁと感じられました。MongoLabやAWSもそうですが、やはりこういう計測やインフラは専門チームにお任せしたほうがいいなとしみじみしました。

おしまい。

Pocket

 - Develop ,