Amazon Linux2のEC2にCloudWatchのLogAgentを導入する


まいど。ゆうべはお楽しみでしたね。
AWS東京リージョンで発生した障害について(4.20)

CloudWatchやSQS,Lambda辺りが対象だったようなので
ウチのEC2やS3とかには特に影響無かったようですが、
逆に言うと古き良きサーバマネジメントしか出来てないという事実を突きつけられました。
世の中どんどん進化してるので上記のようなサービスも知ってないといけないなぁと痛感。

ということで昨日障害が起きたサービスを一つずつ理解しようと思い、
CloudWatchから触ってみることにしました。

そもそもCloudWatchとは何なのか

調べりゃ分かることなんで詳細は書きませんが要は監視ツールです。
コンソールにあるのでインスタンスを持ってたら見れるでしょう。

log取りを導入してみる

とりあえずapacheのaccess_logを収集出来るようにしてみようということで
他の記事や公式資料を参考にしてみましたがなんかsetup.pyが対応してないような?
AmazonLinux2はyumから導入出来るようなのでそっちの手段を使います。
EC2 Linux インスタンスの起動時に CloudWatch Logs エージェントをインストールして設定する

yum install awslogs

/etc配下にawslogディレクトリが切られるので中のconfを編集
IAMでCloudWatchLogsFullAccessを割り当てたユーザのアクセスキーを追加し、
EC2のawscli経由でCloudWatchLogにアクセス出来るようにしておく。

awscli.conf
[plugins]
cwlogs = cwlogs #これはなんだ、分からん
[default]
region = ap-northeast-1 #regionを変更
#以下awscliのアクセスキー情報
aws_access_key_id=XXXXXXXXXXXXX 
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXX
awslogs.conf
#色々書かれてるが一番下にmessagesの定義が書いてるのでこれを参考にする
[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages

#↓今回これをこうした
[/var/log/httpd/access_log]
datetime_format = %b %d %H:%M:%S
file = /var/log/httpd/access_log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/httpd/access_log

サービスを開始...systemctlの書き方をなかなか覚えられない...

service awslogsd start

動作してるのを確認

access_logが更新されるように適当に作ったWebページにアクセスしてコンソールを見る。

出てた。けど名前なんとかならないのか。

awslogs.conf
[Apache-access_log] #多分識別子なだけなので任意
datetime_format = %b %d %H:%M:%S
file = /var/log/httpd/access_log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = shindev-log #ここを変える

サービスを再起動して再確認

service awslogsd restart

行けた。
グループ単位で他のログを取ってみる。
なんでもいいんだけどerror_logを追記、ついでにlog_stream_nameを変更してログファイル単位で分別する形にした。

awslogs.conf
[Apache-error_log]
datetime_format = %b %d %H:%M:%S
file = /var/log/httpd/error_log #対象ファイル
buffer_duration = 5000
log_stream_name = shindev-ec2-error_log #ここを変更
initial_position = start_of_file
log_group_name = shindev-log #ここは同じ

こうなりました。

使い方大体分かったような気がする。

終わり。