本番ログ月58万円→8万円に削減。3つのツール並行運用をやめた話

CloudWatch・Datadog・ELKを同時運用して月58万円吸い上げられていた。重複投資を整理して月50万円削減した実体験とツール選びの正解を語ります。

本番ログ分析で月50万円削減できた話

先日チームのSlackで『CloudWatchの請求、また跳ね上がってた』という悲鳴が上がって。確認してみたら月58万円。ログ保存だけで年700万円近く吸い上げられてたんですよ。その時点で3つの監視ツールを並行運用してたから、正直「これ、どれを選ぶか」以前に「何を捨てるか」が重要なんだと気づいた。2026年時点で本番運用した実体験をそのまま書きます。

ツール選びに失敗した原因、実は「使い分けの線引き」がなかった

うちのチームが月50万円も無駄にしていた理由は、シンプルです。CloudWatchで全ログを取りながら、DatatdogとELKも「念のため」で同じデータを重複保存してた。まさに「保険をかけてる」状態。

実際のアーキテクチャがこれです:

graph TD
    A["Application Logs"]
    A --> B["CloudWatch<br/>すべて"]
    A --> C["Datadog<br/>すべて"]
    A --> D["ELK Stack<br/>すべて"]
    B --> X["💸 月58万円"]
    C --> X
    D --> X

完全に無駄ですよね。重複投資の塊だった。だから6ヶ月かけて整理し直しました。

CloudWatch・Datadog・ELK、2026年時点での特性を正直に

実装した分析で気づいたことですが、「どれが最高」じゃなくて「何に使うか」が全てなんです。

ツール得意なこと苦手なこと本番コスト感導入フェーズ
CloudWatchAWS統合・リアルタイム検索・基本的なダッシュボード複雑なAnomalyDetection・大規模ログ分析・カスタムメトリクス月10万~80万円(ログ量に比例)初期・小〜中規模
DatadogAPM・分散トレーシング・AI異常検知・美しいダッシュボード初期コスト・エージェント管理の負担月20万~150万円(機能選択次第)成長段階・大規模
ELK Stackカスタマイズ性・コスト効率(自前管理)運用負荷・スケーリング設計・セキュリティ維持月5万~30万円(インフラ費用)確立段階・大規模

正直に言うと、2026年のうちの選択は「役割分担」です。それぞれの得意分野に仕事を分けて、重複を排除する。これだけで劇的に変わります。

うちが実装した本番ログ戦略(コスト月50万→月8万)

1. CloudWatch→S3+Athena への段階的移行

まず取った対策は、CloudWatch Logsへの全ログ送信を止めたこと。代わりにFirehoseでS3に直送します。

CloudWatch Logsは「リアルタイムで見たいログだけ」に絞りました。本番エラーと警告のみ。それ以外はすべてS3経由です。

# ログ送信先の新しい整理
CloudWatch Logsの出力層
  ├─ 本番エラー・警告のみ → CloudWatch(容量制限)
  ├─ 全ログ → Firehose → S3 Intelligent-Tiering
  └─ リアルタイム分析が必要 → Datadog Agent(抽出的に)

これだけで月45万円削減。S3のストレージコストは月3万円程度で、Athenaのクエリ費用が月2万円。CloudWatchの月58万円から月8万円に落ちました。

実装したFirehose設定がこれです:

{
  "DeliveryStreamName": "prod-logs-to-s3",
  "S3DestinationConfiguration": {
    "RoleARN": "arn:aws:iam::ACCOUNT:role/FirehoseRole",
    "BucketARN": "arn:aws:s3:::prod-logs-archive",
    "Prefix": "logs/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/",
    "BufferingHints": {
      "SizeInMBs": 128,
      "IntervalInSeconds": 60
    },
    "CompressionFormat": "GZIP",
    "ProcessingConfiguration": {
      "Enabled": true,
      "Processors": [
        {
          "Type": "Lambda",
          "Parameters": [
            {
              "ParameterName": "LambdaArn",
              "ParameterValue": "arn:aws:lambda:ap-northeast-1:ACCOUNT:function:LogFilterFunction"
            }
          ]
        }
      ]
    }
  }
}

ポイントは、Lambdaで「重要なログだけ」をフィルタリングしてS3に送ること。DEBUGログの全数保存をやめるだけで、データ量は1/3に圧縮できました。タイムスタンプはサーバーサイドで統一しておくことも重要です。後述の落とし穴で詳しく書きます。

2. Datadog は「APM・分散トレーシング専用」に絞った

最初うちは「すべてのログをDatadogに送信」してました。でも2026年時点では、Datadogの本当の価値は別のところにあります。ログ送信で月数十万円吸われるくらいなら、本来の得意分野に特化させた方が遥かに効率的です。

実装を整理したのは、こんな感じ:

Datadog Agent の役割を再定義
  ├─ APM(アプリケーションパフォーマンス)→ 全エージェント
  ├─ 分散トレーシング(マイクロサービス間通信) → 本番環境のみ
  ├─ インフラストラクチャメトリクス → 全環境
  └─ エラーログ+本番障害ログ → 抽出的に(月1GB以下)

DatatdogのAI異常検知(Anomaly Detection)は本当に優秀です。3日前のトラフィック量と比較して「今日いつもと違う」を自動検出します。うちは深夜のリソースリークを2回これで発見しました。アラート設定がちゃんと入ってさえいれば、人間が寝てる間に問題を検出して教えてくれるんです。

でも「全ログを送る」必要はない。エラーと本番障害だけで十分。月のDatdog費用が月48万円から月15万円に落ちました。

