tracing-samply — tracing と samply をつなぐサブスクライバーレイヤ

Library

概要

tracing-samply は Rust の計測エコシステムをつなぐ小さなユーティリティクレートで、tracing のイベントやスパン情報を samply に渡すための tracing-subscriber レイヤを提供します。現状ではスパンを samply の「マーカー」としてアドホックなファイル形式で出力し、実行時に samply がこれを検出してプロファイルへ取り込みます。スレッド生成時に samply がアタッチされている必要があるなど運用上の注意点がある一方、将来的な上流変更にも追随する方針です。

GitHub

リポジトリの統計情報

  • スター数: 3
  • フォーク数: 1
  • ウォッチャー数: 3
  • コミット数: 18
  • ファイル数: 11
  • メインの言語: Rust

主な特徴

  • tracing のスパンを samply のマーカーとして記録する tracing-subscriber レイヤ実装
  • samply のアドホックなマーカーファイル形式に対応してランタイムで検出・取り込み
  • スレッド作成時に samply がアタッチされている場合のみマーカーが検出される点に注意
  • 上流の変更に追随する設計で、マーカーファイルは暫定的な措置として扱われる

技術的なポイント

tracing-samply は tracing の観測フレームワーク(tracing)と、実行時プロファイラ(samply)を安全に連携させるためのレイヤを実装しています。具体的には tracing-subscriber の Layer トレイトを介してスパンの開始・終了などをフックし、それを samply が理解できる「マーカー」として出力します。現状の出力先は samply の ad-hoc マーカーファイル形式で、実行中に samply がこのファイルを検出してプロファイルに取り込みます。

設計上の重要な点はスレッド単位での検出挙動です。README にある通り、あるスレッドのマーカーはそのスレッドが作成された時点で samply がアタッチされている場合にのみ検出されます。つまり、後からプロファイラをアタッチしても既に存在するスレッドのマーカーは取り込まれない可能性があり、プロファイリングの開始タイミングやスレッド生成のタイミングに依存した運用上の注意が必要です。

また、現行のマーカーファイル方式は「暫定的な措置」と明示されており、将来的にはもっと直接的・堅牢な IPC や API 経由の連携に置き換わる可能性があります。ライブラリは上流(samply 側)の仕様変更に追随する方針を取っているため、互換性や実装の抽象化が意識されています。実装自体は軽量で依存も最小限に抑えられており、tracing を使ったアプリケーションに低オーバーヘッドで組み込める点が利点です。プロファイリング精度や導入時の注意点(スレッド作成タイミング、ランタイムでの検出など)を理解した上で利用することが推奨されます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .github: dir
  • .gitignore: file
  • Cargo.toml: file
  • LICENSE-APACHE: file
  • LICENSE-MIT: file

…他 6 ファイル

まとめ

tracing と samply をつなぐ軽量なレイヤで、プロファイリング導入のハードルを下げる一助になります。

リポジトリ情報:

READMEの抜粋:

tracing-samply

A [tracing-subscriber] layer that bridges [tracing] with [samply].

Currently, this only records spans as markers using samply’s ad-hoc marker file format, which are then detected at runtime by samply and written to the profile.

Markers for a thread are only detected if samply is attached when the thread is created.

This crate will adapt to any changes upstream. The creator has expressed that the marker file is a temporary measure and that it will be replaced with…