2

我已经在 ec2 windows server-R2 上设置了 CloudWatch Logs,但它没有显示在 AWS 控制台上。(我的 IAM 用户具有完全访问权限) https://aws.amazon.com/blogs/devops/using-cloudwatch-logs-with-amazon-ec2-running-microsoft-windows-server/

我的 CloudWatch json 文件如下所示:

{
  "EngineConfiguration": {
    "PollInterval": "00:00:15",
    "Components": [
      {
        "Id": "ApplicationEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "Application",
          "Levels": "1"
        }
      },
      {
        "Id": "SystemEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "System",
          "Levels": "7"
        }
      },
      {
        "Id": "SecurityEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "Security",
          "Levels": "7"
        }
      },
      {
        "Id": "ETW",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "Microsoft-Windows-WinINet/Analytic",
          "Levels": "7"
        }
      },
      {
        "Id": "IISLogs",
        "FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogDirectoryPath": "C:\\inetpub\\logs\\LogFiles\\W3SVC1",
          "TimestampFormat": "yyyy-MM-dd HH:mm:ss",
          "Encoding": "UTF-8",
          "Filter": "",
          "CultureName": "en-US",
          "TimeZoneKind": "UTC",
          "LineCount": "3"
        }
      },
      {
        "Id": "CustomLogs",
        "FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogDirectoryPath": "C:\\CustomLogs\\",
          "TimestampFormat": "MM/dd/yyyy HH:mm:ss",
          "Encoding": "UTF-8",
          "Filter": "",
          "CultureName": "en-US",
          "TimeZoneKind": "Local"
        }
      },
      {
        "Id": "PerformanceCounter",
        "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "CategoryName": "Memory",
          "CounterName": "Available MBytes",
          "InstanceName": "",
          "MetricName": "Memory",
          "Unit": "Megabytes",
          "DimensionName": "",
          "DimensionValue": ""
        }
      },
      {
        "Id": "CloudWatchLogs",
        "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "AccessKey": "accesskey",
          "SecretKey": "secretkey",
          "Region": "eu-west-1",
          "LogGroup": "Default-Log-Group",
          "LogStream": "{instance_id}"
        }
      },
      {
        "Id": "CloudWatch",
        "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "AccessKey": "accesskey",
          "SecretKey": "secretkey",
          "Region": "eu-west-1",
          "NameSpace": "Windows/Default"
        }
      }
    ],
    "Flows": {
      "Flows": [
        "(ApplicationEventLog,SystemEventLog),CloudWatchLogs",
        "PerformanceCounter,CloudWatch"
      ]
    }
  }
}

我发现它还需要安装 SSM 才能在 AWS 控制台上显示?!我正在根据此链接进行 SSM 的安装过程:http: //docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/managed-instances.html#install-managed-win

但无法下载文件,详情如下:

PS C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell> $dir = $env:TEMP + "\ssm"
> New-Item -ItemType directory -Path $dir
> cd $dir
> $username = admin
> $password = 1234
> $wc = New-Object System.Net.Networkcredential($username, $password)
> $wc.DownloadFile("https://amazon-ssm-region.s3.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe")



You cannot call a method on a null-valued expression.

At line:1 char:1

+ $wc.DownloadFile("https://amazon-ssm-    region.s3.amazonaws.com/latest/windows_amd64 ...

+ 

  + CategoryInfo  : InvalidOperation: (:) [], RuntimeException

  + FullyQualifiedErrorId : InvokeMethodOnNull

有什么问题吗?

4

2 回答 2

4

注意:如果您是从搜索引擎来到这里并正在寻找有关 Windows Server 2016 上的 EC2Launch/EC2Config 4.x 的帮助,请参阅此文档以了解相关更改。本指南在编写时考虑了旧版 Windows 服务器上的 EC2Config 3.x Windows 服务,给出的建议可能不会直接与 EC2Launch 并行。

记下您的 EC2Config 版本,并查看以下文档以获取更多特定于版本的建议:

对于从 3.x 迁移到 4.x 的用户:您将特别需要:

  • 添加"IsEnabled":true到您的AWS.EC2.Windows.CloudWatch.jsonJSON 文件。
  • 将此文件从移动C:\Program Files\Amazon\Ec2ConfigService\Settings\C:\Program Files\Amazon\SSM\Plugins\awsCloudWatch\

您对一个问题提出了很多要求,所以我将分部分回答:

1)您遵循的指南不适用于您的用例

