Flameshot
Flameshot は、Sidecar パターンで動作する軽量な自動パフォーマンスプロファイリングツールです。対象プロセスのリソース使用状況(CPU/メモリ)を監視し、あらかじめ設定した閾値に達すると、async-profiler などの低レベル Profiler を自動的に起動して、非侵襲で現場スナップショットを収集します。
コア機能と仕組み¶
動作モード¶
Flameshot は Sidecar コンテナ モードでデプロイします。業務用のメインコンテナ(Main Container)と同じ Pod 内で実行し、PID 名前空間の共有 を有効にする必要があります。
- 監視 (Monitor):Flameshot はメインコンテナ内の対象プロセスのリソース水位を継続的にポーリングします。
- トリガー (Trigger):閾値(例: CPU > 80%)に達するか、HTTP API リクエストを受けると、収集タスクを起動します。
- 実行 (Execute):設定された言語タイプ(現時点では Java と Go をサポート)に応じて、対応する Profiler ツールを呼び出して対象プロセスを収集します。
- 収集 (Collect):生成された Profile ファイル(例:
.jfrまたは.pprof)をオブザーバビリティセンターへアップロードします。 - 定時:
FLAMESHOT_AUTO_PROFILINGを設定すると、条件に合致した全プロセスを定期的に 1 回ずつ Profiling します。収集時間の既定値は 30s で、FLAMESHOT_AUTO_PROFILING_DURATIONで調整できます。 - OOM 要約: コンテナの
oom_kill増分を検知すると、Flameshot は対象 Java プロセスの起動引数から-XX:+HeapDumpOnOutOfMemoryErrorと-XX:HeapDumpPath=...を自動解析します。dump ファイルが共有ボリューム内にあり、生成に成功した場合、Flameshot は対応する.hprofを見つけて要約ログを 1 件アップロードします。
適用シーン¶
- 本番環境の保険:サービスが CPU 急上昇やメモリリークで落ちる直前に、現場証跡を自動で保持します。
- 性能負荷試験の分析:負荷試験基盤と組み合わせ、高負荷時の性能ホットスポットを自動収集します。
設定の詳細¶
Flameshot のすべての挙動は環境変数で制御します。設定は グローバル設定 と 収集ポリシー の 2 つに分かれます。
グローバル環境変数¶
これらの変数は Sidecar コンテナの基本動作を制御します。
| 変数名 | 必須 | 既定値 | 説明 |
|---|---|---|---|
FLAMESHOT_DATAKIT_ADDR |
はい | - | DataKit の Profiling データ受信エンドポイントのアドレス。 |
FLAMESHOT_PROFILING_PATH |
はい | /data |
共有ディレクトリのパス。ツールライブラリと生成された一時ファイルを格納するために使用し、メインコンテナのマウントと一致している必要があります。 |
FLAMESHOT_MONITOR_INTERVAL |
いいえ | 1 |
監視ポーリング間隔(秒)。 |
FLAMESHOT_LOG_LEVEL |
いいえ | info |
ログレベル。debug, info, warn, error から選択可能。 |
FLAMESHOT_HTTP_LOCAL_IP |
はい | - |
Sidecar 自身の HTTP サービスの待受アドレス。 |
FLAMESHOT_HTTP_LOCAL_PORT |
はい | 8089 |
Sidecar 自身の HTTP サービスの待受ポート。 |
FLAMESHOT_PROFILING_ENABLED |
いいえ | true |
JFR Profiling を有効にするかどうか。false にすると、定時・閾値・cgroup 高水位・HTTP 手動 Profiling は無効になりますが、OOM 検知、hprof アップロード、能動的 Heap Dump は維持されます。 |
FLAMESHOT_AUTO_PROFILING |
いいえ | - | 条件に合致した全プロセスを定期的に 1 回ずつ Profiling します。最小値は 1 分以上で、たとえば 5 分は "5m"、1 時間は "1h" と指定します。 |
FLAMESHOT_AUTO_PROFILING_DURATION |
いいえ | 30s |
定期収集モードでの 1 回あたりのサンプリング時間。 |
FLAMESHOT_OOM_HPROF_ENABLED |
いいえ | false |
OOM 後の .hprof 要約復旧フローを有効にします。Java プロセスのみに有効で、対象 JVM 側で -XX:+HeapDumpOnOutOfMemoryError を明示的に有効化し、共有ボリューム内の -XX:HeapDumpPath=... を設定している必要があります。リリース設定で明示的に宣言することを推奨します。 |
FLAMESHOT_OOM_HPROF_MATCH_WINDOW |
いいえ | 2m |
OOM イベントと .hprof ファイルの更新時刻を照合するウィンドウ。 |
FLAMESHOT_HPROF_UPLOAD_ENABLED |
いいえ | false |
一致した、または能動生成した .hprof をオブジェクトストレージへアップロードするかどうか。 |
FLAMESHOT_HPROF_UPLOAD_PROVIDER |
いいえ | - | オブジェクトストレージ種別。oss と s3 をサポートします。 |
FLAMESHOT_HPROF_UPLOAD_ENDPOINT |
いいえ | - | OSS/S3 endpoint。 |
FLAMESHOT_HPROF_UPLOAD_REGION |
いいえ | S3 の既定は us-east-1 |
S3 region。 |
FLAMESHOT_HPROF_UPLOAD_BUCKET |
いいえ | - | 対象 bucket。 |
FLAMESHOT_HPROF_UPLOAD_ACCESS_KEY_ID |
いいえ | - | オブジェクトストレージ AK。 |
FLAMESHOT_HPROF_UPLOAD_ACCESS_KEY_SECRET |
いいえ | - | オブジェクトストレージ SK。 |
FLAMESHOT_HPROF_UPLOAD_PATH_TEMPLATE |
いいえ | {service}/{pod_name}/{timestamp}/{filename} |
オブジェクトパステンプレート。service / pod_name / pod_namespace / host / pid / timestamp / filename などの変数をサポートします。 |
FLAMESHOT_HPROF_DOWNLOAD_URL_TEMPLATE |
いいえ | - | 任意のダウンロードリンクテンプレート。設定すると、イベント内でこのテンプレートに従って hprof_download_url を生成します。 |
FLAMESHOT_HEAP_DUMP_ENABLED |
いいえ | false |
メモリ緊急閾値に達した際に、Java Heap Dump を能動的に実行するかどうか。 |
FLAMESHOT_HEAP_DUMP_PATH_TEMPLATE |
いいえ | {profiling_path}/dumps/{service}_{pod_name}_{pid}_{timestamp}.hprof |
ローカル Heap Dump の出力パステンプレート。 |
FLAMESHOT_HEAP_DUMP_JMAP_PATH |
いいえ | jmap |
jmap 実行ファイルのパス。公式 Sidecar イメージには既定で JVM/JDK は含まれていないため、能動的 Heap Dump を有効にする場合は利用可能な jmap を明示的に用意する必要があります。 |
FLAMESHOT_HEAP_DUMP_TIMEOUT |
いいえ | 120s |
Heap Dump コマンドのタイムアウト時間。 |
FLAMESHOT_HEAP_DUMP_COOLDOWN |
いいえ | 10m |
単一プロセスに対する能動的 Heap Dump のクールダウン時間。 |
FLAMESHOT_POD_MEM_LIMIT |
いいえ | - | Pod のメモリ limit。単位は Mi。設定すると、Pod limit ベースでメモリ使用率を計算します。 |
FLAMESHOT_POD_CPU_LIMIT |
いいえ | - | Pod CPU limit。単位は m。設定すると、Pod CPU limit ベースで CPU 使用率を計算します。 |
FLAMESHOT_SERVICE |
いいえ | - | FLAMESHOT_PROCESSES に service を設定しなくても、すべて置換できます。 |
FLAMESHOT_TAGS |
いいえ | - | host pod_name pod_namespace の設定を推奨します。例: "host:host_name,pod_name:pod_a" |
DataKit を DaemonSet 方式でデプロイし、hostNetwork/hostPort で 9529 を公開している場合、Flameshot は通常の Service ドメイン名経由でランダム転送するのではなく、現在の業務 Pod が配置されているノード の DataKit に直接接続することを推奨します。
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: FLAMESHOT_DATAKIT_ADDR
value: "http://$(NODE_IP):9529/profiling/v1/input"
これにより、各業務 Pod は Profile を自身のノード上の DataKit にアップロードするようになり、調査やノードローカル収集の意味論を保ちやすくなります。
収集ポリシー設定 (FLAMESHOT_PROCESSES)¶
環境変数 FLAMESHOT_PROCESSES で監視対象を定義します。この変数の値は標準的な JSON 配列 文字列である必要があります。
Kubernetes YAML 内で設定の可読性を保つため、JSON 設定は YAML の複数行テキスト構文(|)で記述することを 強く推奨 します。以下の例を参照してください。
env:
# ... その他の環境変数 ...
- name: FLAMESHOT_PROCESSES
value: |
[
{
"service": "user-service",
"language": "java",
"command": "^java.*user-service\\.jar$",
"duration": "60s",
"events": "cpu,alloc",
"cpu_usage_percent": 80,
"mem_usage_percent": 80,
"mem_usage_mb": 1024,
"mem_usage_percent_emergency": 92,
"mem_usage_mb_emergency": 1536,
"heap_dump_on_memory_emergency": true,
"emergency_duration": "10s",
"tags": [
"env:prod",
"version:v1.2"
]
}
]
共通フィールドの説明:
service(String): オブザーバビリティセンターに報告されるサービス名。language(String): 対象プロセスの言語。現時点ではjava、go、golangをサポートします。command(String): プロセスのコマンドラインに一致する正規表現。duration(String): 1 回あたりの収集時間(例:30s,1m)。注意: 実行タイムアウトの制約があるため、5 分を超えないことを推奨します。emergency_duration(String): メモリ緊急閾値に達した後の高速収集時間。10sまたは15sの設定を推奨します。pprof_url(String): Go pprof の HTTP アドレス。例:http://127.0.0.1:6060。languageがgoまたはgolangの場合に設定が必要です。pprof_types(List): Go pprof の種類。cpu、goroutine、heap、mutex、blockをサポートし、profile 収集器の既存 Go pull モードと整合します。pprof_timeout(String): Go pprof リクエストのタイムアウト時間。durationより長く設定することを推奨します。tags(List): カスタムタグのリスト。env、versionなどのメタ情報を含めることを推奨します。cpu_usage_percent(Int): CPU トリガー閾値 (0-N)。マルチコア環境では 100 を超える場合があります。mem_usage_percent(Int): メモリ使用率の平均閾値 (0-100)。直近 5 点の平均値でトリガーします。mem_usage_mb(Int): メモリ使用量の平均閾値 (MB)。直近 5 点の平均値でトリガーします。mem_usage_percent_emergency(Int): メモリ使用率の緊急瞬時閾値 (0-100)。単一点で一致すると即時トリガーします。mem_usage_mb_emergency(Int): メモリ使用量の緊急瞬時閾値 (MB)。単一点で一致すると即時トリガーします。heap_dump_on_memory_emergency(Bool): メモリ緊急閾値に達した際、そのプロセス規則で能動的 Heap Dump を許可するかどうか。未設定の場合、FLAMESHOT_HEAP_DUMP_ENABLED=trueなら既定で許可されます。cpu_usage_percent、mem_usage_percent、mem_usage_mbは未設定または 0 の場合、その閾値チェックをスキップします。FLAMESHOT_POD_MEM_LIMITを設定すると、mem_usage_percentとmem_usage_percent_emergencyはホスト視点ではなく Pod limit 視点で優先的に計算されます。FLAMESHOT_HEAP_DUMP_ENABLED=trueを設定すると、メモリ緊急閾値に達した際にjmapHeap Dump タスクが投入されます。この機能を使うには、Sidecar 内でFLAMESHOT_HEAP_DUMP_JMAP_PATHが指すjmapを実行可能である必要があります。hprof のオブジェクトストレージアップロードも同時に設定している場合、生成された.hprofは継続してアップロードされ、イベントにはhprof_object_key、hprof_download_url、およびアップロード状態が含まれます。
言語別ガイド¶
監視対象アプリケーションの技術スタックに応じて、Flameshot は異なる低レベルツールを呼び出します。
Java Profiling¶
Java アプリケーション向けに、Flameshot には async-profiler (linux-amd64 / linux-arm64 対応) が内蔵されています。
重要な設定フィールド (FLAMESHOT_PROCESSES):
language: 必ずjavaに設定します。events:cpu(CPU cycles),alloc(メモリ割り当て),lock(ロック競合),cache-misses,nativememをサポートします。既定値はallです。jdk_version: (任意) メタデータ表示用の JDK バージョン。
注意事項:
- JVM Safepoint に依存せず、オーバーヘッドは非常に低いです。
- OOM 後に
.hprof要約ログを自動検出してアップロードしたい場合、業務 JVM 側で-XX:+HeapDumpOnOutOfMemoryErrorを明示的に有効化し、-XX:HeapDumpPath=...を設定する必要があります。FLAMESHOT_OOM_HPROF_ENABLED=trueを設定しただけでは、対象 JVM の起動引数は自動変更されません。 FLAMESHOT_HEAP_DUMP_ENABLED=trueを有効にすると、Flameshot はメモリ緊急閾値に達した際にjmap -dump:format=b,file=<path> <pid>を実行して.hprofを能動生成します。公式 Sidecar イメージには JVM/JDK は既定で含まれていないため、カスタムイメージ、ツールのマウント、その他の方法で対象 JVM と互換性のあるjmapを明示的に用意し、FLAMESHOT_HEAP_DUMP_JMAP_PATHでそのパスを指定する必要があります。HeapDumpPathは、業務コンテナと Flameshot Sidecar が 共通でマウント している共有ディレクトリを指していなければなりません。各プロセスごとに安定して識別可能な dump パスを設定することを推奨します。そうでないと、Flameshot が OOM を検知しても dump ファイルを読み取れません。.hprof要約復旧に関するスイッチは、暗黙の既定値に頼らず、リリース設定で明示的に宣言することを推奨します。
Go Profiling¶
Go アプリケーション向けに、Flameshot は業務プロセスが公開している net/http/pprof HTTP インターフェースから .pprof データを取得し、DataKit にアップロードします。
重要な設定フィールド (FLAMESHOT_PROCESSES):
language:goまたはgolangに設定する必要があります。pprof_url: 業務プロセスの pprof HTTP アドレス。例:http://127.0.0.1:6060。pprof_types:cpu、goroutine、heap、mutex、blockをサポートします。duration:cpuprofile の収集時間。/debug/pprof/profile?seconds=<duration>にマッピングされます。pprof_timeout: pprof リクエストのタイムアウト時間。durationより長くする必要があります。
Go アプリ側の要件:
import (
"net/http"
_ "net/http/pprof"
)
func main() {
go http.ListenAndServe("127.0.0.1:6060", nil)
}
pprof_url には、Flameshot Sidecar が 実際にアクセス可能な アドレスを指定する必要があります。典型的なケースは 2 つあります。
- pprof が
127.0.0.1:6060または0.0.0.0:6060で待ち受けている場合:http://127.0.0.1:6060を設定できます。 - pprof が Pod IP のみで待ち受けている場合、たとえば
10.x.x.x:6060: Downward API で Pod IP を注入し、http://$(POD_IP):6060を設定する必要があります。
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: FLAMESHOT_PROCESSES
value: |
[
{
"service": "go-app",
"language": "go",
"command": "^/app/go-app$",
"pprof_url": "http://$(POD_IP):6060",
"pprof_types": ["cpu", "goroutine", "heap", "mutex", "block"],
"duration": "30s",
"pprof_timeout": "45s"
}
]
設定例:
{
"service": "go-app",
"language": "go",
"command": "^/app/go-app",
"pprof_url": "http://127.0.0.1:6060",
"pprof_types": ["cpu", "goroutine", "heap", "mutex", "block"],
"duration": "30s",
"pprof_timeout": "45s",
"tags": ["env:prod", "version:v1"]
}
注意事項:
heap、mutex、blockは delta profile としてアップロードされ、最初のサンプリングはベースラインとして保存され、これらの delta 種別はアップロードされません。mutexとblockは既定では有効データを収集しません。業務コード側でruntime.SetMutexProfileFractionとruntime.SetBlockProfileRateを明示的に有効化する必要があります。- pprof インターフェースは機密性の高いランタイム情報を公開する可能性があるため、Pod 内のローカルアドレスのみに待ち受けさせ、Service やパブリックネットワークへは公開しないことを推奨します。
Python Profiling¶
予定: py-spy などの非侵襲ツールを統合する予定です。
デプロイガイド¶
Kubernetes Sidecar デプロイ¶
Flameshot を正常に動作させるには、Pod 設定が次の 3 条件を満たす必要があります。
- プロセス空間の共有 (
shareProcessNamespace: true)。 - 共有ストレージボリューム (EmptyDir)。
- システム権限 (Capabilities)。
YAML 例:
apiVersion: v1
kind: Pod
metadata:
name: java-app-profiled
spec:
# 1. [コア] PID 共有を有効化し、Sidecar が Java プロセスを参照できるようにする
shareProcessNamespace: true
volumes:
- name: shared-data
emptyDir: {}
containers:
# 業務コンテナ
- name: my-app
image: my-app:latest
volumeMounts:
- name: shared-data
mountPath: /data # Sidecar の設定と一致させる必要があります
# Flameshot Sidecar
- name: flameshot
image: pubrepo.jiagouyun.com/datakit/flameshot:latest
env:
- name: FLAMESHOT_PROFILING_PATH
value: "/data"
# ... その他の環境変数 ...
# 2. [コア] ptrace 権限を付与する
securityContext:
capabilities:
add: ["SYS_PTRACE"]
# 3. [コア] 同じディレクトリをマウントする
volumeMounts:
- name: shared-data
mountPath: /data
DataKit DaemonSet 設定の注意事項¶
DataKit を DaemonSet 方式でデプロイする場合、Flameshot は現在のノード IP 経由で Profile をアップロードすることを推奨します。
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: FLAMESHOT_DATAKIT_ADDR
value: "http://$(NODE_IP):9529/profiling/v1/input"
同時に、DataKit が次の条件を満たしていることを確認する必要があります。
-
profile 収集器が有効 であり、Profiling アップロードエンドポイントが登録されていること:
-
localhost 以外からの Profiling API アクセスを許可 していること。DataKit で HTTP API のホワイトリストを有効にしている場合は、
/profiling/v1/inputをENV_HTTP_PUBLIC_APISに追加してください:- name: ENV_HTTP_PUBLIC_APIS value: /otel/v1/trace,/otel/v1/metric,/otel/v1/logs,/profiling/v1/inputこの変数に他のインターフェースがすでに設定されている場合、既存値を直接上書きせず、末尾に
/profiling/v1/inputを追加してください。さもないと、次のようになります。 -
DataKit の待受アドレスがノード IP からアクセス可能 であること。DaemonSet の典型設定は
hostNetwork: true、hostPort: 9529、ENV_HTTP_LISTEN=0.0.0.0:9529です。
OOM HProf 要約の要件¶
Java プロセスで OOM が発生した後、Flameshot に .hprof 要約を自動補足させたい場合は、次の条件をすべて満たしてください。
- 業務 JVM の起動引数で
-XX:+HeapDumpOnOutOfMemoryErrorを有効にする。 - 業務 JVM の起動引数で
-XX:HeapDumpPath=/data/...を設定し、そのパスが共有ボリューム内にあること。 - Flameshot に
FLAMESHOT_OOM_HPROF_ENABLED=trueを設定する。 - 運用側で照合ウィンドウを明確に把握できるよう、
FLAMESHOT_OOM_HPROF_MATCH_WINDOWも明示的に設定することを推奨します。
例:
説明:
- Flameshot は対象 Java プロセスの起動引数から直接
HeapDumpPathを自動解析するため、.hprofのパスを別途設定する必要はありません。 FLAMESHOT_OOM_HPROF_ENABLEDは Flameshot 側の復旧ロジックを有効化するだけで、対象 JVM に HeapDump 関連パラメータを注入するものではありません。- 対象プロセスが
HeapDumpOnOutOfMemoryErrorを有効にしていない場合、またはHeapDumpPathが共有ボリューム内にない場合、Flameshot は OOM イベントのみを記録し、対応する.hprofファイルを見つけられません。 - dump 完了前にコンテナが直接終了した場合、
.hprofは生成されないことがあります。
Docker ローカルテスト¶
ローカルの Docker 環境でテストする必要がある場合は、次のコマンドで Flameshot を起動し、対象コンテナを監視できます。
前提条件:
--pid="container:<target_id>"を使用するか、共有ボリューム方式を使用します(Docker のバージョンに依存します)。
テストイメージ: pubrepo.jiagouyun.com/datakit/flameshot:1.85.1-testing_testing-iss-2876
起動コマンド例:
docker run -d \
--name flameshot-debug \
--volumes-from <YOUR_JAVA_APP_CONTAINER> \
-e FLAMESHOT_DATAKIT_ADDR="http://datakit:9529/profiling/v1/input" \
-e FLAMESHOT_PROCESSES='[{"service":"local-test","command":"java","language":"java","cpu_usage_percent":10}]' \
pubrepo.jiagouyun.com/datakit/flameshot:1.85.1-testing_testing-iss-2876
API リファレンス¶
Flameshot は HTTP インターフェースを提供し、ユーザーまたは自動化運用スクリプトが能動的に収集タスクをトリガーできるようにします。
手動収集トリガー¶
インターフェース:GET /v1/profile
意味の説明:このインターフェースは、必要に応じて 1 つの Profile データを生成するためのもので、監視メトリクスを取得するものではありません。
リクエストパラメータ:
| パラメータ名 | 必須 | 説明 | 例 |
|---|---|---|---|
pid |
どちらか一方必須 | 対象プロセス ID。command より優先されます。 |
1234 |
command |
どちらか一方必須 | 対象プロセス名の正規表現。対象プロセスの一致に使用します。 | ^java.*app.jar$ |
duration |
いいえ | 収集時間。既定値は 30s です。 |
30s |
events |
いいえ | Java の収集イベント種別。既定値は all です。Go の収集では pprof_types を優先して使用します。 |
cpu,alloc |
使用例:
-
PID 指定で収集をトリガー:
-
プロセス名の正規表現で収集をトリガー:
JFR データ形式¶
以下は主要なイベント種別の詳細です。
| イベント種別 (Event) | 対応パラメータ | コア原理 | 適用シーン | 備考 |
|---|---|---|---|---|
| CPU Time | cpu | カーネルサンプリングまたは itimer を用いて、CPU が定期的にどのコード命令を処理しているかを確認します。 | 性能改善: 計算集約型の「ホットメソッド」を特定し、アルゴリズムロジックを最適化します。 | CPU 上で実行された時間のみを記録します。 |
| Wall-clock | wall | スレッド状態(実行、スリープ、ブロック)に関係なく、固定頻度でサンプリングします。 | 応答時間の診断: I/O ブロック、DB 呼び出しの遅さ、ネットワーク遅延などを調査します。 | スレッドが「何を待っているか」を把握できます。 |
| Allocation | alloc | TLAB(スレッドローカル割り当てバッファ)の割り当て状況と大きなオブジェクトの割り当てを記録します。 | メモリ最適化: メモリの揺らぎを特定し、頻繁な GC による停止を減らします。 | 記録されるのは割り当て動作であり、現在の生存メモリ量ではありません。 |
| Lock | lock | synchronized キーワードにおけるスレッド競合と待機時間を記録します。 | 並行処理のボトルネック: 激しいロック競合、スレッドデッドロック、同期ブロックの実行遅延を調査します。 | 既定では通常、一定閾値を超えるブロックイベントを記録します。 |
| Cache Misses | cache-misses | ハードウェア性能カウンタ (PMU) を利用して L1/L2/L3 キャッシュミス回数を集計します。 | 低レベル調整: データ構造の最適化(CPU アフィニティ、false sharing 問題など)を行います。 | Linux カーネルで perf_events のサポートが必要です。 |
| Context Switch | context-switches | OS がスレッドを切り替える頻度を記録します。 | リソーススケジューリング最適化: スレッド数が多すぎないか、システム負荷が過大でないかを調査します。 | 頻繁な切り替えは、CPU 時間が管理オーバーヘッドに浪費される原因になります。 |
| Java Methods | itimer | カーネルタイマーに基づくサンプリングです。 | 互換モード: perf_events が使えない環境(例: 一部コンテナ)で CPU サンプリングの代替として使用します。 | ハードウェアサンプリングより精度はやや低いですが、互換性は非常に高いです。 |
alloc は現在の全メモリの合計ではなく、現在のサンプリング期間内に割り当てられたメモリ量です。
よくある問題と切り分け¶
-
データを収集できない?
- Pod で
shareProcessNamespace: trueが有効になっているか確認してください。 - Sidecar に
SYS_PTRACE権限があるか確認してください。 - Go アプリについては、
pprof_urlが Flameshot Sidecar 内からアクセス可能か確認してください。 -
Go アプリの場合、まず Flameshot コンテナ内で pprof endpoint にアクセスできることを確認します。
-
ログに
connect: connection refusedが出る場合、対応する IP:Port が待ち受けていません。Pod に入って確認してください。
LISTENが表示されない場合、業務プロセスが pprof を有効化していないか、待受ポートが 6060 ではありません。60602 ... ESTABLISHEDのような接続が見えても、6060 が待ち受けていることにはなりません。 - pprof が Pod IP で待ち受けている場合、pprof_urlはhttp://$(POD_IP):6060に設定してください。loopback または全アドレスで待ち受けている場合はhttp://127.0.0.1:6060を使用できます。 - Pod で
-
ファイルがアップロードされない?
FLAMESHOT_PROFILING_PATHが 2 つのコンテナ間で正しくマウントされているか確認してください。- システムがファイルのライフサイクルを自動管理し、収集完了後に一時ファイルの削除を試みます。
- Go の収集は
.pprofをメモリアタッチメント形式で直接アップロードするため、通常はローカルへの書き出しに依存しません。Go の収集ログにすでにupload to DataKit errが出ている場合は、まず DataKit が返す HTTP ステータスコードとレスポンス本文を確認してください。 -
DataKit が
403を返し、datakit.publicAccessDisabledを含む場合、/profiling/v1/inputが localhost 以外に開放されていません。DataKit 設定に次を追加してください。 -
DataKit が
input "profile" is not enabled for API "/profiling/v1/input"を返す場合、DataKit で profile 収集器が有効化されていません。次を有効化してください。
-
正規表現設定が面倒
- JAVA アプリのプロセス名はすべて
javaなので、"command":"java"と"language": "java"を設定するだけで、すべての JAVA アプリにマッチします。 - 特定のアプリだけを設定したい場合は、正規表現の設定が必須です。
- JAVA アプリのプロセス名はすべて
更新履歴 (Changelog)¶
0.2.2 (2026-5-12)¶
問題修正¶
- 修正
- Profiling 上報メタデータの
tags_profilerにhost、env、version、serviceなどのタグが重複書き込みされる可能性がある問題を修正しました。
- Profiling 上報メタデータの
- 調整
- 高水位
jcmdスナップショット機能および関連設定項目を削除しました。 - cgroup メモリ圧迫時の観測フィールドを追加し、閾値、cgroup 現在値、および上限値の調査をしやすくしました。
- 高水位
0.2.1 (2026-2-11)¶
新機能¶
- 最適化
- コンテナ環境では、リソース設定のサイズを閾値計算の基準値として使用します。
0.2.0 (2026-2-4)¶
新機能¶
- 設定追加
- 環境変数
FLAMESHOT_AUTO_PROFILINGによる定期 Profiling 実行をサポートしました。
- 環境変数
- 機能最適化
- 設定閾値を最適化しました。
0.1.0 (2025-12-17)¶
Flameshot の最初の正式版です。コンテナ環境下の Java アプリケーションに対して、自動化されたパフォーマンスプロファイリング機能を提供することに重点を置いています。
新機能¶
- コアアーキテクチャ:
- Kubernetes の Sidecar モード デプロイをサポートし、共有 PID 名前空間を利用した非侵襲監視を実現します。
- Linux AMD64 と ARM64 のマルチアーキテクチャ実行をサポートします。
- 言語サポート:
- Java:
async-profilerを深く統合し、CPU、Alloc、Lock など複数のイベント収集をサポートします。 - 対象コンテナの JDK 環境を自動検出して適応します。
- Java:
- トリガーメカニズム:
- 閾値トリガー: CPU 使用率 (
cpu_usage_percent) とメモリ使用率/量 (mem_usage_percent/mem_usage_mb) に基づく自動トリガーをサポートします。 - API トリガー: HTTP インターフェース
GET /v1/monitorを提供し、PID または正規表現でプロセス名を指定して手動トリガーできます。
- 閾値トリガー: CPU 使用率 (
- データ統合:
- 生成された
.jfrまたはフレームグラフデータを DataKit に自動報告できます。 - 環境変数
FLAMESHOT_PROCESSESで、複数プロセスの監視ポリシーとタグ (tags) を柔軟に設定できます。
- 生成された