IT運用・統制

OpenTelemetryとは|保存量をほぼ変えずに、失敗の残り率が0.0%から100%になった

どこで間引くのか稀な失敗は残るのか量はどれだけ増えるのか

入口で1%だけ残す設定では、その日の失敗の2.2%しか記録に残りませんでした。

出口で選ぶ形に変えると、保存量はほぼ同じまま残り率が100%になります。

この記事の要点

  • 1%だと失敗は2.2%しか残らない
  • 3回の出来事は97.3%の日が空振り
  • 出口で選べば100%
  • 6サービスで1件16点

1%残す設定では、1日3回の出来事が97.3%の日で消える

入口で決める方式は、中身を見ずに捨てます。稀なものほど、まるごと残らなくなります。

OpenTelemetryには、入口で早く決める間引き方があります。公式は入口での間引きは、できるだけ早い段階で残すか捨てるかを決める手法であると述べています。

中身を見ずに決めます。では稀な出来事はどれだけ残るのか。1万日ぶん観察して数えました。

発生回数と残す割合を変える

text
1日に何回か起きる出来事を、入口で間引きながら 10,000 日ぶん観察する
その日の分が1件も残らなかった日を数える

1日の発生回数            0.1%残す          1.0%残す          5.0%残す         10.0%残す        100.0%残す
1回                        99.9%           99.1%           94.7%           89.7%            0.0%
3回                        99.7%           97.3%           85.8%           72.9%            0.0%
10回                       99.0%           90.2%           60.5%           35.2%            0.0%
100回                      90.6%           36.6%            0.7%            0.0%            0.0%

1日3回の出来事を1%で間引くと、97.3%の日は1件も残りません。調べようとしても手がかりが出てきません。

10%まで上げても72.9%です。10倍の量を保存しても、まだ空振りのほうが多いという結果でした。

回数が多いものだけ見える

表の下に行くほど改善します。1日100回なら、5%で0.7%まで下がります。

つまり入口での間引きは、よく起きるものを見る用途に向いています。稀なものを追う用途とは相性が悪くなります。

この「見たいものほど見えない」という形は、Prometheusの記事で扱った短い山の見逃しとも同じ構図です。

残す割合を10倍にしても、空振りの日は半分にもならない。

単位: %0.1%残す99.7%1%残す97.3%5%残す85.8%10%残す72.9%全部残す0%1万日ぶんの実測。1日1回の出来事なら、10%残しても89.7%の日が空振りになる。
図1 ── 1日3回の出来事が、1件も残らなかった日の割合
出典OpenTelemetry 公式ドキュメント「Sampling」2026-08-18 確認
Head sampling is a sampling technique used to make a sampling decision as early as possible.
原文OpenTelemetry 公式ドキュメント「Sampling」 この内容の有効期限2027-02-18

保存量はほぼ同じで、失敗の残り率が0.0%から100%になる

出口で選べば、同じ量で残るものが変わります。代わりに、判断まで持っておく仕組みが要ります。

OpenTelemetryには、記録の中身を見てから決める間引き方もあります。公式は出口での間引きは、記録に含まれる点の全部かほとんどを踏まえて、残すかどうかを決めるものであると述べています。

同じ保存量で、どれだけ違うのか。2つの方式を並べて数えました。

入口と出口を並べる

text
1日 1,000,000 件。うち失敗は 92 件(0.009%)
入口で一律に間引く場合と、出口で失敗だけ全部残す場合を比べる

選び方                    残した件数      残った失敗      失敗の残り率
入口で 0.1% 残す                     1,036件            0件          0.0%
入口で 1.0% 残す                     9,979件            2件          2.2%
入口で 10.0% 残す                   99,890件            8件          8.7%
出口で失敗+成功 0.1%                   1,070件           92件        100.0%
出口で失敗+成功 1.0%                  10,109件           92件        100.0%
出口で失敗+成功 10.0%                100,233件           92件        100.0%

1行目と4行目を比べます。保存量は1,036件と1,070件でほぼ同じです。

