Peeka

かくれんぼ — 名前は子供のゲーム「ピークアブー」から来ています。隠れたバグを見つける診断ツールは、かくれんぼで誰かが見つかったときの驚きの瞬間のようなものです。

PEP 768 (Python 3.14 リモートデバッグプロトコル) ベースのランタイム診断ツールで、非侵入型の関数オブザベーション機能を提供します。

このドキュメントは Peeka v0.1.10 に対応しています。

クイックスタート GitHub で表示


🌐 言語 / Language: このドキュメントは中文(中国語)English(英語)Español(スペイン語)でも利用可能です。


Peeka とは?

Peeka は、本番環境で Python 開発者にリアルタイム診断機能を提供するツールです。ターゲットコードを変更することなく、実行中の Python アプリケーションを動的にオブザーベーションし診断することができます。

なぜ Peeka が必要なの?

従来の Python デバッグ方法は、本番環境で多くの課題に直面します:

  • サービスを停止できない - ブレークポイントデバッグはプロセスをブロックする
  • 断続的な問題 - 実際の負荷の下でオブザベーションする必要がある
  • コード変更の難しさ - 本番環境に自由にデプロイできない

Peeka は特にこれらの本番環境診断課題を解決するために設計されました。


コア機能

🔍 非侵入型オブザベーション

  • ターゲットコードを変更する必要なし
  • 実行時に動的にオブザベーションロジックをインジェクト
  • 診断後に完全に復元可能

⚡ リアルタイム診断

  • ミリ秒レベルのデータ送信レイテンシ
  • ストリーミングオブザベーションデータプッシュ
  • JSON フォーマット出力で他のツールとの連携が容易

🛡️ 本番環境対応

  • パフォーマンスオーバーヘッド < 5%
  • 完全な例外キャプチャと回復メカニズム
  • 固定メモリバッファでメモリ膨張を防止

🎯 条件付きフィルタリング

  • 安全な式フィルタリング (simpleeval ベース)
  • 柔軟なフィルタリング構文 (パラメータ、戻り値、実行時間など)
  • すべてのコードインジェクション攻撃をブロック (__import__evalexec など)

クイックスタート

インストール

pip install peeka

基本的な使い方

1. ターゲットプロセスにアタッチ

peeka-cli attach <pid>

2. 関数呼び出しをオブザーブ

# 5 回の呼び出しをオブザーブ
peeka-cli watch "module.Class.method" --times 5

# 条件付きフィルタリング
peeka-cli watch "module.Class.method" --condition "len(params) > 2"

# リアルタイムストリーミングオブザベーション
peeka-cli watch "module.Class.method"

3. データ処理

# jq で結果を抽出
peeka-cli watch "module.func" | jq 'select(.type == "observation") | .data.result'

# 遅い呼び出しをフィルタ
peeka-cli watch "module.func" | jq 'select(.type == "observation" and .data.duration_ms > 1)'

主な機能

コマンド 機能 ステータス
attach ターゲットプロセスにアタッチ
watch 関数呼び出しをオブザーブ(パラメータ、戻り値、時間)
trace 呼び出しチェーンと実行時間をトレース
stack 呼び出しスタックをトレース
monitor パフォーマンス統計をモニタリング
logger 動的にログレベルを調整
memory メモリ分析
inspect 実行時オブジェクト検査
sc/sm クラスとメソッドを検索
reset 拡張をリセット
thread スレッド分析
top 関数レベルパフォーマンスサンプリング
detach 診断セッションを安全に終了

完全なコマンドリファレンスを見る

🎨 インタラクティブ TUI インターフェース

CLI コマンドに加えて、Peeka は機能豊富な TUI(テキストユーザーインターフェース)も提供しています:

  • プロセスセレクター - システムプロセスリストを自動表示、検索フィルタリング付き
  • 10 個の専用ビュー - ダッシュボード、ウォッチ、トレース、スタック、モニター、ロガー、メモリー、インスペクト、スレッド、トップ
  • リアルタイムデータストリーム - オブザベーションデータをストリーミング、一時停止/再開/クリア対応
  • オートコンプリート - ターゲットプロセスからクラスとメソッドを動的に取得
  • テーマサポート - 複数のビルトインカラーテーマ

Peeka Dashboard ビュー

# TUI を起動
peeka

# 数字キーでビューを切り替え
# 1/2/3/4/5/6/7/8/9/0

完全な TUI 使用ガイドを見る



技術的ハイライト

Python 3.14 リモートデバッグプロトコル (PEP 768)

コアの sys.remote_exec(pid, script_path) 関数がシステム全体の動作の鍵であり、複雑なプロセスアタッチ、コードインジェクション、実行スケジューリングロジックをカプセル化しています。

Python < 3.14 へのフォールバック: 古い Python バージョンでは、Linux では GDB + ptrace、macOS では LLDB + dlopen を使用 (参考: pyrasite)。

Unix ドメインソケット

Unix ドメインソケットをプロセス間通信の主なメカニズムとして使用:

  • より高い送信効率 - ネットワークプロトコルスタックが不要
  • より強いセキュリティ - ローカルプロセスのみが利用可能
  • シンプルで信頼性 - 長さプレフィックス + JSON フォーマット

安全な条件式評価

simpleeval ライブラリベースで安全な条件付きフィルタリングを実装:

  • AST ホワイトリスト - 安全な操作のみを許可
  • 属性保護 - リフレクション攻撃をブロック
  • 関数ブラックリスト - 危険な関数を無効化

アーキテクチャ設計を学ぶ


サポートされている Python バージョン

Python バージョン アタッチメカニズム 要件
3.14+ PEP 768 sys.remote_exec なし
3.8.1-3.13 Linux: GDB + ptrace、macOS: LLDB + dlopen Linux: GDB 7.3+, python3-dbg, CAP_SYS_PTRACE、macOS: Xcode Command Line Tools

ライセンス

Peeka は Apache License 2.0 の下でオープンソースです。


謝辞

  • セキュリティ評価: simpleeval
  • リモートデバッグプロトコル: PEP 768

トップに戻る

Copyright © 2026 Peeka contributors. Distributed under the Apache License 2.0.

This site uses Just the Docs, a documentation theme for Jekyll.