個人開発したりしていて思うのですが、WEBの技術は一つ一つの膨大な単純作業の積み重ねだなと感じます。
はい!
そんなわけでEC2のApacheログをCloudWatchに出力しようと思います。
環境
- ALB配下のAWS EC2
フロー
- EC2 Apacheのログ設定
- EC2ロールの作成と割り当て
EC2にCloudWatchにアップロードできる権限を割り当てる - awslogsをEC2にインストールし出力
EC2 Apacheのログ設定
remoteipモジュールがあるか確認
1 2 |
# httpd -M | grep remoteip remoteip_module (shared) |
グローバル設定ファイル
1 2 3 4 5 6 7 8 9 10 11 12 |
# vi /etc/httpd/conf/httpd.conf ・・・ <IfModule log_config_module> # # The following directives define some format nicknames for use with # a CustomLog directive (see below). # LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common + LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-Proto}i\"" elb-customlog |
1 2 3 4 5 6 7 8 9 10 |
# vi /etc/httpd/conf.d/GlobalSetting.conf # ファビコンのログを出さない SetEnvIf Request_URI "\.(ico)$" nolog # 画像やJSのログを出さない SetEnvIf Request_URI "\.(gif|jpg|png|ico|jpeg|js|css)$" nolog CustomLog logs/access_log common env=!nolog |
バーチャルホスト設定ファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# vi /etc/httpd/conf.d/www.example.net.conf <VirtualHost *:80> ServerName www.example.net DocumentRoot /var/www/vhosts/www.example.net/httpdocs ErrorLog logs/www.example.net-error.log CustomLog logs/www.example.net-access.log elb-customlog env=!nolog ## ALB対策 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Port} !^443$ RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker RewriteRule ^(.*)?$ https://www.example.net.jp$1 [R=301,L] </IfModule> <Directory "/var/www/vhosts/www.example.net/httpdocs"> AllowOverride All Require all granted </Directory> </VirtualHost> |
構文チェック
1 2 |
# httpd -t Syntax OK |
Apacheに設定の反映
1 2 |
# systemctl restart httpd # systemctl status httpd |
EC2ロール作成とCloudWatch操作できるポリシーの割り当て
CloudWatchフルアクセスポリシーをEC2ロールにつける
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:*" ], "Effect": "Allow", "Resource": "*" } ] } |
awslogsのインストール
1 |
# sudo yum install -y awslogs |
リージョン変更 東京リージョンへ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
]# vi /etc/awslogs/awscli.conf [plugins] cwlogs = cwlogs [default] region = us-east-1 ↓変更 [plugins] cwlogs = cwlogs [default] region = ap-northeast-1 |
ログ出力対象ファイルの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# vi /etc/awslogs/awslogs.conf ・・・ [/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 ※下記を追加 [HttpdAccessLog] datetime_format = %d/%b/%Y:%H/%M/%S file = /var/log/httpd/www.example.net-access.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /HttpdAccessLog [HttpdErrorLog] datetime_format = %d/%b/%Y:%H/%M/%S file = /var/log/httpd/www.example.net-error.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /HttpdErrorLog |
バーチャルホストのアクセスログ、エラーログを対象にします。
設定の反映と起動
1 2 3 |
# systemctl restart awslogsd # systemctl enable awslogsd # systemctl status awslogsd |
これでCloudWatch Logsのロググループに出力されます。
お疲れ様です。