LoginSignup
0
0

More than 1 year has passed since last update.

[AWS]Fargate+Firelens(Fluentbit)でapache-loggenを実行しCloudwatchLogsへログ転送する

Last updated at Posted at 2022-01-11

やりたい事

2022/01/13開催の SB Tech Festival で登壇した内容、「ビッグデータ活用の第一歩AWS環境での大容量ログ可視化」の詳細手順(前半)ページです。

このエントリで解説するのは以下のイメージ

2022-01-11_09h20_03.png

後半部分のLambda+OpenSearchについてはこちらの記事を参照してください。

手順

2022/01/11時点でECSコンソールは新しいエクスペリエンスが提供されていますが、本エントリでは旧UIをベースに解説しています。

1.Fargate実行の為のクラスターを用意する

今回オーケストレーターはEKSではなく、ECSを利用します。
まず、FargateはECSの機能の一部という扱いなので、サーバレスアーキテクチャではあるものの最初にクラスターを用意する必要があります。
あまり深く考えずに以下のようにECSコンソールから新しいクラスターを作成しましょう。
2022-01-11_09h25_27.png

クラスターテンプレートはFargateの場合ネットワーキングのみとします。
2022-01-11_09h25_53.png

IAM管理ポリシー、IAMロールのタグや名前は任意の内容でOKです。本手順上では便宜上「apache-loggen」とします。

2.実行に必要なIAMロールを作成しておく

IAM管理ポリシーを新規作成し、
2022-01-11_09h42_56.png

JSONタブを開き、
2022-01-11_09h43_27.png

以下のJSONをコピペします。これはFargateコンテナからCloudwatchLogsの必要な操作が出来るように権限を付与する内容です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents",
                "logs:GetLogEvents",
                "logs:FilterLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

続いてIAMロールを新規作成し、
2022-01-11_09h45_45.png

以下の通りにロールの利用方法を指定します。
2022-01-11_09h48_24.png

次の画面で、作成済みのIAM管理ポリシーを指定しCloudwatchLogs操作関連のロール作成は完了です。

続いて、既成のIAM管理ポリシーであるAmazonECSTaskExecutionRolePolicyを指定したロールも作成しておきましょう。

IAM管理ポリシー、IAMロールのタグや名前は任意の内容でOKです。

3.タスク定義を作成する

クラスターが用意出来たら、Fargate用のタスク定義を新規に作成します。
2022-01-11_09h26_48.png

以下の通りに設定を進めます。

項目名 設定内容
定義名 apache-loggen-task
タスクロール <(2)で作成したAmazonECSTaskExecutionRolePolicyを指定したロールを指定>
互換性が必要 Fargateにチェック
オペレーティングシステムファミリー Linux
タスク実行ロール <(2)で作成したCloudwatchLogs操作関連のIAMロールを指定>
タスクメモリ (GB) 0.5GB
タスク CPU (vCPU) 0.25vCPU
FireLens の統合を有効にする チェック
タイプ Fluentbit
イメージ 自動選択のまま「適用」ボタンをクリック

上記を進めると、図示のように log_routerコンテナのみが作成されている状況になります。
2022-01-11_10h05_11.png

log_routerコンテナ名部分をクリックして、ヘルスチェックのみ以下の内容通りに編集しておきます。

項目名 設定内容
コマンド echo '{"health": "check"}' | nc 127.0.0.1 8877 || exit 1
間隔 180
タイムアウト 30
開始期間 180
再試行 3

2022-01-11_10h06_27.png

続いて本体のコンテナを作成します。

2022-01-11_10h05_112.png

項目名 設定内容
コンテナ名 apache-loggen
イメージ public.ecr.aws/t9o0n2i8/kedamari:latest

Dockerイメージは個人的に用意したものをパブリック公開しておきましたので、上記内容のまま使っていただけます。
中身はCentOS7のイメージに、Rubyとapache_loggen gemを導入しただけのものなので、慣れている方はもちろんご自身で作成いただいてもOKです。

コンテナのヘルスチェックは以下の通りに設定します。

項目名 設定内容
コマンド /root/.rbenv/shims/apache-loggen --limit 1
間隔 10
タイムアウト 5
開始期間 5
再試行 3

2022-01-11_09h29_03.png

環境設定は以下の通り、PATHを通してください。

項目名 設定内容
CPU ユニット数 0
エントリポイント /usr/bin/bash
コマンド /root/.rbenv/shims/apache-loggen,--rate=20
作業ディレクトリ /
環境変数(PATH) /root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin

また、スタートアップ順序依存はコンテナ名に log_routerを指定し、状態を HEALTHY指定としましょう。
(念の為Firelensのサイドカーコンテナが起動したのちに、ログを生成させる挙動にする為です。)

2022-01-11_10h14_59.png

最後にストレージとログを以下のように設定します。

項目名 設定内容
ログドライバー awsfirelens

■ログオプション(全てValue指定)

項目名 設定内容
log_group_name /apache-dummy-log
auto_create_group true
log_stream_prefix fargate-
region ap-northeast-1
Match *
Name cloudwatch_logs

2022-01-11_10h18_12.png

4.サービスを起動する

事前にVPCの作成が必要です。任意のVPCを作成したい場合は thak4さんの「AWS VPC作成手順」あたりを参考にしてください。

項目名 設定内容
クラスター apache-loggen <実際には手順1で作成した任意の名称>
起動タイプ FARGATE
オペレーティングシステムファミリー Linux
タスク定義 apache-loggen-task:X <末尾の数字はリビジョンなので、タスク定義の更新都度インクリメントされます>
プラットフォームのバージョン LATEST
サービス名 apache-loggen-service
サービスタイプ REPLICA
タスクの数 1
最小ヘルス率 100
最大率 200
デプロイサーキットブレーカー 無効

デプロイメントは初回選択項目から変更無しです。
次のステップへ進み、ネットワークは以下の通り設定します。

項目名 設定内容
クラスターVPC 事前に作成したVPCを指定
サブネット 事前に作成したサブネットを指定
セキュリティグループ は新しいものを作成し、インバウンドルールは必ず全削除する
パブリック IP の自動割り当て ENABLED

ロードバランシングは初回選択項目から変更無しです。
次のステップ、Auto Scaling (オプション)も初回選択項目から変更無しです。

確認画面で、内容を確認し、サービスの作成をクリックします。
2022-01-11_10h25_09.png

5.正常稼働の確認

クラスター : apache-loggen のステータス ACTIVEと、タスクのステータスがRunningになっている事を確認します。
2022-01-11_10h34_01.png

CloudWatch Logsのロググループに /apache-dummy-log が作成されている事を確認します。
2022-01-11_10h35_53.png

実際にログエントリを確認し、以下のようなApache Logが流れている事を確認します。
2022-01-11_10h37_21.png

前半終了

Fargateコンテナ環境でApacheのダミーログを生成し、CloudWatch Logsへ転送するところまでが完了しました。
マネジメントコンソールGUIでこのようにステップバイステップの手順を解説しているエントリは少ないので、初学者向けに役立つエントリになれば幸いです。
実際の運用シーンでは、CLI+JSONで管理する事になると思いますので、うまく動いた方はそのようなエントリを確認して、ぜひ次のステージへステップアップしてください。

引き続き後半のエントリでは以下の内容へと進みます。

2022-01-11_09h20_031.png

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