環境
MacBook Air (M1, 2020)
MacOS Big Sur v11.5.1
zsh
必要なこと
AWSのアカウントを持っている
今日はEC2にnginxとfluentdを入れてS3にファイルとして保存する方法を紹介していきたいと思います
EC2にインスタンスを作っていくぅ〜
やってまいりましたマネジメントコンソール するとこんな感じの画面が出てきます そしてその先にあるのがこれです この画面では最初から無料利用枠の対象が選択されているのでこのまま右下の「次のステップ」をクリックして先に進みます 次の画面でも今回は何も考えずに先に進みます ここでは30GBまで無料で増やせると言われていますが、そんなに使わないのでこれも変更なしでいいです この画面ではNameタグを追加していますが別にやらなくてもいいです 警告されていますが、このまま進んで大丈夫です ここも特に気にせずに先に進みます するとこんなのが出てくるので、既存のキーペアを使いたい人はそのままでいいですが、ない人もいるかもしれないので新しいキーペアの作成をしていきます キーペアがダウンロードされたのでインスタンスの作成をクリックできるようになりました インスタンスの表示をクリックしてインスタンス一覧を見に行ってみましょう詳細を表示
まず初めに使うのはこれ デュルルルルルルシュコー 『AWS マネジメントコンソール』
EC2とタイトルに書いてあるのでとりあえずEC2をクリックしましょう
もし見えるところになければ上の虫眼鏡のところにEC2と入力すれば出てくると思います
この画面を初めて見た時は何をしたらいいかわからなすぎて気絶してしまいました
今回は「インスタンスを起動」をクリックして先に進みます。何も怖くありません
今回はただnginxを入れるだけなので無料枠でいいと思います
ちなみに文字で隠れていますが8GiBになっています
名前つけなくていいやという方はそのまま次のステップへ
クリックします
EC2にSSH接続していくぅ〜
前回ダウンロードしたキーを使ってssh接続できるようにしていきます まずはダウンロードフォルダにキーが存在しているか確認してみます ありました 権限を変更していきます .sshディレクトリに移動しておきます AWSマネジメントコンソールに移動してインスタンスの「パブリック IPv4 アドレス」をコピーしてきます からの Elastic IP使わないのか?と思うかもしれませんが、今回はそこまで長く使わないのでアドレスの割り当ては行いません configを開きます i を押して編集していきます 以下のブロックを適当なところに貼り付けて esc からの :wq で保存して抜けます configの設定ができたらEC2の中に入っていきます 次のコマンドで と出てしまって接続できない方は Mac SSH 設定詳細を表示
[~] % ls Downloads/
nginx-fluentd.pem
[~] % sudo chmod 400 Downloads/nginx-fluentd.pem
[~] % mv Downloads/nginx-fluentd.pem ~/.ssh
[~] % vim ~/.ssh/config
Host nginx-fluentd
HostName 54.178.155.3
User ec2-user
IdentityFile ~/.ssh/nginx-fluentd.pem
Received disconnect from 12.345.6.789 port 22:2: Too many authentication failures
Disconnected from 12.345.6.789 port 22
を見てみるといいかもしれないです
[~] % 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 をしておきます。 nginxを入れる前にEC2にhttpでアクセスできるようにしておきます EC2のインスタンスの設定を開いてセキュリティの設定を表示します セキュリティグループのリンクをクリックします インバウンドのルールを編集していきます ルールを追加します ソースをマイIPにします これでEC2の設定は終わりです nginxを入れていきます nginxを起動します 54.178.155.3(パブリック IPv4 アドレス) にアクセスしてみます詳細を表示
[ec2-user@ip-123-45-67-890 ~]$ sudo yum update
これはどこからでもアクセスできるとたくさんログが出てしまって大変だからです
ここからはこちらの記事を参考に進めていきます
AWS EC2にNginxをインストールする[ec2-user@ip-123-45-67-890 ~]$ sudo amazon-linux-extras install nginx1
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl start nginx
表示されました
fluentdを入れていくぅ〜
今回はlinuxなので以下のコマンドで入れます fluentdを起動します fluentdが動いているかテストをします 詳細を表示
[ec2-user@ip-123-45-67-890 ~]$ curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl start td-agent.service
[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にファイルとして保存していくぅ〜
まずはファイルを保存するためのバケットを作成していきます バケット名を入力します バケットを作成をクリックします これでバケットが作成できました 次はfluentdの設定を編集していきます ここではawsの認証キーが必要なのでAWSコンソールのIAMでユーザーを作成していきます AWSマネジメントコンソールにログインしIAMと検索し、ユーザーをクリックします その後、ユーザーを追加をクリックします 名前はなんでもいいのですが今回はnginx-fluentdという名前にしておきます アクセスキー・プログラムによるアクセスにチェックし、次のステップに進みます ここでは権限を制限するためのグループを設定することができます グループ名を適当につけて、EC2のフルアクセス権限にチェックを入れます 次にS3のフルアクセス権限にチェックを入れ、グループの作成をクリックします タグは追加せずに進みます ユーザーの作成をクリックします 次の画面に表示される「Access key ID」と「Secret access key」をfluentdの設定で使うのでcsvファイルをダウンロードするかメモしておいてください それではアクセスキーが作成できたのでfluentdの設定を書いていきたいと思いますが、その前にfluentdがnginxのログファイルにアクセスできるように権限を変更しておきたいと思います これでfluentdがnginxのログファイルにアクセスできるようになったのでfluentdの設定をしていきます i を押して編集していきます 以下のブロックを の下に貼り付けてください aws_key_id と aws_sec_key と s3_bucketは自分のものに書き換えてください esc からの :wq で保存して抜けます fluentdを再起動します 54.178.155.3(パブリック IPv4 アドレス) にアクセスしてみます nginxにログが吐かれているか確認してみます 吐かれているのでS3を見に行ってみましょう nginx-fluentdというバケットをクリックします nginx.access/ をクリックします詳細を表示
AWSマネジメントコンソールからS3を選択してこの画面にいき、バケットを作成をクリックします
グループがないので作っていきます
これでEC2とS3にフルアクセスできるグループができました
[ec2-user@ip-123-45-67-890 ~]$ sudo chmod 777 /var/log/nginx/
以下のコマンドで設定ファイルが開けます[ec2-user@ip-123-45-67-890 ~]$ sudo vim /etc/td-agent/td-agent.conf
####
## Source descriptions:
##
<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>
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl restart td-agent
[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" "-"
ファイルができました
(おまけ)ログに出力される時間を日本時間にしていくぅ〜
以下のコマンドで設定ファイルを開きます i を押して編集していきます これを貼り付けます esc からの :wq で保存して抜けます /etc/localtime とタイムゾーンファイルの間にシンボリックリンクを作成します 再起動します インスタンスにログインします 変更を確認します 日本時間になりました nginxとfluentdを再起動します 54.178.155.3(パブリック IPv4 アドレス) にアクセスしてnginxのアクセスログを見てみます詳細を表示
これで終わりにしてもいい気もしますが、nginxのアクセスログに書かれている時間がUTCになっているので
日本時間に直しておきます
[ec2-user@ip-123-45-67-890 ~]$ sudo vim /etc/sysconfig/clock
ZONE="Japan"
UTC=true
[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
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl restart nginx
[ec2-user@ip-123-45-67-890 ~]$ sudo systemctl restart td-agent
[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しか書いたことないという方でも大歓迎です!