この記事で解決すること
- SSM Session Managerを用いてEC2上でシェルを操作したときのログファイルを取得することができます
- S3やCloudWatch Logsを用いずに、インスタンス上でログファイルを回収することができます
実行環境
- OS: AmazonLinux 2023
- インスタンスタイプ: t3.micro
1. SSM Session Managerのログ保存の仕組み
SessionLogsDestinationというパラメータを操作することで
ipcTempFile.logというログファイルがセッション中に自動的に作成されます。
SessionLogsDestinationはamazon-ssm-agent.jsonというファイル内で管理されます。
2. 実行手順
前提条件
EC2インスタンスが起動していること SSMSessionManagerを利用できること
-
amazon-ssm-agent.json ファイルが存在しないことを確認する
コマンド:ls | grep -x amazon-ssm-agent.json

-
amazon-ssm-agent.json.templateファイルが存在することを確認する
コマンド:ls -x amazon-ssm-agent.json.template

-
amazon-ssm-agent.json.templateをamazon-ssm-agent.jsonという名前で
カレントディレクトリにコピーする
コマンド:sudo cp -p amazon-ssm-agent.json.template amazon-ssm-agent.json

-
amazon-ssm-agent.jsonファイルをviで開く
コマンド:sudo vi amazon-ssm-agent.json

-
SSM Session Managerからログアウトする
-
SSM Session Managerを起動する
-
/var/lib/amazon/ssm/"ターゲットID"/session/orchestration/"セッションID"/Standard_Streamに移動する
コマンド:cd /var/lib/amazon/ssm/"ターゲットID"/session/orchestration/"セッションID"/Standard_Stream
※ターゲットIDはインスタンスIDのこと、セッションIDはセッションマネージャーの左上のメニューバーに出ている値です

-
ipcTempFile.logがカレントディレクトリに存在することを確認する
コマンド:ls | grep -x ipcTempFile.log

3. ログ保存期間の設定
-
ipcTempFile.logの保存期間は、amazon-ssm-agent.jsonファイル内のSessionLogsRetentionDurationHoursによって定義できます

デフォルトでは、336時間、つまり14日の保存期間に設定されています
4. 注意点
-
catコマンドを何度も連続で打つと、ログファイルの中身が無限ループ表示されます

詳しい挙動については調査していますが、ログファイルがバイナリファイルとして保存されているので、エスケープシーケンスを標準出力が解釈するだったり、SSMの仕様によるものかと考えています。
5.まとめ
ログファイルを扱えるようになることで、SessionManagerが利用できる場面も増えるかと思います。
あとは、S3が使えない場合などは、SCPやSFTPでローカルに送信することでもファイルの保存期限と容量の増加の妥協点として運用できるかと思います
- 参考文献






