複数台のサーバからログを収集するのにCloudWatchを利用してみました。
Fluentdも検討しましたが、ただ収集するだけでいいていうのと溜まったものは定期的に退避させたい、インフラがAWSに集約されているのでこちらを使ってみました。
実行環境
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
$ uname -a
Linux ip-**-*-*-**.ap-northeast-1.compute.internal 3.10.0-862.3.2.el7.x86_64
IAMの登録
ポリシーの作成
- IAMコンソールを開く
- ナビゲーションから「Policies」を選択
- 「Create policy」をクリック
- サービスに「CloudWatch Logs」を選択
- JSONタブを選択し、下記JSONを適宜編集して貼り付け、「Review policy」を押下
- Name, Descriptionを設定して「Create policy」を押下
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:DescribeLogStreams",
"logs:GetLogEvents",
"logs:PutRetentionPolicy",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:ap-northeast-1:{ aws_id }:log-group:*"
},
{
"Effect": "Allow",
"Action": [
"logs:GetLogEvents",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:ap-northeast-1:{ aws_id }:log-group:/*:log-stream:*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:ap-northeast-1:{ aws_id }:*"
}
]
}
グループの作成
- ナビゲーションから「Groups」を選択
- 「Create new group」を押下
- グループ名を適宜設定
- 先程作成したポリシーをアタッチ
ユーザーの作成
- ナビゲーションから「Users」を選択
- 「Add user」を押下、名前を適宜設定、「Programmatic access」にチェックを入れ次へ
- グループに先程作成したグループを追加
- 作成すると「Access key ID」と「Secret access key」が生成されるのでメモしておく
CloudWatch Logs Agentのインストール
セットアップスクリプトの取得
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
実行
python ./awslogs-agent-setup.py --region ap-northeast-1
- AWS Access Key ID、AWS Secret Access Keyに先程ユーザーを作成したときに生成されたものを入力
- Default regionはご自由に (今回はap-northeast-1を使用しています)
- Default output formatは空でOK
- Path of log file to uploadは対象となるログファイルのパス
- Destination Log Group nameはCloudWatch Logsで使用したいロググループ名。ログのファイルパスとかでOK
- Choose Log Stream nameはなんでもいいけどEC2 instance id or ホスト名にしておくのが無難。
- Log Event timestamp formatは対象ログのデートフォーマットに合わせる
- initial position of uploadは過去のログも取り込む場合はFrom start of file.今から先のだけ取り込みたい場合はFrom end of file.
- 他のログも設定したい場合は「Y」で4から繰り返し
- /var/awslogs/etc/awslogs.conf を直接編集してもOK
awslogsの起動
systemctl start awslogs
systemctl enable awslogs
確認
- CloudWatchコンソールにアクセスし、ナビゲーションから「Logs」を選択
- 設定したロググループが生成され、下層に設定したログストリームが生成され、下層にログが集積されていれば成功
次回
定期的にS3にアーカイブしていきます。