環境
MacBook Air (M1, 2020)
MacOS Big Sur v11.5.1
zsh
必要なこと
AWSのアカウントを持っている
今日はEC2にnginxとfluentdを入れてS3にファイルとして保存する方法を紹介していきたいと思います
EC2にインスタンスを作っていくぅ〜
詳細を表示
やってまいりましたマネジメントコンソール
EC2とタイトルに書いてあるのでとりあえずEC2をクリックしましょう
もし見えるところになければ上の虫眼鏡のところにEC2と入力すれば出てくると思います
するとこんな感じの画面が出てきます
この画面を初めて見た時は何をしたらいいかわからなすぎて気絶してしまいました
今回は「インスタンスを起動」をクリックして先に進みます。何も怖くありません
そしてその先にあるのがこれです
今回はただnginxを入れるだけなので無料枠でいいと思います
この画面では最初から無料利用枠の対象が選択されているのでこのまま右下の「次のステップ」をクリックして先に進みます
次の画面でも今回は何も考えずに先に進みます
ここでは30GBまで無料で増やせると言われていますが、そんなに使わないのでこれも変更なしでいいです
ちなみに文字で隠れていますが8GiBになっています
この画面ではNameタグを追加していますが別にやらなくてもいいです
名前つけなくていいやという方はそのまま次のステップへ
警告されていますが、このまま進んで大丈夫です
ここも特に気にせずに先に進みます
するとこんなのが出てくるので、既存のキーペアを使いたい人はそのままでいいですが、ない人もいるかもしれないので新しいキーペアの作成をしていきます
キーペアがダウンロードされたのでインスタンスの作成をクリックできるようになりました
クリックします
インスタンスの表示をクリックしてインスタンス一覧を見に行ってみましょう
EC2にSSH接続していくぅ〜
詳細を表示
前回ダウンロードしたキーを使ってssh接続できるようにしていきます
まずはダウンロードフォルダにキーが存在しているか確認してみます
[~] % ls Downloads/
nginx-fluentd.pem
ありました
権限を変更していきます
[~] % sudo chmod 400 Downloads/nginx-fluentd.pem
.sshディレクトリに移動しておきます
[~] % mv Downloads/nginx-fluentd.pem ~/.ssh
AWSマネジメントコンソールに移動してインスタンスの「パブリック IPv4 アドレス」をコピーしてきます
からの
Elastic IP使わないのか?と思うかもしれませんが、今回はそこまで長く使わないのでアドレスの割り当ては行いません
configを開きます
[~] % vim ~/.ssh/config
i を押して編集していきます
以下のブロックを適当なところに貼り付けて esc からの :wq で保存して抜けます
Host nginx-fluentd
HostName 54.178.155.3
User ec2-user
IdentityFile ~/.ssh/nginx-fluentd.pem
configの設定ができたらEC2の中に入っていきます
次のコマンドで
Received disconnect from 12.345.6.789 port 22:2: Too many authentication failures
Disconnected from 12.345.6.789 port 22
と出てしまって接続できない方は
Mac SSH 設定
を見てみるといいかもしれないです
[~] % ssh nginx-fluentd 13:28:36
Warning: Permanently added '54.178.155.3' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
6 package(s) needed for security, out of 14 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-123-45-67-890 ~]$
できました
nginxを入れていくぅ〜
詳細を表示
とりあえず言われた通り sudo yum update をしておきます。
[ec2-user@ip-123-45-67-890 ~]$ sudo yum update
nginxを入れる前にEC2にhttpでアクセスできるようにしておきます
EC2のインスタンスの設定を開いてセキュリティの設定を表示します
セキュリティグループのリンクをクリックします
インバウンドのルールを編集していきます
ルールを追加します
ソースをマイIPにします
これはどこからでもアクセスできるとたくさんログが出てしまって大変だからです
これでEC2の設定は終わりです
ここからはこちらの記事を参考に進めていきます
AWS EC2にNginxをインストールする
nginxを入れていきます
[ec2-user@ip-123-45-67-890 ~]$ sudo amazon-linux-extras install nginx1
nginxを起動します
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl start nginx
54.178.155.3(パブリック IPv4 アドレス) にアクセスしてみます
表示されました
fluentdを入れていくぅ〜
詳細を表示
今回はlinuxなので以下のコマンドで入れます
[ec2-user@ip-123-45-67-890 ~]$ curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh
fluentdを起動します
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl start td-agent.service
fluentdが動いているかテストをします
[ec2-user@ip-123-45-67-890 ~]$ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
[ec2-user@ip-123-45-67-890 ~]$ tail -n 1 /var/log/td-agent/td-agent.log
2021-12-18 05:47:21.308254823 +0000 debug.test: {"json":"message"}
[ec2-user@ip-123-45-67-890 ~]$
動きました
nginxのアクセスログを確認していくぅ〜
詳細を表示
nginxのアクセスログがどこに吐かれるのか忘れたので確認します
[ec2-user@ip-123-45-67-890 ~]$ vim /etc/nginx/nginx.conf
ありました
access_log /var/log/nginx/access.log main;
アクセスログを確認してみます
[ec2-user@ip-123-45-67-890 ~]$ sudo cat /var/log/nginx/access.log
123.4.567.890 - - [18/Dec/2021:04:49:30 +0000] "GET / HTTP/1.1" 200 3520 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
123.4.567.890 - - [18/Dec/2021:04:49:30 +0000] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://54.178.155.3/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
123.4.567.890 - - [18/Dec/2021:04:49:30 +0000] "GET /favicon.ico HTTP/1.1" 404 3665 "http://54.178.155.3/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
ちゃんと吐かれているみたいです
nginxのアクセスログをS3にファイルとして保存していくぅ〜
詳細を表示
まずはファイルを保存するためのバケットを作成していきます
AWSマネジメントコンソールからS3を選択してこの画面にいき、バケットを作成をクリックします
バケット名を入力します
バケットを作成をクリックします
これでバケットが作成できました
次はfluentdの設定を編集していきます
ここではawsの認証キーが必要なのでAWSコンソールのIAMでユーザーを作成していきます
AWSマネジメントコンソールにログインしIAMと検索し、ユーザーをクリックします
その後、ユーザーを追加をクリックします
名前はなんでもいいのですが今回はnginx-fluentdという名前にしておきます
アクセスキー・プログラムによるアクセスにチェックし、次のステップに進みます
ここでは権限を制限するためのグループを設定することができます
グループがないので作っていきます
グループ名を適当につけて、EC2のフルアクセス権限にチェックを入れます
次にS3のフルアクセス権限にチェックを入れ、グループの作成をクリックします
これでEC2とS3にフルアクセスできるグループができました
タグは追加せずに進みます
ユーザーの作成をクリックします
次の画面に表示される「Access key ID」と「Secret access key」をfluentdの設定で使うのでcsvファイルをダウンロードするかメモしておいてください
それではアクセスキーが作成できたのでfluentdの設定を書いていきたいと思いますが、その前にfluentdがnginxのログファイルにアクセスできるように権限を変更しておきたいと思います
[ec2-user@ip-123-45-67-890 ~]$ sudo chmod 777 /var/log/nginx/
これでfluentdがnginxのログファイルにアクセスできるようになったのでfluentdの設定をしていきます
以下のコマンドで設定ファイルが開けます
[ec2-user@ip-123-45-67-890 ~]$ sudo vim /etc/td-agent/td-agent.conf
i を押して編集していきます
以下のブロックを
####
## Source descriptions:
##
の下に貼り付けてください
aws_key_id と aws_sec_key と s3_bucketは自分のものに書き換えてください
<source>
@type tail
path /var/log/nginx/access.log
format nginx
tag nginx.access
pos_file /var/log/nginx/access.log.pos
</source>
<match nginx.**>
@type s3
aws_key_id #################
aws_sec_key ##############################
s3_bucket ##########
s3_region ap-northeast-1
path ${tag}/
s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}
<buffer tag,time>
@type file
path /var/log/td-agent/s3
timekey 3600
timekey_wait 10m
timekey 60
timekey_wait 60
chunk_limit_size 256m
</buffer>
</match>
esc からの :wq で保存して抜けます
fluentdを再起動します
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl restart td-agent
54.178.155.3(パブリック IPv4 アドレス) にアクセスしてみます
nginxにログが吐かれているか確認してみます
[ec2-user@ip-123-45-67-890 ~]$ cat /var/log/nginx/access.log
123.4.567.890 - - [19/Dec/2021:08:40:34 +0000] "GET / HTTP/1.1" 200 3520 "http://54.178.155.3/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
123.4.567.890 - - [19/Dec/2021:08:40:34 +0000] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://54.178.155.3/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
123.4.567.890 - - [19/Dec/2021:08:40:34 +0000] "GET /favicon.ico HTTP/1.1" 404 3665 "http://54.178.155.3/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
吐かれているのでS3を見に行ってみましょう
nginx-fluentdというバケットをクリックします
nginx.access/ をクリックします
ファイルができました
(おまけ)ログに出力される時間を日本時間にしていくぅ〜
詳細を表示
以下のコマンドで設定ファイルを開きます
[ec2-user@ip-123-45-67-890 ~]$ sudo vim /etc/sysconfig/clock
i を押して編集していきます
これを貼り付けます
ZONE="Japan"
UTC=true
esc からの :wq で保存して抜けます
/etc/localtime とタイムゾーンファイルの間にシンボリックリンクを作成します
[ec2-user@ip-123-45-67-890 ~]$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime
再起動します
[ec2-user@ip-123-45-67-890 ~]$ sudo reboot
インスタンスにログインします
[~] % ssh nginx-fluentd
変更を確認します
[ec2-user@ip-123-45-67-890 ~]$ date
2021年 12月 19日 日曜日 18:56:26 JST
日本時間になりました
nginxとfluentdを再起動します
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl restart nginx
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl restart td-agent
54.178.155.3(パブリック IPv4 アドレス) にアクセスしてnginxのアクセスログを見てみます
[ec2-user@ip-123-45-67-890 ~]$ cat /var/log/nginx/access.log
123.4.567.890 - - [19/Dec/2021:19:11:09 +0900] "GET / HTTP/1.1" 200 3520 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
123.4.567.890 - - [19/Dec/2021:19:11:09 +0900] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://54.178.155.3/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
123.4.567.890 - - [19/Dec/2021:19:11:10 +0900] "GET /favicon.ico HTTP/1.1" 404 3665 "http://54.178.155.3/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36" "-"
日本時間になりました
次に読むといいかもしれない記事↓
fluentd × New Relic でnginxのアクセスログをNew Relic Oneで見れるようにしよう!
アライドアーキテクツでは月1回程度のペースでエンジニア採用を目的とした Meetup を行っています!
開催時期によって対象者が変わるのですが、今回の開催は2023年の4月入社になる方が対象です!(文理・学歴不問)
HTML&CSSしか書いたことないという方でも大歓迎です!