はじめに
AWS Systems Manager (SSM) エージェントを導入した際、そのログをCloudWatch Logに送る仕組みを構築しました。
本記事では、その設定手順について解説します。
前提条件
・EC2インスタンスにSSMエージェントが導入されていること
・EC2のOSはWindowsを想定
・EC2にRDPできること
・CloudWatchの操作権限があること
CloudWatchでロググループを作成する
まずCloudWatchにロググループを作成します。
CloudWatch > ログ管理 > ロググループを作成をクリックします

次にロググループ名を入力します。
ここでは「ssmagent-logs」として、作成をクリックします。

ロググループ「ssmagent-logs」が作成されました。
というメッセージが出れば作成完了です。
CloudWatch > ログ管理 > ロググループ > ssmagent-logsをクリックすると
まだログストリーム内にログがないことが分かります。

SSMエージェントのseelog.xmlファイルを編集
次に、対象のEC2インスタンスにログインして、SSMディレクトリ配下の「seelog.xml.template」ファイルを編集します。
本手順ではFleetmaangerを使って、インスタンスにRDPしてファイルを編集しています。
※Fleetmaangerの部分の手順は割愛します。
RDP後エクスプローラーで「%ProgramFiles%\Amazon\SSM\」と検索しSSMディレクトリに移動します。

SSMのディレクトリ配下に「seelog.xml.template」のファイルがあることを確認します。

こちらのファイルをメモ帳などのエディタを使って開きます。
このファイル内のclosing </filter>の後に設定を追加します。
<outputs formatid="fmtinfo">
<console formatid="fmtinfo"/>
<rollingfile type="size" filename="{{LOCALAPPDATA}}\Amazon\SSM\Logs\{{EXECUTABLENAME}}.log" maxsize="30000000" maxrolls="5"/>
<filter levels="error,critical" formatid="fmterror">
<rollingfile type="size" filename="{{LOCALAPPDATA}}\Amazon\SSM\Logs\errors.log" maxsize="10000000" maxrolls="5"/>
</filter>
</outputs>
<custom name="cloudwatch_receiver" formatid="fmtdebug" data-log-group="your-CloudWatch-log-group-name"/>
※your-CloudWatch-log-group-name部分に作成したCloudWatchロググループ名を記載します。
本記事の場合は以下になります。
<custom name="cloudwatch_receiver" formatid="fmtdebug" data-log-group="ssmagent-logs"/>
以下の様に設定を追加し、ファイル名を「seelog.xml」として保存します。
<outputs formatid="fmtinfo">
<console formatid="fmtinfo"/>
<rollingfile type="size" filename="{{LOCALAPPDATA}}\Amazon\SSM\Logs\{{EXECUTABLENAME}}.log" maxsize="30000000" maxrolls="5"/>
<filter levels="error,critical" formatid="fmterror">
<rollingfile type="size" filename="{{LOCALAPPDATA}}\Amazon\SSM\Logs\errors.log" maxsize="10000000" maxrolls="5"/>
</filter>
<custom name="cloudwatch_receiver" formatid="fmtdebug" data-log-group="ssmagent-logs"/>
</outputs>
同じディレクトリに「seelog.xml」ファイルができていることを確認します。

SSMエージェントの再起動とログの確認
次にSSMエージェントを再起動します。
まず現在の状態を確認します。
PowerShellを使い状態を確認します。
Get-Service AmazonSSMAgent
Status Name DisplayName
------ ---- -----------
Running AmazonSSMAgent Amazon SSM Agent
Statusが「Running」でSSMエージェントが動いていることが分かります。
次にSSMエージェントを再起動します。
Restart-Service AmazonSSMAgent
WARNING: Waiting for service 'Amazon SSM Agent (AmazonSSMAgent)' to stop...
WARNING: Waiting for service 'Amazon SSM Agent (AmazonSSMAgent)' to stop...
WARNING: Waiting for service 'Amazon SSM Agent (AmazonSSMAgent)' to stop...
数秒程度で再起動が行われます。
再度SSMエージェントの状態を確認すると、RunningでSSMエージェントが動いていることが分かります。
Get-Service AmazonSSMAgent
Status Name DisplayName
------ ---- -----------
Running AmazonSSMAgent Amazon SSM Agent
SSMエージェントの再起動を実施した後に
CloudWatch > ログ管理 > ロググループ > ssmagent-logsをクリックすると
ログストーリムにログができていて、ログが取れていることが分かります。

まとめ
今回は、SSMエージェントのログをCloudWatch Logsへ転送する設定を行いました。
SSMエージェントのログをCloudWatch Logsへログを飛ばしておくことで、万が一の際も過去のログを追うことができ、原因究明の役に立つ場面などもあるかと思います。
本記事がどなたかの役に立てば幸いです。
参考サイト
