yak shaving life

遠回りこそが最短の道

Datadog AgentのCPU使用率が50%超えたらトレースを送ってくれなくなるのは仕様。でも設定変更できる

タイトルが全てという感じではあるが一応本文に詳細を書く。

一時期Datadog APMのTraceがあまり取れていない時期があり、Injection Rateがかなり低くなっていた(当時は任意の期間のInjestion Rateを見ることができた。2023年7月現在はなぜか見れない。不便)。そしてdropの理由のところにCPU usageがどうのこうのみたいに書いてあったので色々調べた。具体的には以下のような経過を辿った。

  • ドキュメントを頑張って読み漁ったが全く関連する記述が見当たらない
  • datadog-agentのリポジトリでコードを読み漁っていたら怪しい設定値(max_cpu_percent)を見つけた。
  • このコードコメント以外に全く説明がないし、かといってどういう風に使われているかまでコードを追うパワーも気力もなかったのでサポートに質問してみた
    • 「これは(Webアプリのコンテナではなく)datadog agentのコンテナのCPU使用率がこの値に達したらトレース送るのストップするという意味?(意訳)」と質問したら、「そうそうそれそれ〜(超意訳)」と返ってきた
  • この値を0にしたらトレース取れない問題は解消した

というわけで、デフォルトではdd-agentのコンテナのCPU利用率が50%になるとトレースを送ってくれなくなるので注意が必要。しかもドキュメントに全然書いてないので気をつけろ。

…しかし、この設定が存在する意味が正直わからない。普通に考えたらdd-agentのコンテナはdd-agentだけが動くんだからもっとCPU使ってもいいんでは?それにクラウドだったらovercommitとかもあるし100%超えるなんてザラ。というわけで基本的にこの設定は0(制限なし)にしておくのがいいと思います。DatadogにクラスタのCPU食い潰されちゃう可能性があるなんて怖い!という人は100にしとけばいいんじゃないかな。とにかくデフォルト値が50の意味が分からない。誰か理由知ってたら教えてください。

追記

公式ドキュメントに記述を発見した。(以前はなかった気がする)

docs.datadoghq.com

追記の追記

Datadog Agent 7.43.0から、コンテナ環境ではこの制約はデフォルトでdisabledされたらしい。よかったよかった。k8s環境ではもうちょい前からオフになってたとのこと。みなさんagentのバージョンあげましょう。

github.com