読者です 読者をやめる 読者になる 読者になる

続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

CloudWatch Logs on Windows 2012 Server

AWS CloudWatchLogs Windows CloudWatch
以前に紹介したCloudWatch Logs ですが、Windows Server向けにもLog送信サービスが開始されました。
実は結構前からサポートしていたようで、いろんなブログで紹介されておりますが、みんなが一番やりたいであろうアプリケーションログ(カスタムログ)を投げるまでをやってみたいと思います。

さて、実際にファイルを見張り、更新があった時に差分をCloudWatch Logsに飛ばしてくれるサービスは、Ec2Configという名前です。このプログラムは、様々なユーティリティーの集合体で、Windowsの場合、デスクトップにインスタンスタイプやIDが表示されていると思いますが、それもコイツの仕事です。ですので、ほとんどの方がこのEc2Configをアップデートすれば、準備は完了です。
ダウンロードはこちらから可能です
http://aws.amazon.com/developertools/5562082477397515

インストールは問題なくできると思うので省きます。設定ですが、Ec2 Service Properties のダイアログのCloudWatch Logsにチェックを入れます。
CWLogs-1.png

その後、設定ファイルを編集します。設定ファイルは C:\Program Files\Amazon\Ec2ConfigService\Settings\AWS.EC2.Windows.CloudWatchです。古いバージョンだと、GUI操作でこのファイルを設定出来たそうですが、現在の最新版では出来ませんでした。頑張って手編集です。
大事な所は まず "Id": "CloudWathLogs" です。インスタンスでIAMロールを使っていれば、Credentialの設定は省略出来ます。が、LogStreamをログファイルごとに分けたい場合は、別エントリを作ってやる必要があります。今回は元からある Default-Log-Groupとは別にアプリログが入るLogStreamを作成したいので、2つ作ります。(IAMロールを使っているので、AccessKye,SecretKeyは空です。ロールつけてない人は、入れないとダメです)
            {
                "Id": "CloudWatchLogs",
                "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
                "Parameters": {
                    "AccessKey": "",
                    "SecretKey": "",
                    "Region": "us-east-1",
                    "LogGroup": "Default-Log-Group",
                    "LogStream": "{instance_id}"
                }
            },
            {
                "Id": "CloudWatchLogsApp1",
                "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
                "Parameters": {
                    "AccessKey": "",
                    "SecretKey": "",
                    "Region": "us-east-1",
                    "LogGroup": "App1Log",
                    "LogStream": "{instance_id}"
                }
            },

次に、"Id": "CustomLogs"です。カスタムログをここで指定しているので、日付の書式だけ変更しました。CultureNameなどの細かい設定は環境に合わせてください。
            {
                "Id": "CustomLogs",
                "FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
                "Parameters": {
                    "LogDirectoryPath": "C:\\CustomLogs\\",
                    "TimestampFormat": "HH:mm:ss yyyy/MM/dd",
                    "Encoding": "UTF-8",
                    "Filter": "",
                    "CultureName": "en-US",
                    "TimeZoneKind": "Local"
                }
            },

最後に、"Flows" です。これは、文字通り何を収集して、どこに投げるを表しています。デフォルトでは、(システム)アプリケーションイベントログと、システムイベントログを、CloudWathLogs(LogStream = Default-Log-Group) に投げろとなっています、カスタムログを 別のLogStreamに投げたいので、"CustomLogs,CloudWatchLogsApp1" を追加しております。
        "Flows": {
            "Flows": 
            [
                "(ApplicationEventLog,SystemEventLog),CloudWatchLogs",
                "CustomLogs,CloudWatchLogsApp1"
            ]
        }


最後に超重要なこと!
設定ファイル変えたはいいが、いつ読み込まれるんだ?と鯖缶やインフラ屋なら思うでしょうが、再読み込みをするには、サービスの再起動が必要です。再起動させるサービスは Ec2Config という名前です。(ここでかなりの時間ハマってしまいました。是非ともでかでかと書いておいて欲しい。)

手書きでログを書いて、試してみたところ、ちゃんと取れました。
CWLogs-2.png
このCloudWatchLogsの機能ですが、実はLogだけではなく、CloudWatchのカスタムメトリックも対応しています。Windowsでカスタムメトリックとなったらやだなーと思っていたので、これはありがたいです。しかし、ドキュメントもCloudWatchLogs以外の記載がセットになっているので、読むのに骨が折れますが、便利な機能が満載なので、WindowsServerで運用されている方は、利用をオススメします。