地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

head baseかtail baseか

分散トレースのサンプリングを見ているとhead baseやtail baseという言葉が出てくる。

前者はサンプリングするデータの一番最初にfilterにかけるという手法。トレースはランダムにサンプリングしたり特定のアトリビュートに基づいてサンプリングをする。トレース用処理を全てのリクエストで行うのでなく一定の割合でサンプルすることで例えば従量課金のようなAPMや自分たちで運用しているサーバでも負荷を抑えたりすることができる。

一方でこの手法だと例えば0.1%のリクエストをサンプリングしているとして本来見つけたかったエラーやレイテンシの悪化を見逃す可能性が出てくる。エラーが発生した場合ならわかりやすいが特定のパスを通るのがとても少ない場合にそこでのエラーをトレースから見つけるのは割合にヒットするか運頼みになってしまう。

そういったデメリットを解決するための方法がtail baseのサンプリング手法である(と理解した)。tail サンプリングでは全てのリクエストのトレースを行った上でテレメトリーを送信するかを決定する方法となる。例えばレイテンシが300ms以上だったりレスポンスコードが500、特定の属性が付与されている場合といったようなリクエストのみを送信する仕組み。この仕組みを使えばheadサンプリングのデメリットの多くは解消できるであろう。一方で全てのリクエストに関する情報を処理するのでCPUやメモリ、ネットワークといったリソースあたりで使用傾向が変わってくるのは間違いないだろう。

参考

newrelic.com