コマンドラインでEC2のコンソール画面テキスト(システムログ)を取得してgrep分析

EC2が原因不明で接続不可になることは以外に多いです。そんな時にVMWareHyper-VKVMみたいにコンソール画面に何が出ているのか確認したくなります。

AWSマネジメントコンソールから「インスタンスの設定」>「システムログの取得」で以下のような画面が取得できるのですが、grepとかに流して調査するにはコピペしたりが必要で正直面倒です。

そんな時にはAWS CLIaws ec2 get-console-output が便利です。ただ、このコマンドそのまま実行するとアウトプットに改行やらエスケープシーケンスやらが入って見難いです。

 

そこで、ポイントは --query 'Output' --output text のオプションを入れることです、これで実際のコンソール画面と同じような色つきで整形されたアウトプットが得られます。    

$ aws ec2 get-console-output --instance-id i-abcd1234 --query 'Output' --output text
[    0.000000] Cannot get hvm parameter CONSOLE_EVTCHN (18): -22!
[    1.153800] Cannot get hvm parameter CONSOLE_EVTCHN (18): -22!
[  OK  ] Started Show Plymouth Boot Screen.
[  OK  ] Reached target Paths.
[  OK  ] Reached target Basic System.
[  OK  ] Found device /dev/mapper/centos-root.
         Starting File System Check on /dev/mapper/centos-root...
[  OK  ] Started File System Check on /dev/mapper/centos-root.
[  OK  ] Started dracut initqueue hook.
         Mounting /sysroot...
[  OK  ] Reached target Remote File Systems (Pre).
[  OK  ] Reached target Remote File Systems.
[  OK  ] Mounted /sysroot.
...

grepなどとの連携もスムーズです。

$ aws ec2 get-console-output --instance-id i-1234abcd --query 'Output' --output text | grep FAILED
[FAILED] Failed to start Initialize hardware monitoring sensors.
[FAILED] Failed to start IPMI Driver.
[FAILED] Failed to start Ipmievd Daemon.
[FAILED] Failed to start Initialize hardware monitoring sensors.

小技メモ

EC2のインスタンスIDわからないからタグのNameの項目を使ってシステムログ取得したい場合のワンライナー

$ echo hostname | xargs -Ixxx aws ec2 describe-tags --query 'Tags[?ResourceType == `instance` && Key == `Name` && Value == `xxx`].ResourceId' --output text | xargs -Ixxx aws ec2 get-console-output --instance-id xxx --query 'Output' --output text