Apache(Apache HTTP Server)を複数台のサーバで運用しており、ログを1箇所に集約したかったので S3 に保存するようにしました。
作業環境
S3 のバケット作成
まずはアクセスログを保存する S3 のバケットを作成しましょう。
今回は
enomotodev-apache-log
という名前でバケットを作成します。
IAM ロールの作成
先ほど作成した S3 のバケットへの読み込み・書き込み権限をもった IAM ポリシーを作成します。
※ fluent-plugin-s3 の README に IAM ポリシーのサンプルがあるので、こちらを参考にします。
- Name:
apache-log-to-s3-policy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::enomotodev-apache-log" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::enomotodev-apache-log/*" } ] }
IAM ポリシーが作成できたら次の設定で IAM ロールを作成します
- Select type of trusted entity:
AWS service
- Choose the service that will use this role:
EC2
- Attach permissions policies:
apache-log-to-s3-policy
- Name:
apache-log-to-s3-role
EC2 作成
今作成した IAM ロールをアタッチした EC2 を作成します。
今回は t2.micro
を選択しましたが、基本的にはどれを選んでも問題ないと思います。
Apache のインストール
EC2 が起動したら接続して yum でサクッと apache をインストールし、起動と、自動起動設定もしておきましょう。
$ sudo yum install httpd $ sudo systemctl start httpd $ sudo systemctl enable httpd
ブラウザでも EC2 の IP を開いて apache の画面が確認できたら OK です!
td-agent のインストール
Amazon Linux 2 での td-agent のインストール方法は公式のドキュメントに記載されているので、そのままコピペして実行します。
$ curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh
インストールできたかどうかバージョンを表示して確認してみます。
$ td-agent --version td-agent 1.3.3
問題なくインストールできたようです。
ログの送信確認
まずは td-agent から apache のアクセスログが参照できるようにパーミッションを変更します。
$ sudo chmod +x /var/log/httpd $ sudo chmod +r /var/log/httpd/access_log
パーミッションを変更したら td-agent の設定を変更します。
デフォルトの設定を削除し、次のように記載します。
- /etc/td-agent/td-agent.conf
<source> @type tail path /var/log/httpd/access_log pos_file /var/log/td-agent/httpd.access_log.pos <parse> @type apache2 </parse> tag s3.apache.access </source> <match s3.*.*> @type s3 s3_bucket enomotodev-apache-log path logs/ <buffer> @type file path /var/log/td-agent/s3 flush_mode interval flush_interval 30s </buffer> time_slice_format %Y%m%d%H </match>
td-agent の設定を変更できたら起動させます。(ついでに自動起動の設定も)
$ sudo systemctl start td-agent $ sudo systemctl enable td-agent
ブラウザから何度かアクセスすると S3 にログファイルが作成されるのが確認できると思います。
まとめ
td-agent をワンラーナーでインストールでき、設定ファイルもそれほど難しくないので比較的簡単にログを S3 に保存することができました。
今回は apache のアクセスログでしたが、同じようにエラーログや、nginx、アプリケーションのログなども同じ手法で S3 に保存できます。
これからコンテナ化を予定しているサイトはまずはログを S3 などにも保存するようにして、サーバをステートフルな状態からステートレスにするところから始めてみてはいかがでしょうか。
参考
データ・ドリブン・マーケティング―――最低限知っておくべき15の指標
- 作者: マーク・ジェフリー,佐藤純,矢倉純之介,内田彩香
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2017/04/20
- メディア: 単行本
- この商品を含むブログ (1件) を見る
Practical Developers ――機械学習時代のソフトウェア開発[ゲームアプリ/インフラ/エッジ編] WEB+DB PRESS plus
- 作者: 飯塚健太郎,大川徳之,keno,古賀理,田中一樹,徳永拓之,西田圭介,森田和孝
- 出版社/メーカー: 技術評論社
- 発売日: 2019/08/02
- メディア: Kindle版
- この商品を含むブログを見る