New Relicをはじめ様々なオブザーバビリティプラットフォームがeBPFを利用しています。本記事では、eBPFベースのオブザーバビリティがどういった仕組みで実現されているか解説するものです。また、eBPFを使ったNew RelicのオブザーバビリティであるNew Relic eBPFについても紹介させて頂きます。
本記事はオブザーバビリティを始めて間もない方や、「オブザーバビリティはある程度わかるけどeBPFって何?」「何ができるの?」と思っている方々を対象にしています。オブザーバビリティやOSについての初学者でも理解できるように、自分の母親に説明するつもりで執筆しました。
eBPFとは
eBPF (extended Berkelay Packet Filter) は、簡単に言うとOSが持っている情報をユーザー空間のプログラムと共有することができる技術です。
OSはアプリとハードウェアの間に立って、アプリ同士が公平にハードウェア使えるよう、調整しています。例えば、プロセススケジューラーはCPUで実行されるプロセス(アプリ)の切り替えを行なっています。複数のアプリを同時に利用できるのは、プロセススケジューラーが、人が知覚できないほど高速にプロセス(アプリ)の切り替えを行なっているからです。
OSはアプリとハードウェアの間で動作しているため、アプリがどんな処理を行なっているか、ある程度わかります。例えば、アプリが誰とどんな通信をしているか、ディスクにどんなデータを書き込んでいるか、といった情報を把握しています。eBPFを使うと、こういった情報を抜き出してユーザー空間のプログラムと共有することが可能です。
eBPFはOS内で実行されるeBPFプログラムとユーザー空間で実行されるユーザープログラムとで構成されます。eBPFプログラムはイベント駆動のプログラムで、OS内で発生する様々なイベント(OS開発者が様々な場所に仕込んだフックポイント)を契機にして実行されます。C言語などで実装が可能で、ビルドするとバイトコードが生成されます。生成されたバイトコードは、安全性の検証を経てからOSカーネル内のサンドボックス環境で実行されるため、カーネルモジュールのように、エラー時に破滅的な状況を引き起こすことはなく、安全に利用できるというメリットがあります。
OS内でイベントが発生した際、eBPFプログラムが、その情報を抜き出してユーザー空間のプログラムに共有できます。情報の共有は、OSとユーザー空間の双方からアクセス可能なKVS (Key-Value-Store)によって行われます。これにより、図の例のように、Webアプリのネットワークの利用状況をモニタリングする、といったことが可能になります。
eBPFによるオブザーバビリティ
前述した通り、OSはアプリの稼働状況をある程度把握することが可能です。よって、eBPFによってOSから情報を抜き出すことで、オブザーバビリティの主要な機能の一つであるAPM (Application Peformance Monitoring)を実現できます。以下の図は、eBPFを使ったAPMの実装の一例です。Webアプリ(ECサイト)で実行されているトランザクションの監視を行う場合を例にしています。かなり簡略化しており、実際にはもっと複雑な実装になることをご留意ください。
ECサイトのユーザーがブラウザを操作した際、HTTPリクエストがWebアプリに送信されます。このHTTPリクエストの内容見ることで、これからWebアプリが実行するトランザクションの内容(例:製品検索、決済等)を把握できます。また、Webアプリがトランザクションを実行した後に送信されるHTTPレスポンスの送信時刻とHTTPリクエストの受信時刻を比較することで、トランザクションの処理時間がわかります。これらの情報をeBPFプログラムでユーザー空間のエージェントに共有し、エージェントがNew Relicなどのオブザーバビリティプラットフォームに送信することで、Webアプリが実行する各トランザクションの処理時間を可視化することが可能です。
New Relic eBPF
New Relic eBPFは、eBPFを利用するNew Relicのオブザーバビリティです。現在、以下の機能をサポートしています。本記事ではeBPF APMを紹介します。
-
eBPF APM
- 通信情報などからWebトランザクションの情報を収集してモニタリング
-
eBPF network metrics
- 通信全般のモニタリング
eBPF network metricsは現在プレビューとして公開されている機能で、まだ開発中です。
eBPF APMで確認できるのは、OSレベルで把握できるアプリの稼働情報です。主には、Webトランザクションの情報、当該トランザクションの中で実行されている外部サービスとのやりとり(外部APIの呼び出し処理など)の情報になります。確認できるのはアプリと外部とのインタラクションの情報がメインです。DBへのクエリー処理の情報は確認できるので、N+1問題やスロークエリーといった問題は把握できそうです。また、マイクロサービス型のシステムのように、複数のアプリが連動してリクエストを処理するケースで、どのアプリのトランザクションがボトルネックになっているか確認するのにも使えそうです。
一方、各言語の専用エージェントを利用した通常のAPMほどの詳細な情報は確認することができません。アプリが実行する処理(コード)を、関数レベルやメソッドレベルで確認するといったことは現状不可能です。uprobeという技術とeBPFを組み合わせれば、アプリのバイナリの任意の場所にフックポイントを挿入することができ、特定の関数の処理時間などを取得することができます。しかし、フックポイントを挿入するには対象の関数のバイナリ上のオフセットが必要になります。多くのアプリではセキュリティ上、オフセット情報をバイナリから削除しているので、この方式を使うことができるのは稀なケースになります。将来こういった問題が解決され、詳細な情報も取得できるようになることを期待したいです。
eBPF APMと通常のAPMを比較すると以下になります。
では、どんなケースでeBPF APMを有効利用できるでしょうか。代表的なユースケースを以下に列挙しました。
アプリがたくさんあって導入のコストが大きい
1つは、アプリがたくさんあってAPMの導入のコストが大きい時です。モダンなマイクロサービス型のシステムでは、たくさんのアプリが連動してリクエストを処理することが珍しくありません。こんなとき、eBPF APMのエージェントはホスト上で動作しているアプリを自動的に検出して計装を開始してくれるので、アプリに個別にAPMエージェントを導入する場合と比べて導入が容易です。特に多くのアプリがコンテナとしてホスト上で動作するKubernetes環境に適しています。APMの導入で得られるメリットは大きいですが、まずはeBPF APMを導入して、本格的にAPMを導入する際のスクリーニングに利用するのも良いかもしれません。
APMエージェントを導入する裁量がない
また、担当者にAPMエージェントを導入する裁量がない場合にも効果的です。例えば、運用チームでAPMを導入したいが、開発チームが多忙で対応できなかったり、といったケースです。eBPF APM はOSのレイヤにエージェントを導入するため、そういったケースでも運用チームの裁量で導入できる可能性があります。また、企業のIT部門がITインフラを横断で管理していて、オブザーバビリティを浸透させたいが、アプリは個別部門が担当していてハードルがある、といったケースでも使えそうです。まずは eBPF APM を導入して価値を感じてもらい、本格的にAPMを導入するための下地を組織内に作っていくのにeBPF APMは有効です。
レガシーなシステムをモニタリングしたい
その他には、レガシーなシステムをモニタリングしたいケースです。eBPF APMは言語の種類やバージョンによらず導入できます。通常のAPMでサポートしていないCOBOLなどの言語を使っているシステムや、古いバージョンの言語を使っているレガシーなシステムにも導入することができます。
New Relic eBPFのセットアップ方法
New Relic eBPFは LinuxホストとKubernetesクラスターに導入することができます。セットアップ方法は簡単です。New Relic にログインしたあと、Integration & Agents メニューに移動し、Application monitoring から eBPF Agent を選択します。あとはガイドに従うことでeBPFエージェントを簡単にインストールすることができます。
インストールの要件はこちらを、詳細なインストール方法はこちらとこちらを参照ください。
まとめ
本記事では、eBPFによるオブザーバビリティとNew Relic eBPF(主にeBPF APM)について解説させて頂きました。
eBPF APM では、アプリケーションの詳細なパフォーマンス分析やエラー分析を行うといったことはできませんが、どのアプリの、どのトランザクションが問題の原因になっているかを特定することはできます。マイクロサービス型のシステムのように複数のアプリケーションが連動して処理をしているケースでは大きな効果を発揮してくれそうです。また、DB連携におけるN+1問題など、外部サービスとのインタラクションが問題になるケースでも有効です。
eBPF APMは、通常のAPMと比べて導入が容易です。様々な理由でAPMの導入にハードルがある、まずはお手軽に試してみたい、という状況でしたら、まずはeBPF APMの導入を検討してみてはいかがでしょうか。
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!





