AWSのLinuxインスタンスでCloudwatchLogsと連携する方法

Windows系のEC2インスタンスはSSM AgnetがPublic AMIに同梱されるようなったため、WindowsイベントログのCloudwatchLogsへの転送設定をSSMから実施できるようなりましたが、Linux系はawslogsのモジュールが必要となり、現在のところ追加でモジュールをインストールして、コンフィグを設定してあげる必要があります。

以下、Amazon Linuxを想定。

(1) IAMロール を設定 対象のEC2インスタンスにCloudwatchLogsへアクセスするIAMロールを付与。具体的ポリシーはこちら。

クイックスタート: 実行中の EC2 Linux インスタンスに CloudWatch Logs エージェントをインストールして設定する - Amazon CloudWatch ログ

(2) awslogsインストール 対象OSにログインして、awslogsをインストール。

> sudo yum install -y awslogs

(3) コンフィグの編集

とりあえずバックアップを。

sudo cp /etc/awslogs/awscli.conf /etc/awslogs/awscli.conf.org
sudo cp /etc/awslogs/awslogs.conf /etc/awslogs/awslogs.conf.org

awscli.confを編集。default設定ではN.Virginaに飛ばされるので、regionの設定値を東京リージョン(ap-northeast-1)に変えてあげる。

[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1

awslogs.confを編集。転送したいログ・ファイルの情報を定義してあげる。READMEはawslogs.conf自体に記載されているので、そちらを参照。

[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = test-host  
initial_position = end_of_file
log_group_name = /var/log/messages

[/var/log/secure]
datetime_format = %b %d %H:%M:%S
file = /var/log/secure
buffer_duration = 5000
log_stream_name = test-host  
initial_position = end_of_file
log_group_name = /var/log/secure

(4) 起動設定 対象のOSに合わせたコマンドで。以下はAmazon Linuxの場合。

> sudo service awslogs start
> sudo chkconfig awslogs on

(5) テスト出力

sudo logger test-message

AWSコンソール上のCloudwatchLogsに連携されるまで、数分のラグがあります。

RHEL7の場合はこちら。

(1) IAMロールを設定

(2) AWSのS3にPythonの設定モジュールがあるので、それをダウンロードしてくる

$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O

(3) 実行。色々訊かれるので入力。

$ sudo python ./awslogs-agent-setup.py --region ap-northeast-1
Launching interactive setup of CloudWatch Logs agent ...

Step 1 of 5: Installing pip ...DONE

Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE

Step 3 of 5: Configuring AWS CLI ...
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [ap-northeast-1]:
Default output format [None]:

Step 4 of 5: Configuring the CloudWatch Logs Agent ...
Path of log file to upload [/var/log/messages]:
Destination Log Group name [/var/log/messages]:

Choose Log Stream name:
  1. Use EC2 instance id.
  2. Use hostname.
  3. Custom.
Enter choice [1]: 2

Choose Log Event timestamp format:
  1. %b %d %H:%M:%S    (Dec 31 23:59:59)
  2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
  3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
  4. Custom
Enter choice [1]:

Choose initial position of upload:
  1. From start of file.
  2. From end of file.

------------------------------------------------------
- Configuration file successfully saved at: /var/awslogs/etc/awslogs.conf
- You can begin accessing new log events after a few moments at https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logs:
- You can use 'sudo service awslogs start|stop|status|restart' to control the daemon.
- To see diagnostic information for the CloudWatch Logs Agent, see /var/log/awslogs.log
- You can rerun interactive setup using 'sudo python ./awslogs-agent-setup.py --region ap-northeast-1 --only-generate-config'
------------------------------------------------------

(4) 自動起動設定

sudo systemctl enable awslogs