AWS CloudWatch LogsエージェントでAmazon EC2上のNginxのaccess.log , error.log , php-fpm error.log , Linuxのmessages , secureログを収集する
参考ページ
クイックスタート: 実行中の EC2 インスタンスに CloudWatch Logs エージェントをインストールして設定する – Amazon CloudWatch ログ
EC2用のIAMロールを作成する
※既にEC2に設定しているIAMロールがありましたので次のポリシーを追加しました。
新たに作成する場合は下記のポリシーを設定したIAMロールをEC2に設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] } ] } |
EC2に CloudWatch Logsをインストールする
EC2にSSHログインシて作業します。
1 2 3 |
$ sudo yum update -y $ sudo yum install -y awslogs |
CloudWatch Logsを設定する
リージョンを設定します。
1 2 |
$ sudo vim /etc/awslogs/awscli.conf |
1 2 |
region = ap-northeast-1 |
取得したいログファイルの設定をします。
1 2 |
$ sudo vim /etc/awslogs/awslogs.conf |
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 31 32 33 34 35 36 37 38 39 |
[general] state_file = /var/awslogs/state/agent-state [MessagesLog] file = /var/log/messages log_group_name = MessagesLog log_stream_name = {instance_id} datetime_format = %b %d %H:%M:%S [SecureLog] file = /var/log/secure log_group_name = SecureLog log_stream_name = {instance_id} datetime_format = %b %d %H:%M:%S [NginxAccessLog] file = /var/log/nginx/access.log log_group_name = NginxAccessLog log_stream_name = {instance_id} datetime_format = %d/%b/%Y:%H:%M:%S %z [NginxErrorLog] file = /var/log/nginx/error.log log_group_name = NginxErrorLog log_stream_name = {instance_id} datetime_format = %Y/%m/%d %H:%M:%S [PhpFpmErrorLog] file = /var/log/php-fpm/error.log log_group_name = PhpFpmErrorLog log_stream_name = {instance_id} datetime_format = %d-%b-%Y %H:%M:%S [PhpFpmWwwErrorLog] file = /var/log/php-fpm/www-error.log log_group_name = PhpFpmWwwErrorLog log_stream_name = {instance_id} datetime_format = %d-%b-%Y %H:%M:%S |
datetime_formatについて
2017-08-12 05:04:03,618 – cwlogs.push.reader – WARNING – 2458 – Thread-4 – Fall back to current time: {‘timestamp’: 1502481843618, ‘start_position’: 25765L, ‘end_position’: 26029L}, reason: timestamp could not be parsed from message.
適切な設定をしないと上記のような警告ログが出力されてタイムスタンプが正常に反映されません。
それぞれのログファイルのタイムスタンプは確認したところ、下記のようになっていました。
ログファイル | タイムスタンプ | datetime_format |
---|---|---|
Nginx error.log | 2017/08/12 05:04:00 | %Y/%m/%d %H:%M:%S |
Nginx access.log | 12/Aug/2017:06:19:17 +0900 | %d/%b/%Y:%H:%M:%S %z |
php-fpm error.log | 12-Aug-2017 05:24:38 | %d-%b-%Y %H:%M:%S |
php-fpm www-error.log | 10-Aug-2017 23:40:46 UTC | %d-%b-%Y %H:%M:%S |
messages | Aug 12 06:13:36 | %b %d %H:%M:%S |
secure | Aug 11 04:03:33 | %b %d %H:%M:%S |
datetime_formatのフォーマット記号
記号 | 値 | 備考 |
---|---|---|
%a | Sun, Mon, …, Sat (en_US) | |
%A | Sunday, Monday, …, Saturday (en_US) | |
%w | 0, 1, …, 6 | 日~土までの数字 |
%d | 01, 02, …, 31 | 日 |
%b | Jan, Feb, …, Dec (en_US) | |
%B | January, February, …, December (en_US) | |
%m | 01, 02, …, 12 | 月 |
%y | 00, 01, …, 99 | 西暦下2桁 |
%Y | 1970, 1988, 2001, 2013 | |
%H | 00, 01, …, 23 | 24時間表記の時間 |
%I | 01, 02, …, 12 | 12時間表記の時間 |
%p | AM, PM (en_US) | |
%M | 00, 01, …, 59 | 分 |
%S | 00, 01, …, 59 | 秒 |
%f | 000000, 000001, …, 999999 | マイクロ秒 |
%z | (empty), +0000, -0400, +1030 | 標準時との差 |
%j | 001, 002, …, 365 | 年における日 |
%U | 00, 01, …, 53 | 年における週連番(最初の日曜日から0) |
%W | 00, 01, …, 53 | 年における週連番(最初の月曜日から0) |
サービス起動
1 2 3 |
$ sudo service awslogs start $ sudo chkconfig awslogs on |
AWS CloudWatchのログを確認
ログが出来てます。
Nginxのaccess.logを見るとそれなりに攻撃されているのが分かりました。
対策は別記事で。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー2年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
re:Invent 徒歩記(シアトルも)
このブログは、AWS re:invent 2018 Advent Calenda …
-
-
EC2 Auto Recovery機能を設定しておいた
以前EC2インスタンスのリタイア対象になったこともあり、というより、やっておいて …
-
-
AWS Summit 2016 Tokyoに参加してきました (前日 ~ Day1)
AWS Summit 2016 Tokyoにて、セッション聴講、ブース展示拝見、 …
-
-
[事前準備] JAWS-UG 関西IoT専門支部「マクニカkibo + AWS IoTハンズオン」
来る12/19(土)の JAWS-UG 関西IoT専門支部第一回勉強会「マクニカ …
-
-
slackのbotをAWS Lambda(Python)+API Gatewayで構築
slackで投稿した内容に応じて返信したり調べ物したりしてくれるbotですが、こ …
-
-
「関西AWSスタートアップ勉強会」に行ってきました
第2回 関西スタートアップAWS勉強会に行ってきました。 akippa 拠点数コ …
-
-
AWS EC2 インスタンスステータスのチェックで失敗 原因はPHP-FPMのOOM-KILLER
先週に引き続きEC2のインスタンスステータスチェックで失敗 再起動するも失敗する …
-
-
AWS EC2 Amazon Linuxにmauticをインストールする(Sendgrid, Nginx, MySQL on RDS)
mauticをAmazon LinuxとNginx,MySQL on RDSにイ …
-
-
Going Serverless with AWS(AWS Summit Tokyo 2017)を聞いてきました
AWS Summit Tokyo 2017でセッション「Going Server …
-
-
ACM(AWS Certificate Manager)の承認メールを受け取るためにAmazon SESを設定する
何のためでもいいのですが、ドメインは持っているけど、そのドメイン宛にメールを送ら …