パフォーマンス調査時に使えるIntelliJ×Datadogプラグインのご紹介
ログラスのよしだです。今回は少しニッチな記事を書こうと思います。
ログラスでは開発環境にIntelliJを利用しており、監視サービスではDatadogを利用しています。
Datadog公式からIntelliJのプラグインが公開ベータ版になっていましたので、そちらの紹介をしようと思います。なお、プラグイン公式ページはこちら。
本記事の想定読者
- IntelliJとDatadogを既に利用している開発者
- 特にアプリのパフォーマンスチューニングをしたい!そのためにボトルネックを調査したい方
セットアップ方法
読者の方は既にIntelliJとDatadogを利用していると思います。
今回紹介するプラグインを利用するためには公式ページに記載されている通りで
- Datadog Plugin をインストール
- プラグインをインストールしたらIDEから「Log in」を実行
これだけです。
プラグイン機能1:Code Insights
この機能については公式で下記説明があります。
Code Insights ビューでは、次のような情報が得られます。
- エラー追跡からの問題
- Application Security Managementによる脆弱性レポート
- CI Visibility で検出された不安定なテスト
- Watchdog Insights のプロファイリングインサイト
こちらの機能はDatadog上で見える情報がIntelliJでも見えるようになるものです。
したがって、Datadog上で各機能を使っていなかった場合は利用できませんので要注意です。
地味に嬉しいと感じたのは公式で記載されているところの「エラー追跡からの問題」です。
画面イメージはこちらとなります。
調査する際はエラーメッセージから何が発生したかを考え、スタックトレースから実際の問題コードを見て、そこに対して手元のコードでジャンプして見るかと思います。その一連の流れがこの機能だとカバーされていて、全てIntelliJで完結します。画面イメージの青いリンク箇所を押すと対象のコードに遷移が出来ます。
なお、こちらの機能は環境の指定と時間幅(最大2週間前まで)の指定が可能です。とある環境で起きたエラーだけまずは見たい、先週起きた事象だけ見たいといった使い方が出来そうです。
プラグイン機能2:Continuous Profiler
こちらの機能も公式では下記説明がありましたので転記しておきます。
Continuous Profiler は、以下をハイライトすることで、レイテンシーを削減し、クラウドのコストを削減するのに役立ちます。
- 最も多くの CPU を消費するコードライン
- メモリを最も多く割り当てるコードライン
- ロック、ディスク I/O、ソケット I/O に最も多くの時間を費やしているコードライン
この機能を使うためにはDatadog上でContinuous Profilerが構成されている必要があります。
概要ページはこちら
この機能では大きく2つのプロファイリング情報の表示方法があります。プラグインのページがより詳細に記述されており参考になるため、ここでは簡単に説明します。
- Top List
- プロファイリングデータで最もリソース(CPU TimeやAllocated Memoryなど)が消費されるメソッドが表示されます。
- Flame Graph
- プロファイリングデータが視覚化されたものです。とある処理の中で相対的な頻度が高いものが大きく表示されて直感的に確認できます。なお、頻度とありますがプロファイリング種別がCPU Timeなら実行時間と読み替えてよいかと思います。こちらFlame GraphはTop Listで上位に出ているメソッドの内訳を詳細に見る時にも使えます。
どちらの機能もプロファイリング情報を見つつ、すぐにコードに遷移することが可能ですので、怪しいなと思ったらぱっとコードを確認できます。なお、こちらの機能も Code Insightsと同様に環境の指定と時間幅(最大2週間前まで)の指定が可能です。
脱線:Datadogからプロファイルデータをダウンロードして利用する方法
ここまで書いたのですが、実はプラグインを使わずにDatadog上からプロファイルデータをダウンロードして利用する方法もあります。問題が発生していた特定の時間帯だけ確認する使い方が出来ますので記載しておきます。
前提条件: Datadog上でContinuous Profilerが構成されていること
- Datadogにログイン
- DatadogのAPMで対象のサービスを選ぶ
- Profilesを選ぶ
これでプロファイリングデータが見えます。調べたい時刻を絞り込みつつ「Profile List」から見る方法を個人的にはおすすめします。イメージとして、このような表示になります。
調査したい事象としてCPUが張り付いてた時を調べたいなら「CPU CORES」、FullGCが発生したなどメモリの利用が激しい時なら「MEM ALLOCATIONS」と調べたいもので降順ソートします。そうすると、トップに来る時が問題があった可能性が高いのでそこを選択します - プロファイリングの情報が出てきたら右上のボタンを押します
- ダウンロードしたものをダブルクリックしてIntelliJでプロファイリング情報を見ることができます
こちらから見るプロファイリング情報はIntelliJの機能の方になりますので、詳細はこちらのページを見てください。こちらの方がより具体の情報が見れるので、詳細の調査の時に有用です。
おわりに
アラートの時や問題発生時だけでなく、普段の開発でもDatadogが活用できるイメージが湧いてきたのではないでしょうか。個人的にはリアルユーザーモニタリング (RUM)もおすすめで何か活用方法がないか常に考えています。
※ちなみに、今回紹介した機能は IntelliJだけでなくVSCodeでも同等のプラグインがあります。
公式はこちらのページContinuous Profilerはないが静的分析機能があったりと少しだけ機能差異がありそうですね。
Discussion