AWS の Windows インスタンスで CloudwatchLogs へのログ出力設定方法が色々あってややこしい件

スポンサーリンク

先日本業のAWS業務にて、EC2インスタンス(Windows 2008)上のアプリログを
CloudwatchLogs へ出力する設定をすることになり、調べながら実装したのですが、
情報が色々あって混乱してしまったため、整理と備忘のために記事にしておきます。

Windows インスタンスから CloudWatchLogs へログ出力する方法は、
AWS 公式ページや個人ブログなどで紹介されているため、ググればいくらでも出てきますので、
各種設定方法の詳細についてはリンクを張っておきます。

ただ、Cloudwatch 導入の前提知識がないままやろうとすると、情報が色々あって混乱してしまうと思いますので、まずは前提や導入方法の種類などについて、整理しておくことをオススメします。

今回僕が迷ってしまったのは、EC2Config と SSM エージェント、CloudWatch エージェント の違いをよく理解しないまま、Windows インスタンスへ Cloudwatch の設定をしようとしたためでした。

実際には、現在使用している Windows インスタンスに、どのバージョンの EC2Config や SSM エージェントが導入されているのか、そもそも入っていないのか?などを事前に調べ、さらにどのような方法でログ送信設定するかを事前に決定した上で対応する必要があります。

スポンサーリンク

Windows インスタンス上のエージェントと CloudWatch の関係

大前提として、Windows インスタンスは各種エージェントを使用してログデータを CloudWatch に送信します。
エージェントには3種類あり、EC2Configサービス、SSMエージェント、CloudWatchエージェントです。
このうちのどれか1つを設定することで、ログを送信することが可能になります。



ただし、Windows インスタンスを作成する際に使用した AMI によって、これらのエージェントのバージョンや、インストール済みかどうかが異なります。

Windows Server 2008 ~ Windows Server 2012 R2 までは、エージェントは EC2Config サービスまたは SSM エージェントのどちらかです。
Windows Server 2016 では、エージェントは SSM エージェントです。

CloudWatch エージェントを別途インストールすることで実装も可能ですが、前提として SSMエージェント(v.2.2.93.0)が必要になります。



また、かなり古い Windows インスタンスの場合、エージェント(EC2Configサービス)が CloudWatch へのログデータ送信をサポートしていない場合もありますので、まずはインスタンスのコントロールパネルなどから、EC2Config(インストール済みであるならば SSM エージェントも)のバージョンを確認してください。



ザックリまとめると、
『かなり古い EC2Config の場合を除き、Ver3.xx までは EC2Config がログデータを送信し、Ver.4.xx からは、SSM エージェントがログデータを送信する』です。



EC2Config のバージョン
【参考】EC2Config バージョン履歴

EC2ConfigのVersion別CloudWatch設定方法

インスタンスにインストールされている EC2Config のバージョン、SSMエージェントの有無とバージョンを確認できたら、それらに合わせて以下の対応をとります。

※CloudWatch エージェントを導入する方法については割愛しています
 CloudWatch エージェント導入方法の詳細については以下のページがわかりやすいです。

 【参考】
 [AWS]CloudWatch AgentのWindows版を試す


EC2Config Ver.2.2.5未満の場合

上述しましたが、かなり古い Windows AMI を使用してインスタンスを構築している場合、EC2Config が古すぎて CloudWatch へログ送信できない場合もありえます。
この場合は、CloudWatch 設定の前に EC2Config のバージョンアップが必須です。

AWS としては、最新の EC2Config へのバージョンアップを推奨しているようなので、特別な理由がない限りは、最新バージョンへ更新してしまえばよいと思います。



EC2Config のバージョンアップ方法については、以下のドキュメントが参考になります。

【参考】
EC2Config の最新バージョンのインストール



インストーラを使用して最新バージョンの EC2Config(v4.x.x) を導入した場合、SSMエージェントも一緒にインストールされます。
最新バージョンの EC2Config(v4.x.x) の場合、Cloudwatch の設定は SSMエージェントに対して実施します。



EC2Configに対してCloudwatch の設定を入れ込んでも反映されず、うまくログ出力されませんので注意が必要です。

SSMエージェントがインストールされている状態であれば、AWSコンソール上の SystemManagerからインスタンス上の Cloudwatch 設定を実施することも可能になりますので、「インスタンスへ直接ログインしてSSMエージェントの設定ファイルを編集する方法」「SystemManager から CloudWatchを設定する方法」のどちらかを行うことになります。



各方法については、以下のページで詳しく説明されています。

【参考】インスタンスへ直接ログインして設定ファイルを編集する方法

【参考】SystemManager から CloudWatchを設定する方法
変更(!?) WindowsインスタンスのログをCloudWatch Logsに転送する設定方法




SystemManager からインスタンスの設定を実施する場合、別途、インスタンスへ適切なポリシーを割り当てる必要がありますので、注意してください。
これを忘れると、SystemManager がインスタンスを認識してくれません。


EC2Config Ver.2.2.5~ 3.x.x の場合

この場合、特に EC2Config のバージョンアップなどを実施することなく、CloudWatch へのログ送信を設定できるはずです。が、最新の EC2Config と SSMエージェントを使用することがAWSの推奨とのことですので、特別な理由がない限りは、EC2Config のバージョンを最新にするとよいでしょう。
(その場合、実施する手順としては『EC2Config Ver.2.2.5未満の場合』と同じになります。)



また、EC2Config をバージョンアップさせずに、コンソール上から CloudWatch の設定を実施したい場合には、別途インスタンスへ SSMエージェントをインストールする必要があります。

設定の方法としては、以下の2つです。

【参考】
EC2Config 3.x 以前を使用して CloudWatch を設定する
 
【参考】EC2インスタンスへSSMエージェントをインストールし、AWSコンソール上から CloudWatch の設定を入れ込む方法


EC2Config Ver.4.x.x の場合

前述したように、Ver.4.x.x の Ec2Config からは、SSMエージェントが CloudWatch エージェントとしての役割を担っています。
そのため、EC2Config 側で CloudWatchLogs の設定はできませんので、注意が必要です。

CloudWatchの設定方法としては2種類あり、『インスタンスへ直接ログインして設定ファイルを編集し、エージェントを再起動する方法』と、『AWSコンソール上からインスタンスへ設定を入れ込む方法』があります。



各方法については、以下のページで詳しく説明されています。

【参考】インスタンスへ直接ログインして設定ファイルを編集する方法

【参考】SystemManager から CloudWatchを設定する方法
変更(!?) WindowsインスタンスのログをCloudWatch Logsに転送する設定方法




以上をざっくりとまとめると、下表のようになります。
(ほかにも CloudWatch ログ送信設定の方法はあると思いますが、割愛しています)


最後に

Cloudwatch へログ送信する方法は多岐にわたっており、また、設定対象の Windows インスタンスがめちゃくちゃ古かったこともあり、これまでその設定をやったことがなかった僕としてはかなり戸惑いました。

上司に相談もしてみましたが、「SSM エージェントは導入する必要ないでしょ?」「CloudWatchエージェントをインストールして終わりでしょ?」みたいに軽く突き放されてしまい、途方にくれたものです。
(後で確認すると、その上司もよくわかっていなかった様子・・・。)



導入の選択肢が多く用意されていることはいいことかもしれませんが、私のように初学者にとっては混乱を引き起こすもとにもなりかねないので、AWS さんには対応の違いを分かりやすくした表などを作ってほしいなーなんて思いました。

ドキュメントはたくさん用意されていますが、文字ばかりで分かりづらかったりするんですよね。。。

コメント