エンジニアの皆さん、こんにちは。現場で「真っ先に知っておくべきだった」と後悔するポイントを教えるのが、私の仕事です。
今日は、Rollbarの「レートリミット(転送制限)」という、多くのエンジニアが事故を起こしてから初めて気づく“落とし穴”についてお話しします。
システムに障害が起きたとき、Rollbarにエラーが溢れ出し、最も重要な「根本原因を示す最初の一撃」がレートリミットでドロップされる……。これほど悲劇的なことはありません。今日は、そんな不測の事態でも戦える「守りの技術」を伝授します。
—
1. なぜ「レートリミット」が最大の敵なのか
Rollbarのようなエラー追跡ツールには、APIに送信できる1分間あたりのデータ量(Quota)が決まっています。平時は問題ありませんが、DDoS攻撃や無限ループのバグが発生した瞬間、Rollbarへのリクエストは飽和し、「最も見たいはずの重要なエラー」から順に切り捨てられます。
これを防ぐには、デフォルトの設定に頼るのではなく、「自分たちの手で送信の優先順位と量を制御する」アーキテクチャが必要です。
—
2. Rollbarの導入:まずは「確実な初期設定」から
まずは基本。Node.js環境を例に、SDKの導入と、後述する動的制御の準備をします。
SDKのインストール
npm install rollbar –save
次に、初期設定のポイントです。重要なのは、「環境変数を介して設定を注入できるようにしておくこと」。これが動的制御の第一歩です。
const Rollbar = require(‘rollbar’);
const rollbar = new Rollbar({
accessToken: process.env.ROLLBAR_ACCESS_TOKEN,
captureUncaught: true,
captureUnhandledRejections: true,
// 重要なポイント:デフォルトの送信制限を設けておく
payload: {
environment: process.env.NODE_ENV || ‘production’,
},
// サーバーの負荷が高い時のバックオフ設定
reportLevel: ‘error’
});
// Hello World的動作確認:意図的にエラーを投げてみる
try {
throw new Error(“監視システムの疎通確認テスト”);
} catch (e) {
rollbar.error(e);
}
—
3. 裏技:バーストトラフィックを制する「動的サンプリング」
ここからが本題です。異常時にすべてのエラーを律儀に送る必要はありません。「同じ種類のエラーが多発しているなら、間引いて送る」のが、真のプロの設計です。
テクニック:エラー回数のカウントによる動的間引き
// 簡易的なメモリ内カウンター
const errorCache = new Map();
function safeReport(err) {
const message = err.message;
const count = (errorCache.get(message) || 0) + 1;
errorCache.set(message, count);
// 1分間に同じエラーが10回以上発生したら、5回に1回しか送らない(サンプリング)
if (count > 10 && count % 5 !== 0) {
return; // 送信せずにドロップ(負荷軽減)
}
rollbar.error(err);
}
この「フィルター層」を挟むだけで、ログの洪水に飲まれるリスクを劇的に減らせます。
—
4. 優先度付きキューの実装で「生存率」を高める
もしあなたが大規模なサービスを運営しているなら、重要なエラー(課金決済エラーなど)と、軽微なエラー(フロントエンドのJSエラーなど)を分けるべきです。
1. 高優先度エラー: `rollbar.critical()` で即座に送信。
2. 低優先度エラー: 送信前に `setTimeout` でわずかに遅延させ、バーストが落ち着くのを待つ。
function reportWithPriority(err, priority = ‘low’) {
if (priority === ‘high’) {
rollbar.critical(err);
} else {
// 低優先度は2秒待機させることで、高優先度エラーに帯域を譲る
setTimeout(() => {
rollbar.error(err);
}, 2000);
}
}
—
5. 最後に:伝説のエンジニアからのアドバイス
レートリミットを恐れて監視を止めるのは、嵐の中でコンパスを捨てるのと同じです。しかし、「すべてを送ろうとする」のは、嵐の中で重い荷物を持って走るのと同じです。
今回紹介した「サンプリングによる間引き」と「優先度付け」を実装すれば、RollbarのQuotaはあなたの味方になります。
- 初心者のうちは: まずはSDKの標準機能でエラーが飛ぶことを確認する。
- 中級者になったら: 環境変数で環境を分け、レポートレベルを最適化する。
- そしてプロへ: 独自のフィルター層を挟み、システムを守りながら監視する。
これをマスターすれば、毎日の作業が劇的に楽になり、障害発生時にも冷静に「ログの海」を泳ぐことができるようになりますよ。ぜひ、今のプロジェクトに組み込んでみてください。応援しています。