Slide 1

Slide 1 text

Exponential Histogram? OpenTelemetry Meet Up 2024-02-15 id:rmatsuoka

Slide 2

Slide 2 text

id:rmatsuoka - 株式会社はてな - 2023年新卒!! - Mackerel - Application Engineer

Slide 3

Slide 3 text

Mackerel

Slide 4

Slide 4 text

Mackerel では OpenTelemetry の メトリクスへの対応を 進めています

Slide 5

Slide 5 text

OpenTelemetry のメトリクス形式 - Sum - Gauge - Histogram - Exponential Histogram <- これなに?

Slide 6

Slide 6 text

Histogram!

Slide 7

Slide 7 text

ヒストグラムは何に使われているのか - HTTPレスポンスタイム - SQL のクエリにかかった時間 - GC が stop the world した時間 - Span Metric Connector

Slide 8

Slide 8 text

Histogram のデータ形式 Bucket: []float ExplicitBounds: []float Timestamp: Time Bucket ExplicitBounds 度数分布表 より引用 実際にはもっとフィールドがある。このデータは概念的なもの。

Slide 9

Slide 9 text

Exponential Histogram?

Slide 10

Slide 10 text

Exponential Histogram が送ってくる データ形式 - Bucket: []float - Scale: int - Timestamp: Time

Slide 11

Slide 11 text

(再掲) Histogram のデータ形式 - Bucket: []float - ExplicitBounds: []float - Timestamp: Time

Slide 12

Slide 12 text

階級はどうやって計算される? s=Scale, Bucket の i-番目の Boundsは 上の数式で表される

Slide 13

Slide 13 text

Exponential Histogram で計装する - デフォルトでは Histogram として計装され る。 - Exponential Histogram で計装するには設定 が必要 export OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION= BASE2_EXPONENTIAL_BUCKET_HISTOGRAM

Slide 14

Slide 14 text

Exponential Histogram は何が嬉しい - 階級(Scale) を自動に設定してくれる。 - 普通の Histogram では、自分で階級を設定する必要 がある - 試行錯誤がめんどくさい - 設定した階級がしょぼいと、パーセンタイルなどの誤 差が大きい(p99 が最大値を超えたり)

Slide 15

Slide 15 text

階級の設定の失敗例 https://opentelemetry.io/blog/2022/exponential-histograms/ から拝借

Slide 16

Slide 16 text

Histogram を保存するには? - Mackerel が対応しているメトリックの形式は Gauge, Sum など のスカラーな時系列 - ただヒストグラムも使いたい! - Exponential Histogram は既存のデータ型とは異なって実装コス トが大変 - Gauge: {timestamp, float} - Exponential Histogram: {timestamp, float, []float}

Slide 17

Slide 17 text

Mackerel ではどう考えた? - Exponential Histogram の扱いは検討中 - 現状 p99 や max などの代表値(スカラー)だけを保存する - Histogram に比べて Exponential Histogram の方がメリットが ある - 将来 Exponential Histogram が主流になりそう - 現実的には代表値で十分かも? - ヒストグラムのユースーケースをぜひ教えてください!