14
14

More than 3 years have passed since last update.

【AWS】CloudWatchでApacheのログを監視する

Last updated at Posted at 2021-02-03

こんにちは。最近AWSを学習し始めた者です。

最近CloudWatchを触れたのですが、
私みたいなインフラ自体あまり詳しくない人間にとっては"ログの監視"という文化から知る必要があり、いろんなサイトを回りながら学んだことをまとめます。

Apacheのログとは?

この説明がわかりやすかったです。

ブラウザでWebサイトにアクセスすると、サーバー上で稼働しているApacheがHTMLコンテンツをブラウザに返しますが、それと同時にアクセス記録を残します。
その記録が残されるファイルがログファイルです。この記録を調べることで、「本当にサーバーにHTTPアクセスがあったかどうか」「リクエストに対して正常に応答できているか」などの情報が分かります。
ログの見方

要するに
・誰が(どのIPアドレス)がアクセスしているのか
・変な奴が何百回もアクセスしてないか
・エラーなくちゃんと動いているか
などを調べるためにログを監視するということですね。
(もちろん他にもたくさんあるでしょうけど)

Apacheのログはいくつか種類があるようですが、今回は以下の2つを監視する設定をしたいと思います。

  • アクセスログ
    いつ誰が何のページにアクセスしたのかを記録するログ

  • エラーログ
    リクエストの結果がエラーになったものだけが記録されるログ。
    このログを見ると、サーバに問題が起きていないかを確認できる。
    設定やリンクの間違いなどに気付けることもある。

ちなみにログ監視の設定が完了すると、
CloudWatchのコンソール画面からこんな感じでログの確認ができます。
スクリーンショット 2021-02-03 21.54.45.png

↑これはアクセスログですが、アクセスログの見方はこのサイトがわかりやすかったです。

スクリーンショット 2021-02-03 22.50.03.png

項目 説明
リクエスト元IPアドレス リクエストを送ったパソコンや携帯端末のIPアドレスが記録されます。
アクセスされた日時 サーバーがリクエストを受け取り、HTMLコンテンツを返した日時になります。
アクセスされたファイル サーバー上のどのファイルにアクセス要求があったかが分かります。
ステータスコード 200の場合は「正常」です。これが404だったらNotFound、つまりファイルが見つからなかったというエラーになるし、500だったらInternalServerErrorになります。
UserAgent アクセスしてきたデバイスの情報が分かります。OSやブラウザの種類、バージョンなどが書かれています。

ログの見方

CloudWatchの設定手順

環境

  • パソコン:Mac
  • AMI:Amazon Linux 2

前提

  • Apacheのインストール、設定が完了していること。
  • EC2にSSH接続済みであること。

構成図

めちゃくちゃシンプルな構成です。
Wordpressをインストールしており、そこにアクセスされたログを収集する設定をしていきます。

スクリーンショット 2021-02-03 22.30.45.png

①awslogsをインストールする

CloudWatchにはCPUやメモリの使用率などを監視するリソース監視はデフォルトで設定されていますが、
ログ監視の場合はawslogsをインストールして自身で設定を追加する必要があります。

EC2にSSH接続している状態で、以下のコマンドでインストールします。

[ec2-user@ip-10-0-1-227 ~]$ sudo yum install awslogs

いろいろインストール画面が表示され最後にIs this ok [y/d/N]:と表示されます。

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                                     | 3.7 kB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ awslogs.noarch 0:1.1.4-3.amzn2 を インストール
--> 依存性の処理をしています: aws-cli-plugin-cloudwatch-logs のパッケージ: awslogs-1.1.4-3.amzn2.noarch
--> トランザクションの確認を実行しています。
---> パッケージ aws-cli-plugin-cloudwatch-logs.noarch 0:1.4.6-1.amzn2.0.1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

======================================================================================================================================================
 Package                                           アーキテクチャー          バージョン                           リポジトリー                   容量
