한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L13 サーバー構成と運用

ログ・監視の過負荷 Logging / monitoring overhead

原因ID in-monitoring · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ

図と実験のあるメインページでこのカードを開く →

障害が起きるとログが急増し、ログを同期で送るサーバーはログのせいでさらに遅くなります。

なぜ エラー発生に伴い、ログ・メトリクスの送信量が急増 → すると ログコレクターが詰まり、同期送信するサーバーは待たされる → 画面では 障害時のカクつき・フリーズがログのせいでさらに悪化

症状
カクつき, フリーズ
要因
ストール
誰に起きるか
サーバー全体
いつ
人が集中したとき, ときどきランダムに
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
ゲーム開発チームの対応
非同期送信、サンプリング、バッファがあふれたら破棄、同じエラーログはまとめて送る。
インフラチームの対応
ログコレクターの容量を障害時の急増量を基準に確保、コレクターの滞留アラート。
グラフでは
不定期なスパイク · ログ送信量、ログコレクターのキュー
確認箇所
サーバーの毎秒のログ行数・バイト数と、ログ収集エージェントのキュー・破棄数をティック時間と並べて確認。止まっているスレッドがあれば、bcc offcputime -pでログの書き込み・送信で待っているかを確認
該当する場合
ティックが跳ねた時刻にログ量が普段の数十倍に跳ね上がり、ゲームスレッドの待ち時間がログ書き込み・送信のコールスタックに集中している
該当しない場合
ログ量が普段と同じか、ゲームスレッドがログ側で待っていないなら、ログの急増は障害の結果にすぎないため、最初にエラーを出した原因を別に探す
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. Logging in C# Microsoft
    .NETのログメソッドは同期なので、保存先が遅い場合は直接書かずに、まず高速な保存先に書いて後で移すよう推奨
  2. Asynchronous loggers Apache Software Foundation
    非同期ロギングは短い急増をキューで吸収するが、出力が遅い状態が続くとキューが埋まり、最も遅い出力の速度まで落ちるか、ポリシーに従ってログを破棄(Discard)
  3. Demonstrations of offcputime, the Linux eBPF/bcc version IO Visor
    スレッドが止まってCPUを離れていた時間(off-CPU)をコールスタックごとに集計、-pでプロセスを指定

あわせて読みたい原因

同じ層:L13 サーバー構成と運用

同じ症状(カクつき)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る