EC2にFluentdをインストールしてS3へ転送する方法
AWS EC2インスタンスにFluentdをインストールして、AWS S3へ転送させます。
まずはAWS上環境を準備をします。
S3にバケットを作成し、EC2を構築し、S3へアクセスできるようにIAMロール権限を設定します。今回はデフォルトで用意されているVPC内にEC2を簡単に作成します。
環境が準備出来たら、いよいよFluentdをインストールして、S3へ出力する設定を行います。
手順は以下。
1.バケット作成
マネジメントコンソールにてS3を選択し、バケット作成するボタンを押します。
バケット名を入力し、次へボタンをどんどん押します。バケット名以外は特に変更しなくて大丈夫です。最後にバケット作成ボタンを押して集終了です。
以下のように入力したバケット名にてバケットが作成されています。
2.キーペア作成
次にキーペアを作成します。
マネジメントコンソールにてEC2を選択し、メニューからキーペアをクリック、キーペア作成ボタンを押して、好きな名前を入力し、作成してください。
作成ボタンを押し、デスクトップなど好きな場所にキーを保存してください。XXXXXX.pemというキーが保存されます。
3.セキュリティーグループ作成
次に同じ画面でにて、メニューからセキュリティグループを探しクリックします。
セキュリティグループの作成ボタンを押し、セキュリティグループ名を入力、VPCはデフォルトを選択します。
ルールーは3つ追加してください。
[タイプ/プロトコル/ポートの範囲/ソース]
・SSH/TCP/22/任意の場所
・HTTP/TCP/80/任意の場所
・カスタムTCP/TCP/3000/任意の場所
最後に作成ボタンを押します。
4.EC2作成
次に同じ画面のメニューからインスタンをクリックし、インスタンスの作成ボタンを押します。
今回はAmazon Linux AMI 2018.03.0を利用します。
今回は無料利用枠のt2.microを選択します。
ステップ3~4はそのまま変更せず、次で問題ありません。
ステップ5で、好きな名前を付けてください。
セキュリティグループは先ほど作成したものを選択してください。
その後は警告など出ますが、そのま進んで作成ボタンまで押して下さい。
以下でキーペアの確認が出ますので、チェックボックスにチェックして、インスタンス作成ボタンを押します。
元の画面でインスタンスが作成されたことを確認します。
5.ELP取得
インスタンス再起動のたびにIPが変わるのは嫌なので、Elastic IPを作成したインスタンに割り当てます。
EIPが作成出来たら、作成したインスタンに関連付けます。
アクションからアドレス関連付けを選択します。
作成したインスタンスを選択して関連付けてください。
6.IAMロール
次にS3へアクセスできるIAMロールを作成、インスタンスに割り当てます。
マネジメントコンソールにてIAMを指定し以下の画面を開いたら、メニューからロールをクリックし、ロールの作成ボタンを押します。
EC2を選択し、次へ。
S3をキーワードに検索し、AmazonS3FullAccessを選択します。
ロールが作成出来たら、アクションからIAMロールの割り当てを選択します。
作成したインスタンを選択し、適用ボタンを押します。
7.EC2にログインして確認
TeraTermにてログインし、AWSのコマンドでS3が見えることを確認します。
TeraTermでのログインは以下参照下さい。
AWS入門~VPC作成からインスタンス接続まで~ - 三姉妹年子ママのtoi toi toi!日記
コマンド:aws s3 ls
結果:YYYY-MM-DD HH:MM:SS バケット名
バケット名が表示されたら成功です。
8.Fluentdインストール
以下のサイトに従って、リミットの変更など行います。
docs.fluentd.org
上記のサイトに書いてある事前準は以下の2つの修正です。
# vi limits.conf
以下を追記
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
# vi sysctl.conf
以下を追記
net.core.somaxconn = 1024
net.core.netdev_max_backlog = 5000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_wmem = 4096 12582912 16777216
net.ipv4.tcp_rmem = 4096 12582912 16777216
net.ipv4.tcp_max_syn_backlog = 8096
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
追記が完了したら、マネジメントコンソールにてインスタンスを再起動させます。
再起動後、以下のコマンドにてFluentdをインストールします。
#curl -L https://toolbelt.treasuredata.com/sh/install-amazon1-td-agent3.sh | sh
以下のプラグインをインストールしておきます。
#td-agent-gem install fluent-plugin-s3
#td-agent-gem install fluent-plugin-forest
無事インストールが終わったら、S3へログを出力する設定をtd-agent.confに追記します。
今回はsyslogの内容を送ります。
追記内容は以下の2つ。S3に作成したバケット名やリージョンは適宜変更して追記してください。
<source>
@type tail
path /var/log/messages
tag td.messages.access
pos_file /var/log/td-agent/messages.pos
format syslog
</source>
<match td.messages.access>
@type s3
s3_bucket fluentd-test-log ←適宜変更
s3_region ap-northeast-1 ←適宜変更
time_slice_format %Y%m%d%H%M
</match>
追記保存が完了したら、td-agentを再起動します。
#sudo /etc/init.d/td-agent restart
9.ログ確認
td-agentの再起動を繰り返すとS3にログが出力されますので、S3を確認してみます。
gzファイルが出力されていたら成功です。
以上です。