======================================================================================================================================================
インストール中:
 awslogs                                           noarch                    1.1.4-3.amzn2                        amzn2-core                    8.2 k
依存性関連でのインストールをします:
 aws-cli-plugin-cloudwatch-logs                    noarch                    1.4.6-1.amzn2.0.1                    amzn2-core                     62 k

トランザクションの要約
======================================================================================================================================================
インストール  1 パッケージ (+1 個の依存関係のパッケージ)

総ダウンロード容量: 70 k
インストール容量: 243 k
Is this ok [y/d/N]:

yキーを押してインストールを進めます。

Downloading packages:
(1/2): aws-cli-plugin-cloudwatch-logs-1.4.6-1.amzn2.0.1.noarch.rpm                                                             |  62 kB  00:00:00
(2/2): awslogs-1.1.4-3.amzn2.noarch.rpm                                                                                        | 8.2 kB  00:00:00
------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                  506 kB/s |  70 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : aws-cli-plugin-cloudwatch-logs-1.4.6-1.amzn2.0.1.noarch                                                               1/2
  インストール中          : awslogs-1.1.4-3.amzn2.noarch                                                                                          2/2
  検証中                  : awslogs-1.1.4-3.amzn2.noarch                                                                                          1/2
  検証中                  : aws-cli-plugin-cloudwatch-logs-1.4.6-1.amzn2.0.1.noarch                                                               2/2

インストール:
  awslogs.noarch 0:1.1.4-3.amzn2

依存性関連をインストールしました:
  aws-cli-plugin-cloudwatch-logs.noarch 0:1.4.6-1.amzn2.0.1

完了しました!
[ec2-user@ip-10-0-1-227 ~]$

完了しました!と表示されればインストール完了です。

②awslogsの設定をいじる

awslogsディレクトリまで移動します。

cd /etc/awslogs

このディレクトリには4つの設定ファイルがあります。

[ec2-user@ip-10-0-1-227 awslogs]$ ls -l
合計 20
-rw------- 1 root root   55  2月  3 07:25 awscli.conf
-rw-r--r-- 1 root root 8355  7月 25  2018 awslogs.conf
drwxr-xr-x 2 root root    6  7月 25  2018 config
-rw-r--r-- 1 root root  147  7月 25  2018 proxy.conf

まずawscli.confを編集します。

sudo vi awscli.conf

ログ転送先のリージョンがus-east-1になっているので、現在のリージョンに書き換えます。
ここではap-northeast-1に修正し、:wqで上書き保存します。