您链接到的文档用于在混合环境中设置 SSM 代理,例如在 EC2 实例和本地机器协同工作的环境中。由于您使用的是 EC2 实例而不是本地机器,因此本文档与您无关。这改变了以下假设:

  • 您应该明确下载 EC2Config 而不是 SSM 代理。(见步骤 3)
  • 您需要附加到您的实例的IAM 实例配置文件,而不是具有所有相关权限的 IAM 用户。(见第 4 步)

2) 使用EC2 运行命令验证您的 SSM 代理

根据文档,您可能已经安装了 SSM 代理:

SSM 代理默认安装在 Windows Server 2016 实例和从 2016 年 11 月或之后发布的 Windows Server 2003-2012 R2 AMI 创建的实例上。

要签入 AWS Web 控制台,请导航至EC2 > Commands > Command History > Run A Command.

在此处输入图像描述

在“运行命令”UI 中查找“选择实例”按钮。这将打开正在运行 SSM 代理的正在运行实例的下拉列表。

在此处输入图像描述

如果您的实例在此处列出,恭喜!您已经安装了 SSM 代理。跳过步骤 3。

3) 为 CloudWatch Logs 设置 SSM 代理

您应该安装最新版本的 EC2Config。SSM 代理与 EC2Config 捆绑在一起,并与它一起安装。您可以以交互方式执行此操作,也可以使用 PowerShell(此示例需要 v5):

iwr https://ec2-downloads-windows.s3.amazonaws.com/EC2Config/EC2Install.zip -UseBasicParsing -OutFile Ec2Config.zip
Expand-Archive Ec2Config.zip
.\Ec2Config\Ec2Install.exe /install

安装后,EC2 配置服务将重新启动。继续并重新启动实例(如果您正在使用 EC2Config 管理您的密码,如果您没有重新启用该设置,您可能无法在重新启动后从控制台检索它 - 将其复制到某处以防万一! ),然后再次执行第 2 步以验证您的实例是否可用于 EC2 Run Command。新增福利:从现在开始,您将能够从 EC2 Run Command 更新 EC2Config 和 SSM 代理。

4) 验证您的 IAM Instance Profile 的 IAM Role 是否具有足够的权限

AWS 文档在此处对此进行了介绍,因此我不会对其进行重读。

如果当前没有实例配置文件附加到您的 EC2 实例,您应该创建一个 AMI并启动一个具有与当前配置相同的所有配置的新实例,除了它使用您创建的新 AMI 并使用具有足够权限的 IAM 角色.

5) 您无需在 CloudWatch Config 中明确指定您的 AWS 凭证

AccessKey 和 SecretKey 应留空,因为凭证将从您的 IAM 实例配置文件继承:

{
    "Id": "CloudWatchLogs",
    "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
    "Parameters": {
        "AccessKey": "",
        "SecretKey": "",
        "Region": "eu-west-1",
        "LogGroup": "MyLogGroup",
        "LogStream": "{instance_id}"
    }
},
{
    "Id": "CloudWatch",
    "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
    "Parameters": 
    {
        "AccessKey": "",
        "SecretKey": "",
        "Region": "eu-west-1",
        "NameSpace": "MyMetricsNameSpace"
    }
}

在您对配置文件进行任何更改后,重新启动 EC2Config(或您的实例本身,如果这在您的工作流程中更容易的话)并且应该应用更改。

6) 故障排除

可以在您的实例上找到与将本地日志发送到 CW 相关的日志:C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt. 当我第一次配置它时,这对我来说是无价的。

文档还包含针对常见问题的指南。


除此之外,在我看来一切都很好。可能会以较小的部分来处理问题——首先处理设置 Windows 事件日志,然后是指标,然后是自定义日志。

于 2016-11-19T16:20:17.503 回答
0

我在 Cloudwatch 指标方面遇到了很多问题,但我最终解决了其中的大部分问题。

为了接收指标,您需要"IsEnabled":true在文件顶部添加如下:

{
    "IsEnabled": true
    "EngineConfiguration": {
        "PollInterval": "00:00:15",
        "Components": [

您还必须从此处将 EC2Config 更新为最新版本

于 2017-02-23T17:50:49.850 回答