クォータ
EC2 から Logs に飛ばす方法
セットアップ
EC2 の IAM ロールに下記を追加
CloudWatch Logs でのアイデンティティベースのポリシー (IAM ポリシー) の使用
実際のケースだと EC2 には既に IAM ロールが設定済みの場合が多いと思うので、下記を追記する形になる
[ IAM ]->[ ポリシー ]->[ ポリシーの作成 ]->[ JSON ]->テキストフィールドに下記の内容入り込んで[ Review Policy ] ポリシー名には[ CloudWatchLogs ]とした。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}
ついで[ ロールの作成 ]->[ 使用するサービス ]は EC2 にして、名前は[ webfront ]などにしてロールを作成した。
yum でインストール
sudo yum update -y
sudo yum install -y awslogs
リージョン設定
どのリージョンの CloudWatch に転送するか
sudo vim /etc/awslogs/awscli.conf
下記を書き込む
region = ap-northeast-1
どのログファイルを転送するか
sudo vim /etc/awslogs/awslogs.conf
サービス起動/自動起動
sudo service awslogs start
sudo chkconfig awslogs on
Slack 通知したい
CloudWatchLogs と SNS を使って nginx で 4xx エラーの際にメールを送信する - Qiita
リファレンス
挙動
ある程度まとめられる、その条件。 ログのサイズが 32k ってのは短い。100 行程度でオーバーしてしまう。 [ batch_size = 1048576 ]などとするとサイズを増やせる。 CloudWatch Logs Agent の挙動について調べたことのまとめ
* 最初のログイベントが届いてから、buffer_durationで設定した時間が過ぎた場合
* 新しくログイベントを追加したタイミングで、32kを超えているような場合
* ログイベントが1000件集まった場合
* ログイベントのタイムレンジが24hを超えた場合
設定するファイル
/etc/awslogs/awscli.conf リージョンの設定 /etc/awslogs/awslogs.conf 転送するログの設定
/etc/awslogs/awslogs.conf 設定例
CloudWatch の[ $0.01 per 1,000 requests10,515,014 Requests ]の金額が一気に $105 になってしまった… で、安くしたい。 方針として
- エラーログはすぐ保存されるようにする
- アクセスログは極力バッチ処理(まとめられる場合、このように呼ぶらしい)にしたい
事前に buffer_duration の設定は 60000ms 10 分と設定していたが、どうも、もっと早く送信されてしまっている。
batch_size を大きくして、最終的に下記のようにした。
[NginxWwwAccessLog]
file = /var/log/nginx/www.access.log
batch_size = 1048576
buffer_duration = 60000
log_group_name = NginxWwwAccessLog
log_stream_name = {instance_id}
datetime_format = %d/%b/%Y:%H:%M:%S %z
Mac の Docker から CloudWatchLogs へは送れない。
Mac の Docker アプリ側でクレデンシャルを持つ必要があるため
docker の log 周りの対応 - Carpe Diem
EC2 インスタンスから CloudWatch Logs に送る
エージェント立てて、送信するようだ クイックスタート: 実行中の EC2 インスタンスに CloudWatch Logs エージェントをインストールして設定する - Amazon CloudWatch ログ
ECS -> CloudWatch Logs へ出力
各プログラムから標準出力に出力/ECS のタスク定義に設定することで可能になりそう [AWS]ECS を利用し、コンテナのログを CloudWatch Logs へ出力する | Developers.IO