Skip to content

Instantly share code, notes, and snippets.

@asufana
Last active December 14, 2015 02:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asufana/8748878 to your computer and use it in GitHub Desktop.
Save asufana/8748878 to your computer and use it in GitHub Desktop.
NewRelic入門

NewRelic入門

  • NewRelicとは
  • よくある利用例
  • Webパフォーマンス監視機能
  • プラグイン
  • PlayFramework1への導入手順
  • NetRelic for Java

NewRelicとは

できること

  • Webアプリケーションのパフォーマンス監視
  • Webインフラのパフォーマンス監視
  • apache, Postgresql, mongoDB, linux, windows...
  • プラグインで対応インフラの追加が可能
  • 死活監視/アラート

みんな使ってる

  • 簡単な設定で詳細な分析が可能
  • アプリケーションへの変更不要
  • 儲かっててそろそろ上場するというはなし

よくある利用例

http://www.slideshare.net/yoshinorikawasaki/newrelic-night-2013

「遅延個所の特定」と「対応効果の検証」

  • ターンアラウンドタイムの把握
  • リクエストからレスポンス+クライアント描画まで含めた時間
  • ユーザ体感速度
  • TATの内訳把握
  • サーバサイド処理/ネットワーク/レンダリング/DOM操作
  • 内訳をドリルダウンして個別分析

おまけ

  • 描画の指定秒数を超過したページが発生したら通知する

Webパフォーマンス監視機能

3つの視点

  • https://rpm.newrelic.com/accounts/276778/applications/2380143
  • クライアントサイド(TAT)
  • リクエスト送信からDOM操作まで
  • サーバサイド
  • リクエスト受信からレスポンス送出まで
  • データベース
  • サーバサイドに含まれるが個別に分析できる(有料)

遅延処理の抽出

ドリルダウン

監視プラグイン

豊富なプラグイン

自分でプラグイン書けるよ

NewRelicが公開しているサンプルがある

PlayFramework1 への導入手順

New Relic for Java マニュアル

NewRelic配置

ライセンスキー取得

  • NewRelicにアカウント登録
  • ライセンスキー取得
  • Account Settings > Account information から
  • newrelic.yml に ライセンスキーを記述

アプリケーション設定

  • dependencies.yml に NewRelic を追加して deps する

  • com.newrelic.agent.java -> newrelic-api 3.1.1

  • 当該アプリケーションの main.html に監視設定を差し込む

${com.newrelic.api.agent.NewRelic.getBrowserTimingHeader().raw()}
...
...
${com.newrelic.api.agent.NewRelic.getBrowserTimingFooter().raw()}

アプリケーション起動

  • playコマンドにjavaagentを指定してアプリケーション起動する
play run helloworld -javaagent:/full/path/to/newrelic.jar
  • 起動ログにエラーが出力されなければOK
$ play run helloworld -javaagent:newrelic/newrelic.jar
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.5, http://www.playframework.org
~
~ Ctrl+C to stop
~ 
CompilerOracle: exclude jregex/Pretokenizer.next
1 31, 2014 10:14:07 +0900 NewRelic 1 INFO: Agent is using Logback
1 31, 2014 10:14:07 +0900 NewRelic 1 INFO: Loading configuration file "newrelic/./newrelic.yml"
Listening for transport dt_socket at address: 8000
2014-01-31 10:14:10,583 INFO Starting ......

NetRelic for Java

javaangetオプションを利用

play run helloworld -javaagent:/full/path/to/newrelic.jar
  • JVMがクラスをロードする際に、指定のエージェントがそのクラスのバイトコードを修正することを可能にする機構
  • プロファイリングツールなどに利用される

簡易なエージェント

http://www.javainthebox.net/laboratory/J2SE1.5/MiscAPI/Instrumentation/Instrumentation.html

public class AgentSample {
    //premain( ) は アプリケーションの main( ) メソッドの前に呼ばれる
    public static void premain(String agentArgs, Instrumentation instrumentation) {
        Class[] classes = instrumentation.getAllLoadedClasses();
        for (Class cls : classes) {
            //ロードされたクラスが取得できるのでほげほげする
            System.out.println(cls);
        }    
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment