0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Fluentd × CloudWatch Logs の送信最適化術

Last updated at Posted at 2025-03-31

Fluentd × CloudWatch Logs の送信最適化術 〜Ingestion料金を賢く節約する〜

🧠 AI生成のドキュメント

本文書はAI生成のドキュメントです。AIとの対話でできた、役に立つ情報をブログ形式に変換して蓄積していきます。

📕 概要

CloudWatch Logs を使っていると、いつの間にか 取り込み(Ingestion)料金 が高くなっていて驚くことはありませんか?

本記事では、Fluentd(td-agent) を使って CloudWatch Logs にログを送信している環境を対象に、料金を抑えるための送信最適化テクニック を紹介します。


🔍 CloudWatch Logs の課金ポイント

CloudWatch Logs の課金は、主に以下の3つの要素で構成されています。

項目 内容
Ingestion(取り込み) 圧縮後のログデータサイズ(GB)で課金
Retention(保存) 保存期間に応じたストレージ課金
Insights(クエリ) クエリ実行時のデータスキャン量に応じて課金

👉 ポイントは「Ingestion は圧縮後サイズが対象」 という点です!


📦 Fluentd のバッファリングで「まとめて送信」

Fluentd(td-agent)には、ログを一時的にバッファリングして まとめて送信する機能 があります。

これを使うことで CloudWatch Logs への送信効率が上がり、取り込み料金の節約 に繋がります。

メリット

  • ✅ gzip 圧縮効率が上がる → 圧縮後サイズが減る
  • ✅ 小分け送信を防げる → オーバーヘッド削減
  • ✅ Lambda 経由などの場合は実行回数も削減可能

⚙️ Fluentd のバッファ設定例

以下は、fluent-plugin-cloudwatch-logs を使って Fluentd から CloudWatch Logs に送信する設定の一例です。

<match your.log.tag>
  @type cloudwatch_logs
  log_group_name your-log-group
  log_stream_name your-log-stream
  auto_create_stream true
  region ap-northeast-1

  <buffer>
    chunk_limit_size 2M
    flush_interval 30s
    flush_thread_count 2
    retry_max_times 10
    retry_wait 5s
  </buffer>
</match>

🤔 flush_intervalchunk_limit_size の関係

パラメータ 意味
chunk_limit_size チャンクがこのサイズに達したら 即送信 される(flush_interval は無視される)
flush_interval チャンクが満たなくても、この時間が経過したら 送信 される

✅ つまり:

  • ログが多い場合:チャンクが chunk_limit_size に達した時点で即送信される
  • ログが少ない場合flush_interval 経過で未送信チャンクが送信される

以下のように動作します:

  • 🧠 条件A: chunk_limit_size 到達 → 即 flush(flush_interval を待たない)
  • 🕒 条件B: chunk_limit_size 未満 → flush_interval 経過で flush

🧪 バッチ送信でどれだけ圧縮できるか?

送信方法 圧縮効率 Ingestionサイズ(仮)
毎秒送信(小分け) 悪い 約18KB
毎分まとめて送信 良い 約6KB

バッチ化することで Ingestion コストを 1/3 に抑えられる こともあります。


⚠️ 注意:CloudWatch Logs の制限

CloudWatch Logs には以下の制限があります。

  • 1行あたりの最大サイズ:256KB
  • 1リクエストあたりの最大バッチサイズ:1MB
  • 最大イベント数:10,000件/リクエスト

Fluentd 側の chunk_limit_size 設定もこれを超えないようにしましょう。


🔧 チューニングのおすすめ

ログ量 flush_interval chunk_limit_size flush_thread_count
少量 30〜60秒 512KB〜1MB 1〜2
大量 5〜15秒 2MB〜5MB 2〜4

✅ まとめ

対策 効果
チャンクサイズを調整 圧縮効率アップ、送信回数削減
flush_interval の見直し 小さなチャンクの無駄な送信を防止
行サイズの制限に注意 CloudWatch でのエラー防止
gzip 圧縮を意識した送信設計 Ingestion 料金の削減に直結

📘 参考リンク


🙌 最後に

CloudWatch Logs を使っていると、つい見落としがちな「取り込み時の圧縮後サイズ」。

Fluentd のバッファ設定を見直すことで、パフォーマンスとコストのバランスを最適化できます。
ぜひ一度、自分の td-agent.conf を見直してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?