[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1 ←ここを修正

続いてawslogs.confを編集します。

sudo vi awslogs.conf

英語で長い説明が出てきます。

# ------------------------------------------
# CLOUDWATCH LOGS AGENT CONFIGURATION FILE
# ------------------------------------------
#
# --- DESCRIPTION ---
# This file is used by the CloudWatch Logs Agent to specify what log data to send to the service and how.
# You can modify this file at any time to add, remove or change configuration.
#
# NOTE: A running agent must be stopped and restarted for configuration changes to take effect.
#
# --- CLOUDWATCH LOGS DOCUMENTATION ---
# https://aws.amazon.com/documentation/cloudwatch/
#
# --- CLOUDWATCH LOGS CONSOLE ---
# https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logs:
#
# --- AGENT COMMANDS ---
# To check or change the running status of the CloudWatch Logs Agent, use the following:
#
# To check running status: service awslogs status
# To stop the agent: service awslogs stop
# To start the agent: service awslogs start
# To start the agent on server startup: chkconfig awslogs on
#
# --- AGENT LOG OUTPUT ---
# You can find logs for the agent in /var/log/awslogs.log
#

冒頭を翻訳するとこんな感じです。

--- DESCRIPTION --- ---.
このファイルはCloudWatch Logsエージェントがサービスに送信するログデータの種類や方法を指定するために使用します.
このファイルはいつでも変更可能で, 設定の追加,削除,変更を行うことができます.
DeepL

どうやらこのファイルで詳しいログの設定ができるようです。

では一番下までスクロールします。

[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages

デフォルトで/var/log/messagesの設定が記述されています。
この設定についてはこのサイトの説明がわかりやすかったです。

UNIX系のOS(LinuxとかMacとか)で使われる、
あれやこれやのログが記録されているファイルです。
もう少しざっくり書くと 特定用途「以外」のログを記録するファイルになります。

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

この下にアクセスログエラーログを取得するための設定を追加し:wqで上書き保存します。

[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages

[HttpAccessLog]
file = /var/log/httpd/access_log
log_group_name = HttpAccessLog
log_stream_name = {instance_id}
datetime_format = %b %d %H:%M:%S

[HttpErrorLog]
file = /var/log/httpd/error_log
log_group_name = HttpErrorLog
log_stream_name = {instance_id}
datetime_format = %b %d %H:%M:%S
key value
file どのファイル(ログ)を送るのかを指定するフィールド。今回はApacheのログを送りたいのでhttpd配下のログファイルを指定している。
log_group_name ログは特定の1箇所から送られるとは限らず、複数の場所から送られることもある。なので同じ種類のログはlog_group_nameで指定して一纏めにすることができる。
log_streamname ここはEC2インスタンスのIDを指定しているが、例えばEC2インスタンスが複数あり、それぞれから同じログを送信する場合、まずlog_group_nameは同一で一纏めにすることができ、かつlog_streamnameでログの送信元を判別できるようになる。
datetime_format 送信時間の書き方ですね

Amazon CloudWatch Logs の概念

③IAMロールを作成する

EC2からCloudWatchにログを送信する権限を与えるためのIAMロールを作成します。

IAMロールとは:
ユーザーやグループではなく、EC2などのAWSのサービスや他のアカウントに対してにAWS の操作権限を付与するための仕組みです。

【AWS IAMとは?】初心者にもわかりやすく解説

IAMのコンソールからロール ロールの作成をクリックします。
スクリーンショット 2021-02-03 18.54.19.png

EC2を選択し次のステップをクリックします。
スクリーンショット 2021-02-03 18.57.41.png

ポリシーは1から作る必要はなく、
AWSが用意しているCloudWatchAgentServerPolicyを利用できます。

検索窓にCloudWatchAgentServerPolicyと入力し、検索結果にチェックをつけて次のステップをクリックします。
スクリーンショット 2021-02-03 18.59.28.png

ロールの名前と説明を求められます。
今回はポリシー名と同じにしてロールの作成をクリックします。
スクリーンショット 2021-02-03 19.20.51.png

④作成したIAMロールをEC2にアタッチする

EC2のコンソール画面から該当のEC2インスタンスを右クリックし、
セキュリティ IAMロールを変更をクリックします。
スクリーンショット 2021-02-03 19.36.09.png

先ほど作成したロールを選択し保存をクリックします。
スクリーンショット 2021-02-03 19.42.39.png

⑤awslogsを起動する

以下のコマンドでawslogsのデーモンを起動します。

sudo systemctl start awslogsd

EC2を再起動しても再度自動で起動できるように以下のコマンドも入力します。
これですべての準備は完了です。

sudo systemctl enable awslogsd

⑥ログを確認する

CloudWatchコンソールのロググループをクリックし、awslogs.confに追加したロググループが表示されていることを確認します。
スクリーンショット 2021-02-03 20.26.55.png

試しにHttpAccessLogをクリックするとログストリーム(今回はEC2インスタンスのIDを指定している)が表示されます。
このログストリームをクリックします。
スクリーンショット 2021-02-03 21.13.52.png

ログの一覧が表示されます。
スクリーンショット 2021-02-03 21.54.29.png

最後に

とりあえずログの送信方法の学習でしたが、実務ではこのログをどう見るのかが求められてくるのでしょう。
それはまた必要になったタイミングで学びたいと思います。

この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com

スクリーンショット 2021-02-04 21.52.42.png

14
14
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
14
14