ログ/監視のコスト爆死あるある5選と回避策
結論から言うと、個人開発のオブザーバビリティ破産はほぼ全て「取り込み量(ingest)課金」で起きる。 Datadog/New Relic/CloudWatch はストレージではなく流し込んだバイト数とカスタムメトリクスのカーディナリティで請求するため、コードを1行変えただけで月額が10倍になる。以下、実際に財布が燃える5パターンと、コードで止める回避策をまとめる。
1. DEBUGログを本番で垂れ流す
logger.debug() を消し忘れたまま本番デプロイ → CloudWatch Logs の取り込みは $0.50/GB。1リクエスト10KBのログ × 月500万リクエスト = 50GB = $25/月、これがサービス数分積み上がる。
回避策: 環境変数でレベルを固定し、デバッグ出力を構造化サンプリングする。
import logging, os
logging.basicConfig(level=os.getenv("LOG_LEVEL", "WARNING"))
CloudWatch なら保持期間を必ず設定(デフォルトは「無期限」=ストレージ無限課金)。
aws logs put-retention-policy --log-group-name /app/prod --retention-in-days 14
2. カスタムメトリクスのカーディナリティ爆発
Datadog のカスタムメトリクスは タグの組み合わせ1つ=1メトリクスで課金($0.05/100メトリクス/月)。user_id や request_id をタグに入れると一瞬で数十万系列になる。
# 爆死: user_idは無限に増える
statsd.increment("api.call", tags=[f"user:{user_id}"])
# 安全: 有限の次元だけ
statsd.increment("api.call", tags=[f"endpoint:{route}", f"status:{code}"])
タグの値は 必ず有限集合(エンドポイント名・ステータスコード・リージョン) に限定する。ID系は絶対にタグにしない。
3. APMの全リクエストトレース
トレースを100%サンプリングすると、トラフィックに比例してスパン課金が膨らむ。個人開発の規模なら ヘッドサンプリング10%で十分、エラーだけ100%拾えばいい。
# OpenTelemetry
from opentelemetry.sdk.trace.sampling import ParentBasedTraceIdRatio
sampler = ParentBasedTraceIdRatio(0.1) # 10%
4. ヘルスチェック/Botのアクセスログを保存
ALB のヘルスチェックが5秒間隔 = 月50万行、UptimeRobot や検索Botも加算。中身ゼロのログに金を払うことになる。
回避策: 取り込み前にフィルタで捨てる。Fluent Bit なら数行。
[FILTER]
Name grep
Match *
Exclude path ^/(health|healthz|ping)$
5. 高解像度メトリクスとアラート無しの放置
CloudWatch の高解像度メトリクス(1秒粒度)は標準の数倍。個人開発に1秒粒度は不要、60秒で十分。そして最大の地雷は「請求アラートを張っていない」こと。気づくのは請求書が届いた翌月だ。
aws cloudwatch put-metric-alarm \
--alarm-name billing-guard \
--namespace AWS/Billing --metric-name EstimatedCharges \
--statistic Maximum --period 21600 \
--threshold 20 --comparison-operator GreaterThanThreshold \
--evaluation-periods 1
まとめチェックリスト
| 項目 | 危険 | 安全 |
|---|---|---|
| ログレベル | DEBUG固定 | WARNING + 保持14日 |
| メトリクスタグ | user_id等の高カーディナリティ | 有限集合のみ |
| トレース | 100% | 10% + エラー全取得 |
| ヘルスチェック | 全保存 | フィルタ除外 |
| 請求監視 | なし | $20で必ずアラート |
根本原則は「課金は取り込み量とカーディナリティで決まる。だから捨てる設計を最初に入れる」。 高機能なダッシュボードより、put-retention-policy と請求アラートの2つを最初の30分で設定するほうが、月末の財布を確実に守ってくれる。
関連リンク
※自社商品(プロモーションを含みます)。
Top comments (0)