catch-img

【初心者向け】AWSで実践!Dockerで作るコンテナログ基盤

コンテナの基礎的な知識を、AWSを活用して学びたいという背景から、Amazon ECSDockerコンテナの立ち上げとfluentbitを利用したログの出力を試してみました。
今回の検証は、社内の若手メンバー(1年目・3年目)が参加し、基礎技術の習得と実践的な経験を目的としています。

本記事はスライドの記載内容をもとに、検証の要点を簡潔にまとめています。詳細な検証内容や技術的な説明は埋め込みのスライド本文をご参照ください。

検証の目的

  • Amazon ECSDockerコンテナ(nginxfluentbit)の立ち上げを確認する
  • fluentbitのログ出力を試し、フィルターと出力先の振り分け機能を確認する

検証方法

使用技術

  • Docker:データやプログラムを隔離できる仕組み・コンテナ管理ソフトの一つ。Docker上では複数のプログラムをライブラリやミドルウェアごと隔離できる。
  • コンテナ:アプリの実行環境をひとまとめにしたもの。コンテナ化したアプリケーションはハイブリッド・マルチクラウド環境上のどこでも動くアプリケーションをつくることができ、可搬性の高さとCI/CDとの相性の良さがメリット。
  • Amazon ECSAWSでコンテナをデプロイするサービス。今回はサーバーレスのFargateを使用。
  • AWS FireLensAmazon ECSで使用できるログルーター。FluentdまたはFluent Bitで動作し、ログをリアルタイムで集約可能で、コンテナからログを複数の宛先にフィルターして送信できる点がメリット。

構成図

コンテナログ基盤のAWS構成図

検証方法

  • nginxコンテナとFluent Bitコンテナの作成
  • Fluent Bitコンテナによりnginxのログを収集し、各ログ送信先サービスにログを送信する

ログ送信の条件

  • Amazon Kinesis Data Firehose:すべてのログを送信。5分間隔でバッファしたログをS3へ送信。
  • CloudWatch Logs:エラーログのみとヘルスチェックログのみフィルターして送信。リアルタイムでログを送信。

手順(抜粋)

  1. Docker Desktopをインストール。
    DockerLinux OSを使うことが前提
    Windows/MacではDocker Desktop for WindowsWSL2の仕様を推奨/ Docker Desktop for MacDocker Engineをインストール)
  2. Dockerイメージの基となるファイルを作成。
  3. 作成したファイルをビルドしDockerイメージを作成→Amazon ECRにプッシュ。
  4. VPC、サブネット、ログ送信先サービス、各エンドポイントを作成。
  5. ECSのコンソールからクラスターを作成(Fargateを使用)。
  6. ECSからタスク定義を作成(JSONで記載。コンテナ名やイメージURI、ポート、ログの送信先など設定)。
  7. ECSからサービスを作成(使用するタスク定義、VPC、ロードバランサーなどを設定)。
  8. サービス作成で設定したコンテナと周辺環境(ALB)がデプロイされる。
  9. タスクの設定タブでコンテナ欄のステータスがRunning状態であることを確認し、構築完了。

※構成図や詳細な設定手順はスライド本文をご参照ください

検証結果

結果

  • nginxサーバのページにアクセスでき、ALBのモニタリングタブからリクエスト数などを確認できた。
  • Kinesis Data Firehoseの確認:配信ストリームのメトリクスを確認し、S3にログが送信されていることを確認した。
  • S3に保存されたログの確認:S3のログを確認し、様々なログが送信されていることを確認した(アクセスログも含む)。
  • CloudWatch LogsHealthcheckログの確認:Healthcheckのログのみ送信されていることを確認した。
  • CloudWatch Logsのエラーログの確認:エラーログのみ送信されていることを確認した。

検証結果のまとめ

  • nginxFluent Bitのコンテナを作成することができた。
  • nginxのログをFluent Bitによりルーティングし、S3に全てのログを、CloudWatch LogsHealthcheckログとエラーログをフィルターして送信することができた。

はまったところ

  • ビルドしてイメージを作成しタグをつける際、タグ名が規則通りでないとプッシュできない。
  • ログの送信先が二つ以上の場合は、独自の設定ファイル(extra.conf)のパスを指定する必要がある(GUIのタスク定義ではパスの設定が不可能)。フィルター設定する際も独自の設定ファイル(extra.conf)のパス指定が必要。

まとめ

今回の検証を通じて、nginxFluent Bitのコンテナを作成し、ログの振り分けや送信が期待通りに動作することを確認できました。基礎技術の習得やトライ&エラーの経験を積むことができたので、今後はこの知見を活かし、より高度な技術検証や業務への応用に取り組んでいきます。


  • 「NGINX」は、F5, Inc.またはその関連会社の登録商標です。
    ※本資料中では、技術的文脈に応じて「NGINX」および「nginx」の表記が混在していますが、いずれも同一製品を指します。

  • 「Fluent Bit」は、Calyptia, Inc.の商標または登録商標です。

  • 「MySQL」は、Oracle Corporationの商標または登録商標です。

  • 「Docker」は、Docker, Inc.の商標または登録商標です。

  • Docker® ロゴは Docker Inc. の登録商標です。
    出典:Docker公式メディアリソース(https://www.docker.com/company/newsroom/media-resources/

R.O.
R.O.
2023年入社。ICTデザイン事業部ANA部第2課に所属。 2024年度情報処理安全確保支援士、全AWS資格取得。現在、プロジェクトマネージャとして尽力中。

関連記事

おすすめの資料

「システム運用のアウトソーシング選び方ガイド」資料DLフォームへのバナーリンク
お役立ち資料DLバナー

サイト内検索


カテゴリ一覧

タグ一覧


人気記事ランキング


サービス

運用監視サービスサイトへのバナーリンク
脆弱性診断サービスサイトへのバナーリンク
創業50年以上の実績でIT課題を一気通貫でサポートします