それでも失敗の残り率は0.0%と100.0%です。量ではなく、選び方だけで変わっています

そのかわりに要るもの

失敗はもともと92件しかありません。全部残しても、100万件のうちの0.009%にすぎません。

ただし出口で決めるには、決まるまで1件ぶんの点を持っておく必要があります。入口で決めるなら、その置き場は要りません。

この置き場をどこに用意するかは、トレース設計の記事で扱った収集役の配置と同じ判断になります。

出典OpenTelemetry 公式ドキュメント「Sampling」2026-08-18 確認
Tail sampling is where the decision to sample a trace takes place by considering all or most of the spans within the trace.
原文OpenTelemetry 公式ドキュメント「Sampling」 この内容の有効期限2027-02-18

6サービスをまたぐと、1件が16点に分かれる

1件の重さは呼び出しの階層で決まります。サービスを分けるほど、記録の量が増えます。

OpenTelemetryでは、入口で決める場合は全体を見ません。公式は残すか捨てるかの判断は、記録の全体を調べることでは行われないと述べています。

全体は、複数の点に分かれています。呼び出しの形で何点になるのか、形を変えて数えました。

呼び出しの形を変える

text
1日 200,000 件。1件の記録が何個の点に分かれるかで、量がどう変わるかを見る
1点あたり 400 バイトとして計算する

呼び出しの形      1件あたりの点数        1日の点数        1日の量      1%だけ残す場合
入口のみ                          1点          200,000点        0.07GB             0.8MB
入口+DB                         2点          400,000点        0.15GB             1.5MB
3階層                           5点        1,000,000点        0.37GB             3.8MB
6サービス                        16点        3,200,000点        1.19GB            12.2MB

入口だけなら1点です。6サービスをまたぐと16点になり、量は16倍になります。

同じ件数でも、構成を分けた分だけ記録が増えます。分割の判断が、そのまま保存量の判断になっています。

見積もりの順番

  1. 1件が何点になるかを数える。階層と呼び出し回数から出る
  2. 1日の件数を掛ける。ここまでは間引く前の量
  3. 残したい出来事の発生回数から割合を決める。量から決めない

3番目が要点です。量から先に決めると、最初の節で見たとおり稀なものが消えます

余談 この計測での注意

3つの計測はいずれも手元で書いた模型で、実際のOpenTelemetryを動かしたものではありません。出来事が独立に起きると置いており、まとまって起きる場合の結果は違います。失敗92件は0.01%の割合から作った値で、実際の失敗率とは関係ありません。1点400バイトも置いた値です。ここで見せているのは、入口で間引くと稀なものが消えるという点と、保存量をほとんど変えずに選び方だけで残るものが変わるという点の2つです。

出典OpenTelemetry 公式ドキュメント「Sampling」2026-08-18 確認
A decision to sample or drop a span or trace is not made by inspecting the trace as a whole.
原文OpenTelemetry 公式ドキュメント「Sampling」 この内容の有効期限2027-02-18

よくある質問

OpenTelemetryはどこで間引きますか
2通りあります。入口で早く決める方式と、記録の全体を見てから決める方式が説明されています。
入口で間引くと何が困りますか
稀な出来事が消えます。1%残す設定では、1日3回の出来事が97.3%の日で1件も残りませんでした。
出口で選ぶと量は増えますか
ほとんど増えませんでした。1,036件に対して1,070件で、失敗の残り率は0.0%から100%になりました。
1件の記録はどれくらいの大きさですか
呼び出しの形で変わります。6サービスをまたぐ形では1件が16点に分かれました。

まとめ

  • 間引く場所で残るものが変わる
  • 入口だと稀なものが消える
  • 出口なら同じ量で全部残る
  • 1件の重さは階層で決まる

今日から始められること

  1. いまの間引き方が入口か出口かを確かめる
  2. 残したい出来事の1日の発生回数を数える
  3. その回数で空振りする日の割合を見る
  4. 1件が何点に分かれているかを確かめる

実務で組んだOpenTelemetryのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る