すべてを記録しない
1 時間あたりにプッシュしているログの数を教えてください。
私が何年にもわたって学んだことの 1 つは、マルチレベルのログ記録は良いことですが (、、、、) Debug
、Info
2つWarn
の重大な欠点があるということです。Error
Fatal
- 実行時にこれらすべてのレベルを評価しなければならないアプリケーションの速度が低下します。たとえ「 log のみ
Warn
、Error
およびFatal
」、 Debug および Info はすべて実行時に評価されます!
- ロギング コストが増加します (私は LogEntries を使用していましたが、devops の労働力と、LogStash + ElasticSearch のクラスターを実行するためのホスティング コストを使用するように移行したことで、さらに増加しました)。
記録のために、私は以前のプロジェクトのロギングに月額 1000 ドル以上を支払いました。セキュリティ監査の PCI 準拠には 2 年間のログが必要であり、1 秒あたり数千のログを送信していました。
コンテキスト内ですべてをログに記録する方法についても話しました。
http://go-talks.appspot.com/github.com/eduncan911/go-slides/gologit.slide#1
それ以来、アプリケーションと関数、および本番環境での人件費とログ ストレージの全体的なコストをベンチマークした後、このスタンスから撤回しました。
最小限のエラー (エラー) のみをログに記録し、ログ レベルが設定されていない場合は実行時に評価を無効にするパッケージを使用しますGlog
。
また、Go 開発に移行して以来、非常に少量のコード (マイクロサービスやパッケージなど) と専用の CLI ユーティリティの戦略を採用しDebug
ましInfo
た。 /代わりに各サービスから。さらに良いことに、イベントバスを監視するだけです。
最後に、これらの小さなサービスの単体テストを使用すると、コードがどのように動作するかを確認できます。テストで入力条件の良し悪しが示されるため、これらInfo
のステートメントは必要ないためです。Debug
これらの Info ステートメントと Debug ステートメントを単体テストの内部に入れることができるため、コードは分野横断的な問題から解放されます。
これらすべては基本的に、最終的にログの必要性を減らします。
代替手段: ログをフィルタリングする
ログはどのように発送されますか?
Debug、Infos、およびその他の行をすべて除外できない場合は、別の方法として、ログを送信する前に を使用してログをフィルタリングするsed
かawk
、別のファイルにパイプすることをお勧めします。
何かをデバッグする必要があるときは、sed/awk を変更して追加のログ情報を送信します。デバッグが完了したら、フィルタリングに戻り、例外やエラーなどの最小限のものだけをログに記録します。