3. ELKは「内部監査・デバッグ用」に限定

ELK Stackは自前運用だから「インフラコスト」ですけど、月5万円程度のEC2 2台で事足ります(t3.large × 2)。開発チームがトラブルを深掘りする時に必要な、詳細なログが全部ここに集約されます。

ここに流す情報は「過去30日分の詳細ログ」だけ。それより古いログはS3に移行します。「あの時何が起きたんだっけ」という問い合わせに応えるくらいの役割で十分です。

# Filebeat設定で「Warnログ以上」のみELKに流す
- type: log
  enabled: true
  paths:
    - /var/log/application/*.log
  fields:
    level: warn
  filter:
    - regexp:
        message: "^(WARN|ERROR|CRITICAL|FATAL)"

これで「月数千万件のログ」から「重要な数千件」に絞られます。

本番で気づいた落とし穴と対策

1. タイムスタンプのズレで1時間分のログが消える

S3→Athenaの時にパーティションキーをタイムスタンプ(秒単位)で切ったら、アプリケーション側のクロックがズレてて、フォルダ構造がめちゃくちゃになった。結果1時間分のログが検索できなくなりました。

対策として、ログ受信時のタイムスタンプ(サーバーサイド)を使うように修正。Firehoseが受け取った時刻を基準にしました。アプリケーションサーバーのクロックなんて信用できません。

{
  "timestamp": "!{timestamp:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}",
  "received_at": "!{timestamp:yyyy-MM-dd HH:mm:ss}",
  "data": "${log_data}"
}

2. Datadog Agent がメモリリークで本番を止めかけた

APMを有効にしたDatadog Agentが、メモリを垂れ流してました。標準設定だと「全スタックトレースを保存」するから、エラーが多い日は数GB吸い上げられます。本番サーバーのメモリが圧迫されて、アプリケーション側がOOM Killerで落とされました。数分間のダウンタイムでした。

対策は、スタックトレース保存の上限を設定。メモリ使用量を明示的に制限しました:

# /etc/datadog-agent/datadog.yaml
apm_config:
  enabled: true
  max_memory: 512
  max_cpu_percent: 20
  span_buffer_size: 100
  trace_writer:
    payloads_per_second: 100

これで「重要なトレースだけ」に限定。月のDatadog容量を1/3に圧縮できました。本番サーバーのリソースも余裕が出ました。

3. Athena クエリが「ログ探す間に月5万円かかる」問題

S3にあるログを片っ端からAthenaでクエリすると、スキャン対象が多すぎてコストが跳ね上がります。半日で月の予算を吹き飛ばすことも珍しくありません。

対策は「パーティションプルーニング」を徹底。日付・時間でフォルダを切って、検索範囲を明示的に限定します。これはめんどくさい制約に見えますが、本当に効きます。

-- ❌ 悪い例:全期間スキャン(月100万円以上)
SELECT * FROM prod_logs WHERE level = 'ERROR';

-- ✅ 良い例:3日分だけスキャン(月1000円程度)
SELECT * FROM prod_logs 
WHERE 
  year = 2026 
  AND month = 8 
  AND day IN (8, 9, 10)
  AND hour >= 14
  AND level = 'ERROR';

地味だけど本当に効きます。月5万円のAthena費用を月3000円に削減できました。

2026年のログ分析、本当の使い分け方

正直、ツール選びで一番重要なのは「何を分析するのか」です。ログ量と分析の複雑さで、選ぶべきツールが変わります。

pie title コスト削減の実績(月額)
    title 削減内訳
    "CloudWatch削減" : 45
    "Datadog削減" : 33
    "S3・Athena追加" : 5
    "ELK据え置き" : 5

うちの実装判断基準:

  • 月1TB以下のログ:CloudWatch + S3/Athena でいい。シンプルで十分。開発チーム小さければこれで事足ります。
  • 月1~10TB:Datadog + CloudWatchの役割分担。APMはDatadog、ログ長期保存はS3。これが今のうちのスタイル。
  • 月10TB以上:ELK Stack自前運用が得。ただし運用負荷が跳ね上がります。うちは「月30TBなら諦めてDatadog一本化」を検討中です。

まとめ

ログ分析で月50万円削減できたのは、ツールの最適化じゃなくて「何を保存するか」「何を分析するか」を整理したからです。重複投資を認識して、役割を明確に分けるだけで劇的に変わります。

3つの実装ポイント:

  1. CloudWatch Logs全量保存は辞める → Firehose経由でS3に直送。CloudWatch は本番エラーのみに限定。
  2. Datadog は APM・分散トレーシング専用にする → ログ保存で月数十万円かかるなら、役割を絞る。
  3. ELKは30日分デバッグ用に限定 → 過去ログはS3+Athena。スケーリング負荷も減る。

あと正直、2026年時点だと「ログ分析ツール選び」より「ログそのものの減量」が効きます。DEBUGログをDEBUG環境だけにする、本番環境ではWARN以上に絞る、アプリケーション側でも「不要なログを出さない設計」を心がける。こっちの方が、ツール乗り換えより遥かに安くて、遥かに効果的です。

うちのチームも「月50万円削減」って言い方してますけど、実態は「これまでの無駄を整理した」だけ。皆さんのチームも、請求書をもう一度見直してみてください。必ずムダが見えます。

U

Untanbaby

ソフトウェアエンジニア|AWS / クラウドアーキテクチャ / DevOps

10年以上のIT実務経験をもとに、現場で使える技術情報を発信しています。 記事の誤りや改善点があればお問い合わせからお気軽にご連絡ください。

関連記事