CloudWatchLogsを使ってWindowsServer2016からログ収集
初めに
システムにおいてログ管理や収集は、円滑に運用を行う為にとても大事な部分です。
オンプレ環境では、ログサーバを使ってにログ取集を行うのが一般的ですが、AWSでは「CloudWatchLogs」サービスを利用してログ収集が可能な為、利用してみました。
環境
- OS WinodwsServer2016
- インスタンス名 winsv2016
やったこと
- OS上での「CloudWatchLogs」の有効化やログ転送設定は「Systems Manager」の「RunCommand」を使用した。
- CloudWatchLogsへのログ転送は、ログ種別ごとに分けて転送した。
Systems Managerの利用準備
- OS上での「CloudWatchLogs」の有効化やログ転送設定は「Systems Manager」の「RunCommand」を使用した。
- CloudWatchLogsへのログ転送は、ログ種別ごとに分けて転送した。
Systems Managerの利用準備
まず「Systems Manager」を利用する為に、マネージドインスタンスの管理対象にする必要があります。
■Systems Manager の前提条件
- ロール作成
ec2インスタンスをマネージドインスタンスの管理対象にするには、適切なポリシーがアタッチされたロールをec2インスタンスに設定します。 すでにec2インスタンスにロールが設定されている場合は、そのロールに「AmazonEC2RoleforSSM」をアタッチすればOKです。
- インターネットアクセス
EC2 インスタンスで、アウトバウンドのインターネットアクセスが可能であることを確認します。インバウンドのインターネットアクセスは不要。 VPCエンドポイントを利用すれば、インターネットアクセスは不要であるが今回は割愛。
- SSMエージェント
Windows Server2016のAMIでは最初からインストールされていた。
参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-prereqs.html
■ロール作成
サービス > IAM > ロール > ロール作成
ロール名:ec2-role
※ロール名は任意、分かりやすい名前をつける。
ポリシー:AmazonEC2RoleforSSM
■ecインスタンスへのロールの付与
1.ec2インスタンス > 右クリック > IAMのロール割り当て/置換
3.ここまで設定をすると、マネージドインスタンスに管理対象として「winsv2016」が表示されます。
CloudWatch の JSON ファイル設定
ログ転送設定は、「json」or 「yaml」を利用できますが、今回は「json」での記述を選択しました。
公式のサンプルファイル
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/send_logs_to_cwl_gs.html
ロググループは対象インスタンス単位で、ログストリームはログ種別毎に転送するように設定しました。
ポイントとなる部分のみ説明
■ログ指定設定
アプリケーションログやシステムログを指定する部分。
{
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Id": "ApplicationEventLog",
"Parameters": {
"Levels": "7",
"LogName": "Application"
}
},
- Levels
転送するログレベルの指定はLevelsで行います。
1 – エラーメッセージのみをアップロードします。
2 – 警告メッセージのみをアップロードします。
4 – 情報メッセージのみをアップロードします。
全てのログを転送する場合は、合計値の7を設定する。
■転送先設定
CloudWatchLogsへの転送設定、ロググループ、ログストーム、リュージョンを設定する。
ログ種別毎にログストリームを分けたいので、CloudWatchLogsのIDを1~3作成して、各ログ種別名を記載した。
{
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Id": "CloudWatchLogs1",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"LogGroup": "winsv2016",
"LogStream": "Application",
"Region": "ap-northeast-1"
}
},
{
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Id": "CloudWatchLogs2",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"LogGroup": "winsv2016",
"LogStream": "System",
"Region": "ap-northeast-1"
}
},
{
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Id": "CloudWatchLogs3",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"LogGroup": "winsv2016",
"LogStream": "Security",
"Region": "ap-northeast-1"
}
}
- LogGroup
ロググループ名を書く。
- LogStream
ログストリーム名を書く。
- Region
公式ドキュメントによると、Regionはインスタンスが実行されているのと同じリージョンに設定することをお勧めされたので、"ap-northeast-1"を指定した。
■転送設定
どこに転送するかのフロー制御設定。
ApplicationEventLogはCloudWatchLogs1へ転送する。
SystemEventLogはCloudWatchLogs2へ転送する。
以下割愛。
"Flows": {
"Flows": [
"ApplicationEventLog,CloudWatchLogs1",
"SystemEventLog,CloudWatchLogs2",
"SecurityEventLog,CloudWatchLogs3"
]
},
作成したjsonファイル
{
"IsEnabled": true,
"EngineConfiguration": {
"Components": [
{
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Id": "ApplicationEventLog",
"Parameters": {
"Levels": "7",
"LogName": "Application"
}
},
{
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Id": "SystemEventLog",
"Parameters": {
"Levels": "7",
"LogName": "System"
}
},
{
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Id": "SecurityEventLog",
"Parameters": {
"Levels": "7",
"LogName": "Security"
}
},
{
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Id": "CloudWatchLogs1",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"LogGroup": "winsv2016",
"LogStream": "Application",
"Region": "ap-northeast-1"
}
},
{
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Id": "CloudWatchLogs2",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"LogGroup": "winsv2016",
"LogStream": "System",
"Region": "ap-northeast-1"
}
},
{
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Id": "CloudWatchLogs3",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"LogGroup": "winsv2016",
"LogStream": "Security",
"Region": "ap-northeast-1"
}
}
],
"Flows": {
"Flows": [
"ApplicationEventLog,CloudWatchLogs1",
"SystemEventLog,CloudWatchLogs2",
"SecurityEventLog,CloudWatchLogs3"
]
},
"PollInterval": "00:00:15"
}
}
OSへ設定ファイル転送
「RunCommand」を利用して先ほど作ったjsonファイルをOSに転送します。
それと同時にOS上の「CloudWatchLogs」機能を有効化します。
自分が大きく勘違いしてた部分の一つでもありますが、コマンドを送ったタイミングでログを取集してきて、定期的にログ収集をするためには、スケジュールを組んで定期的にコマンドを送る必要があると謎の勘違いしていましたが、一度OS上の「CloudWatchLogs」機能の有効化を行えば、OSでログが書き出された時点で「CloudWatchLogs」へログが転送される仕組みでした。
②コマンドドキュメントの選択
AWS-ConfigureCloudWatchにチェックをいれる。
④CloudWatchLogsの有効化と転送するコードを記述する。
Status:Enabled
Properties:jsonコード貼り付け
Runをクリックして実行。
CloudWatchLogsでの確認
一度インスタンスを再起動すると、ログが出力されるので再起動してみましょう。
①ロググループを選択
ロググループと、ログストームはログが転送された時点で自動的に作成される様です。
②ログ種別ごとに分けた、ログストリームを選択。
今回は「Application」を選択します。
参考
■CloudWatch との統合を設定するための予備タスク
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/send_logs_to_cwl_gs.html
■CloudWatch のインスタンスを設定する
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/send_logs_to_cwl_instances.html#send_logs_cwl_configfile
Author And Source
この問題について(CloudWatchLogsを使ってWindowsServer2016からログ収集), 我々は、より多くの情報をここで見つけました https://qiita.com/tasakii/items/a400197b1230a7adeda8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .