LoginSignup
0
0

More than 1 year has passed since last update.

nginxのアクセスログをfluentdを使ってS3にファイルとして保存する(EC2 + nginx + fluentd + S3)

Last updated at Posted at 2021-12-19

環境
MacBook Air (M1, 2020)
MacOS Big Sur v11.5.1
zsh

必要なこと
AWSのアカウントを持っている


今日はEC2にnginxとfluentdを入れてS3にファイルとして保存する方法を紹介していきたいと思います

EC2にインスタンスを作っていくぅ〜

詳細を表示

まず初めに使うのはこれ デュルルルルルルシュコー 『AWS マネジメントコンソール』 

1.jpg

やってまいりましたマネジメントコンソール
EC2とタイトルに書いてあるのでとりあえずEC2をクリックしましょう
もし見えるところになければ上の虫眼鏡のところにEC2と入力すれば出てくると思います


するとこんな感じの画面が出てきます
この画面を初めて見た時は何をしたらいいかわからなすぎて気絶してしまいました
今回は「インスタンスを起動」をクリックして先に進みます。何も怖くありません

2.jpg


そしてその先にあるのがこれです
今回はただnginxを入れるだけなので無料枠でいいと思います

4.jpg


この画面では最初から無料利用枠の対象が選択されているのでこのまま右下の「次のステップ」をクリックして先に進みます

6.jpg


次の画面でも今回は何も考えずに先に進みます

7.jpg


ここでは30GBまで無料で増やせると言われていますが、そんなに使わないのでこれも変更なしでいいです
ちなみに文字で隠れていますが8GiBになっています

8.jpg


この画面ではNameタグを追加していますが別にやらなくてもいいです
名前つけなくていいやという方はそのまま次のステップへ

9.jpg


警告されていますが、このまま進んで大丈夫です

10.jpg


ここも特に気にせずに先に進みます

11.jpg


するとこんなのが出てくるので、既存のキーペアを使いたい人はそのままでいいですが、ない人もいるかもしれないので新しいキーペアの作成をしていきます

12jpg.jpg


13.jpg


キーペアがダウンロードされたのでインスタンスの作成をクリックできるようになりました
クリックします

14.jpg


インスタンスの表示をクリックしてインスタンス一覧を見に行ってみましょう

15.jpg



17.jpg
インスタンスができました


EC2にSSH接続していくぅ〜

詳細を表示

前回ダウンロードしたキーを使ってssh接続できるようにしていきます

まずはダウンロードフォルダにキーが存在しているか確認してみます

[~] % ls Downloads/                                                                                                                        
nginx-fluentd.pem

ありました

権限を変更していきます

[~] % sudo chmod 400 Downloads/nginx-fluentd.pem                                                                                               

.sshディレクトリに移動しておきます

[~] % mv Downloads/nginx-fluentd.pem ~/.ssh                                                                                                    

AWSマネジメントコンソールに移動してインスタンスの「パブリック IPv4 アドレス」をコピーしてきます

19.png

からの

18.png

Elastic IP使わないのか?と思うかもしれませんが、今回はそこまで長く使わないのでアドレスの割り当ては行いません

configを開きます

[~] % vim ~/.ssh/config

i を押して編集していきます

以下のブロックを適当なところに貼り付けて esc からの :wq で保存して抜けます

~/.ssh/config
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のインスタンスの設定を開いてセキュリティの設定を表示します
27.png


セキュリティグループのリンクをクリックします

26.png


インバウンドのルールを編集していきます

25.png


ルールを追加します

24.png


タイプをHTTPにします
23.png


ソースをマイIPにします
これはどこからでもアクセスできるとたくさんログが出てしまって大変だからです

22.png


ルールを保存します
21.png


これで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 アドレス) にアクセスしてみます


20.png

表示されました


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を選択してこの画面にいき、バケットを作成をクリックします

30.png


バケット名を入力します

29.png


バケットを作成をクリックします

28.png

これでバケットが作成できました


次はfluentdの設定を編集していきます

ここではawsの認証キーが必要なのでAWSコンソールのIAMでユーザーを作成していきます

AWSマネジメントコンソールにログインしIAMと検索し、ユーザーをクリックします

その後、ユーザーを追加をクリックします

40.png


名前はなんでもいいのですが今回はnginx-fluentdという名前にしておきます

アクセスキー・プログラムによるアクセスにチェックし、次のステップに進みます

39.png


ここでは権限を制限するためのグループを設定することができます
グループがないので作っていきます

38.png


グループ名を適当につけて、EC2のフルアクセス権限にチェックを入れます

36.png


次にS3のフルアクセス権限にチェックを入れ、グループの作成をクリックします
これでEC2とS3にフルアクセスできるグループができました

35.png


タグは追加せずに進みます

37.png


ユーザーの作成をクリックします

34.png

次の画面に表示される「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 を押して編集していきます

以下のブロックを

/etc/td-agent/td-agent.conf
####
## Source descriptions:
##

の下に貼り付けてください

aws_key_id と aws_sec_key と s3_bucketは自分のものに書き換えてください

/etc/td-agent/td-agent.conf
<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というバケットをクリックします

33.png


nginx.access/ をクリックします

32.png



31.png

ファイルができました


(おまけ)ログに出力される時間を日本時間にしていくぅ〜

詳細を表示

これで終わりにしてもいい気もしますが、nginxのアクセスログに書かれている時間がUTCになっているので
日本時間に直しておきます

以下のコマンドで設定ファイルを開きます

[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しか書いたことないという方でも大歓迎です!

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