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を見るとそれなりに攻撃されているのが分かりました。
対策は別記事で。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
AWS WAFをSIEM on Amazon OpenSearch Serviceで可視化
SIEM on Amazon OpenSearch Serviceを構築の環境に …
-
特定AWSアカウント特定リージョンのSNSトピックを削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のSNSトピックを全部削除したいで …
-
Amazon SESでメール受信
Amazon SES(Simple Email Service)にメールドメイン …
-
AWSアカウントでルートユーザーが使用されたときにTeamsへ投稿する
Organizations組織内のアカウントのいずれかでルートユーザーが使用され …
-
Amazon LinuxにAlfresco Community Editionをインストールする
ダウンロード準備 Alfresco公式サイトで、「エンタープライズコンテンツ管理 …
-
Rocket.ChatからOut Going Webhookを設定してみる
API GatewayとLambda とりあえず、どんなデータが飛んでくるのか見 …
-
Amazon WorkSpaces Web Accessを有効化する
仕事がら、Amazon WorkSpacesをディレクトリも含めて一時的にセット …
-
Amazon CloudWatch Anomaly Detectionをダッシュボードに設定
Amazon CloudWatch クロスリージョンクロスアカウントダッシュボー …
-
IAMセッションポリシーの利用(GetFederationToken)
GetFederationTokenでのセッションポリシーは、呼び出し元のIAM …
-
CodeDeployでECR、ECSにデプロイするパイプラインのチュートリアル
チュートリアル: Amazon ECR ソースと、ECS と CodeDeplo …