LoginSignup
1
0

More than 1 year has passed since last update.

New Relic APMのMost time consumingを特定のUser Agentでフィルタして分析する

Last updated at Posted at 2021-12-11

これは、New Relic Advent Calendar 2021 | 12日目の投稿です。

やりたいこと

New Relic APMでシステムのパフォーマンスのボトルネックを調査する際、はじめに確認するのはTransactions > Most time consumingではないでしょうか。
image.png

このビューはWebのリクエストを処理時間×リクエスト数が多い順に表示しているため、ユーザが待機しているサーバ処理時間の中で支配的なリクエスト特定するために役立ちます。また、リアルタイムにユーザのアクセスパターンを知ることができるのも運用の知見を獲得する上でメリットがあります。
このような集計をする場合、GETリクエストはURIの中にユーザIDやアイテムIDを含むことが多く、アクセスログではグループ化が面倒なことがありますが、APMであればコントローラの処理単位となるため集計に頭を悩ませることがないのが良いですね。

この集計はAPMを導入しているアプリケーション単位で行われていますが、パフォーマンスのボトルネック調査はユーザ体験の改善に焦点を当てているため、同一アプリケーションの中でもクライアント別に集計したい要件がでてきます。

  • Botや内部サーバからのリクエスト、ヘルスチェックは集計対象外にしたい
  • Webとスマホアプリでアクセスパターンが異なるため、それぞれごとに集計したい

やりかた

New Relic APMのUI上ではクライアントによって集計範囲をカスタマイズする機能はなさそうだったので(New Relic MobileやNew Relic Browserと連携すればできるのかもしれませんが)、元データのNRDBを当たってみることにしました。

NRQLを叩いてAPMのデータソースであるTransactionsをみてみると、request.headers.userAgentというデータが入っています。WHERE句で任意のフィルタを書いた上で、コントローラの処理の名称(name)でグループ化(facet)して、処理時間(duration)の合計(sum)を高い順に表示してあげれば、特定のUser AgentでTransactions > Most time consumingとほぼ同じ集計結果を表示することができそうです。

FROM Transaction SELECT sum(duration) as total_duration
WHERE request.headers.userAgent NOT LIKE '{USER AGENTの文字列}%'
FACET name ORDER BY total_duration DESC

ウィジェット追加画面からNRQLを実行して、
image.png

全体・Web・スマホアプリでリクエストの傾向の違いを可視化するダッシュボードを作成してみました。
image.png

まとめ

  • 普段APMのUIでなんとなく見ているビューも大元のNRDBにあるデータをNRQLでクエリすればカスタマイズして表示することができる
  • SELECT * FROM Transactionsでどんなデータが入っているのかを一度確認しておくと何かに使えるデータを発見できるかも

New Relic APMを使いこなしてユーザ体験を改善しましょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0