ログは、問題が発生したときに生命線になることがあります。問題を解決するには、問題を再現する必要があり、デバッグ ログは非常に重要です。しかし、そこには落とし穴があります。それはコストです。アプリケーションの規模が拡大するにつれて、ログの取り込みと保存のコストも増加します。そのため、ログが少なすぎて役に立たないか、使用していないログに料金を支払うかのトレードオフを余儀なくされます。
Thom Shutt はかつて、エラーのみをログに記録するべきだと主張し、警告、情報、およびデバッグ レベルを破棄することを提案しました。彼の論理的根拠は?実稼働環境でログ レベルを変更することの難しさ:
レベルを捨てる - 最後に情報以外でプロダクションを実行したのはいつですか?レベルの変更は、チームの全員がその方法を知っている簡単なプロセスですか?
実際、ログ レベルを変更するにはコミット、ビルド、デプロイが必要となるため、ほとんどの人はログ レベルを頻繁に変更しません。ログ レベルの変更が面倒なプロセスである場合、これらの追加行は実際には単なるノイズになります。
動的構成を入力します。多くの人はこれに馴染みがないかもしれませんが、それを受け入れたことのある人は、それなしの生活を想像することはできません。アプリがプロパティ ファイルまたは環境変数を読み取る静的構成とは異なり、動的構成は名前が示すように動的です。
UI を通じて新しい値を設定する機能が提供され、各評価で最新バージョンが確実に取得されます。
このテクノロジーは動的ログのバックボーンです。ロガー -> LogLevel マッピングを構成システムに保存し、変更に応じてロガーを更新することで、数時間ではなくミリ秒で警告からデバッグに移行できます。
プレハブは、ロギングへのアプローチ方法に革命をもたらしています。プレハブを使用すると、次のことが可能になります。
伐採のコストは大規模になると深刻になり、すべて量に関係します。アグリゲーターは、Datadog のLog Without Limitsなど、この支出を削減しようとする新しい方法を提供しており、 Criblは基本的に全社を挙げてこの問題に取り組んでいます。
ただし、これらのソリューションはすべて、使用量に基づいて料金が発生します。結局のところ、送信したログに対して料金を支払うことになります。
ログは Prefab を通過しないため、ログの量に基づいて課金されるのではなく、単に動的構成をサーバーに提供することに対してのみ課金されます。 Prefab はフィルターの値を制御するだけで、必要なものだけをログに記録できます。このアプローチは、特に大規模なアプリケーションの場合、大幅な節約につながる可能性があります。
動的ログを採用するということは、単に新しいツールを使用するということではありません。それは文化的な変化です。最初は、気が遠くなるように思えるかもしれません。しかし、チームがターゲットを絞ったロギングの力に慣れるにつれて、より強力な運用上の考え方が育まれます。開発者は、「これが横道に逸れた場合、どのような情報が必要になるだろうか?」と考えることができます。それに応じて準備します。
たとえば、次のコード スニペットを考えてみましょう。
def charge(user, amount) balance = get_balance(user) min_balance = get_min_balance(user) do_charge = balance > min_balance logger.debug("charge decision", charge: do_charge, amount: amount, balance: balance, user_id: user.id, min_balance: min_balance) if do_charge charge_user(user, amount) else end
以前は、多くの人がlogger.debug
行を単なる開発上のノイズとみなしていました。しかし、動的ログを使用すると、そのようなラインは非常に貴重なツールとなり、必要なときにすぐにアクティブ化できます。
伐採をめぐる状況は大きく変わりつつあります。 Prefabのようなツールを使用すると、開発者は詳細なログとコスト効率のどちらかを選択する必要がなくなりました。動的ログは両方の長所を提供し、必要なときに高額な価格を支払うことなく洞察を提供します。
デバッグを楽しんでください。 🚀