GrafanaCON 2025から、ソフトウェアのインストルメンテーションツールであるBeylaについて解説したセッションを紹介する。プレゼンターはGrafana LabsのプロダクトマネージャーであるGoutham Veeramachaneni氏とソフトウェアエンジニアのNikola Grcevski氏だ。
セッションの動画は以下から参照されたい。
●動画:Auto-Instrument Everything with eBPF: Grafana Beyla + OpenTelemetry in Action | Homelabs
セッションはBeylaの概要の説明から始まった。ここではOpenTelemetryのためのインストルメンテーションツールであり、内部でeBPFを使っていると語った。どのプログラミング言語にも対応し、HTTP、HTTPS、gRPCなどのプロトコルのデータをキャプチャーできること、Kubernetes及びコンテナに対応していることを説明した。
Beylaによって単なるログから異常を発見するのではなく実際の数値を見ながらシステムを監視することが可能になり、同時にトレースの取得も可能になると説明。ここでは2.0のリリースによって機能強化がされたことも合わせて説明した。
またアプリケーション内部だけではなく外部との通信に関するメトリクスも取得することで、マクロ的にシステムを俯瞰することが可能になる。
そしてここでBeylaの持つeBPFの仕組みについて解説。
カーネルに変更を加えなくても安全にカーネル上で実行されるプログラムを実装できるのが特徴だ。eBPFで収集されたデータはOpenTelemetryのコレクターが収集するほか、Prometheusに集約させることもできるし、Grafana Labsが運営するクラウドサービスにも集約させられる。
ここでPythonのアプリケーションを例にとって解説を開始した。これはWebアプリケーションがHTTPでやりとりするデータをRedisに書き込むという仕組みの中で、Beylaがシステムコールをフックしてトレースデータを集めるという部分を解説している。
その結果としてトレーシングの結果をGrafanaのダッシュボードで可視化できることを紹介。
そしてGrafana Labsが開発したBeylaをOpenTelemetryのコミュニティに寄贈したことを説明。Grafana Labsの仕事からオープンなコミュニティに移ることで、BeylaのメインテナーはUpstreamを最優先にしてソフトウェア開発を続けることになると説明し、参加者からの拍手による賛同を得た形になった。
ここまで説明を行ってきたGrcevski氏と交代で、ここからはVeeramachaneni氏がプレゼンテーションを担当。ここでは自宅のホームラボに設置した機器を監視するという例を挙げて解説を続けた。
Veeramachaneni氏はネットワークとデータセンターのモデルを極小化して自宅のRapsberry Piなどでも実行できることを目指した「Awesome-Selfhosted」という名称のDIYプロジェクトを紹介。すべてをオープンソースで構成することで、市販のDIYハードウェアによって一般的なサービスを実現するというのが目的のホビープロジェクトだが、GitHubの公式サイトを眺めてみればその本気度がわかるだろう。
●Awesome-Selfhosted公式サイト:https://github.com/awesome-selfhosted/awesome-selfhosted
このプロジェクトを自宅のRapsberry Piサーバーで実装した上に、アプリケーションのインストルメンテーションを実行するというのが後半の内容だ。ブログのホスティングから購入した書籍データベースの構築まで、この後で解説が行われた。
やりたいことはLinuxサーバーやネットワーク、アプリケーションのオブザーバビリティだ。この文脈ではオブザーバビリティに使われるのがOpenTelemetryというのは特に不思議ではないだろう。ただしアプリケーションのインストルメンテーションについては、既存のOpenTelemetry Operatorではプログラミング言語の対応が足らない、運用が自動化できないなどの不満点があったと説明した。
そこでBeylaと比較を行い、Daemonsetによる実装とHelm Chartによって導入とライフサイクルの管理が可能な点がBeylaの優位点であると説明した。
そしてソフトウェアエンジニアにありがちな「買ってはみたものの読まずに積んでおく」ことがVeeramachaneni氏にもよく起こるとして「積読」を紹介。この話には会場からも笑いが起きており、エンジニアにはよく起こる状況ということだろう。そのためにISBNのバーコードを読み取るためのバーコードリーダーを購入して、その本がどこの棚にしまわれているのかを管理するアプリケーションを開発したと説明。
そしてそのアプリケーションのインストルメンテーションについて、Go言語の公式インストルメンテーションとBeylaによるインストルメンテーションの比較を実施した。
公式のインストルメンテーションではアプリケーションの動作を詳細に分析することはできず、またライブラリーの導入のためのボイラープレートが多く必要となり、ソースコードの可読性が低下してしまうことを説明。それに対してBeylaでは、追加されるコードは最低限に留まることなどを説明した。
ここではGo言語公式のインストルメンテーションとBeylaによるインストルメンテーションを比較しているが、ポイントとしてはBeylaによってボイラープレートを減らしながらも、より高度なトレーシングが可能になることに尽きるだろう。そのための題材としてVeeramachaneni氏が趣味で行っているサーバーとGoによるアプリケーション開発を選んだということだ。
最後に書籍のバーコードをスキャンして書籍データベースを更新するシンプルなアプリケーションであってもマニュアルでインストルメンテーションを行う修正をするためには数時間が必要だったと説明。その状況においてBeylaを使うことで非常に高速にインストルメンテーション自体を組み込むことが可能になる。しかし実際の業務アプリケーションにおいては、マニュアルでインストルメンテーションを行う必要も出てくるだろうとして、Beylaによるインストルメンテーションと言語ごとに存在するネイティブのインストルメンテーションは敵対する選択肢なのではなく、お互いを補完する方法論であるべきだとして「Beyla Loves Native Instrumentation」というスライドを示してセッションを終えた。
実際に自身が開発するコードを見せて違いを説明し、速度や機能なども合わせて解説する部分にBeylaに対する愛を感じさせる内容となったセッションであった。
- この記事のキーワード