なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

MySQLで幸せになれるヤツの続き-CloudWatchLogsを入れるとき、時々トラブる

atsuizo.hatenadiary.jp
この絡みで、AWS EC2に後からCloudWatchLogsを入れると時々トラブるので、その解消法。


今回はMySQL一切出てきません。

普通に進めれば、以下手順でデフォルト設定終わるはず、なんだけど。

docs.aws.amazon.com
に書いてあるんですが、ざっくり。

IAMRoleでポリシー追加

EC2に付与済のIAMロールに、マネジメントコンソールのIAM画面から「CloudWatchLogsFullAccess」をアタッチ。

EC2にSSHログインして、以下の作業を進める。
sudo yum -y install awslogs
  • /etc/awslogs/awscli.conf に、以下を追加
vi /etc/awslogs/awscli.conf

[default]
region=ap-northeast-1

(公式ドキュメントには、ここでaws_access_key_id = aws_secret_access_key = の記載がありますが、IAMRole使う場合には記載不要です)

  • /etc/awslogs/awslogs.confの修正

一旦デフォルトで起動確認するので、特にいじらず/var/log/messagesだけ出力させてみる。

  • awslogsエージェントサービスの起動
sudo service awslogs start

ここで、start自体はOKって帰ってくるのに、直後にステータスを確認すると、エラーが返ってくることがあります。

sudo service awslogs status
awslogs が停止していますが PID ファイルが残っています

何がおきているか

平たく言うと、「CLIが壊れた」状態です。

yum updateしてない古いEC2-LinuxインスタンスにCloudWatchLogsをyumでインストールしようとすると、awslogs自体が古かったり、yumの依存性解決で古いライブラリを連れてきたりします。

このとき、AWS CLIでも使用しているライブラリがデグレードしてぶっ壊れる、という状態が発生し、awslogsのサービスが正常起動しないどころか、awscliコマンドが使えなくなります。aws helpすら打てません!

対処法

awslogsを正常停止させる
sudo service awslogs stop
rm /var/run/awslogs.pid
rm /var/lock/subsys/awslogs

pidファイルだけ削除しても、ロックファイルが残っていると、以下のメッセージが出ます。

sudo service awslogs status
awslogs は停止していますがサブシステムがロックされています

しかも、両方を短時のうちに削除しないと、なぜか一度手で消したファイルが復活します。

以下のように正常停止のメッセージが出るまでがんばりましょう。

sudo service awslogs status
awslogs は停止しています
CLIの復旧させる

他にCLIが正常に動いているインスタンスを確認し、そのCLIのバージョンを控えて、壊れてしまったインスタンスに適用させます。

# AWS CLI のバージョン確認
aws --version

# AWS CLI のバージョン指定インストール
pip install awscli==x.xx.xx

まだ動かない場合

起動させた直後に、引数フォーマットエラーの時のようなメッセージが返ってくることがあります。

sudo service awslogs start
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: argument command: Invalid choice, valid choices are:

以下ずらずらずらーっ

AWS公式ドキュメントには記載がないのですが、/etc/awslogs/awscli.confに以下の一文を加えてあげると、動くようになることがあります。

vi /etc/awslogs/awscli.conf

[plugins]
cwlogs = cwlogs
(他の記述は残して追記)


これで動くはず。

その他もろもろ

この手順だと、マネジメントコンソールのCloudWatchLogsの画面からロググループ・ログストリームを自分で追加しなくても、勝手に作ってくれます。


ここまでの挙動が確認できたら、お好みのログを拾い上げるように、/etc/awslogs/awslogs.confに追加してあげましょう。


awslogs自身のログはデフォルトでローテーションされるように設定されていますので、監視対象のファイルの方だけ気をつけて。


まとめ

  • yumでCloudwatchLogsエージェントをインストールすると、デフォルトでは動作しないことがある。
  • 原因はCLIのライブラリ破損なので、CLIの再インストールで対処する。
  • 公式ドキュメントに載っていない設定を入れないと動かないこともある。

おまけ

この本にCloudwatchLogsの話がどこまで書いてあったか忘れたけど、AWS本の中では良本ですね。だいぶお世話になりました。

Amazon Web Services実践入門 (WEB+DB PRESS plus)

Amazon Web Services実践入門 (WEB+DB PRESS plus)