日志favicon
favicon 时间:2021-05-22 阅读:(
)
AmazonCloudWatchLogs用户指南AmazonCloudWatchLogs用户指南AmazonCloudWatchLogs:用户指南CopyrightAmazonWebServices,Inc.
and/oritsaffiliates.
Allrightsreserved.
Amazon的商标和商业外观不得用于任何非Amazon的商品或服务,也不得以任何可能引起客户混淆或者贬低或诋毁Amazon的方式使用.
所有非Amazon拥有的其他商标均为各自所有者的财产,这些所有者可能附属于Amazon、与Amazon有关联或由Amazon赞助,也可能不是如此.
AWS文档中描述的AWS服务或功能可能因区域而异.
要查看适用于中国区域的差异,请参阅中国的AWS服务入门.
AmazonCloudWatchLogs用户指南TableofContents什么是AmazonCloudWatchLogs1Features1相关AWS服务1Pricing2概念2开始设置3注册AmazonWebServices(AWS)3登录AmazonCloudWatch控控制台3设置命令行界面3入门4将统一云观察代理与CloudWatch日志配合使用4使用之前的CloudWatchLogs代理开始使用CloudWatchLogs4CloudWatchLogs代理先决条件5快速入门:在运行的EC2Linux实例上安装代理5快速入门:启动时在EC2Linux实例上安装代理9快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用11快速入门:将CloudWatchLogs与WindowsServer2012和WindowsServer2008实例配合使用.
.
18快速入门:使用AWSOpsWorks安装代理24报告CloudWatchLogs代理状态28启动CloudWatchLogs代理28停止CloudWatchLogs代理28快速入门:使用AWSCloudFormation开始使用CloudWatchLogs29CloudWatchLogsInsights分析日志数据30支持的日志和发现的字段30JSON日志中的字段31教程:运行和修改示例查询32运行示例查询32修改示例查询33将筛选命令添加到示例查询33教程:使用聚合函数运行查询34教程:运行生成按日志字段分组的可视化的查询34教程:运行生成时间序列可视化的查询35查询语法35支持的查询命令35筛选命令中的匹配和正则表达式39在查询中使用别名39在查询中使用注释40支持的操作和函数40在图形中可视化日志数据44可视化时间序列数据44可视化按字段分组的日志数据45保存和重新运行查询45查询示例47将查询添加到控制面板或导出查询结果49查看正在运行的查询或查询历史记录50使用日志组和日志流51创建日志组51将日志发送到日志组51查看日志数据51使用筛选条件模式搜索日志数据52使用控制台搜索日志条目52使用AWSCLI搜索日志条目52从指标定向至日志53Troubleshooting53iiiAmazonCloudWatchLogs用户指南更改日志数据保留期53标记日志组54有关标签的基本知识54使用标签跟踪成本54标签限制54使用AWSCLI标记日志组55使用CloudWatchLogsAPI标记日志组55使用AWSKMS加密日志数据56Limits56步骤1:创建AWSKMSCMK56步骤2:设置CMK的权限57步骤3:将日志组与CMK关联58步骤4:解除日志组与CMK的关联59KMS密钥和加密上下文59使用筛选条件从日志事件创建指标62Concepts62筛选条件和模式语法63匹配事件日志中的字词63设置在发现匹配项时如何更改指标值68发布日志条目中找到的数值69创建指标筛选条件69为日志组创建指标筛选条件69例如:计数日志事件70例如:对字词的出现次数进行计数71例如:对HTTP404代码进行计数72例如:对HTTP4xx代码进行计数73例如:从Apache日志中提取字段74列出指标筛选条件75删除指标筛选条件76使用订阅实时处理日志数据77Concepts77使用订阅筛选条件78示例1:使用Kinesis的订阅筛选条件78示例2:使用AWSLambda的订阅筛选条件81示例3:使用AmazonKinesisDataFirehose的订阅筛选条件84与订阅的跨账户日志数据共享88使用Kinesis进行跨账户日志数据共享88使用KinesisDataFirehose共享跨账户日志数据94将日志发布到CloudWatchLogs的AWS服务102从某些AWS服务启用日志记录104发送到CloudWatchLogs的日志105发送到AmazonS3的日志106发送到KinesisDataFirehose的日志107将日志数据导出到AmazonS3109Concepts109使用控制台将日志数据导出到AmazonS3109步骤1:创建AmazonS3存储桶110步骤2:创建具有对AmazonS3和CloudWatchLogs的完全访问权限的IAM用户110步骤3:对AmazonS3存储桶设置权限110步骤4:创建导出任务112使用AWSCLICLI将日志数据导出到AmazonS3112步骤1:创建AmazonS3存储桶112步骤2:创建具有对AmazonS3和CloudWatchLogs的完全访问权限的IAM用户113步骤3:对AmazonS3存储桶设置权限113步骤4:创建导出任务115步骤5:说明导出任务115步骤6:取消导出任务116ivAmazonCloudWatchLogs用户指南将数据流式传输到亚马逊ES118Prerequisites118将日志组订阅到AmazonES118安全性120数据保护120静态加密121传输中加密121IdentityandAccessManagement121Authentication121访问控制122访问管理概述122使用基于身份的策略(IAM策略)125CloudWatchLogs权限参考130使用服务相关角色133合规性验证134故障恢复能力134基础设施安全性135接口VPC终端节点135Availability135为CloudWatchLogs创建VPC终端节点136测试VPC和CloudWatchLogs之间的连接136控制对您的CloudWatchLogsVPC终端节点的访问136对VPC上下文键的支持137在AWSCloudTrail中记录亚马逊云观察记录API调用138CloudWatch中的CloudTrailWatch日志信息138了解日志文件条目139代理参考141代理配置文件141结合使用CloudWatchLogs代理与HTTP代理144划分CloudWatchLogs代理配置文件145CloudWatchLogs代理常见问题146使用CloudWatch指标监控使用情况148CloudWatchLogs指标148CloudWatchLogs指标的维度149ServiceQuotas150文档历史记录152AWS词汇表154clvvAmazonCloudWatchLogs用户指南Features什么是AmazonCloudWatchLogs您可以使用AmazonCloudWatchLogs监控、存储和访问来自AmazonElasticComputeCloud(AmazonEC2)实例、AWSCloudTrail、Route53和其他来源的日志文件.
CloudWatchLogs使您能够将您使用的所有系统、应用程序和AWS服务中的日志集中到一个高度可扩展的服务中.
然后,您可以轻松地查看它们、搜索特定错误代码或模式、根据特定字段过滤它们,或者安全地将它们归档以供将来分析.
CloudWatchLogs使您能够将所有日志(无论其来源如何)作为按时间排序的单一且一致的事件流进行查询,并且可以根据其他维度对它们进行排序,按特定字段对它们进行分组,使用强大的查询语言创建自定义计算,以及可视化日志仪表板中的数据.
Features查询您的日志数据—您可以使用CloudWatchLogs见解以交互方式搜索和分析您的日志数据.
您可以执行查询,以帮助您更高效且有效地响应运营问题.
CloudWatchLogsIngsInsights包括一种专门构建的查询语言以及一些简单但功能强大的命令.
我们提供示例查询、命令描述、查询自动完成和日志字段发现功能,可帮助您入门.
示例查询涉及几种类型的AWS服务日志.
要了解其用法,请参阅CloudWatchLogsInsights分析日志数据(p.
30).
监控来自AmazonEC2实例的日志—您可以使用CloudWatchLogs监控使用日志数据的应用程序和系统.
例如,CloudWatchLogs可以跟踪应用程序日志中的错误数,并在错误率超过指定阈值时向您发送通知.
CloudWatchLogs使用您的日志数据进行监控;因此,无需更改代码.
例如,您可以监控应用程序日志以查找特定的文本字词(如"NullReference")或为日志数据中特定位置的文本字词计数(如Apache访问日志中的"404"状态代码).
找到您要搜索的字词后,CloudWatchLogs将向您指定的CloudWatch指标报告该数据.
日志数据会在传输期间加密,并且会对静态日志数据加密.
要了解其用法,请参阅开始使用CloudWatchLogs(p.
4).
监控AWSCloudTrail记录的事件—您可以在CloudWatch中创建警报并接收CloudTrail捕获的特定API活动的通知,然后使用通知执行问题排查.
要开始使用,请参阅将CloudTrail事件发送到CloudWatchLogs中的AWSCloudTrail用户指南.
日志保留—默认情况下,日志将无限期保留且永不过期.
您可以调整每个日志组的保留策略,保持无限期保留或选择介于10年和一天之间的保留期.
存档日志数据—您可以使用CloudWatchLogs将您的日志数据存储在高持久性存储中.
CloudWatchLogs代理支持您轻松快速地将已轮换和未轮换的日志文件从主机移动到日志服务.
然后,您可以按需访问原始日志数据.
日志路由53DNS查询—您可以使用CloudWatchLogs记录有关Route53接收的DNS查询的信息.
有关更多信息,请参阅.
记录DNS查询中的AmazonRoute53开发人员指南.
相关AWS服务以下服务可与CloudWatchLogs结合使用:AWSCloudTrail是一项Web服务,可用来监控对账户的CloudWatchLogsAPI的调用,包括由AWS管理控制台、AWSCommandLineInterface(AWSCLI)和其他服务发出的调用.
启用CloudTrail日志记录后,CloudTrail将捕获您账户中的API调用并将日志文件传输到您指定的AmazonS3存储桶.
每个日志文件可以包含一个或多个记录,具体取决于为满足某个请求而必须执行的操作的数量.
有关AWSCloudTrail的更多信息,请参阅什么是AWSCloudTrail中的AWSCloudTrail用户指南.
有关CloudWatch写入CloudTrail日志文件的数据类型的示例,请参阅在AWSCloudTrail中记录亚马逊云观察记录API调用(p.
138).
1AmazonCloudWatchLogs用户指南PricingAWSIdentityandAccessManagement(IAM)是一项Web服务,可帮助您安全地控制用户对AWS资源的访问权限.
通过IAM可以控制哪些人可以使用您的AWS资源(身份验证)以及他们可以使用的资源和采用的方式(授权).
有关更多信息,请参阅.
什么是IAM中的IAM用户指南.
AmazonKinesisDataStreams是一项Web服务,可用于实现快速而持续的数据引入和聚合.
使用的数据类型包括IT基础设施日志数据、应用程序日志、社交媒体、市场数据源和Web点击流数据.
由于数据引入和处理的响应时间是实时的,因此处理通常是轻量级的.
有关更多信息,请参阅.
什么是AmazonKinesisDataStreams中的AmazonKinesisDataStreams开发人员指南.
AWSLambda是一项Web服务,可用于轻松地构建快速响应新信息的应用程序.
将您的应用程序代码作为Lambda函数上传,Lambda将在高可用性计算基础设施上运行您的代码并执行计算资源的所有管理工作,包括服务器和操作系统维护、操作系统维护、容量预置和自动扩展、代码和安全补丁部署.
以及代码监控和日志记录.
您只需要以Lambda支持的一种语言提供您的代码.
有关更多信息,请参阅.
什么是AWSLambda中的AWSLambda开发人员指南.
Pricing注册AWS后,您可以通过AWS免费套餐.
标准费率适用于其他服务使用CloudWatchLogs存储的日志(例如AmazonVPC流日志和Lambda日志).
有关更多信息,请参阅AmazonCloudWatch定价.
AmazonCloudWatchLogs概念下面介绍便于您了解和使用CloudWatchLogs的核心术语和概念.
记录事件日志事件是对受监视的应用程序或资源记录的一些活动的记录.
CloudWatchLogs了解的日志事件记录包含两个属性:事件发生时的时间戳和原始事件消息.
事件消息必须采用UTF-8编码.
日志流日志流是共享同一个源的一系列日志事件.
更具体地说,日志流通常用于表示来自正在监控的应用程序实例或资源的事件序列.
例如,日志流可能与特定主机上的Apache访问日志相关联.
当您不再需要日志流时,可使用awslogsdelete-log-stream命令将其删除.
日志组日志组定义日志保留期、监控和访问控制设置都相同的日志流组.
每个日志流必须属于一个日志组.
例如,如果每个主机上的Apache访问日志都有一个单独的日志流,您可以将这些日志流分到一个名为MyWebsite.
com/Apache/access_log的单独日志组.
对可属于一个日志组的日志流数没有限制.
指标筛选条件您可以使用指标筛选条件从已接收的事件中提取指标观察数据并将它们转换为CloudWatch指标中的数据点.
指标筛选条件将分配给日志组,分配给日志组的所有筛选条件都将应用于其日志流.
保留期设置保留期设置可用于指定日志事件在CloudWatchLogs中保留多长时间.
过期的日志事件将自动删除.
和指标筛选器一样,保留期设置也会分配给日志组,分配给日志组的保留期将应用于其日志流.
2AmazonCloudWatchLogs用户指南注册AmazonWebServices(AWS)开始设置要使用AmazonCloudWatchLogs,您需要一个AWS账户.
利用您的AWS账户,可以使用服务(例如AmazonEC2)生成可在CloudWatch控制台(一种基于Web的界面)中查看的日志.
此外,您可以安装并配置AWSCommandLineInterface(AWSCLI).
注册AmazonWebServices(AWS)创建AWS账户时,我们会自动为所有AWS服务注册您的账户.
您只需为使用的服务付费.
如果您已有一个AWS账户,请跳到下一个步骤.
如果您还没有AWS账户,请使用以下步骤创建.
注册AWS账户1.
打开https://portal.
aws.
amazon.
com/billing/signup.
2.
按照屏幕上的说明进行操作.
在注册时,您将接到一通电话,要求您使用电话键盘输入一个验证码.
登录AmazonCloudWatch控控制台登录AmazonCloudWatch控制台的步骤1.
登录到AWS管理控制台,然后打开CloudWatch控制台(https://console.
aws.
amazon.
com/cloudwatch/).
2.
如果需要,可以更改区域.
从导航栏中,选择AWS资源所在的区域.
3.
在导航窗格中,选择Logs.
设置命令行界面您可以使用AWSCLI执行CloudWatchLogs操作.
有关如何安装和配置AWSCLI的信息,请参阅使用AWS命令行界面进行设置中的AWS命令行界面用户指南.
3AmazonCloudWatchLogs用户指南将统一云观察代理与CloudWatch日志配合使用开始使用CloudWatchLogs要将AmazonEC2实例和本地服务器的日志收集到CloudWatchLogs,AWS提供两个选项:推荐—统一的CloudWatch代理.
它让您能够使用一个代理收集日志和高级指标.
它跨操作系统提供支持,包括运行WindowsServer的服务器.
该代理还提供更好的性能.
如果使用统一代理收集CloudWatch指标,它能收集其他的系统指标,获得来宾可见性.
它还支持使用StatsD或collectd收集自定义指标.
有关更多信息,请参阅.
安装CloudWatch代理中的AmazonCloudWatch用户指南.
受支持,但处于弃用的路径—较旧的CloudWatchLogs代理,仅支持从运行Linux的服务器中收集日志.
如果您已在使用此种代理,可以继续使用.
但是,较旧的代理需要使用Python2.
7、3.
0和3.
3.
由于当前EC2实例不使用这些版本的Python,这些版本已被弃用且不再修补,因此强烈建议迁移到统一CloudWatch代理.
当您从CloudWatch日志代理迁移到统一的CloudWatch代理时,统一代理的配置向导能够读取当前的CloudWatchLogs代理配置文件并设置新代理来收集相同的日志.
有关向导的更多信息,请参阅使用向导创建CloudWatchAgent配置文件中的AmazonCloudWatch用户指南.
目录将统一云观察代理与CloudWatch日志配合使用(p.
4)使用之前的CloudWatchLogs代理开始使用CloudWatchLogs(p.
4)快速入门:使用AWSCloudFormation开始使用CloudWatchLogs(p.
29)将统一云观察代理与CloudWatch日志配合使用有关使用统一CloudWatch代理开始使用CloudWatchLogs的详细信息,请参阅使用CloudWatch代理从AmazonEC2实例和本地服务器中收集指标和日志中的AmazonCloudWatch用户指南.
完成本部分中列出的步骤以安装、配置和启动代理.
如果不使用统一代理收集CloudWatch指标,则可以忽略有关指标的任何部分.
如果您正在使用较旧的CloudWatchLogs代理并打算迁移到新的统一代理,建议您使用新代理程序包中包含的向导.
此向导能够读取当前的CloudWatchLogs代理配置文件,并设置CloudWatch代理来收集相同的日志.
有关向导的更多信息,请参阅使用向导创建CloudWatchAgent配置文件中的AmazonCloudWatch用户指南.
使用之前的CloudWatchLogs代理开始使用CloudWatchLogs使用CloudWatchLogs代理,可以从运行Linux或WindowsServer的AmazonEC2实例发布日志数据,可以从AWSCloudTrail发布记录的事件.
建议您改用CloudWatch统一代理发布日志数据.
有关新代理的更多信息,请参阅使用CloudWatch代理从AmazonEC2实例和本地服务器中收集指标和日志中的AmazonCloudWatch用户指南.
或者,您也可以继续使用以前的CloudWatchLogs代理.
目录CloudWatchLogs代理先决条件(p.
5)快速入门:在运行的EC2LinuxLinux实例上安装和配置CloudWatchLogs代理(p.
5)快速入门:启动时在EC2LinuxLinux实例上安装和配置CloudWatchLogs代理(p.
9)4AmazonCloudWatchLogs用户指南CloudWatchLogs代理先决条件快速入门:使运行WindowsServer2016的AmazonEC2实例能够使用CloudWatch日志代理将日志发送到CloudWatch日志(p.
11)快速入门:使运行WindowsServer2012和WindowsServer2008的AmazonEC2实例能够将日志发送到CloudWatchLogs(p.
18)快速入门:使用AWSOpsWorks和厨师安装CloudWatchLogs代理(p.
24)报告CloudWatchLogs代理状态(p.
28)启动CloudWatchLogs代理(p.
28)停止CloudWatchLogs代理(p.
28)CloudWatchLogs代理先决条件CloudWatchLogs代理需要Python版本2.
7、3.
0或3.
3,以及以下任何版本的Linux:2014.
03.
02或更高版本.
不支持AmazonLinux2UbuntuServer版本12.
04、14.
04或16.
04CentOS版本6、6.
3、6.
4、6.
5或7.
0RedHatEnterpriseLinux(RHEL)版本6.
5或7.
0Debian8.
0快速入门:在运行的EC2LinuxLinux实例上安装和配置CloudWatchLogs代理TipCloudWatch包含一个可收集来自EC2实例和本地服务器的日志和指标的新统一代理.
如果您尚未使用较旧的CloudWatchLogs代理,建议您使用较新的统一CloudWatch代理.
有关更多信息,请参阅开始使用CloudWatchLogs(p.
4).
本节的其余部分将介绍较旧的CloudWatchLogs代理的使用.
在运行的EC2LinuxLinux实例上配置较旧的CloudWatchLogs代理您可以使用CloudWatchLogs代理安装程序在现有EC2实例中安装和配置CloudWatch日志代理.
安装完成后,日志自动从实例流向您在安装代理时创建的日志流.
代理会确认它已启动,并保持运行状态,直到您禁用它为止.
除了代理之外,您还可以使用AWSCLI、CloudWatch日志开发工具包或CloudWatch日志API发布日志数据.
AWSCLI非常适合用于通过命令行或脚本发布数据.
CloudWatchLogs开发工具包非常适合用于直接从应用程序发布日志数据或构建您自己的日志发布应用程序.
步骤1:为CloudWatchLogs配置您的IAM角色或用户CloudWatchLogs代理支持IAM角色和用户.
如果您的实例已有一个与之关联的IAM角色,请确保包含下面的IAM策略.
如果您尚未将IAM角色分配给实例,则可以将IAM证书用于后续步骤,也可以将IAM角色分配给该实例.
有关更多信息,请参阅将IAM角色附加到实例.
为CloudWatchLogs配置IAM角色或用户1.
通过以下网址打开IAM控制台:https://console.
aws.
amazon.
com/iam/.
2.
在导航窗格中,选择Roles(角色).
3.
通过选择角色名称来选择角色(不要选中名称旁边的复选框).
4.
依次选择附加策略和创建策略.
5AmazonCloudWatchLogs用户指南快速入门:在运行的EC2Linux实例上安装代理打开一个新的浏览器选项卡或窗口.
5.
选择JSON选项卡,然后键入以下JSON策略文档中的文本.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents","logs:DescribeLogStreams"],"Resource":["*"]}]}6.
完成后,选择查看策略.
策略验证程序将报告任何语法错误.
7.
在查看策略页上,为创建的策略键入名称和说明(可选).
查看策略摘要以查看您的策略授予的权限.
然后,选择创建策略以保存您的工作.
8.
关闭浏览器选项卡或窗口,然后返回您的角色的添加权限页面.
选择刷新,然后选择新策略以将其附加到您的组.
9.
选择AttachPolicy.
步骤2:在现有AmazonEC2实例上安装和配置CloudWatchLogs安装CloudWatchLogs代理的过程取决于您的AmazonEC2实例是运行AmazonLinux、Ubuntu、CentOS还是RedHat.
请根据实例上的Linux版本采用适当的步骤.
在现有AmazonLinux实例上安装和配置CloudWatchLogs从亚马逊LinuxAMI2014.
09开始,CloudWatchLogs代理作为RPM安装随awslogs软件包提供.
早期版本的AmazonLinux可以访问awslogs软件包,方法是使用sudoyumupdate-y命令.
通过将awslogs软件包作为RPM安装(而不是使用CloudWatchLogs安装程序),实例可从AWS接收定期软件包更新和修补程序,而不必手动重新安装CloudWatchLogs代理.
Warning如果以前是使用Python脚本安装的代理,请勿使用RPM安装方法更新CloudWatchLogs代理.
这样做可能会导致配置问题,使得CloudWatchLogs代理不能将您的日志发送到CloudWatch.
1.
Connect到AmazonLinux实例.
有关更多信息,请参阅.
连接到您的实例中的适用于Linux实例的AmazonEC2用户指南.
有关连接问题的更多信息,请参阅排查实例的连接问题中的适用于Linux实例的AmazonEC2用户指南.
2.
更新您的AmazonLinux实例以在软件包存储库中选取最新更改.
sudoyumupdate-y3.
安装awslogs软件包.
这是在AmazonLinux实例上安装awslogs的推荐方法.
sudoyuminstall-yawslogs6AmazonCloudWatchLogs用户指南快速入门:在运行的EC2Linux实例上安装代理4.
编辑/etc/awslogs/awslogs.
conf文件以配置要跟踪的日志.
有关编辑此文件的更多信息,请参阅CloudWatchLogs代理参考(p.
141).
5.
默认情况下,/etc/awslogs/awscli.
conf指向us-east-1区域.
要将日志推送到其他区域,请编辑awscli.
conf文件并指定该区域.
6.
启动awslogs服务.
sudoserviceawslogsstart如果您运行的是AmazonLinux2,请使用以下命令启动awslogs.
sudosystemctlstartawslogsd7.
(可选)检查/var/log/awslogs.
log文件中是否有在启动服务时记录的错误.
8.
(可选)在每次系统启动时运行以下命令以启动awslogs服务.
sudochkconfigawslogson如果您运行的是AmazonLinux2,请在每次系统启动时使用以下命令启动该服务.
sudosystemctlenableawslogsd.
service9.
在代理运行一段时间后,可以在CloudWatch控制台看到新创建的日志组和日志流.
有关更多信息,请参阅查看发送到CloudWatchLogs的日志数据(p.
51).
在现有UbuntuServer、CentOS或RedHat实例上安装和配置CloudWatchLogs如果使用运行UbuntuServer、CentOS或RedHat的AMI,请使用以下过程在实例上手动安装CloudWatchLogs代理.
1.
连接到您的EC2实例.
有关更多信息,请参阅.
连接到您的实例中的适用于Linux实例的AmazonEC2用户指南.
有关连接问题的更多信息,请参阅排查实例的连接问题中的适用于Linux实例的AmazonEC2用户指南.
2.
使用两个选项之一运行CloudWatchLogs代理安装程序.
您可以直接从Internet运行,也可以下载文件并独立运行.
Note如果运行的是CentOS6.
x、RedHat6.
x或Ubuntu12.
04,请使用相应的步骤下载和运行单独的安装程序.
这些系统不支持直接从Internet安装CloudWatchLogs代理.
Note在Ubuntu中,在运行以下命令之前运行apt-getupdate.
要直接从Internet运行,请使用以下命令并按照提示操作:curlhttps://s3.
amazonaws.
com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.
py-Osudopython.
/awslogs-agent-setup.
py--regionus-east-1如果上述命令不起作用,请尝试以下命令:7AmazonCloudWatchLogs用户指南快速入门:在运行的EC2Linux实例上安装代理sudopython3.
/awslogs-agent-setup.
py--regionus-east-1要下载并独立运行它,请使用以下命令并按照提示操作:curlhttps://s3.
amazonaws.
com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.
py-Ocurlhttps://s3.
amazonaws.
com/aws-cloudwatch/downloads/latest/AgentDependencies.
tar.
gz-OtarxvfAgentDependencies.
tar.
gz-C/tmp/sudopython.
/awslogs-agent-setup.
py--regionus-east-1--dependency-path/tmp/AgentDependencies您可以通过指定us-east-1、us-west-1、us-west-1、us-west-1、ap-soust-1、ap-southeast-1、ap-northeast-1、ap-southest-1、ap-southe1、eu-west-1、1或sa-soust-1区域来安装CloudWatchLogsWst-1.
Note有关awslogs-agent-setup的当前版本和版本历史记录的更多信息,请参阅CHANGELOG.
txt.
在设置期间,CloudWatchLogs代理安装程序需要特定信息.
在开始之前,您需要知道要监视的日志文件及其时间戳格式.
您应准备好以下信息.
Item描述AWS访问密钥ID如果使用IAM角色,请按Enter.
否则,请输入您的AWS访问密钥ID.
AWS秘密访问密钥如果使用IAM角色,请按Enter.
否则,请输入您的AWS秘密访问密钥.
默认区域名称按Enter.
默认值为us-east-2.
您可以将此设置为us-east-1、us-west-1、us-west-2、ap-southeast-1、ap-northeast-1、ap-northeast-1、ap-southe1、ap-southe1、ap-soust-1、1、eu-west-1或sa-soust-1.
默认输出格式保留空白并按Enter.
要上传的日志文件的路径包含待发送日志数据的文件的位置.
安装程序将为您提供路径建议.
目标日志组名称日志组的名称.
安装程序将为您提供日志组名称建议.
目标日志流名称默认情况下,这是主机名称.
安装程序将为您提供主机名称建议.
时间戳格式指定在指定日志文件中使用的时间戳的格式.
选择自定义可指定您自己的格式.
初始位置数据的上传方式.
设置为start_of_file将上传数据文件中的所有内容.
设置为end_of_file将仅上传最近追加的数据.
8AmazonCloudWatchLogs用户指南快速入门:启动时在EC2Linux实例上安装代理完成这些步骤后,安装程序会询问您是否需要配置另一个日志文件.
对于每个日志文件,您都可以运行任意次此过程.
如果没有其他要监控的日志文件,当安装程序提示设置其他日志时,请选择N(否).
有关代理配置文件中的设置的更多信息,请参阅CloudWatchLogs代理参考(p.
141).
Note不支持配置多个日志源将数据发送到单个日志流.
3.
在代理运行一段时间后,可以在CloudWatch控制台看到新创建的日志组和日志流.
有关更多信息,请参阅查看发送到CloudWatchLogs的日志数据(p.
51).
快速入门:启动时在EC2LinuxLinux实例上安装和配置CloudWatchLogs代理Tip本节中讨论的较早CloudWatchLogs代理即将弃用.
强烈建议您改为使用可收集日志和指标的新统一CloudWatch代理.
此外,较早的CloudWatchLogs代理需要Python3.
3或更早版本,默认情况下,新EC2实例上未安装这些版本.
有关统一CloudWatch代理的更多信息,请参阅安装CloudWatch代理.
本节的其余部分将介绍较旧的CloudWatchLogs代理的使用.
启动时在EC2LinuxLinux实例上安装较旧的CloudWatchLogs代理您可以使用AmazonEC2的一项功能,即AmazonEC2的一项功能,允许在启动时将参数信息传递给实例,在该实例上安装和配置CloudWatchLogs代理.
要将CloudWatchLogs代理安装和配置信息传递给AmazonEC2,您可以提供处于某个网络位置(例如AmazonS3存储桶)的配置文件.
不支持配置多个日志源将数据发送到单个日志流.
Prerequisite创建用于描述所有日志组和日志流的代理配置文件.
这是一个文本文件,描述要监控的日志文件以及要将这些文件上传到的日志组和日志流.
代理使用此配置文件并开始监控并上传其中描述的所有日志文件.
有关代理配置文件中的设置的更多信息,请参阅CloudWatchLogs代理参考(p.
141).
以下是适用于AmazonLinux2的一个示例代理配置文件[general]state_file=/var/lib/awslogs/state/agent-state[/var/log/messages]file=/var/log/messageslog_group_name=/var/log/messageslog_stream_name={instance_id}datetime_format=%b%d%H:%M:%S以下是适用于Ubuntu的一个示例代理配置文件[general]state_file=/var/awslogs/state/agent-state9AmazonCloudWatchLogs用户指南快速入门:启动时在EC2Linux实例上安装代理[/var/log/syslog]file=/var/log/sysloglog_group_name=/var/log/sysloglog_stream_name={instance_id}datetime_format=%b%d%H:%M:%S配置您的IAM角色1.
通过以下网址打开IAM控制台:https://console.
aws.
amazon.
com/iam/.
2.
在导航窗格中,选择Policies和CreatePolicy.
3.
在存储库的创建策略页面,用于创建您自己的策略中,选择Select.
有关创建自定义策略的更多信息,请参阅适用于AmazonEC2的IAM策略中的适用于Linux实例的AmazonEC2用户指南.
4.
在ReviewPolicy页面上,为PolicyName键入策略的名称.
5.
对于PolicyDocument,粘贴以下策略:{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents","logs:DescribeLogStreams"],"Resource":["arn:aws:logs:*:*:*"]},{"Effect":"Allow","Action":["s3:GetObject"],"Resource":["arn:aws:s3:::myawsbucket/*"]}]}6.
选择CreatePolicy.
7.
在导航窗格中,选择Roles和CreateNewRole.
8.
在SetRoleName页面上,请键入角色名称,然后选择NextStep.
9.
在存储库的选择角色类型页面上,选择Select旁边AmazonEC2.
10.
在AttachPolicy页面上的表标题中,依次选择PolicyType和CustomerManaged.
11.
选择您创建的IAM策略,然后选择下一步.
12.
选择Createrole(创建角色).
有关IAM用户和策略的更多信息,请参阅IAM用户和组和管理IAM策略中的IAM用户指南.
启动新实例并启用CloudWatchLogs1.
通过以下网址打开AmazonEC2控制台:https://console.
aws.
amazon.
com/ec2/.
2.
选择LaunchInstance.
10AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用有关更多信息,请参阅.
启动实例in适用于Linux实例的AmazonEC2用户指南.
3.
在存储库的步骤1:选择一个Amazon系统映像(AMI)页面上,选择要启动的Linux实例类型,然后在步骤2:选择一个实例类型页面上,选择后续:配置实例详细信息.
确保Amazon系统映像(AMI)中包含了cloud-init.
AmazonLinuxAMI和适用于Ubuntu和RHEL的AMI已包含云初始化,但AWSMarketplace中的CentOS和其他AMI可能未包含.
4.
在存储库的步骤3:配置实例详细信息页面,用于IAM角色中,选择您创建的IAM角色.
5.
在AdvancedDetails下,将以下脚本粘贴到Userdata的框中.
然后,通过将-c选项的值更改为您的代理配置文件的位置来更新该脚本:#!
/bin/bashcurlhttps://s3.
amazonaws.
com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.
py-Ochmod+x.
/awslogs-agent-setup.
py.
/awslogs-agent-setup.
py-n-rus-east-1-cs3://DOC-EXAMPLE-BUCKET1/my-config-file6.
对实例进行任何其他更改,检查启动设置,然后选择Launch.
7.
在代理运行一段时间后,可以在CloudWatch控制台看到新创建的日志组和日志流.
有关更多信息,请参阅查看发送到CloudWatchLogs的日志数据(p.
51).
快速入门:使运行WindowsServer2016的AmazonEC2实例能够使用CloudWatch日志代理将日志发送到CloudWatch日志TipCloudWatch包含一个可收集来自EC2实例和本地服务器的日志和指标的新统一代理.
我们建议您使用较新的统一CloudWatch代理.
有关更多信息,请参阅开始使用CloudWatchLogs(p.
4).
本节的其余部分将介绍较旧的CloudWatchLogs代理的使用.
使运行WindowsServer2016的AmazonEC2实例能够使用较旧的CloudWatch日志代理将日志发送到CloudWatch日志您可以使用多种方法让运行WindowsServer2016的实例将日志发送到CloudWatchLogs.
本节中的步骤使用SystemsManagerRunCommand.
有关其他可能方法的信息,请参阅向AmazonCloudWatch发送日志、事件和性能计数器.
步骤下载示例配置文件(p.
11)为CloudWatch配置JSON文件(p.
12)为SystemsManager创建IAM用户和角色(p.
17)验证SystemsManager的先决(p.
17)验证Internet访问权限(p.
17)使用SystemsManagerRunCommand启用CloudWatchLogs(p.
17)下载示例配置文件将以下示例文件下载到您的计算机:AWS.
EC2.
Windows.
CloudWatch.
11AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用为CloudWatch配置JSON文件您通过在配置文件中指定选项来确定将哪些日志发送到CloudWatch.
创建此文件并指定您的选择的过程可能需要30分钟或更长时间才能完成.
完成此任务一次后,您可以在所有实例上重复使用此配置文件.
步骤步骤1:启用CloudWatchLogs(p.
12)步骤2:为CloudWatch视配置设置(p.
12)步骤3:配置要发送的数据(p.
12)步骤4:配置流控制(p.
16)步骤5:保存JSON内容(p.
17)步骤1:启用CloudWatchLogs在JSON文件的顶部,将IsEnabled的"false"改为"true":"IsEnabled":true,步骤2:为CloudWatch视配置设置指定凭证、区域、日志组名称和日志流命名空间.
这使实例能够将日志数据发送到CloudWatchLogs.
要将同一日志数据发送到其他位置,您可以添加包含唯一ID的额外部分(例如,"CloudWatchLogs2"和"CloudWatchLogs3")并为每个ID添加一个不同的区域.
配置设置将日志数据发送到CloudWatchLogs1.
在JSON文件中,找到CloudWatchLogs部分.
{"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}"}},2.
将AccessKey和SecretKey字段留空.
您将使用IAM角色配置凭证.
3.
对于Region,键入要将日志数据发送到的区域(例如us-east-2).
4.
对于LogGroup,键入您的日志组的名称.
此名称会出现在日志组窗口中的CloudWatch控制台中的窗口.
5.
对于LogStream,键入目标日志流.
此名称会出现在日志组>流窗口中的CloudWatch控制台中的窗口.
如果使用{instance_id},则在默认情况下,日志流名称是该实例的实例ID.
如果指定不存在的日志流名称,则CloudWatchLogs会自动创建该名称.
您可以使用文字字符串、预定义变量{instance_id}、{hostname}和{ip_address}或它们的组合定义日志流名称.
步骤3:配置要发送的数据您可以将事件日志数据、Windows事件跟踪(ETW)数据和其他日志数据发送到CloudWatchLogs.
12AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用将Windows应用程序事件日志数据发送到CloudWatchLogs1.
在JSON文件中,找到ApplicationEventLog部分.
{"Id":"ApplicationEventLog","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Application","Levels":"1"}},2.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
2–仅上传警告消息.
4–仅上传信息消息.
您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将安全日志数据发送到CloudWatchLogs1.
在JSON文件中,找到SecurityEventLog部分.
{"Id":"SecurityEventLog","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Security","Levels":"7"}},2.
对于Levels,键入7以上传所有消息.
将系统事件日志数据发送到CloudWatchLogs1.
在JSON文件中,找到SystemEventLog部分.
{"Id":"SystemEventLog","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"System","Levels":"7"}},2.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
2–仅上传警告消息.
4–仅上传信息消息.
13AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将其他类型的事件日志数据发送到CloudWatchLogs1.
在JSON文件中,添加新部分.
每个部分必须有一个独立的Id.
{"Id":"Id-name","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Log-name","Levels":"7"}},2.
对于Id,键入要上传的日志的名称(例如WindowsBackup).
3.
对于LogName,请键入要上传的日志的名称.
您可以按如下步骤找到日志的名称.
a.
打开事件查看器.
b.
在导航窗格中,选择ApplicationsandServicesLogs.
c.
导航到该日志,然后选择Actions、Properties.
4.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
2–仅上传警告消息.
4–仅上传信息消息.
您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将Windows事件跟踪数据发送到CloudWatchLogsETW(Windows事件跟踪)提供高效且详细的日志记录机制,供应用程序写入日志.
每个ETW都由可以启动和停止日志记录会话的会话管理器控制.
每个会话都具有一个提供者以及一个或多个使用者.
1.
在JSON文件中,找到ETW部分.
{"Id":"ETW","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Microsoft-Windows-WinINet/Analytic","Levels":"7"}},2.
对于LogName,请键入要上传的日志的名称.
3.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
2–仅上传警告消息.
14AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用4–仅上传信息消息.
您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将自定义日志(任何基于文本的日志文件)发送到CloudWatchLogs1.
在JSON文件中,找到CustomLogs部分.
{"Id":"CustomLogs","FullName":"AWS.
EC2.
Windows.
CloudWatch.
CustomLog.
CustomLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogDirectoryPath":"C:\\CustomLogs\\","TimestampFormat":"MM/dd/yyyyHH:mm:ss","Encoding":"UTF-8","Filter":"","CultureName":"en-US","TimeZoneKind":"Local","LineCount":"5"}},2.
对于LogDirectoryPath,键入日志在实例上的存储路径.
3.
对于TimestampFormat,请键入要使用的时间戳格式.
有关支持的值的更多信息,请参阅MSDN上的自定义日期和时间格式字符串主题.
Important源日志文件必须在每个日志行开头具有时间戳,且时间戳后必须有一个空格.
4.
对于Encoding,键入要使用的文件编码(例如UTF-8).
有关支持的值的列表,请参阅MSDN上的Encoding类主题.
Note使用编码名称,而不是显示名称.
5.
(可选)对于Filter,键入日志名称的前缀.
将此参数保留空白以监控所有文件.
有关支持的值的更多信息,请参阅MSDN上的FileSystemWatcherFilterProperty主题.
6.
(可选)对于CultureName,键入记录该时间戳的区域.
如果CultureName为空,则它默认为您Windows实例当前所使用的相同区域位置.
有关更多信息,请参阅MSDN上LanguagetagProductBehavior主题中的表格中的列.
Note这些区域有:div、div-MV、hu,和hu-HU值不受支持.
7.
(可选)用于TimeZoneKind,键入Local或者UTC.
可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息.
如果此参数留空且时间戳不包括时区信息,则CloudWatchLogs默认为本地时区.
如果时间戳已包含时区信息,则忽略此参数.
8.
(可选)对于LineCount,在标头中键入行数以识别日志文件.
例如,IIS日志文件拥有几乎相同的标头.
您可以输入5,系统会读取日志文件标头的前三行以进行识别.
在IIS日志文件中,第三行为日期和时间戳,但无法始终保证时间戳在日志文件之间是不同的.
为此,建议包含至少一行实际日志数据以便对日志文件进行唯一指纹识别.
将IIS日志数据发送到CloudWatchLogs1.
在JSON文件中,找到IISLog部分.
15AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用{"Id":"IISLogs","FullName":"AWS.
EC2.
Windows.
CloudWatch.
CustomLog.
CustomLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogDirectoryPath":"C:\\inetpub\\logs\\LogFiles\\W3SVC1","TimestampFormat":"yyyy-MM-ddHH:mm:ss","Encoding":"UTF-8","Filter":"","CultureName":"en-US","TimeZoneKind":"UTC","LineCount":"5"}},2.
对于LogDirectoryPath,输入为单个站点存储的IIS日志所在的文件夹(例如C:\inetpub\logs\LogFiles\W3SVCn).
Note仅支持W3C日志格式.
不支持IIS、NCSA和自定义格式.
3.
对于TimestampFormat,请键入要使用的时间戳格式.
有关支持的值的更多信息,请参阅MSDN上的自定义日期和时间格式字符串主题.
4.
对于Encoding,键入要使用的文件编码(例如UTF-8).
有关支持的值的更多信息,请参阅MSDN上的EncodingClass主题.
Note使用编码名称,而不是显示名称.
5.
(可选)对于Filter,键入日志名称的前缀.
将此参数保留空白以监控所有文件.
有关支持的值的更多信息,请参阅MSDN上的FileSystemWatcherFilterProperty主题.
6.
(可选)对于CultureName,键入记录该时间戳的区域.
如果CultureName为空,则它默认为您Windows实例当前所使用的相同区域位置.
有关支持的值的更多信息,请参阅MSDN上LanguagetagProductBehavior主题中的表格中的列.
Note这些区域有:div、div-MV、hu,和hu-HU值不受支持.
7.
(可选)用于TimeZoneKind,输入Local或者UTC.
可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息.
如果此参数留空且时间戳不包括时区信息,则CloudWatchLogs默认为本地时区.
如果时间戳已包含时区信息,则忽略此参数.
8.
(可选)对于LineCount,在标头中键入行数以识别日志文件.
例如,IIS日志文件拥有几乎相同的标头.
您可以输入5,系统会读取日志文件标头的前五行以进行识别.
在IIS日志文件中,第三行为日期和时间戳,但无法始终保证时间戳在日志文件之间是不同的.
为此,建议包含至少一行实际日志数据以便对日志文件进行唯一指纹识别.
步骤4:配置流控制每种数据类型在Flows部分中都必须具有对应的目标.
例如,要将自定义日志、ETW日志和系统日志发送到CloudWatchLogs,请将添加(CustomLogs,ETW,SystemEventLog),CloudWatchLogs添加到Flows部分.
Warning添加无效的步骤将阻止流.
例如,如果您添加了磁盘指标步骤,但实例没有磁盘,则流中的所有步骤都将被阻止.
16AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2016实例配合使用您可将同一个日志文件发送到多个目标.
例如,要将应用程序日志发送到您在CloudWatchLogs部分中定义的两个不同目标,请将ApplicationEventLog,(CloudWatchLogs,CloudWatchLogs2)添加到Flows部分.
配置流程控制1.
在AWS.
EC2.
Windows.
CloudWatch.
json文件中,找到Flows部分.
"Flows":{"Flows":["PerformanceCounter,CloudWatch","(PerformanceCounter,PerformanceCounter2),CloudWatch2","(CustomLogs,ETW,SystemEventLog),CloudWatchLogs","CustomLogs,CloudWatchLogs2","ApplicationEventLog,(CloudWatchLogs,CloudWatchLogs2)"]}2.
对于Flows,添加要上传的每种数据类型(例如ApplicationEventLog)及其目标(例如CloudWatchLogs).
步骤5:保存JSON内容现在,您已完成编辑JSON文件.
保存该文件,将文件内容粘贴到另一个窗口中的文本编辑器中.
在这个过程后面的步骤中,需要使用这些文件内容.
为SystemsManager创建IAM用户和角色在您使用SystemsManagerRunCommand时,需要实例凭证的IAM角色.
该角色使SystemsManager能够对实例执行操作.
您可以选择性地创建用于配置和运行SystemsManager的唯一IAM用户账户.
有关更多信息,请参阅.
为SystemsManager配置安全角色中的AWSSystemsManager用户指南.
有关如何将IAM角色附加到现有实例的信息,请参阅将IAM角色附加到实例中的适用于Windows实例的AmazonEC2用户指南.
验证SystemsManager的先决在使用SystemsManager运行命令配置与CloudWatchLogs的集成之前,请确保您的实例满足最低要求.
有关更多信息,请参阅.
SystemsManager的先决中的AWSSystemsManager用户指南.
验证Internet访问权限您的AmazonEC2WindowsServer实例和托管实例必须具有出站Internet访问权限,才能将日志和事件数据发送到CloudWatch.
有关如何配置Internet访问权限的详细信息,请参阅Internet网关中的AmazonVPC用户指南.
使用SystemsManagerRunCommand启用CloudWatchLogsRunCommand使您能够按需管理实例配置.
您可以指定一个SystemsManager文档,指定一些参数,然后在一个或多个实例上执行命令.
实例上的SSM代理负责处理命令并按指定方式配置实例.
使用RunCommand配置与CloudWatchLogs的集成1.
通过以下网址打开AmazonEC2控制台:https://console.
aws.
amazon.
com/ec2/.
2.
从打开SSM控制台https://console.
aws.
amazon.
com/systems-manager/.
3.
在导航窗格中,选择RunCommand.
4.
选择Runacommand.
5.
对于Commanddocument,选择AWS-ConfigureCloudWatch.
17AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2012和WindowsServer2008实例配合使用6.
适用于目标实例中,选择要与CloudWatchLogs集成的实例.
如果您在此列表中未看到实例,则可能未针对RunCommand配置实例.
有关更多信息,请参阅.
SystemsManager的先决中的适用于Windows实例的AmazonEC2用户指南.
7.
对于Status,选择Enabled.
8.
对于Properties,请复制并粘贴您在之前任务中创建的JSON内容.
9.
填写剩余选填字段并选择Run.
使用以下步骤查看AmazonEC2控制台中的命令执行结果.
在控制台中查看命令输出1.
选择一个命令.
2.
选择Output选项卡.
3.
选择ViewOutput.
命令输出页面将显示命令执行的结果.
快速入门:使运行WindowsServer2012和WindowsServer2008的AmazonEC2实例能够将日志发送到CloudWatchLogsTipCloudWatch包含一个可收集来自EC2实例和本地服务器的日志和指标的新统一代理.
我们建议您使用较新的统一CloudWatch代理.
有关更多信息,请参阅开始使用CloudWatchLogs(p.
4).
本节的其余部分将介绍较旧的CloudWatchLogs代理的使用.
使运行WindowsServer2012和WindowsServer2008的AmazonEC2实例能够将日志发送到CloudWatchLogs可以执行以下步骤,以允许运行WindowsServer2012和WindowsServer2008的实例将日志发送到CloudWatchLogs.
下载示例配置文件将以下示例JSON文件下载到您的计算机:AWS.
EC2.
Windows.
CloudWatch.
您将在后续步骤中编辑该文件.
为CloudWatch配置JSON文件您通过在JSON配置文件中指定选择来确定将哪些日志发送到CloudWatch.
创建此文件并指定您的选择的过程可能需要30分钟或更长时间才能完成.
完成此任务一次后,您可以在所有实例上重复使用此配置文件.
步骤步骤1:启用CloudWatchLogs(p.
18)步骤2:为CloudWatch视配置设置(p.
19)步骤3:配置要发送的数据(p.
19)步骤4:配置流控制(p.
23)步骤1:启用CloudWatchLogs在JSON文件的顶部,将IsEnabled的"false"改为"true":18AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2012和WindowsServer2008实例配合使用"IsEnabled":true,步骤2:为CloudWatch视配置设置指定凭证、区域、日志组名称和日志流命名空间.
这使实例能够将日志数据发送到CloudWatchLogs.
要将同一日志数据发送到其他位置,您可以添加包含唯一ID的额外部分(例如,"CloudWatchLogs2"和"CloudWatchLogs3")并为每个ID添加一个不同的区域.
配置设置将日志数据发送到CloudWatchLogs1.
在JSON文件中,找到CloudWatchLogs部分.
{"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}"}},2.
将AccessKey和SecretKey字段留空.
您将使用IAM角色配置凭证.
3.
对于Region,键入要将日志数据发送到的区域(例如us-east-2).
4.
对于LogGroup,键入您的日志组的名称.
此名称会出现在日志组窗口中的CloudWatch控制台中的窗口.
5.
对于LogStream,键入目标日志流.
此名称会出现在日志组>流窗口中的CloudWatch控制台中的窗口.
如果使用{instance_id},则在默认情况下,日志流名称是该实例的实例ID.
如果指定不存在的日志流名称,则CloudWatchLogs会自动创建该名称.
您可以使用文字字符串、预定义变量{instance_id}、{hostname}和{ip_address}或它们的组合定义日志流名称.
步骤3:配置要发送的数据您可以将事件日志数据、Windows事件跟踪(ETW)数据和其他日志数据发送到CloudWatchLogs.
将Windows应用程序事件日志数据发送到CloudWatchLogs1.
在JSON文件中,找到ApplicationEventLog部分.
{"Id":"ApplicationEventLog","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Application","Levels":"1"}},2.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
19AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2012和WindowsServer2008实例配合使用2–仅上传警告消息.
4–仅上传信息消息.
您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将安全日志数据发送到CloudWatchLogs1.
在JSON文件中,找到SecurityEventLog部分.
{"Id":"SecurityEventLog","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Security","Levels":"7"}},2.
对于Levels,键入7以上传所有消息.
将系统事件日志数据发送到CloudWatchLogs1.
在JSON文件中,找到SystemEventLog部分.
{"Id":"SystemEventLog","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"System","Levels":"7"}},2.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
2–仅上传警告消息.
4–仅上传信息消息.
您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将其他类型的事件日志数据发送到CloudWatchLogs1.
在JSON文件中,添加新部分.
每个部分必须有一个独立的Id.
{"Id":"Id-name","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Log-name","Levels":"7"20AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2012和WindowsServer2008实例配合使用}},2.
对于Id,键入要上传的日志的名称(例如WindowsBackup).
3.
对于LogName,请键入要上传的日志的名称.
您可以按如下步骤找到日志的名称.
a.
打开事件查看器.
b.
在导航窗格中,选择ApplicationsandServicesLogs.
c.
导航到该日志,然后选择Actions、Properties.
4.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
2–仅上传警告消息.
4–仅上传信息消息.
您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将Windows事件跟踪数据发送到CloudWatchLogsETW(Windows事件跟踪)提供高效且详细的日志记录机制,供应用程序写入日志.
每个ETW都由可以启动和停止日志记录会话的会话管理器控制.
每个会话都具有一个提供者以及一个或多个使用者.
1.
在JSON文件中,找到ETW部分.
{"Id":"ETW","FullName":"AWS.
EC2.
Windows.
CloudWatch.
EventLog.
EventLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogName":"Microsoft-Windows-WinINet/Analytic","Levels":"7"}},2.
对于LogName,请键入要上传的日志的名称.
3.
对于Levels,指定要上传的消息类型.
可以指定以下值之一:1–仅上传错误消息.
2–仅上传警告消息.
4–仅上传信息消息.
您可以将这些值组合在一起,以包含多种类型的消息.
例如,一个包含3个上传错误消息(1)和警告消息(2)的值.
一个包含7个上传错误消息(1)、警告消息(2)和信息消息(4)的值.
将自定义日志(任何基于文本的日志文件)发送到CloudWatchLogs1.
在JSON文件中,找到CustomLogs部分.
{"Id":"CustomLogs","FullName":"AWS.
EC2.
Windows.
CloudWatch.
CustomLog.
CustomLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogDirectoryPath":"C:\\CustomLogs\\",21AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2012和WindowsServer2008实例配合使用"TimestampFormat":"MM/dd/yyyyHH:mm:ss","Encoding":"UTF-8","Filter":"","CultureName":"en-US","TimeZoneKind":"Local","LineCount":"5"}},2.
对于LogDirectoryPath,键入日志在实例上的存储路径.
3.
对于TimestampFormat,请键入要使用的时间戳格式.
有关支持的值的更多信息,请参阅MSDN上的自定义日期和时间格式字符串主题.
Important源日志文件必须在每个日志行开头具有时间戳,且时间戳后必须有一个空格.
4.
对于Encoding,键入要使用的文件编码(例如UTF-8).
有关支持的值的更多信息,请参阅MSDN上的EncodingClass主题.
Note使用编码名称,而不是显示名称.
5.
(可选)对于Filter,键入日志名称的前缀.
将此参数保留空白以监控所有文件.
有关支持的值的更多信息,请参阅MSDN上的FileSystemWatcherFilterProperty主题.
6.
(可选)对于CultureName,键入记录该时间戳的区域.
如果CultureName为空,则它默认为您Windows实例当前所使用的相同区域位置.
有关支持的值的更多信息,请参阅MSDN上LanguagetagProductBehavior主题中的表格中的列.
Note这些区域有:div、div-MV、hu,和hu-HU值不受支持.
7.
(可选)用于TimeZoneKind,键入Local或者UTC.
可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息.
如果此参数留空且时间戳不包括时区信息,则CloudWatchLogs默认为本地时区.
如果时间戳已包含时区信息,则忽略此参数.
8.
(可选)对于LineCount,在标头中键入行数以识别日志文件.
例如,IIS日志文件拥有几乎相同的标头.
您可以输入5,系统会读取日志文件标头的前三行以进行识别.
在IIS日志文件中,第三行为日期和时间戳,但无法始终保证时间戳在日志文件之间是不同的.
为此,建议包含至少一行实际日志数据以便对日志文件进行唯一指纹识别.
将IIS日志数据发送到CloudWatchLogs1.
在JSON文件中,找到IISLog部分.
{"Id":"IISLogs","FullName":"AWS.
EC2.
Windows.
CloudWatch.
CustomLog.
CustomLogInputComponent,AWS.
EC2.
Windows.
CloudWatch","Parameters":{"LogDirectoryPath":"C:\\inetpub\\logs\\LogFiles\\W3SVC1","TimestampFormat":"yyyy-MM-ddHH:mm:ss","Encoding":"UTF-8","Filter":"","CultureName":"en-US","TimeZoneKind":"UTC","LineCount":"5"}},22AmazonCloudWatchLogs用户指南快速入门:将CloudWatchLogs与WindowsServer2012和WindowsServer2008实例配合使用2.
对于LogDirectoryPath,输入为单个站点存储的IIS日志所在的文件夹(例如C:\inetpub\logs\LogFiles\W3SVCn).
Note仅支持W3C日志格式.
不支持IIS、NCSA和自定义格式.
3.
对于TimestampFormat,请键入要使用的时间戳格式.
有关支持的值的更多信息,请参阅MSDN上的自定义日期和时间格式字符串主题.
4.
对于Encoding,键入要使用的文件编码(例如UTF-8).
有关支持的值的更多信息,请参阅MSDN上的EncodingClass主题.
Note使用编码名称,而不是显示名称.
5.
(可选)对于Filter,键入日志名称的前缀.
将此参数保留空白以监控所有文件.
有关支持的值的更多信息,请参阅MSDN上的FileSystemWatcherFilterProperty主题.
6.
(可选)对于CultureName,键入记录该时间戳的区域.
如果CultureName为空,则它默认为您Windows实例当前所使用的相同区域位置.
有关支持的值的更多信息,请参阅MSDN上LanguagetagProductBehavior主题中的表格中的列.
Note这些区域有:div、div-MV、hu,和hu-HU值不受支持.
7.
(可选)用于TimeZoneKind,输入Local或者UTC.
可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息.
如果此参数留空且时间戳不包括时区信息,则CloudWatchLogs默认为本地时区.
如果时间戳已包含时区信息,则忽略此参数.
8.
(可选)对于LineCount,在标头中键入行数以识别日志文件.
例如,IIS日志文件拥有几乎相同的标头.
您可以输入5,系统会读取日志文件标头的前五行以进行识别.
在IIS日志文件中,第三行为日期和时间戳,但无法始终保证时间戳在日志文件之间是不同的.
为此,建议包含至少一行实际日志数据以便对日志文件进行唯一指纹识别.
步骤4:配置流控制每种数据类型在Flows部分中都必须具有对应的目标.
例如,要将自定义日志、ETW日志和系统日志发送到CloudWatchLogs,请将添加(CustomLogs,ETW,SystemEventLog),CloudWatchLogs添加到Flows部分.
Warning添加无效的步骤将阻止流.
例如,如果您添加了磁盘指标步骤,但实例没有磁盘,则流中的所有步骤都将被阻止.
您可将同一个日志文件发送到多个目标.
例如,要将应用程序日志发送到您在CloudWatchLogs部分中定义的两个不同目标,请将ApplicationEventLog,(CloudWatchLogs,CloudWatchLogs2)添加到Flows部分.
配置流程控制1.
在AWS.
EC2.
Windows.
CloudWatch.
json文件中,找到Flows部分.
"Flows":{"Flows":["PerformanceCounter,CloudWatch","(PerformanceCounter,PerformanceCounter2),CloudWatch2","(CustomLogs,ETW,SystemEventLog),CloudWatchLogs","CustomLogs,CloudWatchLogs2","ApplicationEventLog,(CloudWatchLogs,CloudWatchLogs2)"]23AmazonCloudWatchLogs用户指南快速入门:使用AWSOpsWorks安装代理}2.
对于Flows,添加要上传的每种数据类型(例如ApplicationEventLog)及其目标(例如CloudWatchLogs).
现在,您已完成编辑JSON文件.
您将在后面的步骤中用到它.
启动代理要让运行WindowsServer2012或WindowsServer2008的AmazonEC2实例将日志发送到CloudWatchLogs,请使用EC2Config服务(EC2Config.
exe).
您的实例应具有EC2Config4.
0或更高版本并且您可以使用此过程.
有关使用早期版本的EC2Config的更多信息,请参阅使用EC2配置3.
x或更早版本来配置CloudWatch中的适用于Windows实例的AmazonEC2用户指南使用EC2Config4.
x配置CloudWatch1.
检查您在此过程前面编辑的AWS.
EC2.
Windows.
CloudWatch.
json文件的编码.
只支持不含BOM的UTF-8编码.
然后将文件保存在WindowsServer2008-2012R2实例上的以下文件夹内:C:\ProgramFiles\Amazon\SSM\Plugins\awsCloudWatch\.
2.
启动或重新启动SSM代理(AmazonSSMAgent.
exe),或者使用以下PowerShell命令:PSC:\>Restart-ServiceAmazonSSMAgent在重新启动SSM代理后,代理会检测配置文件并且为CloudWatch集成配置实例.
如果更改本地配置文件中的参数和设置,则必须重新启动SSM代理才能使更改生效.
要在实例上禁用CloudWatch集成,请将IsEnabled到false并将更改在配置文件中所做的更改.
快速入门:使用AWSOpsWorks和厨师安装CloudWatchLogs代理您可以安装CloudWatchLogs代理并使用AWSOpsWorks和Chef创建日志流,后者是第三方系统和云基础设施自动化工具.
Chef使用"配方"(编写的"配方"用于在计算机中安装和配置软件)和"说明书"(配方的集合)来执行其配置和策略分配任务.
有关更多信息,请参阅Chef.
下面的Chef配方示例显示如何在每个EC2实例中监控一个日志文件.
配方将堆栈名称用作日志组,将实例的主机名用作日志流名称.
要监控多个日志文件,您需要扩展配方,以创建多个日志组和日志流.
步骤1:创建自定义配方创建存储库以存储您的食谱.
AWSOpsWorks支持Git和Subversion,您也可以在AmazonS3中存储归档文件.
您的食谱存储库的结构在说明书存储库中的AWSOpsWorks用户指南.
以下示例假设说明书名为logs.
安装.
rb配方将安装CloudWatchLogs代理.
您也可以下载食谱示例(CloudWatchLogs-Cookbooks.
zip).
创建包含以下代码、名为metadata.
rb的文件:#metadata.
rbname'logs'version'0.
0.
1'创建CloudWatchLogs配置文件:#config.
rb24AmazonCloudWatchLogs用户指南快速入门:使用AWSOpsWorks安装代理template"/tmp/cwlogs.
cfg"docookbook"logs"source"cwlogs.
cfg.
erb"owner"root"group"root"mode0644end下载并安装CloudWatchLogs代理:#install.
rbdirectory"/opt/aws/cloudwatch"dorecursivetrueendremote_file"/opt/aws/cloudwatch/awslogs-agent-setup.
py"dosource"https://s3.
amazonaws.
com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.
py"mode"0755"endexecute"InstallCloudWatchLogsagent"docommand"/opt/aws/cloudwatch/awslogs-agent-setup.
py-n-rregion-c/tmp/cwlogs.
cfg"not_if{system"pgrep-faws-logs-agent-setup"}endNote在上面的示例中,将region使用以下任何一种方法:us-east-1、us-west-1、ap-southeast-1、ap-northeast-1、ap-northeast-1、ap-southe1、ap-southe1、ap-soust-1、eu-west-1、1或sa-soust-1.
如果代理安装失败,请检查以确保python-dev程序包已安装.
如果未安装,请使用以下命令,然后重试代理安装:sudoapt-get-yinstallpython-dev此配方使用cwlogs.
cfg.
erb模板文件,您可以修改该文件以指定不同属性,如要对哪些文件记录日志.
有关这些属性的更多信息,请参阅CloudWatchLogs代理参考(p.
141).
[general]#PathtotheAWSLogsagent'sstatefile.
Agentusesthisfiletomaintain#clientsidestateacrossitsexecutions.
state_file=/var/awslogs/state/agent-state##Eachlogfileisdefinedinitsownsection.
Thesectionnamedoesn't##matteraslongasitsuniquewithinthisfile.
##[kern.
log]###Pathoflogfilefortheagenttomonitorandupload.
##file=/var/log/kern.
log###Nameofthedestinationloggroup.
##log_group_name=kern.
log###Nameofthedestinationlogstream.
25AmazonCloudWatchLogs用户指南快速入门:使用AWSOpsWorks安装代理##log_stream_name={instance_id}###Formatspecifierfortimestampparsing.
##datetime_format=%b%d%H:%M:%S##[]datetime_format=[%Y-%m-%d%H:%M:%S]log_group_name=log_stream_name=该模板通过引用堆栈配置和部署JSON中的相应属性获取堆栈名称与主机名.
cwlog说明书的default.
rb属性文件(logs/attributes/default.
rb)定义用于指定要记录的文件的属性.
default[:cwlogs][:logfile]='/var/log/aws/opsworks/opsworks-agent.
statistics.
log'步骤2:创建AWSOpsWorksStack1.
打开AWSOpsWorks控制台(位于https://console.
aws.
amazon.
com/opsworks/.
2.
在存储库的OpsWorks控制面板中,选择添加堆栈来创建一个AWSOpsWorks堆栈.
3.
在Addstack屏幕上,选择Chef11stack.
4.
对于Stackname,输入一个名称.
5.
对于UsecustomChefCookbooks,选择Yes.
6.
对于Repositorytype,选择您使用的存储库类型.
如果要使用上述示例,请选择HttpArchive(Http存档).
7.
对于RepositoryURL,输入用于存储前面步骤中创建的说明书的存储库.
如果要使用上述示例,请输入https://s3.
amazonaws.
com/aws-cloudwatch/downloads/CloudWatchLogs-Cookbooks.
zip.
8.
选择AddStack创建堆栈.
步骤3:扩展您的IAM角色要将CloudWatchLogs用于AWSOpsWorks实例,需要扩展实例所用的IAM角色.
1.
通过以下网址打开IAM控制台:https://console.
aws.
amazon.
com/iam/.
2.
在导航窗格中,选择Policies和CreatePolicy.
3.
在存储库的创建策略页面,在创建您自己的策略中,选择Select.
有关创建自定义策略的更多信息,请参阅适用于AmazonEC2的IAM策略中的适用于Linux实例的AmazonEC2用户指南.
4.
在ReviewPolicy页面上,为PolicyName键入策略的名称.
5.
对于PolicyDocument,粘贴以下策略:{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents","logs:DescribeLogStreams"26AmazonCloudWatchLogs用户指南快速入门:使用AWSOpsWorks安装代理],"Resource":["arn:aws:logs:*:*:*"]}]}6.
选择CreatePolicy.
7.
在导航窗格中,选择角色,然后在内容窗格中为角色名称中,选择AWSOpsWorks堆栈使用的实例角色的名称.
在堆栈设置中,可以看到堆栈使用的角色(默认角色为aws-opsworks-ec2-role.
)Note选择角色名称,而不是选中复选框.
8.
在Permissions选项卡上的ManagedPolicies下,选择AttachPolicy.
9.
在附加策略页面上的表标题(筛选条件和搜索旁边)中,选择策略类型和客户管理的策略.
10.
适用于客户管理的策略,选择您在上面创建的IAM策略,然后选择附加策略.
有关IAM用户和策略的更多信息,请参阅IAM用户和组和管理IAM策略中的IAM用户指南.
步骤4:添加层1.
打开AWSOpsWorks控制台(位于https://console.
aws.
amazon.
com/opsworks/.
2.
在导航窗格中,选择Layers.
3.
在内容窗格中,选择一个层,然后选择Addlayer.
4.
在OpsWorks选项卡上,为Layertype选择Custom.
5.
对于Name和Shortname字段,输入层的长名称和短名称,然后选择Addlayer.
6.
在存储库的诀窍选项卡,在CustomChefP,有几个标题—设置、配置、部署、Undeploy,和关闭—对应于AWSOpsWorks生命周期事件.
AWSOpsWorks会在实例生命周期的这些关键点触发这些事件,该生命周期运行相关配方.
Note如果上述标题不可见,请在CustomChefRecipes下,选择edit.
7.
Enter日志#配置,日志#安装旁边设置中,选择+将其添加到列表中,然后选择Save.
AWSOpsWorks在实例启动之后,即在此层的每个新实例上运行此配方.
步骤5:添加实例层仅控制如何配置实例.
现在您需要将一些实例添加到层并启动它们.
1.
打开AWSOpsWorks控制台(位于https://console.
aws.
amazon.
com/opsworks/.
2.
在导航窗格中,选择Instances,然后在您的层下选择+Instance.
3.
接受默认设置,然后选择AddInstance以将该实例添加到层.
4.
在该行的Actions(操作)列中,单击start(启动)以启动该实例.
AWSOpsWorks启动新EC2实例并配置CloudWatchLogs.
在实例就绪后,其状态更改为联机.
步骤6:查看您的日志在代理运行一段时间后,可以在CloudWatch控制台看到新创建的日志组和日志流.
27AmazonCloudWatchLogs用户指南报告CloudWatchLogs代理状态有关更多信息,请参阅查看发送到CloudWatchLogs的日志数据(p.
51).
报告CloudWatchLogs代理状态可以使用以下步骤报告EC2实例上CloudWatchLogs代理的状态.
报告代理状态1.
连接到您的EC2实例.
有关更多信息,请参阅.
连接到您的实例中的适用于Linux实例的AmazonEC2用户指南.
有关连接问题的更多信息,请参阅排查实例的连接问题中的适用于Linux实例的AmazonEC2用户指南2.
在命令提示窗口中,键入以下命令:sudoserviceawslogsstatus如果您运行的是AmazonLinux2,请键入以下命令:sudoserviceawslogsdstatus3.
检查/var/log/awslogs.
log文件中查看CloudWatchLogs代理的任何错误、警告或问题.
启动CloudWatchLogs代理如果EC2实例上的CloudWatchLogs代理在安装后没有自动启动,或者您停止了该代理,则可以使用以下过程启动代理.
启动代理1.
连接到您的EC2实例.
有关更多信息,请参阅.
连接到您的实例中的适用于Linux实例的AmazonEC2用户指南.
有关连接问题的更多信息,请参阅排查实例的连接问题中的适用于Linux实例的AmazonEC2用户指南.
2.
在命令提示窗口中,键入以下命令:sudoserviceawslogsstart如果您运行的是AmazonLinux2,请键入以下命令:sudoserviceawslogsdstart停止CloudWatchLogs代理可以使用以下步骤停止EC2实例上的CloudWatchLogs代理.
停止代理1.
连接到您的EC2实例.
有关更多信息,请参阅.
连接到您的实例中的适用于Linux实例的AmazonEC2用户指南.
有关连接问题的更多信息,请参阅排查实例的连接问题中的适用于Linux实例的AmazonEC2用户指南.
28AmazonCloudWatchLogs用户指南快速入门:使用AWSCloudFormation开始使用CloudWatchLogs2.
在命令提示窗口中,键入以下命令:sudoserviceawslogsstop如果您运行的是AmazonLinux2,请键入以下命令:sudoserviceawslogsdstop快速入门:使用AWSCloudFormation开始使用CloudWatchLogsAWSCloudFormation使您能够以JSON格式描述和预置AWS资源.
此方法的优点包括能够将AWS资源集合作为一个单元进行管理,并且可以轻松地跨区域复制您的AWS资源.
使用AWSCloudFormation预配置AWS时,可以创建描述要使用的AWS资源的模板.
以下示例是一个模板代码段,它创建一个日志组和一个指标筛选器,可以统计404个事件,并将此计数发送到日志组.
"WebServerLogGroup":{"Type":"AWS::Logs::LogGroup","Properties":{"RetentionInDays":7}},"404MetricFilter":{"Type":"AWS::Logs::MetricFilter","Properties":{"LogGroupName":{"Ref":"WebServerLogGroup"},"FilterPattern":"[ip,identity,user_id,timestamp,request,status_code=404,size,.
.
.
]","MetricTransformations":[{"MetricValue":"1","MetricNamespace":"test/404s","MetricName":"test404Count"}]}}这是一个基本示例.
您可以使用AWSCloudFormation设置更丰富的CloudWatchLogs部署.
有关模板示例的更多信息,请参阅AmazonCloudWatchLogs模板代码段中的AWSCloudFormation用户指南.
有关入门的更多信息,请参阅AWSCloudFormation入门中的AWSCloudFormation用户指南.
29AmazonCloudWatchLogs用户指南支持的日志和发现的字段CloudWatchLogsInsights分析日志数据通过使用CloudWatchLogsInsights,您可以交互地搜索和分析您在亚马逊CloudWatchLogs中的日志数据.
您可以执行查询,以帮助您更高效且有效地响应运营问题.
如果出现问题,您可以使用CloudWatchLogsInsights识别潜在原因并验证已部署的修复.
CloudWatchLogsInsights包括一种专门构建的查询语言以及一些简单但功能强大的命令.
CloudWatchLogs见解提供示例查询、命令描述、查询自动完成和日志字段发现功能来帮助您入门.
示例查询涉及几种类型的AWS服务日志.
CloudWatchLogs见解会自动发现来自AWS服务(如亚马逊Route53、AWSLambda、AWSCloudTrail和AmazonVPC)的日志中的字段,以及任何发出日志事件作为JSON的应用程序或自定义日志中的字段.
您可以使用CloudWatchWatchLogsInsights搜索在2018年11月5日或之后发送到CloudWatchLogs的日志数据.
单个请求可以查询最多20个日志组.
如果查询未在15分钟内完成,则会超时.
查询结果在7天内可用.
您可以保存已创建的查询.
这可以帮助您在需要时运行复杂的查询,而无需每次要运行它们时都重新创建它们.
CloudWatchLogsInsights查询根据所查询的数据量产生费用.
有关更多信息,请参阅AmazonCloudWatch定价.
Important如果您的网络安全团队不允许使用Web套接字,则您目前无法访问CloudWatch控制台的CloudWatch日志见解部分.
您可以使用API使用CloudWatchLogsInsights查询功能.
有关更多信息,请参阅.
StartQuery中的AmazonCloudWatchLogsAPI参考.
目录支持的日志和发现的字段(p.
30)教程:运行和修改示例查询(p.
32)教程:使用聚合函数运行查询(p.
34)教程:运行生成按日志字段分组的可视化的查询(p.
34)教程:运行生成时间序列可视化的查询(p.
35)CloudWatchLogsInsights查询语法(p.
35)在图形中可视化日志数据(p.
44)保存并重新运行CloudWatchLogsInsights查询(p.
45)查询示例(p.
47)将查询添加到控制面板或导出查询结果(p.
49)查看正在运行的查询或查询历史记录(p.
50)支持的日志和发现的字段CloudWatchLogsInsights支持所有日志类型.
对于发送到CloudWatchLogs的每个日志,会自动生成五个系统字段:30AmazonCloudWatchLogs用户指南JSON日志中的字段@message包含原始未解析的日志事件.
这等同于message字段中的InputLogevent.
@timestamp包含日志事件的timestamp字段中包含的事件时间戳.
这等同于timestamp字段中的InputLogevent.
@ingestionTime包含CloudWatchLogs接收日志事件的时间.
@logStream包含已将日志事件添加到的日志流的名称.
日志流用于按生成日志的相同进程对日志进行分组.
@log是account-id:log-group-name形式的日志组标识符.
这在查询多个日志组时非常有用,可以确定特定事件属于哪个日志组.
CloudWatchLogsInsights插入@符号在其生成的字段的开头.
对于许多日志类型,CloudWatchLogs还会自动发现日志中包含的日志字段.
这些自动发现字段如下表所示.
对于具有CloudWatchWatchLogsInsights不会自动发现的字段的其他类型的日志,您可以使用parse命令来提取并创建临时字段以用于该查询中.
有关更多信息,请参阅CloudWatchLogsInsights查询语法(p.
35).
如果发现的日志字段的名称以@字符时,CloudWatchLogs见解会显示其附加@附加到开头.
例如,如果日志字段名称为@example.
com,则此字段名称显示为@@example.
com.
日志类型发现的日志字段AmazonVPC流日志@timestamp,@logStream,@message,accountId,endTime,interfaceId,logStatus,startTime,version,action,bytes,dstAddr,dstPort,packets,protocol,srcAddr,srcPortRoute53日志@timestamp,@logStream,@message,edgeLocation,hostZoneId,protocol,queryName,queryTimestamp,queryType,resolverIp,responseCode,versionLambda日志@timestamp,@logStream,@message,@requestId,@duration,@billedDuration,@type,@maxMemoryUsed,@memorySize如果Lambda日志行包含X-Ray跟踪ID,则表明它还包括以下字段:@xrayTraceId和@xraySegmentId.
CloudWatchLogs分析会自动发现Lambda日志中的日志字段,但仅适用于每个日志事件中的第一个嵌入式JSON片段.
如果Lambda日志事件包含多个JSON片段,您可以通过使用parse命令.
有关更多信息,请参阅JSON日志中的字段(p.
31).
CloudTrail日志JSON格式的日志有关更多信息,请参阅JSON日志中的字段(p.
31).
其他日志类型@timestamp,@ingestionTime,@logStream,@message,@log.
JSON日志中的字段CloudWatchLogsInsights使用点表示法表示法表示法表示嵌套的JSON字段.
在以下示例JSON事件中,JSON对象userIdentity中的字段type表示为userIdentity.
type.
JSON数组平展成字段名称和值的列表.
例如,要指定requestParameters.
instancesSet中第一个项的instanceId值,请使用requestParameters.
instancesSet.
items.
0.
instanceId.
31AmazonCloudWatchLogs用户指南教程:运行和修改示例查询CloudWatchWatchLogsInsights可以从JSON日志中提取最多1000个日志事件字段.
对于未提取的额外字段,您可以使用parse命令从消息字段中的原始未解析日志事件中解析这些字段.
{"eventVersion":"1.
0","userIdentity":{"type":"IAMUser","principalId":"EX_PRINCIPAL_ID","arn":"arn:aws:iam::123456789012:user/Alice","accessKeyId":"EXAMPLE_KEY_ID","accountId":"123456789012","userName":"Alice"},"eventTime":"2014-03-06T21:22:54Z","eventSource":"ec2.
amazonaws.
com","eventName":"StartInstances","awsRegion":"us-east-2","sourceIPAddress":"205.
251.
233.
176","userAgent":"ec2-api-tools1.
6.
12.
2","requestParameters":{"instancesSet":{"items":[{"instanceId":"i-abcde123"}]}},"responseElements":{"instancesSet":{"items":[{"instanceId":"i-abcde123","currentState":{"code":0,"name":"pending"},"previousState":{"code":80,"name":"stopped"}}]}}教程:运行和修改示例查询以下教程帮助您开始使用CloudWatchLogsInsights.
您运行示例查询,然后查看如何修改并重新运行它.
要运行查询,必须已在CloudWatchLogs中存储日志.
如果您已在使用CloudWatchLogs并设置了日志组和日志流,那么您已就绪可以开始了.
如果您使用AWSCloudTrail、AmazonRoute53或AmazonVPC等服务,并且您已设置日志从这些服务转到CloudWatch日志,则您也可能已有日志.
有关将日志发送到CloudWatchLogs的更多信息,请参阅开始使用CloudWatchLogs(p.
4).
CloudWatchLogsInsights中的查询返回日志事件中的一组字段,或返回对日志事件执行的数学聚合或其他操作的结果.
本教程演示了一个查询,该查询返回您的日志事件列表.
运行示例查询首先运行一个示例查询.
32AmazonCloudWatchLogs用户指南修改示例查询运行CloudWatchLogsInsights示例查询:1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
页面顶部附近是查询编辑器.
当您首次打开CloudWatchLogsInsights时,此框包含一个默认查询,该查询将返回20个最新的日志事件.
3.
在查询编辑器上方选择要查询的一个或多个日志组.
为了帮助查找日志组,您可以在搜索栏中输入文本,CloudWatchLogs会在搜索栏中显示匹配的日志组.
当您选择日志组时,CloudWatchLogsInsights会自动检测日志组数据中的字段.
要查看这些搜索到的字段,请选择页面右侧的字段.
4.
(可选)使用右上角的时间选择器选择要查询的时间段.
5.
选择运行.
显示此查询的结果.
在本示例中,结果是任何类型的最新20个日志事件.
CloudWatchLogs还显示此日志组中的日志事件随时间变化的条形图.
该条形图显示与您的查询和时间范围匹配的日志组中的事件分布情况,而不仅仅是表中显示的事件.
6.
要查看返回的日志事件之一的所有字段,请选择该日志事件左侧的图标.
修改示例查询在本教程中,您将修改示例查询以显示50个最新的日志事件.
如果您尚未运行上一教程,请立即运行.
本教程开始于前一教程结束的位置.
Note随CloudWatchLogsInsights提供的一些示例查询使用head或者tail命令而不是limit.
这些命令现正被弃用并已替换为limit.
在写入的所有查询中使用limit而非head或tail.
修改CloudWatchLogs见解示例查询1.
在查询编辑器中,将20更改为50,然后选择运行.
显示新查询的结果.
假设在默认时间范围内日志组中有足够的数据,则现在将列出50个日志事件.
2.
(可选)您可以保存已创建的查询.
要保存此查询,请选择保存.
有关更多信息,请参阅保存并重新运行CloudWatchLogsInsights查询(p.
45).
将筛选命令添加到示例查询本教程说明如何在查询编辑器中对查询进行更有效的更改.
在本教程中,您将基于检索的日志事件中的某个字段筛选上一个查询的结果.
如果您尚未运行前面的教程,请立即运行.
本教程开始于前一教程结束的位置.
将筛选命令添加到前一查询1.
确定要筛选的字段.
要查看CloudWatchLogs在过去15分钟内所选日志组中包含的日志事件内检测到的最常见字段,以及每个字段在其中出现的那些日志事件的百分比,请选择字段位于页面右侧.
要查看特定日志事件中包含的字段,请选择该行左侧的图标.
awsRegion字段可能会显示在您的日志事件中,具体取决于日志中的事件.
对于本教程的其余部分,我们使用awsRegion作为筛选字段,但如果该字段不可用,则您可以使用其他字段.
33AmazonCloudWatchLogs用户指南教程:使用聚合函数运行查询2.
在查询编辑器框中,将光标放在50之后,然后按Enter.
3.
在新行上,首先输入|(竖线字符)和一个空格.
CloudWatchLogsInsights查询中的命令必须用竖线字符分隔.
4.
输入filterawsRegion="us-east-1".
5.
选择运行.
此查询再次运行,现在将显示与新筛选器匹配的50个最新结果.
如果您筛选不同的字段并获得错误结果,则您可能需要对字段名称进行转义.
如果字段名称包含非字母数字字符,则必须在字段名称前后放入反引号字符(`),例如`error-code`="102".
必须将反引号字符用于包含非字母数字字符的字段名称,但不能用于值.
值始终包含在引号(")中.
CloudWatchLogsInsights包含强大的查询能力,包括若干命令和对于正则表达式、数学和统计操作的支持.
有关更多信息,请参阅CloudWatchLogsInsights查询语法(p.
35).
教程:使用聚合函数运行查询在本教程中,您运行一个查询,该查询将返回对日志记录执行聚合函数的结果.
运行聚合查询1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
在查询编辑器上方选择一个或多个日志组.
为了帮助查找日志组,请在搜索栏中输入文本,CloudWatchLogs会在搜索栏中显示匹配的日志组.
4.
在查询编辑器中,删除当前显示的查询,输入以下内容,然后选择运行.
将fieldname替换为页面右侧字段区域中显示的字段的名称.
statscount(*)byfieldname结果显示日志组中由CloudWatchLogs收到的且对于您选择的字段名称包含每个不同值的日志事件的数量.
教程:运行生成按日志字段分组的可视化的查询当您运行的查询使用stats函数按日志条目中一个或多个字段的值来分组所返回的结果,您可以按照条形图、饼图、折线图或堆叠面积图的格式查看结果.
这可帮助您更有效地将日志中的趋势可视化.
运行查询进行可视化1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
选择要查询的一个或多个日志组.
4.
在查询编辑器中,删除当前内容,然后输入以下stats函数并选择运行查询.
statscount(*)by@logStream|limit100对于每个日志流,结果显示日志组中的日志事件数量.
结果限制为100行.
5.
选择Visualization(可视化)选项卡.
34AmazonCloudWatchLogs用户指南教程:运行生成时间序列可视化的查询6.
选择线形图旁边的箭头,然后选择条形.
此时将出现条形图,其中显示日志组中各个日志流的条形图.
教程:运行生成时间序列可视化的查询当您运行的查询使用bin()函数按时间段对返回的结果进行分组,则您可以按照折线图、堆叠面积图、饼图或条形图的格式查看结果.
这有助于您更有效地将日志事件随时间变化的趋势可视化.
运行查询进行可视化1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
选择要查询的一个或多个日志组.
4.
在查询编辑器中,删除当前内容,然后输入以下stats函数并选择运行查询.
statscount(*)bybin(30s)结果显示日志组中由每30秒时间段接收CloudWatchLogs事件的数量.
5.
选择Visualization(可视化)选项卡.
结果显示为折线图.
要切换到条形图、饼图或堆叠面积图,请在Line位于图形的左上角.
CloudWatchLogsInsights查询语法CloudWatchLogsInsights支持您用来对日志组执行查询的查询语言.
每个查询可以包含一个或多个由Unix式竖线字符(|)分隔的查询命令.
支持六个查询命令以及许多支持函数和操作,包括正则表达式、算术运算、比较操作、数字函数、日期时间函数、字符串函数和通用函数.
此外还支持注释.
将忽略查询中以#字符开头的行.
以@符号是由CloudWatchLogs见解生成的.
有关CloudWatchLogs自动发现并生成的字段的更多信息,请参阅支持的日志和发现的字段(p.
30).
CloudWatchLogsInsights查询命令下表列出了六个支持的查询命令以及基本示例.
有关更强大的示例查询,请参阅查询示例(p.
47).
命令描述示例display指定要在查询结果中显示的字段.
如果您在查询中多次指定此命令,则仅使用您在最后一次的命令中指定的字段.
下面的示例使用字段@message并创建临时字段loggingType和loggingMessage以便在查询中使用.
它只过滤那些具有ERROR作为loggingType,但随后仅显示loggingMessage字段中的这些事件.
fields@message|parse@message"[*]*"asloggingType,loggingMessage|filterloggingType="ERROR"|displayloggingMessage35AmazonCloudWatchLogs用户指南支持的查询命令命令描述示例fields从日志事件检索指定的字段以用于显示.
您可以使用字段命令中的函数和操作来修改要显示的字段值,并创建新字段以供查询的其余部分使用.
以下示例显示字段:foo-bar、action,以及f3和f4日志组中的所有日志事件.
fields`foo-bar`,action,abs(f3-f4)下面的示例创建并显示一个临时字段opStatus.
的值opStatus每个日志条目的值的串联是Operation和StatusCode字段,这些值之间有一个连字符.
fieldsconcat(Operation,'-',StatusCode)asopStatus36AmazonCloudWatchLogs用户指南支持的查询命令命令描述示例filter根据一个或多个条件筛选查询的结果.
您可以在filter命令.
有关更多信息,请参阅thesectioncalled"筛选命令中的匹配和正则表达式"(p.
39).
以下示例检索字段f1、f2,和f3的所有日志事件中出现的值超过2000的duration字段.
fieldsf1,f2,f3|filter(duration>2000)以下示例也是有效查询,但结果不会显示单独的字段.
相反,结果显示@timestamp和所有日志数据@message字段,对于持续时间超过2000的所有日志事件.
filter(duration>2000)以下示例检索字段f1和f2对于所有日志事件,其中f1是否为10或f3超过25.
fieldsf1,f2|filter(f1=10orf3>25)下一个示例返回日志事件,其中字段statusCode的值介于200和299之间.
fieldsf1|filterstatusCodelike/2\d\d/下一个示例返回日志事件,这些事件具有statusCode是否具有"300"、"400"或"500".
fields@timestamp,@message|filterstatusCodein[300,400,500]这个最后一个例子返回没有Type字段中的值为"foo"、"bar"或"1".
fields@timestamp,@message|filterTypenotin["foo","bar",1]stats根据日志字段的值计算聚合统计数据.
当您使用stats时,也可以使用by指定一个或多个条件,以便在计算统计数据时用于对数据进行分组.
支持若干统计运算符,包括sum()、avg()、count()、min(),和max().
以下示例计算的平均值f1针对的每个唯一值f2.
statsavg(f1)byf237AmazonCloudWatchLogs用户指南支持的查询命令命令描述示例sort对检索的日志事件排序.
同时支持升序(asc)和降序(desc).
以下示例根据的值按降序对返回的事件排序.
f1,并显示字段f1、f2,和f3.
fieldsf1,f2,f3|sortf1desclimit指定查询返回的日志事件数.
您可以使用此选项将结果限制为较少的数量,以查看一小部分相关结果.
您还可以使用值为介于1000到10000之间数字的limit,将控制台中显示的查询结果行数增加到超过默认值1000行的数量.
如果未指定限制,则查询默认为最多显示1000行.
以下示例根据的值按降序对事件排序.
@timestamp,并显示字段f1和f2按排序顺序排列的前25个事件.
在这种情况下,排序顺序是按最近的时间戳,因此会返回最新的25个事件.
sort@timestampdesc|limit25|displayf1,f2parse从日志字段提取数据,并创建一个或多个您可以在查询中进一步处理的临时字段.
parse同时接受glob表达式和正则表达式.
对于glob表达式,为parse命令提供一个常量字符串(用单引号或双引号括起来的字符),其中每个可变文本段都用星号(*)替换.
它们被提取到临时字段中,并按照位置顺序在as关键字之后给定别名.
在正则表达式两旁加上正斜杠(/).
在表达式中,要提取的匹配字符串的每个部分均包含在一个命名的捕获组中.
(.
*)是一个命名的捕获组示例,其中name为名称,.
*为模式.
使用此单个日志行作为示例:25May201910:24:39,474[ERROR]{foo=2,bar=data}Theerrorwas:DataIntegrityException以下两个parse表达式每个表达式执行以下操作:临时字段level、config,和exception被创建.
level的值为ERROR、config的值为{foo=2,bar=data},和exception的值为DataIntegrityException.
第一个示例使用glob表达式,第二个示例使用正则表达式.
parse@message"[*]*Theerrorwas:*"aslevel,config,exceptionparse@message/\[(\S+)\]\s+(s+Theerrorwas:(\S+)/以下示例使用正则表达式从日志字段@message提取临时字段user2、method2和latency2,并针对method2和user2的每个唯一组合返回平均延迟.
parse@message/user=(.
*),method:(.
*),latency:=(.
*)/|statsavg(latency2)bymethod2,user2有关上一个表中的查询命令的注意事项38AmazonCloudWatchLogs用户指南筛选命令中的匹配和正则表达式以下规则、准则和提示适用于上表中的查询命令.
在查询中命名的具有除@符号、句点(.
)和字母数字字符之外字符的任何日志字段都必须用反引号(`)字符括起来.
例如,foo-bar字段名称必须用反引号字符括起来,因为它包含非字母数字字符.
二者fields和display用于指定要在查询结果中显示的字段.
这两者之间的差异如下所示:您可以使用display命令来指定要在结果中显示的字段.
您可以将fields命令,其中包含作为关键字使用函数和日志事件中的字段创建新的临时字段.
例如,fieldsispresent(resolverArn)asisRes创建一个名为isRes,它可以在查询的其余部分中使用.
的值isRes是0或1,具体取决于是否resolverArn是日志事件中发现的字段.
如果您有多个fields命令,并且不包括display命令中指定的字段,则fieldscommandsaredisplayed.
如果您有多个display命令中指定的字段,仅包含最终displaycommandaredisplayed.
筛选命令中的匹配和正则表达式您可以使用比较运算符(布尔运算符(and、or,和not)和正则表达式filter命令.
您可以使用in测试集合成员资格.
将包含待检查元素的数组紧跟在in之后.
您可以将not与in.
字符串匹配使用in必须是完整的字符串匹配.
要按子字符串进行筛选,您可以使用like或者=~(等号后跟一个波浪符)filter命令.
对于子字符串匹配使用like或者=~,请将子字符串括起来使用双引号或单引号匹配.
要执行正则表达式匹配,请将表达式括起来使用正斜杠匹配.
查询将仅返回与您设置的条件匹配的日志事件.
示例以下三个示例返回f1中包含单词Exception的所有事件.
前两个示例使用正则表达式.
第三个示例使用子字符串匹配.
所有三个示例都区分大小写.
fieldsf1,f2,f3|filterf1like/Exception/fieldsf1,f2,f3|filterf1=~/Exception/fieldsf1,f2,f3|filterf1like"Exception"以下示例将对"异常"的搜索更改为不区分大小写.
fieldsf1,f2,f3|filterf1like/(i)Exception/以下示例使用正则表达式.
它返回f1恰好是单词Exception的所有事件.
查询不区分大小写.
fieldsf1,f2,f3|filterf1=~/^(i)Exception$/在查询中使用别名您可以使用as在查询中创建一个或多个别名.
fields、stats和sort命令中支持别名.
您可以为日志字段以及操作和函数的结果创建别名.
示例39AmazonCloudWatchLogs用户指南在查询中使用注释以下示例说明在查询命令中使用别名.
fieldsabs(myField)asAbsoluteValuemyField,myField2将myField的绝对值返回为AbsoluteValuemyField,还返回字段myField2.
statsavg(f1)asmyAvgF1|sortmyAvgF1desc将f1值的平均值计算为myAvgF1并按值的降序将它们返回.
在查询中使用注释您可以在查询中使用#字符注释掉行.
将忽略以#字符开头的行.
这可用于记录您的查询或暂时对某个调用忽略复杂查询的一部分,而不删除该行.
在以下示例中,将忽略查询的第二行.
fields@timestamp,@message#|filter@messagelike/delay/|limit20支持的操作和函数此查询语言支持多种类型的操作和函数,如下面的表中所示.
比较运算您可以在filter命令中使用比较运算并将其用作其他函数的参数.
比较运算接受所有数据类型作为参数,并返回布尔值结果.
布尔运算符您可以使用布尔运算符and、or,和not.
您只能在返回布尔值的函数中使用这些布尔运算符.
算术运算您可以在filter和fields命令中使用算术运算并将其用作其他函数的参数.
算术运算接受数值数据类型作为参数并返回数值结果.
操作描述a+b加a-b减a*b乘a/b除a^b指数.
2^3返回8a%b余额或模数.
10%3返回140AmazonCloudWatchLogs用户指南支持的操作和函数数值运算您可以在filter和fields命令中使用数值运算并将其用作其他函数的参数.
数值运算接受数值数据类型作为参数并返回数值结果.
操作结果类型描述abs(a:number)number绝对值.
ceil(a:number)number舍入到上限(大于a的值的最小整数).
floor(a:number)number舍入到下限(小于a的值的最大整数).
greatest(a:number,.
.
.
numbers:number[])number返回最大值.
least(a:number,.
.
.
numbers:number[])number返回最小值.
log(a:number)number自然对数.
sqrt(a:number)number平方根.
常规函数您可以在filter和fields命令中使用常规函数并将其用作其他函数的参数.
函数结果类型描述ispresent(fieldName:LogField)布尔值如果字段存在,则返回true.
coalesce(fieldName:LogField,.
.
.
fieldNames:LogField[])日志字段返回列表中的第一个非null值.
字符串函数您可以在filter和fields命令中使用字符串函数并将其用作其他函数的参数.
函数结果类型描述isempty(fieldName:string)布尔值如果字段缺失或为空字符串,则返回true.
isblank(fieldName:string)布尔值如果字段缺失或为空字符串,或只包含空格,则返回true.
concat(str:string,.
.
.
strings:string[])字符串连结字符串.
ltrim(str:string)ltrim(str:string,subStr:string)字符串删除字符串左侧的空格.
如果函数具有第二个字符串参数,它将从str左侧删除subStr的字符.
例41AmazonCloudWatchLogs用户指南支持的操作和函数函数结果类型描述如,ltrim("xyZfooxyZ","xyZ")返回"fooxyZ".
rtrim(str:string)rtrim(str:string,subStr:string)字符串删除字符串右侧的空格.
如果函数具有第二个字符串参数,它将从str右侧删除subStr的字符.
例如,rtrim("xyZfooxyZ","xyZ")返回"xyZfoo".
trim(str:string)trim(str:string,subStr:string)字符串删除字符串两端的空格.
如果函数具有第二个字符串参数,它将从str的两端删除subStr的字符.
例如,trim("xyZfooxyZ","xyZ")返回"foo".
strlen(str:string)number返回Unicode代码点中字符串的长度.
toupper(str:string)字符串将字符串转换为大写.
tolower(str:string)字符串将字符串转换为小写.
substr(str:string,startIndex:number)substr(str:string,startIndex:number,length:number)字符串返回从由数值参数指定的索引到字符串末尾的子字符串.
如果该函数具有二个参数,它包含要检索的子字符串的长度.
例如,substr("xyZfooxyZ",3,3)返回"foo".
replace(str:string,searchValue:string,replaceValue:string)字符串替换的所有searchValueinstr与replaceValue.
例如,replace("foo","o","0")返回"f00".
strcontains(str:string,searchValue:string)number如果str包含searchValue,则返回1,否则返回0.
日期时间函数您可以在filter和fields命令中使用日期时间函数并将其用作其他函数的参数.
您可以使用这些函数为使用聚合函数的查询创建时间存储桶.
作为日期时间函数的一部分,您可以使用包括一个数字的时间段,m表示分钟,h表示小时.
例如,10m为10分钟,1h为1小时.
函数结果类型描述bin(period:Period)时间戳将@timestamp的值舍入到指定的时间段,然后截断.
datefloor(timestamp:Timestamp,period:Period)时间戳将时间戳截断到指定的时间段.
例如,datefloor(@timestamp,1h)将@timestamp的所有值截断至小时底部.
42AmazonCloudWatchLogs用户指南支持的操作和函数函数结果类型描述dateceil(timestamp:Timestamp,period:Period)时间戳将时间戳向上舍入到指定的时间段,然后截断.
例如,dateceil(@timestamp,1h)将@timestamp的所有值截断至小时顶部.
fromMillis(fieldName:number)时间戳将输入字段解释为自Unix纪元以来的毫秒数并将其转换为时间戳.
toMillis(fieldName:Timestamp)number将在命名字段中找到的时间戳转换为表示自Unix纪元以来毫秒数的数字.
IP地址函数您可以在filter和fields命令中使用IP地址字符串函数并将其用作其他函数的参数.
函数结果类型描述isValidIp(fieldName:string)布尔值如果字段是有效的IPv4或IPv6地址,则返回true.
isValidIpV4(fieldName:string)布尔值如果字段是有效的IPv4地址,则返回true.
isValidIpV6(fieldName:string)布尔值如果字段是有效的IPv6地址,则返回true.
isIpInSubnet(fieldName:string,subnet:string)布尔值如果字段是指定的v4或v6子网中有效的IPv4或IPv6地址,则返回true.
指定子网时,请使用CIDR表示法,例如192.
0.
2.
0/24或2001:db8::/32.
isIpv4InSubnet(fieldName:string,subnet:string)布尔值如果字段是指定的v4子网中有效的IPv4地址,则返回true.
指定子网时,请使用CIDR表示法,例如192.
0.
2.
0/24.
isIpv6InSubnet(fieldName:string,subnet:string)布尔值如果字段是指定的v6子网中有效的IPv6地址,则返回true.
指定子网时,请使用CIDR表示法,例如2001:db8::/32.
统计聚合函数您可以在stats命令中使用聚合函数并将其用作其他函数的参数.
函数结果类型描述avg(fieldName:NumericLogField)number指定的字段中值的平均值.
count()count(fieldName:LogField)number计算日志事件.
count()(或count(*))会计算查询返回的所有事件,而count(fieldName)对包含所指定字段名称的所有记录计数.
count_distinct(fieldName:LogField)number返回字段的唯一值的数量.
如果字段具有非常高的基数(包含许多唯一值),则count_distinct返回的值只是一个近似值.
43AmazonCloudWatchLogs用户指南在图形中可视化日志数据函数结果类型描述max(fieldName:LogField)日志字段值所查询的日志中此日志字段的值的最大值.
min(fieldName:LogField)日志字段值所查询的日志中此日志字段的值的最小值.
pct(fieldName:LogFieldValue,percent:number)日志字段值百分位数指示某个值在数据集中的相对位置.
例如,pct(@duration,95)返回@duration值,95%的@duration值低于此值,5%的值高于此值.
stddev(fieldName:NumericLogField)number指定的字段中值的标准偏差.
sum(fieldName:NumericLogField)number指定的字段中值的总和.
统计非聚合函数您可以在stats命令中使用非聚合函数并将其用作其他函数的参数.
函数结果类型描述earliest(fieldName:LogField)日志字段从查询的日志中具有最早时间戳的日志事件返回fieldName的值.
latest(fieldName:LogField)日志字段从查询的日志中具有最晚时间戳的日志事件返回fieldName的值.
sortsFirst(fieldName:LogField)日志字段返回在查询的日志中排在第一位的fieldName的值.
sortsLast(fieldName:LogField)日志字段返回在查询的日志中排在最后一位的fieldName的值.
在图形中可视化日志数据您可以使用条形图、折线图和堆叠面积图等可视化,更高效地确定日志数据中的模式.
CloudWatchLogs见解为使用stats函数和一个或多个聚合函数.
有关更多信息,请参阅AggregationFunctionsintheStatsCommand(p.
43).
所有此类查询都可以生成条形图.
如果查询使用bin()函数,按一个字段对数据随时间的变化进行分组,您还可以查看折线图和堆叠面积图.
主题可视化时间序列数据(p.
44)可视化按字段分组的日志数据(p.
45)可视化时间序列数据时间序列可视化适用于具有以下特征的查询:此查询包含一个或多个聚合函数.
有关更多信息,请参阅AggregationFunctionsintheStatsCommand(p.
43).
44AmazonCloudWatchLogs用户指南可视化按字段分组的日志数据此查询使用bin()函数按一个字段对数据分组.
这些查询可以生成折线图、堆叠面积图、条形图和饼图.
示例有关完整的教程,请参阅thesectioncalled"教程:运行生成时间序列可视化的查询"(p.
35).
以下是更多适用于时间序列可视化的示例查询.
以下查询将生成myfield1字段的平均值的可视化(每5分钟创建一个数据点).
每个数据点都是前一个五分钟的日志中的myfield1值的平均值的聚合.
statsavg(myfield1)bybin(5m)以下查询根据不同字段生成三个值的可视化(每5分钟创建一个数据点).
由于查询包含聚合函数并使用bin()作为分组字段,因此生成了可视化.
statsavg(myfield1),min(myfield2),max(myfield3)bybin(5m)折线图和堆叠面积图限制如果查询聚合日志条目信息但不使用bin()函数,则可以生成条形图.
但是,这种查询无法生成折线图或堆叠面积图.
有关这些查询类型的更多信息,请参阅thesectioncalled"可视化按字段分组的日志数据"(p.
45).
可视化按字段分组的日志数据您可以为使用stats函数以及一个或多个聚合函数的查询生成条形图.
有关更多信息,请参阅AggregationFunctionsintheStatsCommand(p.
43).
要查看可视化,请运行查询.
接下来,选择可视化选项卡,选择行旁边的箭头,然后选择条形图.
在条形图中,可视化限制为最多100个条形.
示例有关完整的教程,请参阅thesectioncalled"教程:运行生成按日志字段分组的可视化的查询"(p.
34).
以下部分包括更多适用于按字段可视化的示例查询.
以下VPC流日志查询针对每个目标地址,查找每个会话所传输的平均字节数.
statsavg(bytes)bydstAddr您还可以生成每个结果值包含多个条形图的图表.
例如,以下VPC流日志查询针对每个目标地址,查找每个会话所传输的平均字节数和最大字节数.
statsavg(bytes),max(bytes)bydstAddr以下查询为每个查询类型查找AmazonRoute53查询日志的数量.
statscount(*)byqueryType保存并重新运行CloudWatchLogsInsights查询创建查询后,可以保存查询,以便稍后再次运行查询.
保存的查询将以文件夹结构形式保留下来,以帮助您保持有序状态.
每个账户每个区域可以保存多达1000个CloudWatchLogsInsights查询.
45AmazonCloudWatchLogs用户指南保存和重新运行查询要保存查询,您必须登录到具有logs:PutQueryDefinition权限的角色.
要查看已保存查询的列表,您必须登录到具有logs:DescribeQueryDefinitions权限的角色.
保存查询1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
在查询编辑器中,创建查询.
4.
选择Save.
如果您没有看到Save按钮,您需要更改为CloudWatchLogs控制台的新设计.
为此,请执行以下操作:a.
在导航窗格中,选择Loggroups(日志组).
b.
选择试用新设计.
c.
在导航窗格中,选择Insights,然后返回到此过程的第3步.
5.
输入查询的名称.
6.
(可选)选择要保存查询的文件夹.
选择新建以创建文件夹.
如果创建新文件夹,则可以在文件夹名称中使用斜杠(/)字符来定义文件夹结构.
例如,命名新文件夹folder-level-1/folder-level-2会创建一个名为folder-level-1的顶级文件夹,并在该文件夹中创建另一个名为folder-level-2的文件夹.
查询保存在folder-level-2中.
7.
(可选)更改查询的日志组或查询文本.
8.
选择Save.
运行保存的查询1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
在右侧,选择查询.
4.
从已保存的查询列表中选择您的查询.
它显示在查询编辑器中.
5.
选择运行.
保存已保存查询的新版本1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
在右侧,选择查询.
4.
从已保存的查询列表中选择您的查询.
它显示在查询编辑器中.
5.
修改查询.
如果您需要运行它来检查您的工作,请选择运行查询.
6.
准备好保存新版本后,选择操作、另存为.
7.
输入查询的名称.
8.
(可选)选择要保存查询的文件夹.
选择新建以创建文件夹.
如果创建新文件夹,则可以在文件夹名称中使用斜杠(/)字符来定义文件夹结构.
例如,命名新文件夹folder-level-1/folder-level-2会创建一个名为folder-level-1的顶级文件夹,并在该文件夹中创建另一个名为folder-level-2的文件夹.
查询保存在folder-level-2中.
9.
(可选)更改查询的日志组或查询文本.
10.
选择Save.
要删除查询,您必须登录到具有logs:DeleteQueryDefinition权限的角色.
46AmazonCloudWatchLogs用户指南查询示例编辑或删除已保存的查询1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
在右侧,选择查询.
4.
从已保存的查询列表中选择您的查询.
它显示在查询编辑器中.
5.
选择操作、编辑或操作、删除.
查询示例本部分包含的示例查询显示CloudWatchLogsInsights的强大功能.
常规查询查找25个最近添加的日志事件.
fields@timestamp,@message|sort@timestampdesc|limit25获得每小时异常数量的列表.
filter@messagelike/Exception/|statscount(*)asexceptionCountbybin(1h)|sortexceptionCountdesc获取并非异常的日志事件的列表.
fields@message|filter@messagenotlike/Exception/查询Lambda日志确定超额配置的内存量.
filter@type="REPORT"|statsmax(@memorySize/1000/1000)asprovisonedMemoryMB,min(@maxMemoryUsed/1000/1000)assmallestMemoryRequestMB,avg(@maxMemoryUsed/1000/1000)asavgMemoryUsedMB,max(@maxMemoryUsed/1000/1000)asmaxMemoryUsedMB,provisonedMemoryMB-maxMemoryUsedMBasoverProvisionedMB创建延迟报告.
filter@type="REPORT"|statsavg(@duration),max(@duration),min(@duration)bybin(5m)AmazonVPC流日志的查询查找跨主机的前15个数据包传输:statssum(packets)aspacketsTransferredbysrcAddr,dstAddr|sortpacketsTransferreddesc|limit1547AmazonCloudWatchLogs用户指南查询示例查找给定子网上传输字节数最多的15个主机.
filterisIpv4InSubnet(srcAddr,"192.
0.
2.
0/24")|statssum(bytes)asbytesTransferredbydstAddr|sortbytesTransferreddesc|limit15查找使用UDP作为数据传输协议的IP地址.
filterprotocol=17|statscount(*)bysrcAddr在捕获时段内查找跳过流记录的IP地址.
filterlogStatus="SKIPDATA"|statscount(*)bybin(1h)ast|sortt查询Route53日志查找每小时每种查询类型的记录分布.
statscount(*)byqueryType,bin(1h)查找具有最高请求数的10个DNS解析程序.
statscount(*)asnumRequestsbyresolverIp|sortnumRequestsdesc|limit10按服务器未能完成DNS请求的域和子域查找记录数.
filterresponseCode="SERVFAIL"|statscount(*)byqueryName查询CloudTrail日志查找每项服务、事件类型和AWS区域的日志条目数.
statscount(*)byeventSource,eventName,awsRegion查找给定AWS区域中已启动或已停止的AmazonEC2主机.
filter(eventName="StartInstances"oreventName="StopInstances")andregion="us-east-2"查找新建的IAM用户的AWS区域、用户名和ARN.
filtereventName="CreateUser"|fieldsawsRegion,requestParameters.
userName,responseElements.
user.
arn查找在调用APIUpdateTrail时发生异常的记录数.
48AmazonCloudWatchLogs用户指南将查询添加到控制面板或导出查询结果filtereventName="UpdateTrail"andispresent(errorCode)|statscount(*)byerrorCode,errorMessage解析命令的示例使用glob表达式来从日志字段@message提取临时字段@user、@method和@latency,并对于@method和@user的每个唯一组合返回平均延迟.
parse@message"user=*,method:*,latency:=*"as@user,@method,@latency|statsavg(@latency)by@method,@user使用正则表达式来从日志字段@message提取临时字段@user2、@method2和@latency2,并对于@method2和@user2的每个唯一组合返回平均延迟.
parse@message/user=(.
*),method:(.
*),latency:=(statsavg(latency2)by@method2,@user2提取临时字段loggingTime、loggingType和loggingMessage,筛选出包含ERROR或INFO字符串的日志记录,然后仅显示包含ERROR字符串的事件的loggingMessage和loggingType字段.
FIELDS@message|PARSE@messageasloggingTime,loggingType,loggingMessage|FILTERloggingTypeIN["ERROR","INFO"]|DISPLAYloggingMessage,loggingType="ERROR"asisError将查询添加到控制面板或导出查询结果在运行查询后,您可以将查询添加到CloudWatch控制面板,或将结果复制到剪贴板.
添加到控制面板的查询会在您每次加载控制面板以及每次控制面板刷新时运行.
这些查询计入10个并发CloudWatchLogsInsights查询的限制.
将查询结果添加到控制面板1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
选择一个或多个日志组并运行查询.
4.
选择添加到控制面板.
5.
选择控制面板,或者选择新建为查询结果创建控制面板.
6.
选择要用于查询结果的小部件类型.
7.
输入小部件的名称.
8.
选择添加到控制面板.
将查询结果复制到剪贴板或者下载查询结果1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
选择一个或多个日志组并运行查询.
49AmazonCloudWatchLogs用户指南查看正在运行的查询或查询历史记录4.
选择导出结果,然后选择所需的选项.
查看正在运行的查询或查询历史记录您可以查看当前正在进行的查询以及您最近的查询历史记录.
当前运行的查询包括您已添加到控制面板的查询.
您受限于每个账户10个并发CloudWatchLogsInsights查询,包括添加到控制面板的查询.
查看您的最近查询历史记录1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Insights.
3.
选择历史记录(如果您使用的是CloudWatchLogs控制台的新设计).
如果您使用的是旧设计,请选择操作、查看此账户的查询历史记录.
此时将显示最近查询的列表.
您可以通过选择查询并选择运行,再次运行其中的任何一个查询.
UNDER状态,CloudWatchLogs会显示正在进行中查询当前正在运行的任何查询.
50AmazonCloudWatchLogs用户指南创建日志组使用日志组和日志流日志流是共享同一个源的一系列日志事件.
CloudWatchLogs中每个独立的日志源构成一个独立的日志流.
日志组是一组具有相同保留期、监控和访问控制设置的日志流.
您可以定义日志组并指定向各组中放入哪些流.
对可属于一个日志组的日志流数没有限制.
使用本部分中的过程处理日志组和日志流.
在CloudWatchLogs中创建日志组使用AmazonCloudWatchLogs用户指南前面章节中的步骤在AmazonEC2实例上安装AmazonCloudWatchLogs代理时,该过程中也将创建日志组.
您还可以直接在CloudWatch控制台中创建日志组.
创建日志组1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择Actions(操作),然后选择Createloggroup(创建日志组).
4.
输入日志组的名称,然后选择Createloggroup(创建日志组).
将日志发送到日志组CloudWatchLogs会自动接收来自多个AWS服务的日志事件.
您还可以使用以下方法之一将其他日志事件发送到CloudWatchLogs:CloudWatch代理—统一的CloudWatch代理可以将指标和日志发送到CloudWatchLogs.
有关安装和使用CloudWatch代理的更多信息,请参阅使用CloudWatch代理从AmazonEC2实例和本地服务器中收集指标和日志中的AmazonCloudWatch用户指南.
AWSCLI-推出日志事件将日志事件批量上传到CloudWatchLogs.
以编程方式—PutLogEventsAPI允许您以编程方式将日志事件批量上传到CloudWatchLogs.
查看发送到CloudWatchLogs的日志数据您可以查看和滚动浏览CloudWatch日志代理发送到CloudWatchLogs的每一个日志流的日志数据.
您可以指定要查看的日志数据的时间范围.
查看日志数据1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
对于LogGroups,选择日志组以查看日志流.
4.
在日志组列表中,选择要查看的日志组的名称.
5.
从日志流列表中,选择要查看的日志流的名称.
6.
要更改日志数据的显示方式,请执行下列操作之一:51AmazonCloudWatchLogs用户指南使用筛选条件模式搜索日志数据要展开单个日志事件,请选择该日志事件旁边的箭头.
要展开所有日志事件并以纯文本形式查看它们,请在日志事件列表上方选择Text.
要筛选日志事件,请在搜索字段中键入所需的搜索筛选条件.
有关更多信息,请参阅使用筛选条件从日志事件创建指标(p.
62).
要查看指定日期和时间范围的日志数据,请在搜索筛选条件旁边,选择日期和时间旁的箭头.
要指定日期和时间范围,请选择Absolute(绝对).
要选择预定义的分钟数、小时数、天数或周数,请选择Relative(相对).
还可以在UTC和本地时区之间切换.
使用筛选条件模式搜索日志数据可以使用筛选条件和模式语法(p.
63)搜索日志数据.
您可以搜索日志组中的所有日志流,也可以使用AWSCLI搜索特定日志流.
每次搜索运行时,都会返回到所找到数据的第一页,并且使用令牌来检索下一页数据或继续搜索.
如果没有返回任何结果,可以继续搜索.
您可以设置要查询的时间范围来限制搜索范围.
您可以从较大范围开始,看看感兴趣的日志行在何处,然后缩短时间范围在相应时间范围内查看您感兴趣的日志.
您还可以通过从日志提取的指标直接定向至相应日志.
使用控制台搜索日志条目您可以使用控制台搜索满足指定条件的日志条目.
使用控制台搜索日志1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
对于LogGroups,选择包含要搜索的日志流的日志组的名称.
4.
对于LogStreams,选择要搜索的日志流的名称.
5.
在Logevents(日志事件)下,输入要使用的筛选条件语法.
使用控制台搜索某个时间范围的所有日志条目1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
对于LogGroups,选择包含要搜索的日志流的日志组的名称.
4.
选择Searchloggroup(搜索日志组).
5.
对于Logevents(日志事件),请选择日期和时间范围,然后输入筛选条件语法.
使用AWSCLI搜索日志条目您可以使用AWSCLI搜索满足指定条件的日志条目.
使用AWSCLI搜索日志条目在命令提示符处,运行以下filter-log-events命令.
使用--filter-pattern将结果限制为指定的筛选条件模式,并使用--log-stream-names将结果限制为指定的日志流.
awslogsfilter-log-events--log-group-namemy-group[--log-stream-namesLIST_OF_STREAMS_TO_SEARCH][--filter-patternVALID_METRIC_FILTER_PATTERN]52AmazonCloudWatchLogs用户指南从指标定向至日志使用AWSCLI搜索给定时间范围内的日志条目在命令提示符处,运行以下filter-log-events命令:awslogsfilter-log-events--log-group-namemy-group[--log-stream-namesLIST_OF_STREAMS_TO_SEARCH][--start-time1482197400000][--end-time1482217558365][--filter-patternVALID_METRIC_FILTER_PATTERN]从指标定向至日志您可以从控制台的其他部分转到特定的日志条目.
从控制面板小部件转到日志1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Dashboards.
3.
选择控制面板.
4.
在小部件上,选择Viewlogs图标,然后选择Viewlogsinthistimerange.
如果存在多个指标筛选条件,请从列表中选择一个.
如果有更多指标筛选条件,超出列表中可以显示的数量,请选择Moremetricfilters,然后选择或搜索指标筛选条件.
从指标转到日志1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Metrics.
3.
在Allmetrics选项卡上的搜索字段中,键入指标的名称,然后按Enter.
4.
从搜索结果中选择一个或多个指标.
5.
选择Actions、Viewlogs.
如果存在多个指标筛选条件,请从列表中选择一个.
如果有更多指标筛选条件,超出列表中可以显示的数量,请选择Moremetricfilters,然后选择或搜索指标筛选条件.
Troubleshooting搜索耗时太长如果有大量日志数据,搜索可能需要很长时间才能完成.
要提高搜索速度,可以执行以下操作:如果使用AWSCLI,则可以将搜索限制为仅搜索您感兴趣的日志流.
例如,如果日志组有1000个日志流,但您只需要查看三个已知相关的日志流,则可以使用AWSCLI将搜索限制为仅搜索相应日志组中的那三个日志流.
使用更短、更细粒度的时间范围,从而减少搜索的数据量和加快查询速度.
更改CloudWatchLogs中的日志数据保留期默认情况下,日志数据将无限期存储在CloudWatchLogs中.
但是,您可以配置要在日志组中存储日志数据多长时间.
存储时间超过当前保留期设置的所有数据将自动删除.
您可以随时更改每个日志组的日志保留期.
更改日志保留期设置1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
53AmazonCloudWatchLogs用户指南标记日志组2.
在导航窗格中,选择Loggroups(日志组).
3.
找到要更新的日志组.
4.
在该日志组的ExpireEventsAfter列中,选择当前保留期设置,例如NeverExpire.
5.
在EditRetention(编辑保留期)中,为Retention(保留期)选择日志保留期值,然后选择Ok(确定).
标记AmazonCloudWatchLogs中的日志组您可以将自己的元数据分配给您在AmazonCloudWatchLogs中创建的日志组,形式为标签.
标签是您为日志组定义的键值对.
使用标签是管理AWS资源和组织数据(包括账单数据)的一种简单却强有力的方式.
目录有关标签的基本知识(p.
54)使用标签跟踪成本(p.
54)标签限制(p.
54)使用AWSCLI标记日志组(p.
55)使用CloudWatchLogsAPI标记日志组(p.
55)有关标签的基本知识您可使用AWSCLI或CloudWatchLogsAPI完成以下任务:在创建日志组时向其添加标签.
向现有日志组添加标签.
列出日志组的标签.
从日志组删除标签.
您可以使用标签对日志组进行分类.
例如,您可以按用途、所有者或环境对它们进行分类.
由于您定义每个标签的键和值,因此您可以创建一组自定义类别来满足您的特定需求.
例如,您可以定义一组标签来帮助您按所有者和关联应用程序跟踪日志组.
以下几个标签示例:项目:项目项目名称拥有者:名称目的:负载测试应用程序:应用程序名称Envention(环境生产使用标签跟踪成本您可以使用标签对AWS成本进行分类和跟踪.
当您将标签应用于AWS资源(包括日志组)时,您的AWS成本分配报告将包括按标签汇总的使用率和成本.
您可以设置代表业务类别(例如成本中心、应用程序名称或所有者)的标签,以便整理多种服务的成本.
有关更多信息,请参阅.
使用定制账单报告的成本分配标签中的AWSBillingandCostManagement用户指南.
标签限制以下限制适用于标签.
54AmazonCloudWatchLogs用户指南使用AWSCLI标记日志组基本限制每个日志组的最大标签数为50.
标签键和值要区分大小写.
无法更改或编辑已删除日志组的标签.
标签键限制每个标签键必须是唯一的.
如果您添加的标签具有已使用的键,则您的新标签将覆盖现有键值对.
标签键不能以aws:开头,因为此前缀将预留以供AWS使用.
AWS将代表您创建以此前缀开头的标签,但您不能编辑或删除这些标签.
标签键的长度必须介于1和128个Unicode字符之间.
标签键必须由以下字符组成:Unicode字母、数字、空格和以下特殊字符:标签值限制标签值的长度必须介于0和255个Unicode字符之间.
标签值可以为空.
否则,它们必须由以下字符组成:Unicode字母、数字、空格和以下任意特殊字符:使用AWSCLI标记日志组您可以使用AWSCLI添加、列出和删除标签.
有关示例,请参阅以下文档:create-log-group创建日志组.
您可以选择在创建日志组时添加标签.
tag-log-group为指定的日志组添加或更新标签.
list-tags-log-group列出指定日志组的标签.
untag-log-group删除指定日志组的标签.
使用CloudWatchLogsAPI标记日志组您可以使用CloudWatchLogsAPI添加、列出和删除标签.
有关示例,请参阅以下文档:CreateLogGroup创建日志组.
您可以选择在创建日志组时添加标签.
TagLogGroup为指定的日志组添加或更新标签.
ListTagsLogGroup列出指定日志组的标签.
UntagLogGroup删除指定日志组的标签.
55AmazonCloudWatchLogs用户指南使用AWSKMS加密日志数据使用AWSKeyManagementService加密CloudWatchLogs中的日志数据日志组数据始终在CloudWatchLogs中加密.
您可以选择使用AWSKeyManagementService进行此加密.
如果这样做,则使用AWSKMS客户主密钥(CMK)进行加密.
在创建日志组时或者在日志组已存在的情况下,通过将CMK与日志组相关联,在日志组级别启用使用AWSKMS的加密.
ImportantCloudWatchLogs现在支持加密上下文,使用kms:EncryptionContext:aws:logs:arn作为密钥,日志组的ARN将作为该密钥的值.
如果您的日志组已使用CMK加密,并且您希望将CMK限制在单个账户和日志组中使用,则应分配一个新的CMK,该CMK在IAM策略中包含一个条件.
有关更多信息,请参阅AWSKMS密钥和加密上下文(p.
59).
将CMK与日志组关联后,该日志组所有新接收的数据都将使用CMK加密.
此数据在整个保留期内以加密格式存储.
CloudWatchLogs可随时根据请求解密该数据.
无论何时请求加密数据,CloudWatchLogs都必须拥有对CMK的权限.
解除CMK与日志组的关联后,CloudWatchLogs将停止对日志组新接收的数据加密.
所有先前接收的数据仍保持加密状态.
ImportantCloudWatchLogs仅支持对称CMK.
请勿使用非对称CMK对日志组中的数据进行加密.
有关更多信息,请参阅使用对称和非对称密钥.
Limits要执行下列步骤,您必须拥有以下权限:kms:CreateKey、kms:GetKeyPolicy,和kms:PutKeyPolicy.
将CMK与日志组关联或解除关联后,最多可能需要五分钟时间,此操作才能生效.
如果撤消对关联CMK的CloudWatchLogs访问权限或删除关联的CMK,将无法再检索CloudWatch日志中的加密数据.
您无法使用CloudWatch控制台将CMK与日志组关联.
步骤1:创建AWSKMSCMK要创建AWSKMSCMK,请使用以下创建密钥命令:awskmscreate-key输出包含CMK的密钥ID和Amazon资源名称(ARN).
下面是示例输出:{"KeyMetadata":{"Origin":"AWS_KMS","KeyId":"1234abcd-12ab-34cd-56ef-1234567890ab","Description":"","KeyManager":"CUSTOMER","Enabled":true,"CustomerMasterKeySpec":"SYMMETRIC_DEFAULT","KeyUsage":"ENCRYPT_DECRYPT","KeyState":"Enabled","CreationDate":1478910250.
94,56AmazonCloudWatchLogs用户指南步骤2:设置CMK的权限"Arn":"arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59","AWSAccountId":"123456789012","EncryptionAlgorithms":["SYMMETRIC_DEFAULT"]}}步骤2:设置CMK的权限默认情况下,所有AWSKMSCMK都是私有的.
只有资源所有者可以使用它来加密和解密数据.
但是,资源所有者可以将CMK的访问权限授予其他用户和资源.
在此步中,您将授予CloudWatch服务委托人权限以使用该CMK.
此服务委托人必须位于存储CMK的相同AWS区域内.
作为最佳做法,我们建议您将密钥的使用限制为仅限于您指定的那些AWS账户或日志组.
首先,使用以下policy.
jsonget-key-policy命令将您的CMK默认策略保存为:awskmsget-key-policy--key-idkey-id--policy-namedefault--outputtext>.
/policy.
json在文本编辑器中打开policy.
json文件,然后从以下语句之一中添加粗体的部分.
使用逗号将现有语句与新语句分隔.
这些语句使用Condition部分以增强AWSKMS密钥的安全性.
有关更多信息,请参阅AWSKMS密钥和加密上下文(p.
59).
本示例中的Condition部分将密钥限制为单个日志组ARN.
{"Version":"2012-10-17","Id":"key-default-1","Statement":[{"Sid":"EnableIAMUserPermissions","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::Your_account_ID:root"},"Action":"kms:*","Resource":"*"},{"Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"},"Action":["kms:Encrypt*","kms:Decrypt*","kms:ReEncrypt*","kms:GenerateDataKey*","kms:Describe*"],"Resource":"*","Condition":{"ArnEquals":{"kms:EncryptionContext:aws:logs:arn":"arn:aws:logs:region:account-id:log-group:log-group-name"}}}]57AmazonCloudWatchLogs用户指南步骤3:将日志组与CMK关联}这些区域有:Condition部分限制只有指定账户才能使用AWSKMS密钥,但它可用于任何日志组.
{"Version":"2012-10-17","Id":"key-default-1","Statement":[{"Sid":"EnableIAMUserPermissions","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::Your_account_ID:root"},"Action":"kms:*","Resource":"*"},{"Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"},"Action":["kms:Encrypt*","kms:Decrypt*","kms:ReEncrypt*","kms:GenerateDataKey*","kms:Describe*"],"Resource":"*","Condition":{"ArnLike":{"kms:EncryptionContext:aws:logs:arn":"arn:aws:logs:region:account-id:*"}}}]}最后,使用以下put-key-policy命令添加更新后的策略:awskmsput-key-policy--key-idkey-id--policy-namedefault--policyfile://policy.
json步骤3:将日志组与CMK关联可以在创建日志组时或之后将CMK与它关联.
使用以下describe-log-groups命令,可以确定日志组是否已经关联了CMK:awslogsdescribe-log-groups--log-group-name-prefix"log-group-name-prefix"如果输出包含kmsKeyId字段,则日志组将与该字段值所对应的键相关联.
在创建日志组时将CMK与它关联按如下方式使用create-log-group命令:awslogscreate-log-group--log-group-namemy-log-group--kms-key-id"key-arn"58AmazonCloudWatchLogs用户指南步骤4:解除日志组与CMK的关联将CMK与现有日志组关联按如下方式使用associate-kms-key命令:awslogsassociate-kms-key--log-group-namemy-log-group--kms-key-id"key-arn"步骤4:解除日志组与CMK的关联要解除CMK与日志组的关联,请使用以下disassociate-kms-key命令:awslogsdisassociate-kms-key--log-group-namemy-log-groupAWSKMS密钥和加密上下文为了增强AWSKeyManagementService密钥和加密日志组的安全性,CloudWatchLogs现在将日志组ARN作为加密上下文用于加密日志数据.
加密上下文是一组用作附加的经身份验证的数据的键值对.
通过加密上下文,您可以使用IAM策略条件限制AWS账户和日志组对AWSKMS密钥的访问权限.
有关更多信息,请参阅.
加密上下文和IAMJSON策略元素:Condition.
我们建议您为每个加密的日志组使用不同的CMK密钥.
如果您有以前加密的日志组,现在希望将日志组更改为使用仅适用于该日志组的新CMK,请按照下列步骤操作.
将加密的日志组转换为使用某个CMK,而某个策略将此CMK限制到该日志组1.
输入以下命令以查找该日志组的当前CMK的ARN:awslogsdescribe-log-groups输出包括以下行.
记录ARN.
您需要在步骤7中使用它.
.
.
.
"kmsKeyId":"arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef".
.
.
2.
输入以下命令以创建新的CMK:awskmscreate-key3.
输入以下命令以将新密钥的策略保存到policy.
json文件中:awskmsget-key-policy--key-idnew-key-id--policy-namedefault--outputtext>.
/policy.
json4.
使用文本编辑器打开policy.
json并向策略添加Condition表达式:{"Version":"2012-10-17","Id":"key-default-1","Statement":[{"Sid":"EnableIAMUserPermissions","Effect":"Allow","Principal":{59AmazonCloudWatchLogs用户指南KMS密钥和加密上下文"AWS":"arn:aws:iam::ACCOUNT-ID:root"},"Action":"kms:*","Resource":"*"},{"Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"},"Action":["kms:Encrypt*","kms:Decrypt*","kms:ReEncrypt*","kms:GenerateDataKey*","kms:Describe*"],"Resource":"*","Condition":{"ArnLike":{"kms:EncryptionContext:aws:logs:arn":"arn:aws:logs:REGION:ACCOUNT-ID:log-group:LOG-GROUP-NAME"}}}]}5.
输入以下命令以将更新的策略添加到新的CMK:awskmsput-key-policy--key-idnew-key-ARN--policy-namedefault--policyfile://policy.
json6.
输入以下命令以将策略与日志组关联:awslogsassociate-kms-key--log-group-namemy-log-group--kms-key-idnew-key-ARNCloudWatchLogs现在使用新的CMK加密所有新数据.
7.
接下来,从旧CMK撤销除Decrypt之外的所有其他权限.
首先,输入以下命令以检索旧策略:awskmsget-key-policy--key-idold-key-ARN--policy-namedefault--outputtext>.
/policy.
json8.
使用文本编辑器打开policy.
json并从Action列表中删除所有值,但kms:Decrypt*除外{"Version":"2012-10-17","Id":"key-default-1","Statement":[{"Sid":"EnableIAMUserPermissions","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::REGION:root"},"Action":"kms:*","Resource":"*"},{"Effect":"Allow","Principal":{60AmazonCloudWatchLogs用户指南KMS密钥和加密上下文"Service":"logs.
region.
amazonaws.
com"},"Action":["kms:Decrypt*"],"Resource":"*"}]}9.
输入以下命令以将更新的策略添加到旧的CMK:awskmsput-key-policy--key-idold-key-ARN--policy-namedefault--policyfile://policy.
json61AmazonCloudWatchLogs用户指南Concepts使用筛选条件从日志事件创建指标您可以搜索和筛选进入CloudWatch日志的日志数据,方法是创建一个或多个指标筛选条件.
指标筛选条件定义在日志数据发送到CloudWatch日志时要在日志数据中查找的字词和模式.
CloudWatchLogs使用这些指标筛选条件将日志数据转换为CloudWatch数值指标,供您生成图表或设置警报.
在查看这些指标或设置警报时,您可以使用任何类型的CloudWatch统计数据,包括百分位数统计数据.
Note仅当没有任何指标的值为负值时,才支持适用于指标的百分位数统计数据.
如果您将指标筛选器设置为可以报告负数,则当它的值有负数时,该指标的百分位数统计数据不可用.
有关更多信息,请参阅百分位数.
筛选条件不会以回溯方式筛选数据.
筛选条件只会发布在创建后发生的事件的指标数据点.
筛选结果返回前50行,如果筛选结果上的时间戳早于指标创建时间,则不会显示这些行.
目录Concepts(p.
62)筛选条件和模式语法(p.
63)创建指标筛选条件(p.
69)列出指标筛选条件(p.
75)删除指标筛选条件(p.
76)Concepts每个指标筛选条件都由以下关键元素组成:默认值在未找到匹配日志的时间段中报告给指标筛选条件的值.
通过将此项设置为0,您可以确保在每个时间段中都报告了数据,防止出现存在无数据时间段的"断点"指标.
筛选条件模式一种符号描述,说明CloudWatchLogs应如何解释每个日志事件中的数据.
例如,日志条目可能包含时间戳、IP地址、字符串等.
您可以使用模式来指定要在日志文件中查找的内容.
指标名称CloudWatch指标的名称,受监控的日志信息应该发布到此指标.
例如,您可以向名为ErrorCount的指标发布信息.
指标命名空间新CloudWatch控指标的目标命名空间.
指标值每次发现匹配日志时发布到指标的数字值.
例如,如果您要对特定字词(如"Error")的出现次数进行计数,则每出现一次,该值都将增加"1".
如果要计算传输的字节数,您可以按照在日志事件中找到的实际字节数累加.
62AmazonCloudWatchLogs用户指南筛选条件和模式语法筛选条件和模式语法您可以使用指标筛选条件在日志事件中搜索和匹配字词、短语或值.
指标筛选条件在日志事件中找到其中一个字词、短语或值时,您可以累加CloudWatch指标的值.
例如,您可以创建一个指标筛选条件以在日志事件中搜索ERROR并对这个词的出现次数进行计数.
指标筛选条件还将从空格分隔的日志事件中提取数字值,例如Web请求的延迟.
在这些示例中,您可以按照从日志中提取的实际数字值来累加指标值.
您可以使用条件运算符和通配符创建精确匹配.
在创建指标筛选条件之前,您可以在CloudWatch控制台中测试您的搜索模式.
以下各个部分更为详细地描述了指标筛选条件语法.
匹配事件日志中的字词要搜索日志事件中的字词,可将该字词用作指标筛选条件模式.
您可以在指标筛选条件模式中指定多个字词,但所有字词都必须出现在日志事件中才算是匹配.
指标筛选条件区分大小写.
包括字母数字或下划线之外其他字符的指标筛选条件字词必须放在双引号("")内.
要排除某个字词,可在该字词前使用减号(-).
示例1:匹配所有内容筛选模式""与所有日志事件匹配.
示例2:单一期限"ERROR"筛选条件模式匹配包含此字词的日志事件消息,例如以下内容:[ERROR]Afatalexceptionhasoccurred使用错误代码退出:–1示例3:包括一个字词,同时排除一个字词在上面的示例中,如果您将筛选条件模式更改为"ERROR"-"Exiting",将会排除日志事件消息"ExitingwithERRORCODE:-1".
示例4:多个字词"ERRORException"筛选条件模式匹配同时包含这两个字词的日志事件消息,例如以下内容:[ERROR]CaughtIllegalArgumentException[ERROR]UnhandledException"Failedtoprocesstherequest"筛选条件模式匹配包含所有这些字词的日志事件消息,例如以下内容:[WARN]Failedtoprocesstherequest[错误]无法继续:无法处理请求OR模式匹配您可以使用OR模式匹配在基于文本的筛选条件中匹配术语.
OR用问号表示,例如term.
观察下面的三个日志事件示例.
ERROR与示例1和2匹配.
ERRORWARN与示例1、2和3匹配,因为它们都包含单词ERROR或单词WARN.
ERRORWARN仅与示例1匹配,因为它是唯一一个同时包含这两个单词的示例.
ERROR-WARN与示例2匹配,因为它与一个包含ERROR但不包含WARN的字符串匹配.
63AmazonCloudWatchLogs用户指南匹配事件日志中的字词1.
ERRORWARNmessage2.
ERRORmessage3.
WARNmessage您可以在以空格分隔的筛选条件中使用OR模式匹配来匹配术语.
使用空格分隔的筛选条件,w1表示日志事件中的第一个单词,w2表示第二个单词,依此类推.
对于以下示例模式,[W1=错误,w2]与模式1和2匹配,因为错误是第一个词,[W1=错误||W1=警告,w2]与模式1、2和3匹配.
[W1!
=错误(&W1)!
=警告,w2]不匹配任何行,因为它们都包含错误或警告.
1.
ERRORWARN消息2.
ERROR消息3.
WARN消息您可以在JSON筛选条件中使用OR模式匹配来匹配术语.
对于下面的示例模式,{$.
foo=bar}与模式1匹配,{$.
foo=baz}与模式2匹配,{$.
foo=bar||$.
foo=baz}与模式1和2匹配.
1.
{"foo":"bar"}2.
{"foo":"baz"}匹配JSON日志事件中的字词您可以从JSON日志事件中提取值.
要从JSON日志事件中提取值,您需要创建基于字符串的指标筛选条件.
不支持包含科学表示法的字符串.
JSON日志事件数据中的项目必须与指标筛选条件完全匹配.
您可能要在JSON日志事件中创建指标筛选条件以便指示以下情况:特定事件发生.
例如eventName是"UpdateTrail".
IP处于已知子网外部.
例如,sourceIPAddress不在某个已知子网范围内.
满足两个或更多其他条件的组合.
例如,eventName是"UpdateTrail",并且recipientAccountId是123456789012.
使用指标筛选条件从JSON日志事件中提取值您可以使用指标筛选条件从JSON日志事件中提取值.
指标筛选条件检查传入日志,并在筛选条件找到日志数据中的匹配时修改数字值.
创建指标筛选条件时,您可以每次在日志中找到匹配文本时累加计数,或者可以从日志中提取数值并使用这些值来累加指标值.
使用指标筛选条件匹配JSON字词JSON日志事件的指标筛选语法使用以下格式:{SELECTOREQUALITY_OPERATORSTRING}指标筛选条件必须包含在大括号{}内,以指示这是JSON表达式.
指标筛选条件包含以下部分:SELECTOR指定要检查的JSON属性.
属性选择器始终以美元符号($)开头,这表示JSON的根.
属性选择器是字母数字字符串,它还支持"-"和"_"字符.
数组元素通过[NUMBER]语法表示,必须跟在属性之后.
示例:$.
eventId、$.
users[0]、$.
users[0].
id、$.
requestParameters.
instanceId.
EQUALITY_OPERATOR可以是=或!
=.
64AmazonCloudWatchLogs用户指南匹配事件日志中的字词STRING带或不带引号的字符串.
您可以在搜索词中、之前或之后使用星号"*"通配符来匹配任何文本.
例如,*Event将与PutEvent和GetEvent匹配.
Event*将与EventId和EventName匹配.
Ev*ent只与实际字符串Ev*ent匹配.
完全由字母数字字符组成的字符串无需引号.
包含unicode和其他字符(如"等)的字符串必须包含在双引号内才有效.
JSON指标筛选条件示例以下是一个JSON示例:{"eventType":"UpdateTrail","sourceIPAddress":"111.
111.
111.
111","arrayKey":["value","anothervalue"],"objectList":[{"name":"a","id":1},{"name":"b","id":2}],"SomeObject":null,"ThisFlag":true}以下筛选条件将匹配:{$.
eventType="UpdateTrail"}针对事件类型是UpdateTrail的筛选条件.
{$.
sourceIPAddress!
=123.
123.
*}针对处于子网123.
123前缀之外的IP地址的筛选条件.
{$.
arrayKey[0]="value"}针对arrayKey中的第一个条目是"value"的筛选条件.
如果arrayKey不是数组,则为false.
{$.
objectList[1].
id=2}针对objectList中的第二个条目的id属性=2的筛选条件.
如果objectList不是数组,则为false.
如果objectList中的项目不是对象或者没有id属性,则为false.
{$.
SomeObjectISNULL}针对SomeObject设置为null的筛选条件.
仅当指定的对象为null时,此条件才成立.
{$.
SomeOtherObjectNOTEXISTS}65AmazonCloudWatchLogs用户指南匹配事件日志中的字词针对SomeOtherObject不存在的筛选条件.
仅当指定的对象在日志数据中不存在时,此条件才成立.
{$.
ThisFlagISTRUE}针对ThisFlag为TRUE的筛选条件.
这也适用于看检查是否有FALSE值的布尔筛选条件.
JSON复合条件您可以使用OR(||)和AND(&&)将多个条件合并为复合表达式.
允许使用圆括号,语法遵循标准操作顺序(){"user":{"id":1,"email":"John.
Stiles@example.
com"},"users":[{"id":2,"email":"John.
Doe@example.
com"},{"id":3,"email":"Jane.
Doe@example.
com"}],"actions":["GET","PUT","DELETE"],"coordinates":[[0,1,2],[4,5,6],[7,8,9]]}Examples{($.
user.
id=1)&&($.
users[0].
email="John.
Doe@example.
com")}与以上JSON匹配.
{($.
user.
id=2&&$.
users[0].
email="nonmatch")||$.
actions[2]="GET"}与以上JSON不匹配.
{$.
user.
email="John.
Stiles@example.
com"||$.
coordinates[0][1]=nonmatch&&$.
actions[2]=nomatch}与以上JSON匹配.
{($.
user.
email="John.
Stiles@example.
com"||$.
coordinates[0][1]=nonmatch)&&$.
actions[2]=nomatch}与以上JSON不匹配.
66AmazonCloudWatchLogs用户指南匹配事件日志中的字词JSON特殊注意事项SELECTOR必须指向JSON中的一个值节点(字符串或数字).
如果它指向数组或对象,则不会应用筛选条件,因为日志格式与筛选条件不匹配.
例如,{$.
users=1}和{$.
users!
=1}都无法与其中用户是数组的日志事件匹配:{"users":[1,2,3]}数字比较指标筛选条件语法支持数字比较的精确匹配.
支持以下数字比较:数字筛选条件的语法为{SELECTORNUMERIC_OPERATORNUMBER}指标筛选条件必须包含在大括号{}内,以指示这是JSON表达式.
指标筛选条件包含以下部分:SELECTOR指定要检查的JSON属性.
属性选择器始终以美元符号($)开头,这表示JSON的根.
属性选择器是字母数字字符串,它还支持"-"和"_"字符.
数组元素通过[NUMBER]语法表示,必须跟在属性之后.
示例:$.
latency、$.
numbers[0]、$.
errorCode、$.
processes[4].
averageRuntime.
NUMERIC_OPERATOR可能是以下值之一:或>=.
NUMBER带可选+或-符号的整数、带可选+或-符号的小数或采用科学表示法的数字(带可选+或-符号的整数或小数,后跟"e",后跟带可选+或-符号的整数).
示例:{$.
latency>=500}{$.
numbers[0]+1000}使用指标筛选条件从空格分隔的日志事件中提取值您可以使用指标筛选条件从空格分隔的日志事件中提取值.
将一对方括号[]或两个双引号("")之间的字符视为单个字段.
例如:127.
0.
0.
1-frank[10/Oct/2000:13:25:15-0700]"GET/apache_pb.
gifHTTP/1.
0"2001534127.
0.
0.
1-frank[10/Oct/2000:13:35:22-0700]"GET/apache_pb.
gifHTTP/1.
0"5005324127.
0.
0.
1-frank[10/Oct/2000:13:50:35-0700]"GET/apache_pb.
gifHTTP/1.
0"2004355要指定解析空格分隔的事件的指标筛选条件模式,指标筛选条件模式必须使用名称指定字段,以逗号隔开,且整个模式包括在方括号中.
例如:[ip,user,username,timestamp,request,status_code,bytes].
如果您不知道字段数,可以使用省略号(…)进行快速输入.
例如:67AmazonCloudWatchLogs用户指南设置在发现匹配项时如何更改指标值[.
.
.
,status_code,bytes][ip,user,.
.
.
,status_code,bytes][ip,user,.
.
.
]您还可以对您的字段添加条件,以使只有满足所有条件的日志事件才能与筛选条件匹配.
例如:[ip,user,username,timestamp,request,status_code,bytes>1000][ip,user,username,timestamp,request,status_code=200,bytes][ip,user,username,timestamp,request,status_code=4*,bytes][ip,user,username,timestamp,request=*html*,status_code=4*,bytes]您可以使用&&作为逻辑AND运算符,使用||作为逻辑OR运算符,如下例中所示.
[ip,user,username,timestamp,request,status_code=4*&&bytes>1000][ip,user,username,timestamp,request,status_code=403||status_code=404,bytes]CloudWatchLogs支持字符串和数字条件字段.
对于字符串字段,您可以将=或!
=运算符和星号(*)一起使用.
对于数字字段,您可以使用和!
=运算符.
如果您使用的是以空格分隔的筛选条件,提取的域将映射到以空格分隔的域的名称(如筛选条件中所示),再映射到所有这些域的值.
如果您使用的不是以空间分隔的筛选条件,这将为空.
示例筛选条件:[.
.
.
,request=*.
html*,status_code=4*,]筛选条件的示例日志事件:127.
0.
0.
1-frank[10/Oct/2000:13:25:15-0700]\"GET/index.
htmlHTTP/1.
0\"4041534日志事件和筛选条件模式的提取的域:{"$status_code":"404","$request":"GET/products/index.
htmlHTTP/1.
0","$7":"1534","$4":"10/Oct/2000:13:25:15-0700","$3":"frank","$2":"-","$1":"127.
0.
0.
1"}设置在发现匹配项时如何更改指标值指标筛选条件在日志事件中找到一个匹配字词、短语或值时,它会按照您为"指标值"指定的数量累加CloudWatch指标中的计数.
指标值每分钟汇总并报告.
如果在1分钟时间段内提取日志,但未找到任何匹配项,则报告为DefaultValue指定的值(如果有).
不过,如果在1分钟时间段内未提取日志事件,则不会报告任何值.
指定DefaultValue(即使该值为0)可帮助确保更频繁地报告数据,从而在未找到匹配项时帮助防止断点指标.
68AmazonCloudWatchLogs用户指南发布日志条目中找到的数值例如,假设有一个日志组,每分钟发布两条记录,并且"MetricValue"为1,"DefaultValue"为0.
如果在第一分钟内的两个日志记录中均找到了匹配项,则该分钟的指标值为2.
如果第二分钟内发布的日志记录中没有匹配项,则为两个日志记录均使用"DefaultValue"(即0),该分钟的指标值为0.
如果您未指定"DefaultValue",则对于未找到模式匹配的任意时间段,不报告任何数据.
发布日志条目中找到的数值您也可以使用指标筛选条件根据在日志中找到的数值来发布值,而不是计算在日志中找到的匹配项的数目.
以下步骤介绍了如何使用在JSON请求metricFilter:{$.
latency=*}metricValue:$.
latency中发现的延迟发布指标.
使用JSON请求中的延迟发布指标1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择Actions、Createmetricfilter(创建指标筛选条件).
4.
对于FilterPattern(筛选条件模式),键入{$.
latency=*},然后选择Next(下一步).
5.
为MetricName键入myMetric.
6.
对于MetricValue(指标值),输入$.
latency.
7.
对于DefaultValue(默认值),输入0,然后选择Next(下一步).
指定默认值可确保即使在没有日志事件与筛选条件匹配的时段内也会报告数据.
这样可以防止当日志被提取但与筛选条件不匹配时出现错误或丢失指标.
8.
选择Createmetricfilter(创建指标筛选条件).
以下日志事件会在过滤器创建之后将值50发布到指标myMetric.
{"latency":50,"requestType":"GET"}创建指标筛选条件以下步骤和示例介绍如何创建指标筛选条件.
示例为日志组创建指标筛选条件(p.
69)例如:计数日志事件(p.
70)例如:对字词的出现次数进行计数(p.
71)例如:对HTTP404代码进行计数(p.
72)例如:对HTTP4xx代码进行计数(p.
73)例如:从Apache日志中提取字段(p.
74)为日志组创建指标筛选条件要为日志组创建指标筛选条件,请执行下列步骤.
69AmazonCloudWatchLogs用户指南例如:计数日志事件使用CloudWatch控控制台创建指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择日志组的名称.
4.
选择Actions、Createmetricfilter(创建指标筛选条件).
5.
适用于筛选条件模式中,输入要使用的筛选条件模式.
有关更多信息,请参阅筛选条件和模式语法(p.
63).
6.
(可选)测试筛选条件模式,请在测试模式中,输入一个或多个用于测试模式的日志事件.
每个日志事件必须位于一行内,因为换行符用于在记录事件消息.
7.
选择下一页,然后为筛选条件输入名称.
8.
UNTER指标详细信息,用于指标命名空间中,输入将在其中发布指标的CloudWatch命名空间的名称.
如果此命名空间尚不存在,请确保创建新的已选择.
9.
适用于指标名称中,为新指标输入名称.
10.
适用于指标值,如果指标筛选器正在计算筛选器中关键字的出现次数,请输入1.
对于包含其中一个关键字的每个日志事件,该指标将增加1.
或者,输入令牌,如$size.
这会将指标的数值增加size字段中包含size字段.
例如:计数日志事件最简单的日志事件监控就是对发生的日志事件进行计数.
您可能想对所有事件进行计数,以创建"检测信号"式监视器,或只是练习创建指标筛选条件.
在以下CLI示例中,名为MyAppAccessCount的指标筛选条件应用于日志组MyApp/access.
log,以在CloudWatch命名空间MyNamespace中创建指标EventCount.
该筛选条件配置为与任何日志事件内容匹配并以"1"为增量增加该指标.
使用CloudWatch控控制台创建指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择日志组的名称.
4.
选择Actions、Createmetricfilter(创建指标筛选条件).
5.
将FilterPattern(筛选条件模式)和SelectLogDatatoTest(选择要测试的日志数据)保留为空.
6.
选择Next(下一步),然后对于FilterName(筛选条件名称),键入EventCount.
7.
在指标详细信息下,为指标命名空间键入MyNameSpace.
8.
对于指标名称,键入MyAppEventCount.
9.
确认MetricValue(指标值)为1.
这指定对于每个日志事件,计数以1累加.
10.
对于DefaultValue(默认值),输入0,然后选择Next(下一步).
指定默认值可确保即使在未出现日志事件的时间段内也报告有数据,防止出现有时不存在数据的断点指标.
11.
选择Createmetricfilter(创建指标筛选条件).
使用AWSCLI创建指标筛选条件在命令提示符处,运行以下命令:awslogsput-metric-filter\--log-group-nameMyApp/access.
log\--filter-nameEventCount\--filter-pattern""\70AmazonCloudWatchLogs用户指南例如:对字词的出现次数进行计数--metric-transformations\metricName=MyAppEventCount,metricNamespace=MyNamespace,metricValue=1,defaultValue=0您可以通过发布任何事件数据来测试此新策略.
您应该看到有数据点发布到指标MyAppAccessEventCount.
使用AWSCLI发布事件数据在命令提示符处,运行以下命令:awslogsput-log-events\--log-group-nameMyApp/access.
log--log-stream-nameTestStream1\--log-events\timestamp=1394793518000,message="Testevent1"\timestamp=1394793518000,message="Testevent2"\timestamp=1394793528000,message="ThismessagealsocontainsanError"例如:对字词的出现次数进行计数日志事件经常包含您需要计数的重要消息,可能是关于操作的成功或失败的消息.
例如,如果给定操作失败,可能发生错误,且错误记录到日志文件中.
您可能需要监控这些日志条目以了解错误发生趋势.
在以下示例中,创建了一个指标筛选条件来监控"Error"这个词.
策略已创建并添加到日志组MyApp/message.
log.
CloudWatchLogs将数据点发布到CloudWatch自定义指标ErrorCountMyApp/message.
log命名空间,值为"1"的每个包含Error的事件.
如果没有任何事件包含"Error"这个单词,则发布值0.
当在CloudWatch控制台中绘制此数据的图表时,请务必使用总计统计数据.
创建指标筛选条件后,您可以在CloudWatch控制台中查看指标.
选择要查看的指标时,请选择与日志组名称匹配的指标命名空间.
有关更多信息,请参阅查看可用指标.
使用CloudWatch控控制台创建指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择日志组的名称.
4.
选择Actions(操作)、Createmetricfilter(创建指标筛选条件).
5.
对于Filterpattern(筛选条件模式),输入Error.
NoteFilterPattern中的所有条目都区分大小写.
6.
(可选)测试筛选条件模式,请在测试模式中,输入一个或多个用于测试模式的日志事件.
每个日志事件必须位于一行内,因为换行符用于在记录事件消息.
7.
选择Next(下一步),然后在Assignmetric(分配指标)页上,对于FilterName(筛选条件名称),键入MyAppErrorCount.
8.
在MetricDetails下,为MetricNamespace键入MyNameSpace.
9.
为MetricName键入ErrorCount.
10.
确认MetricValue(指标值)为1.
这指定对于每个包含"Error"的日志事件,计数以1累加.
11.
对于DefaultValue(默认值),键入0,然后选择Next(下一步).
12.
选择Createmetricfilter(创建指标筛选条件).
使用AWSCLI创建指标筛选条件在命令提示符处,运行以下命令:71AmazonCloudWatchLogs用户指南例如:对HTTP404代码进行计数awslogsput-metric-filter\--log-group-nameMyApp/message.
log\--filter-nameMyAppErrorCount\--filter-pattern'Error'\--metric-transformations\metricName=ErrorCount,metricNamespace=MyNamespace,metricValue=1,defaultValue=0您可以通过在消息中发布包含"Error"这个词的事件来测试此新策略.
使用AWSCLI发布事件在命令提示符处,运行以下命令.
注意,模式区分大小写.
awslogsput-log-events\--log-group-nameMyApp/access.
log--log-stream-nameTestStream1\--log-events\timestamp=1394793518000,message="ThismessagecontainsanError"\timestamp=1394793528000,message="ThismessagealsocontainsanError"例如:对HTTP404代码进行计数使用CloudWatchLogs,您可以监控Apache服务器返回HTTP404响应的次数,这是找不到页面的响应代码.
您可能需要对此进行监控,从而了解站点来访者找不到所查找资源的频率.
假定日志记录是结构化的,每一个日志记录(站点访问)都包含以下信息:请求者IP地址RFC1413标识Username时间戳请求方法以及请求的资源和协议对请求的HTTP响应代码请求中传输的字节数这种日志记录的示例如下所示:127.
0.
0.
1-frank[10/Oct/2000:13:55:36-0700]"GET/apache_pb.
gifHTTP/1.
0"4042326您可以指定一个规则,让它尝试匹配其结构反应HTTP404错误的事件,如下例所示:使用CloudWatch控控制台创建指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择Actions、Createmetricfilter(创建指标筛选条件).
4.
对于FilterPattern(筛选条件模式),键入[IP,UserInfo,User,Timestamp,RequestInfo,StatusCode=404,Bytes].
5.
(可选)测试筛选条件模式,请在测试模式中,输入一个或多个用于测试模式的日志事件.
每个日志事件必须位于一行内,因为换行符用于在记录事件消息.
6.
选择Next(下一步),然后对于FilterName(筛选条件名称),键入HTTP404Errors.
7.
在MetricDetails(指标详细信息)下,对于MetricNamespace(指标命名空间),输入MyNameSpace.
8.
对于MetricName(指标名称),输入ApacheNotFoundErrorCount.
9.
确认MetricValue(指标值)为1.
这指定对于每个"404Error"事件,计数以1累加.
72AmazonCloudWatchLogs用户指南例如:对HTTP4xx代码进行计数10.
对于DefaultValue(默认值),输入0,然后选择Next(下一步).
11.
选择Createmetricfilter(创建指标筛选条件).
使用AWSCLI创建指标筛选条件在命令提示符处,运行以下命令:awslogsput-metric-filter\--log-group-nameMyApp/access.
log\--filter-nameHTTP404Errors\--filter-pattern'[ip,id,user,timestamp,request,status_code=404,size]'\--metric-transformations\metricName=ApacheNotFoundErrorCount,metricNamespace=MyNamespace,metricValue=1此示例中使用了文字字符,如左右方括号、双引号和字符串404.
该模式需要整个日志事件消息匹配,才能考虑监控日志事件.
您可以使用describe-metric-filters命令来验证指标筛选条件的创建.
应看到类似如下内容的输出:awslogsdescribe-metric-filters--log-group-nameMyApp/access.
log{"metricFilters":[{"filterName":"HTTP404Errors","metricTransformations":[{"metricValue":"1","metricNamespace":"MyNamespace","metricName":"ApacheNotFoundErrorCount"}],"creationTime":1399277571078,"filterPattern":"[ip,id,user,timestamp,request,status_code=404,size]"}]}现在,您可以手动发布一些事件:awslogsput-log-events\--log-group-nameMyApp/access.
log--log-stream-namehostname\--log-events\timestamp=1394793518000,message="127.
0.
0.
1-bob[10/Oct/2000:13:55:36-0700]\"GET/apache_pb.
gifHTTP/1.
0\"4042326"\timestamp=1394793528000,message="127.
0.
0.
1-bob[10/Oct/2000:13:55:36-0700]\"GET/apache_pb2.
gifHTTP/1.
0\"2002326"在发布这些日志事件示例后,您很快可以在CloudWatch控制台中检索ApacheNotFoundErrorCountt指标.
例如:对HTTP4xx代码进行计数如前面的示例一样,您可能需要监控Web服务访问日志和监控HTTP响应代码级别.
例如,您可能需要监控所有HTTP400级的错误.
但是,您可能不想为每一个返回代码指定新的指标筛选条件.
以下示例演示如何创建包括访问日志中所有400级别HTTP代码响应的指标,该访问日志使用例如:对HTTP404代码进行计数(p.
72)示例中的Apache访问日志格式.
73AmazonCloudWatchLogs用户指南例如:从Apache日志中提取字段使用CloudWatch控控制台创建指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择Apache服务器的日志组的名称.
4.
选择Actions、Createmetricfilter(创建指标筛选条件).
5.
适用于筛选条件模式,输入[ip,id,user,timestamp,request,status_code=4*,size].
6.
(可选)测试筛选条件模式,请在测试模式中,输入一个或多个用于测试模式的日志事件.
每个日志事件必须位于一行内,因为换行符用于在记录事件消息.
7.
选择下一页,然后用于筛选条件名称,键入HTTP4xxErrors.
8.
UNTER指标详细信息,用于指标命名空间,输入MyNameSpace.
9.
适用于指标名称,输入HTTP4xx错误.
10.
适用于指标值,输入1.
这指定对于每个包含4xx错误的日志事件,计数以1累加.
11.
适用于默认值输入0,然后选择下一页.
12.
选择Createmetricfilter(创建指标筛选条件).
使用AWSCLI创建指标筛选条件在命令提示符处,运行以下命令:awslogsput-metric-filter\--log-group-nameMyApp/access.
log\--filter-nameHTTP4xxErrors\--filter-pattern'[ip,id,user,timestamp,request,status_code=4*,size]'\--metric-transformations\metricName=HTTP4xxErrors,metricNamespace=MyNamespace,metricValue=1,defaultValue=0您可以在put-event调用中使用以下数据来测试此规则.
如果不删除前例中的监控规则,则会生成两个不同的指标.
127.
0.
0.
1--[24/Sep/2013:11:49:52-0700]"GET/index.
htmlHTTP/1.
1"404287127.
0.
0.
1--[24/Sep/2013:11:49:52-0700]"GET/index.
htmlHTTP/1.
1"404287127.
0.
0.
1--[24/Sep/2013:11:50:51-0700]"GET/~test/HTTP/1.
1"2003127.
0.
0.
1--[24/Sep/2013:11:50:51-0700]"GET/favicon.
icoHTTP/1.
1"404308127.
0.
0.
1--[24/Sep/2013:11:50:51-0700]"GET/favicon.
icoHTTP/1.
1"404308127.
0.
0.
1--[24/Sep/2013:11:51:34-0700]"GET/~test/index.
htmlHTTP/1.
1"2003例如:从Apache日志中提取字段有时,使用各个日志事件中的值而不是使用计数作为指标值非常有用.
此示例介绍如何创建提取规则,以创建衡量ApacheWeb服务器传输的字节数的指标.
此提取规则与日志事件的7个字段匹配.
指标值是第七个匹配的标记的值.
您可以在提取规则的metricValue字段中看到对该标记的引用为"$7".
使用CloudWatch控控制台创建指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择Apache服务器的日志组的名称.
4.
选择Actions、Createmetricfilter(创建指标筛选条件).
5.
适用于筛选条件模式,输入[ip,id,user,timestamp,request,status_code,size].
74AmazonCloudWatchLogs用户指南列出指标筛选条件6.
(可选)测试筛选条件模式,请在测试模式中,输入一个或多个用于测试模式的日志事件.
每个日志事件必须位于一行内,因为换行符用于在记录事件消息.
7.
选择下一页,然后用于筛选条件名称,键入size.
8.
UNTER指标详细信息,用于指标命名空间,输入MyNameSpace.
因为这是一个新的命名空间,请确保创建新的已选择.
9.
适用于指标名称,输入BytesTransferred10.
适用于指标值,输入$size.
11.
选择Createmetricfilter(创建指标筛选条件).
使用AWSCLI创建此指标筛选条件在命令提示符处,运行以下命令awslogsput-metric-filter\--log-group-nameMyApp/access.
log\--filter-nameBytesTransferred\--filter-pattern'[ip,id,user,timestamp,request,status_code,size]'\--metric-transformation\metricName=BytesTransferred,metricNamespace=MyNamespace,metricValue=$size您可以在put-log-event调用中使用以下数据来测试此规则.
如果不删除前例中的监控规则,则会生成两个不同的指标.
127.
0.
0.
1--[24/Sep/2013:11:49:52-0700]"GET/index.
htmlHTTP/1.
1"404287127.
0.
0.
1--[24/Sep/2013:11:49:52-0700]"GET/index.
htmlHTTP/1.
1"404287127.
0.
0.
1--[24/Sep/2013:11:50:51-0700]"GET/~test/HTTP/1.
1"2003127.
0.
0.
1--[24/Sep/2013:11:50:51-0700]"GET/favicon.
icoHTTP/1.
1"404308127.
0.
0.
1--[24/Sep/2013:11:50:51-0700]"GET/favicon.
icoHTTP/1.
1"404308127.
0.
0.
1--[24/Sep/2013:11:51:34-0700]"GET/~test/index.
htmlHTTP/1.
1"2003列出指标筛选条件您可以列出日志组的所有指标筛选条件.
使用CloudWatch控控制台列出指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
在内容窗格的日志组列表中,在MetricFilters列中选择筛选条件数目.
LogGroups>Filtersfor(日志组>筛选条件)屏幕将列出与该日志组关联的所有指标筛选条件.
使用AWSCLI列出指标筛选条件在命令提示符处,运行以下命令:awslogsdescribe-metric-filters--log-group-nameMyApp/access.
log下面是示例输出:{"metricFilters":[75AmazonCloudWatchLogs用户指南删除指标筛选条件{"filterName":"HTTP404Errors","metricTransformations":[{"metricValue":"1","metricNamespace":"MyNamespace","metricName":"ApacheNotFoundErrorCount"}],"creationTime":1399277571078,"filterPattern":"[ip,id,user,timestamp,request,status_code=404,size]"}]}删除指标筛选条件策略由其名称和它所属的日志组确定.
使用CloudWatch控控制台删除指标筛选条件1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
在内容窗格中,在指标筛选条件列中,选择日志组的衡量指标筛选器的数量.
4.
UNTER指标筛选条件屏幕中,选中要删除的筛选条件名称右侧的复选框.
然后选择Delete.
5.
当系统提示进行确认时,选择Delete(删除).
使用AWSCLI删除指标筛选条件在命令提示符处,运行以下命令:awslogsdelete-metric-filter--log-group-nameMyApp/access.
log\--filter-nameMyFilterName76AmazonCloudWatchLogs用户指南Concepts使用订阅实时处理日志数据您可以使用订阅从CloudWatchLogs中访问日志事件的实时源,并将其传输到其他服务(如AmazonKinesis流、AmazonKinesisDataFirehose流或AWSLambda),以进行自定义处理、分析或加载到其他系统中.
当日志事件发送到接收服务时,它们将被Base64编码并使用gzip格式进行压缩.
要开始订阅日志事件,请创建用于接收事件的接收资源,如Kinesis流.
订阅筛选条件定义了筛选条件模式(用于筛选传输到您的AWS资源的日志事件),以及有关要将匹配的日志事件发送到的位置的信息.
每个日志组最多可关联两个订阅筛选器.
Note如果目标服务返回一个可重试错误,如限制异常或可重试服务异常(如HTTP5xx),CloudWatchLogs将继续重试传输长达24小时.
如果错误是不可重试的错误(例如访问拒绝或资源解决方案),CloudWatchLogs不会尝试重新传送.
CloudWatchLogs还会生成有关将日志事件转发到订阅的CloudWatch指标.
有关更多信息,请参阅.
AmazonCloudWatchLogs日志指标和维度.
NoteKinesisDataFirehose不在亚太(大阪)提供.
目录Concepts(p.
77)使用CloudWatchLogs订阅筛选器(p.
78)与订阅的跨账户日志数据共享(p.
88)Concepts每个订阅筛选条件都由以下关键元素组成:日志组名称要将订阅筛选条件关联到的日志组.
所有上传到该日志组的日志事件都受订阅筛选器的约束,而与筛选器匹配的事件将传输到接收匹配日志事件的目标服务.
筛选条件模式一种符号描述,说明CloudWatchLogs应如何解释每个日志事件中的数据以及可限制传输到目标AWS资源的内容的筛选表达式.
有关筛选条件模式语法的更多信息,请参阅筛选条件和模式语法(p.
63).
目标ARN要用作订阅源目标的Kinesis流、KinesisDataFirehose流或Lambda函数的Amazon资源名称(ARN).
角色ARN一个IAM角色,用于向CloudWatch日志授予将数据放入所选目标的必要权限.
此角色不适用于Lambda目标,因为CloudWatchLogs可以通过Lambda函数本身的访问控制设置获得必要的权限.
77AmazonCloudWatchLogs用户指南使用订阅筛选条件分配当目标是AmazonKinesis流时,用于将日志数据分配到目标的方法.
默认情况下,日志数据按日志流进行分组.
为了实现更均匀的分配,您可以对日志数据进行随机分组.
使用CloudWatchLogs订阅筛选器您可以将订阅筛选器与Kinesis、Lambda或KinesisDataFirehose一起使用.
通过订阅筛选器发送到接收服务的日志使用gzip格式进行Base64编码和压缩.
示例示例1:使用Kinesis的订阅筛选条件(p.
78)示例2:使用AWSLambda的订阅筛选条件(p.
81)示例3:使用AmazonKinesisDataFirehose的订阅筛选条件(p.
84)示例1:使用Kinesis的订阅筛选条件以下示例将订阅筛选条件与包含AWSCloudTrail事件的日志组关联,以便将"根"AWS凭证执行的每个记录的活动传输到名为"RootAccess"的Kinesis流.
有关如何将AWSCloudTirch事件发送到CloudWatchLogs的更多信息,请参阅.
将CloudTrail事件发送到CloudWatchLogs中的AWSCloudTrail用户指南.
Note在创建Kinesis流之前,请计算将生成日志数据的卷.
请确保创建具有足够分片的Kinesis流来处理此卷.
如果流没有足够的分片,日志流将受限制.
有关Kinesis流卷限制的更多信息,请参阅AmazonKinesisDataStreams限制.
为Kinesis创建订阅筛选器1.
使用以下命令创建目标Kinesis流:$C:\>awskinesiscreate-stream--stream-name"RootAccess"--shard-count12.
请耐心等待,直到Kinesis流变为活动状态(这可能需要一两分钟).
您可以使用以下Kinesis描述流命令检查流描述.
流状态属性.
此外,请记下StreamDescription.
StreamARN值,因为后面的步骤中将会用到它:awskinesisdescribe-stream--stream-name"RootAccess"下面是示例输出:{"StreamDescription":{"StreamStatus":"ACTIVE","StreamName":"RootAccess","StreamARN":"arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess","Shards":[{"ShardId":"shardId-000000000000","HashKeyRange":{"EndingHashKey":"340282366920938463463374607431768211455","StartingHashKey":"0"},78AmazonCloudWatchLogs用户指南示例1:使用Kinesis的订阅筛选条件"SequenceNumberRange":{"StartingSequenceNumber":"49551135218688818456679503831981458784591352702181572610"}}]}}3.
创建IAM角色,该角色将向授予将数据放入Kinesis流的权限.
首先,您需要在文件(例如~/TrustPolicyForCWL.
json)中创建信任策略.
使用文本编辑器创建此策略.
请勿使用IAM控制台来创建策略.
{"Statement":{"Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"},"Action":"sts:AssumeRole"}}4.
使用create-role命令创建IAM角色,并指定信任策略文件.
请记下返回的Role.
Arn值,因为后面的步骤中将会用到它:awsiamcreate-role--role-nameCWLtoKinesisRole--assume-role-policy-documentfile://~/TrustPolicyForCWL.
json下面是输出的示例.
{"Role":{"AssumeRolePolicyDocument":{"Statement":{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"}}},"RoleId":"AAOIIAH450GAB4HC5F431","CreateDate":"2015-05-29T13:46:29.
431Z","RoleName":"CWLtoKinesisRole","Path":"/","Arn":"arn:aws:iam::123456789012:role/CWLtoKinesisRole"}}5.
创建权限策略以定义CloudWatchLogs可对您的账户执行的操作.
首先,您将在文件(例如~/PermissionsForCWL.
json)中创建权限策略.
使用文本编辑器创建此策略.
请勿使用IAM控制台来创建策略.
{"Statement":[{"Effect":"Allow","Action":"kinesis:PutRecord","Resource":"arn:aws:kinesis:region:123456789012:stream/RootAccess"}]}79AmazonCloudWatchLogs用户指南示例1:使用Kinesis的订阅筛选条件6.
使用以下put-role-policy命令将权限策略与角色关联:awsiamput-role-policy--role-nameCWLtoKinesisRole--policy-namePermissions-Policy-For-CWL--policy-documentfile://~/PermissionsForCWL.
json7.
之后Kinesis流是处于活动状态状态并且您已创建IAM角色,您便可以创建CloudWatchLogs订阅筛选条件.
订阅筛选条件将立即让实时日志数据开始从所选日志组向Kinesis流的流动:awslogsput-subscription-filter\--log-group-name"CloudTrail"\--filter-name"RootAccess"\--filter-pattern"{$.
userIdentity.
type=Root}"\--destination-arn"arn:aws:kinesis:region:123456789012:stream/RootAccess"\--role-arn"arn:aws:iam::123456789012:role/CWLtoKinesisRole"8.
当您设置订阅筛选条件后,CloudWatchLogs将与筛选条件模式匹配的所有传入事件日志转发到您的Kinesis流.
您可以抓取Kinesis分片迭代器并使用Kinesisget-记录命令获取一些Kinesis记录以验证是否发生此事件:awskinesisget-shard-iterator--stream-nameRootAccess--shard-idshardId-000000000000--shard-iterator-typeTRIM_HORIZON{"ShardIterator":"AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"}awskinesisget-records--limit10--shard-iterator"AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"请注意,您可能需要在Kinesis开始返回数据之前调用几次此命令.
您将看到包含一组记录的响应.
这些区域有:数据属性使用Base64编码并使用gzip格式进行压缩.
您可使用以下Unix命令检查命令行中的原始数据:echo-n""|base64-d|zcatBase64解码和解压缩数据被格式化为JSON并具有以下结构:{"owner":"111111111111","logGroup":"CloudTrail","logStream":"111111111111_CloudTrail_us-east-1","subscriptionFilters":["Destination"],"messageType":"DATA_MESSAGE","logEvents":[{"id":"31953106606966983378809025079804211143289615424298221568","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"80AmazonCloudWatchLogs用户指南示例2:使用AWSLambda的订阅筛选条件},{"id":"31953106606966983378809025079804211143289615424298221569","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"},{"id":"31953106606966983378809025079804211143289615424298221570","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"}]}上述数据架构中的关键元素如下:owner原始日志数据的AWS账户ID.
logGroup原始日志数据的日志组名称.
logStream原始日志数据的日志流名称.
subscriptionFilters与原始日志数据匹配的订阅筛选条件名称的列表.
messageType数据消息将使用"DATA_MESSAGE"类型.
有时候,CloudWatchLogs可能发出类型为"CONTROL_MESSAGE"的动力记录,这主要是为了检查目标是否可访问.
logEvents表示为一组日志事件记录的实际日志数据.
"id"属性是每个日志事件的唯一标识符.
示例2:使用AWSLambda的订阅筛选条件此示例将创建一个CloudWatchLogs订阅筛选条件,用于将日志数据发送到您的AWSLambda函数.
Note在创建Lambda函数之前,请计算将生成日志数据的卷.
请确保创建一个处理此卷的函数.
如果函数没有足够的卷,日志流将受限制.
有关Lambda限制的更多信息,请参阅AWSLambda限制.
为Lambda创建订阅筛选器1.
创建AWSLambda函数.
确保您已设置Lambda执行角色.
有关更多信息,请参阅.
步骤2.
2:创建IAM角色(执行角色)中的AWSLambda开发人员指南.
2.
打开文本编辑器,并用以下内容创建名为helloWorld.
js的文件:varzlib=require('zlib');exports.
handler=function(input,context){varpayload=Buffer.
from(input.
awslogs.
data,'base64');81AmazonCloudWatchLogs用户指南示例2:使用AWSLambda的订阅筛选条件zlib.
gunzip(payload,function(e,result){if(e){context.
fail(e);}else{result=JSON.
parse(result.
toString('ascii'));console.
log("EventData:",JSON.
stringify(result,null,2));context.
succeed();}});};3.
压缩helloWorld.
js文件,并用名称helloWorld.
zip保存它.
4.
使用以下命令,其中角色是您在第一步中设置的Lambda执行角色:awslambdacreate-function\--function-namehelloworld\--zip-filefileb://file-path/helloWorld.
zip\--rolelambda-execution-role-arn\--handlerhelloWorld.
handler\--runtimenodejs12.
x5.
向CloudWatchLogs授予执行您的函数的权限.
使用以下命令,将占位符账户替换为您自己的账户,将占位符日志组替换为要处理的日志组:awslambdaadd-permission\--function-name"helloworld"\--statement-id"helloworld"\--principal"logs.
region.
amazonaws.
com"\--action"lambda:InvokeFunction"\--source-arn"arn:aws:logs:region:123456789123:log-group:TestLambda:*"\--source-account"123456789012"6.
使用以下命令创建订阅筛选条件,将占位符账户替换为您自己的账户,将占位符日志组替换为要处理的日志组:awslogsput-subscription-filter\--log-group-namemyLogGroup\--filter-namedemo\--filter-pattern""\--destination-arnarn:aws:lambda:region:123456789123:function:helloworld7.
(可选)使用样本日志事件进行测试.
在出现命令提示符时,运行以下命令,以将一条简单的日志消息放入已订阅的流中.
要查看Lambda函数的输出,请导航至Lambda函数,在此处可以查看/aws/lambda/helloworld中的输出:awslogsput-log-events--log-group-namemyLogGroup--log-stream-namestream1--log-events"[{\"timestamp\":,\"message\":\"SimpleLambdaTest\"}]"您将看到包含一组Lambda的响应.
这些区域有:数据属性使用Base64编码并使用gzip格式进行压缩.
Lambda接收的实际有效载荷采用以下格式{"awslogs":{"data":"BASE64ENCODED_GZIP_COMPRESSED_DATA"}}您可使用以下Unix命令检查命令行中的原始数据:echo-n""|base64-d|zcatBase64解码和解压缩数据被格式化为JSON并具有以下结构:82AmazonCloudWatchLogs用户指南示例2:使用AWSLambda的订阅筛选条件{"owner":"123456789012","logGroup":"CloudTrail","logStream":"123456789012_CloudTrail_us-east-1","subscriptionFilters":["Destination"],"messageType":"DATA_MESSAGE","logEvents":[{"id":"31953106606966983378809025079804211143289615424298221568","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"},{"id":"31953106606966983378809025079804211143289615424298221569","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"},{"id":"31953106606966983378809025079804211143289615424298221570","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"}]}上述数据架构中的关键元素如下:owner原始日志数据的AWS账户ID.
logGroup原始日志数据的日志组名称.
logStream原始日志数据的日志流名称.
subscriptionFilters与原始日志数据匹配的订阅筛选条件名称的列表.
messageType数据消息将使用"DATA_MESSAGE"类型.
有时候,CloudWatchLogs可能发出类型为"CONTROL_MESSAGE"的Lambda记录,这主要是为了检查目标是否可访问.
logEvents表示为一组日志事件记录的实际日志数据.
"id"属性是每个日志事件的唯一标识符.
83AmazonCloudWatchLogs用户指南示例3:使用AmazonKinesisDataFirehose的订阅筛选条件示例3:使用AmazonKinesisDataFirehose的订阅筛选条件此示例将创建一个CloudWatchLogs订阅,用于将与所定义筛选条件匹配的所有传入日志事件发送到您的AmazonKinesisDataFirehose传输流.
已经使用gzip6级压缩对从CloudWatchLogs发送到AmazonKinesisDataFirehose的数据进行压缩,因此您无需在KinesisDataFirehose传输流中使用压缩.
Note在创建KinesisDataFirehose流之前,请计算将生成日志数据的卷.
请确保创建一个处理此卷的KinesisDataFirehose流.
如果流无法处理卷,则日志流将受限制.
有关KinesisDataFirehose流卷限制的更多信息,请参阅AmazonKinesisDataFirehose数据限制.
为KinesisDataFirehose创建订阅筛选器1.
创建AmazonSimpleStorageService(AmazonS3)存储桶.
我们建议您使用专为CloudWatchLogs创建的存储桶.
但是,如果要使用现有存储桶,请跳至第2步.
运行以下命令,将占用符区域替换为您想使用的区域:awss3apicreate-bucket--bucketmy-bucket--create-bucket-configurationLocationConstraint=region下面是示例输出:{"Location":"/my-bucket"}2.
创建IAM角色,该角色将向授予将AmazonKinesisDataFirehose放入AmazonS3存储桶的权限.
有关更多信息,请参阅.
使用AmazonKinesisDataFirehose控制访问中的AmazonKinesisDataFirehose开发人员指南.
首先,如下所示使用文本编辑器在文件~/TrustPolicyForFirehose.
json中创建信任策略,将account-id替换为您的AWS账户ID:{"Statement":{"Effect":"Allow","Principal":{"Service":"firehose.
amazonaws.
com"},"Action":"sts:AssumeRole","Condition":{"StringEquals":{"sts:ExternalId":"account-id"}}}}3.
使用create-role命令创建IAM角色,并指定信任策略文件.
请记下返回的Role.
Arn值,因为后面的步骤中将会用到它:awsiamcreate-role\--role-nameFirehosetoS3Role\--assume-role-policy-documentfile://~/TrustPolicyForFirehose.
json{"Role":{"AssumeRolePolicyDocument":{"Statement":{"Action":"sts:AssumeRole","Effect":"Allow",84AmazonCloudWatchLogs用户指南示例3:使用AmazonKinesisDataFirehose的订阅筛选条件"Principal":{"Service":"firehose.
amazonaws.
com"}}},"RoleId":"AAOIIAH450GAB4HC5F431","CreateDate":"2015-05-29T13:46:29.
431Z","RoleName":"FirehosetoS3Role","Path":"/","Arn":"arn:aws:iam::123456789012:role/FirehosetoS3Role"}}4.
创建权限策略以定义KinesisDataFirehose可对您的账户执行的操作.
首先,使用文本编辑器在文件~/PermissionsForFirehose.
json中创建权限策略:{"Statement":[{"Effect":"Allow","Action":["s3:AbortMultipartUpload","s3:GetBucketLocation","s3:GetObject","s3:ListBucket","s3:ListBucketMultipartUploads","s3:PutObject"],"Resource":["arn:aws:s3:::my-bucket","arn:aws:s3:::my-bucket/*"]}]}5.
使用以下put-role-policy命令将权限策略与角色关联:awsiamput-role-policy--role-nameFirehosetoS3Role--policy-namePermissions-Policy-For-Firehose--policy-documentfile://~/PermissionsForFirehose.
json6.
如下所示创建目标KinesisDataFirehose传输流,将RoleARN和BucketARN使用您创建的角色和存储桶ARN:awsfirehosecreate-delivery-stream\--delivery-stream-name'my-delivery-stream'\--s3-destination-configuration\'{"RoleARN":"arn:aws:iam::123456789012:role/FirehosetoS3Role","BucketARN":"arn:aws:s3:::my-bucket"}'请注意,KinesisDataFirehose对所传输的AmazonS3对象自动使用YYYY/MM/DD/HHUTC时间格式的前缀.
您可以指定要添加在该时间格式前缀前面的额外前缀.
如果前缀以正斜杠(/)结束,则在AmazonS3存储桶中显示为文件夹.
7.
请耐心等待,直到流变为活动状态(这可能需要几分钟时间).
您可以使用KinesisDataFirehose描述-交付流命令检查交付流描述.
交付流状态属性.
此外,请记下DeliveryStreamDescription.
DeliveryStreamARN值,因为后面的步骤中将会用到它:awsfirehosedescribe-delivery-stream--delivery-stream-name"my-delivery-stream"{"DeliveryStreamDescription":{"HasMoreDestinations":false,"VersionId":"1",85AmazonCloudWatchLogs用户指南示例3:使用AmazonKinesisDataFirehose的订阅筛选条件"CreateTimestamp":1446075815.
822,"DeliveryStreamARN":"arn:aws:firehose:us-east-1:123456789012:deliverystream/my-delivery-stream","DeliveryStreamStatus":"ACTIVE","DeliveryStreamName":"my-delivery-stream","Destinations":[{"DestinationId":"destinationId-000000000001","S3DestinationDescription":{"CompressionFormat":"UNCOMPRESSED","EncryptionConfiguration":{"NoEncryptionConfig":"NoEncryption"},"RoleARN":"delivery-stream-role","BucketARN":"arn:aws:s3:::my-bucket","BufferingHints":{"IntervalInSeconds":300,"SizeInMBs":5}}}]}}8.
创建IAM角色,该角色将向授予CloudWatchLogs将数据放入KinesisDataFirehose传输流的权限.
首先,使用文本编辑器在文件~/TrustPolicyForCWL.
json中创建信任策略:{"Statement":{"Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"},"Action":"sts:AssumeRole"}}9.
使用create-role命令创建IAM角色,并指定信任策略文件.
请记下返回的Role.
Arn值,因为后面的步骤中将会用到它:awsiamcreate-role\--role-nameCWLtoKinesisFirehoseRole\--assume-role-policy-documentfile://~/TrustPolicyForCWL.
json{"Role":{"AssumeRolePolicyDocument":{"Statement":{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"}}},"RoleId":"AAOIIAH450GAB4HC5F431","CreateDate":"2015-05-29T13:46:29.
431Z","RoleName":"CWLtoKinesisFirehoseRole","Path":"/","Arn":"arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole"}}10.
创建权限策略以定义CloudWatchLogs可对您的账户执行的操作.
首先,使用文本编辑器创建权限策略文件(例如~/PermissionsForCWL.
json):86AmazonCloudWatchLogs用户指南示例3:使用AmazonKinesisDataFirehose的订阅筛选条件{"Statement":[{"Effect":"Allow","Action":["firehose:*"],"Resource":["arn:aws:firehose:region:123456789012:*"]}]}11.
使用put-role-policy命令将权限策略与角色关联:awsiamput-role-policy--role-nameCWLtoKinesisFirehoseRole--policy-namePermissions-Policy-For-CWL--policy-documentfile://~/PermissionsForCWL.
json12.
在AmazonKinesisDataFirehose传输流进入活动状态并且您已创建IAM角色后,您便可以创建CloudWatchLogs订阅筛选条件.
订阅筛选条件将立即让实时日志数据开始从所选日志组向AmazonKinesisDataFirehose传输流的流动:awslogsput-subscription-filter\--log-group-name"CloudTrail"\--filter-name"Destination"\--filter-pattern"{$.
userIdentity.
type=Root}"\--destination-arn"arn:aws:firehose:region:123456789012:deliverystream/my-delivery-stream"\--role-arn"arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole"13.
当您设置订阅筛选条件后,CloudWatchLogs将与筛选条件模式匹配的所有传入事件日志转发到您的AmazonKinesisDataFirehose传输流.
根据AmazonKinesisDataFirehose传输流上设置的时间缓冲间隔,数据将开始显示在AmazonS3中.
经过足够的时间后,您可以通过检查AmazonS3存储桶验证您的数据.
awss3apilist-objects--bucket'my-bucket'--prefix'firehose/'{"Contents":[{"LastModified":"2015-10-29T00:01:25.
000Z","ETag":"\"a14589f8897f4089d3264d9e2d1f1610\"","StorageClass":"STANDARD","Key":"firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250","Owner":{"DisplayName":"cloudwatch-logs","ID":"1ec9cf700ef6be062b19584e0b7d84ecc19237f87b5"},"Size":593},{"LastModified":"2015-10-29T00:35:41.
000Z","ETag":"\"a7035b65872bb2161388ffb63dd1aec5\"","StorageClass":"STANDARD","Key":"firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-35-40-7cc92023-7e66-49bc-9fd4-fc9819cc8ed3","Owner":{"DisplayName":"cloudwatch-logs","ID":"1ec9cf700ef6be062b19584e0b7d84ecc19237f87b6"},"Size":5752}]}87AmazonCloudWatchLogs用户指南与订阅的跨账户日志数据共享awss3apiget-object--bucket'my-bucket'--key'firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250'testfile.
gz{"AcceptRanges":"bytes","ContentType":"application/octet-stream","LastModified":"Thu,29Oct201500:07:06GMT","ContentLength":593,"Metadata":{}}AmazonS3对象中的数据以gzip格式压缩.
您可以使用以下Unix命令检查命令行中的原始数据:zcattestfile.
gz与订阅的跨账户日志数据共享您可以与不同AWS账户的所有者合作,并在您的AWS资源(例如AmazonKinesis或AmazonKinesisDataFirehose流)上接收他们的日志事件(这称为"跨账户数据共享").
例如,此日志事件数据可从集中的Kinesis或KinesisDataFirehose流中读取以执行自定义处理和分析.
自定义处理在您跨多个账户协作和分析数据时特别有用.
例如,某家公司的信息安全组可能需要分析数据以进行实时入侵检测或查找异常行为,以便能对公司所有部门的账户进行审核(通过收集各账户的联合生产日志进行集中处理).
可以汇编这些账户中的事件数据的实时流并将其传递到信息安全组,这些组可使用Kinesis将数据附加到现有安全分析系统.
NoteKinesisDataFirehose不在亚太(大阪)提供.
主题使用Kinesis进行跨账户日志数据共享(p.
88)使用KinesisDataFirehose共享跨账户日志数据(p.
94)使用Kinesis进行跨账户日志数据共享要跨账户共享日志数据,您需要建立日志数据发送者和接收者:日志数据发送方-从接收者获取目标信息并告知CloudWatchLogs发送到指定目标已准备好将其日志事件发送到指定目标.
在本部分剩余的过程中,日志数据发送者显示为虚构的AWS账号11111111.
日志数据接收方-设置封装Kinesis流的目标,并让CloudWatchLogs知道接收者要接收日志数据.
接收者随后与发送者共享与接收者的目标有关的信息.
在本部分剩余的过程中,日志数据接收者显示为虚构的AWS账号9999.
要开始接收来自跨账户用户的日志事件,日志数据接收者应首先创建CloudWatchLogs目标.
每个目标都包含以下键元素:目标名称您要创建的目标的名称.
目标ARN您要用作订阅源目标的AWS资源的Amazon资源名称(ARN).
88AmazonCloudWatchLogs用户指南使用Kinesis进行跨账户日志数据共享角色ARN一个AWSIdentityandAccessManagement(IAM)角色,用于向CloudWatch日志授予将数据放入所选Kinesis流的必要权限.
访问策略一个IAM策略文档(采用JSON格式,使用IAM策略语法编写),用于管理允许写入目标的用户组.
日志组和目标必须位于同一个AWS区域内.
但是,目标指向的AWS资源可位于不同的区域.
在以下部分的示例中,所有特定于区域的资源都是在美国东部(弗吉尼亚北部)创建的.
主题创建目标(p.
89)创建订阅筛选器(p.
92)验证日志事件的流动(p.
92)在运行时修改目标成员资格(p.
93)创建目标Important此过程中的所有步骤都需要在日志数据接收者账户中完成.
在本示例中,日志数据接收者账户具有AWS账户ID9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999此示例使用名为RecipientStream的Kinesis流创建一个目标,并创建一个允许CloudWatchLogs将数据写入到该目标的角色.
创建目标1.
在Kinesis中创建目标流.
在命令提示符下,输入:awskinesiscreate-stream--stream-name"RecipientStream"--shard-count12.
等到Kinesis流变为活动状态.
您可使用awskinesisdescribe-stream命令检查StreamDescription.
StreamStatus属性.
此外,请注意流描述.
流值,因为该值稍后将传递到CloudWatchLogs中:awskinesisdescribe-stream--stream-name"RecipientStream"{"StreamDescription":{"StreamStatus":"ACTIVE","StreamName":"RecipientStream","StreamARN":"arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream","Shards":[{"ShardId":"shardId-000000000000","HashKeyRange":{"EndingHashKey":"34028236692093846346337460743176EXAMPLE","StartingHashKey":"0"},"SequenceNumberRange":{"StartingSequenceNumber":"4955113521868881845667950383198145878459135270218EXAMPLE"}}]89AmazonCloudWatchLogs用户指南使用Kinesis进行跨账户日志数据共享}}您的流可能需要一两分钟才会以活动状态显示.
3.
创建IAM角色,该角色将向授予将数据放入Kinesis流的权限.
首先,您需要在文件~/TrustPolicyForCWL.
json中创建信任策略.
使用文本编辑器创建此策略文件,请勿使用IAM控制台来创建.
{"Statement":{"Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"},"Action":"sts:AssumeRole"}}4.
使用awsiamcreaterole命令创建IAM角色,并指定信任策略文件.
记下返回的Role.
Arn值,因为稍后也将传递到CloudWatchLogs:awsiamcreate-role\--role-nameCWLtoKinesisRole\--assume-role-policy-documentfile://~/TrustPolicyForCWL.
json{"Role":{"AssumeRolePolicyDocument":{"Statement":{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"logs.
region.
amazonaws.
com"}}},"RoleId":"AAOIIAH450GAB4HC5F431","CreateDate":"2015-05-29T13:46:29.
431Z","RoleName":"CWLtoKinesisRole","Path":"/","Arn":"arn:aws:iam::999999999999:role/CWLtoKinesisRole"}}5.
创建权限策略以定义CloudWatchLogs可对您的账户执行的操作.
首先,您需要使用文本编辑器在文件~/PermissionsForCWL.
json中创建权限策略:{"Statement":[{"Effect":"Allow","Action":"kinesis:PutRecord","Resource":"arn:aws:kinesis:region:999999999999:stream/RecipientStream"}]}6.
使用awsiamput-role-policy命令将权限策略与角色关联:awsiamput-role-policy\--role-nameCWLtoKinesisRole\--policy-namePermissions-Policy-For-CWL\--policy-documentfile://~/PermissionsForCWL.
json90AmazonCloudWatchLogs用户指南使用Kinesis进行跨账户日志数据共享7.
在Kinesis流进入活动状态并且您已创建IAM角色后,您便可以创建CloudWatchLogs目标.
a.
此步骤不会将访问策略与您的目标关联,它只是完成目标创建的两个步骤中的第一个步骤.
记下负载中返回的DestinationArn:awslogsput-destination\--destination-name"testDestination"\--target-arn"arn:aws:kinesis:region:999999999999:stream/RecipientStream"\--role-arn"arn:aws:iam::999999999999:role/CWLtoKinesisRole"{"DestinationName":"testDestination","RoleArn":"arn:aws:iam::999999999999:role/CWLtoKinesisRole","DestinationArn":"arn:aws:logs:us-east-1:999999999999:destination:testDestination","TargetArn":"arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream"}b.
在步骤7a完成后,在日志数据接收者账户中将访问策略与目标关联.
此策略使得日志数据发送者账户(111111111111)可以访问日志数据接收者账户(999999999999)中的目标.
您可以使用文本编辑器将此策略放在~/AccessPolicy.
json文件中:{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"AWS":"111111111111"},"Action":"logs:PutSubscriptionFilter","Resource":"arn:aws:logs:region:999999999999:destination:testDestination"}]}Note如果多个账户向此目标发送日志,则必须在策略中单独列出每个发件人账户.
此策略不支持将*指定为Principal或使用aws:PrincipalOrgId全局密钥.
c.
这将创建一个策略,该策略定义了对目标具有写入权限的人.
此策略必须指定logs:PutSubscriptionFilter操作才能访问目标.
跨账户用户将使用PutSubscriptionFilter操作向目标发送日志事件:awslogsput-destination-policy\--destination-name"testDestination"\--access-policyfile://~/AccessPolicy.
json此访问策略允许AWS账户中ID为11111111111111的用户调用PutSubscriptionFilter针对目标的ARNarn:aw:日志:region目的地:测试目的地.
任何其他用户针对此目标调用PutSubscriptionFilter的尝试都会被拒绝.
要根据访问策略验证用户的权限,请参阅使用策略验证程序中的IAM用户指南.
91AmazonCloudWatchLogs用户指南使用Kinesis进行跨账户日志数据共享创建订阅筛选器在创建目标后,日志数据接收者账户可与其他AWS账户共享目标ARN(arn:aws:log:us-east-1:99999999999999:testDestination),以便他们将日志事件发送到相同的目标.
这些其他的发送账户用户随后会在各自的日志组上针对此目标创建订阅筛选条件.
订阅筛选器将立即让实时日志数据开始从所选日志组向指定目标的流动.
在以下示例中,在发送账户中创建订阅筛选条件.
此筛选条件与一个包含AWSCloudTrail事件的日志组关联,以便将"根"AWS凭证执行的每个记录的活动都传输到前面创建的目标.
该目标封装一个名为"RecisisStream"的Kinesis流.
有关如何将AWSCloudTirch事件发送到CloudWatchLogs的更多信息,请参阅.
将CloudTrail事件发送到CloudWatchLogs中的AWSCloudTrail用户指南.
awslogsput-subscription-filter\--log-group-name"CloudTrail"\--filter-name"RecipientStream"\--filter-pattern"{$.
userIdentity.
type=Root}"\--destination-arn"arn:aws:logs:region:999999999999:destination:testDestination"日志组和目标必须位于同一个AWS区域内.
但是,目标可指向位于不同区域的AWS资源,如Kinesis流.
验证日志事件的流动在创建订阅筛选器后,CloudWatchLogs将与筛选器模式匹配的所有传入日志事件转发至名为"RecipientStream".
目标所有者可以通过使用aws动力获取分光迭代器命令来获取Kinesis分片,并使用AWS运动获取记录命令来获取一些Kinesis记录:awskinesisget-shard-iterator\--stream-nameRecipientStream\--shard-idshardId-000000000000\--shard-iterator-typeTRIM_HORIZON{"ShardIterator":"AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"}awskinesisget-records\--limit10\--shard-iterator"AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"Note在Kinesis开始返回数据之前,您可能需要重新运行get-记录命令几分钟.
您将看到包含Kinesis记录的响应.
Kinesis记录中的数据属性以gzip格式压缩,然后对Base64进行编码.
您可以使用以下Unix命令检查命令行中的原始数据:echo-n""|base64-d|zcatBase64解码和解压缩数据被格式化为JSON并具有以下结构:{"owner":"111111111111",92AmazonCloudWatchLogs用户指南使用Kinesis进行跨账户日志数据共享"logGroup":"CloudTrail","logStream":"111111111111_CloudTrail_us-east-1","subscriptionFilters":["RecipientStream"],"messageType":"DATA_MESSAGE","logEvents":[{"id":"3195310660696698337880902507980421114328961542429EXAMPLE","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"},{"id":"3195310660696698337880902507980421114328961542429EXAMPLE","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"},{"id":"3195310660696698337880902507980421114328961542429EXAMPLE","timestamp":1432826855000,"message":"{\"eventVersion\":\"1.
03\",\"userIdentity\":{\"type\":\"Root\"}"}]}此数据结构中的键元素如下所示:owner原始日志数据的AWS账户ID.
logGroup原始日志数据的日志组名称.
logStream原始日志数据的日志流名称.
subscriptionFilters与原始日志数据匹配的订阅筛选条件名称的列表.
messageType数据消息将使用"DATA_MESSAGE"类型.
有时候,CloudWatchLogs可能发出类型为"CONTROL_MESSAGE"的动力记录,这主要是为了检查目标是否可访问.
logEvents表示为一组日志事件记录的实际日志数据.
ID属性是每个日志事件的唯一标识符.
在运行时修改目标成员资格您可能遇到必须在您拥有的目标中添加或删除某些用户的成员资格的情况.
您可以使用put-destination-policy命令中添加新访问策略.
在以下示例中,将阻止之前添加的账户111111111111再发送任何日志数据,并将启用账户222222222222.
1.
提取当前与目标testDestination关联的策略并记下AccessPolicy:awslogsdescribe-destinations\--destination-name-prefix"testDestination"{"Destinations":[93AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据{"DestinationName":"testDestination","RoleArn":"arn:aws:iam::999999999999:role/CWLtoKinesisRole","DestinationArn":"arn:aws:logs:region:999999999999:destination:testDestination","TargetArn":"arn:aws:kinesis:region:999999999999:stream/RecipientStream","AccessPolicy":"{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\Effect\":\"Allow\",\"Principal\":{\"AWS\":\"111111111111\"},\"Action\":\"logs:PutSubscriptionFilter\",\"Resource\":\"arn:aws:logs:region:123456789012:destination:testDestination\"}]}"}]}2.
更新该策略以反映已阻止账户111111111111,并且已启用账户222222222222.
将此策略放入~/NewAccessPolicy.
json文件:{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"AWS":"222222222222"},"Action":"logs:PutSubscriptionFilter","Resource":"arn:aws:logs:region:999999999999:destination:testDestination"}]}3.
调用PutDestinationPolicy以将NewAccessPolicy.
json文件中定义的策略与目标关联:awslogsput-destination-policy\--destination-name"testDestination"\--access-policyfile://~/NewAccessPolicy.
json这将最终禁用账户ID111111111111中的日志事件.
从账户ID记录事件2222222222开始流向目标,只要账户的所有者2222222222将创建订阅筛选器.
使用KinesisDataFirehose共享跨账户日志数据要跨账户共享日志数据,您需要建立日志数据发送者和接收者:日志数据发送方-从接收者获取目标信息并告知CloudWatchLogs发送到指定目标已准备好将其日志事件发送到指定目标.
在本部分剩余的过程中,日志数据发送者显示为虚构的AWS账号11111111.
日志数据接收方-设置封装Kinesis流的目标,并让CloudWatchLogs知道接收者要接收日志数据.
接收者随后与发送者共享与接收者的目标有关的信息.
在本部分剩余的过程中,日志数据接收者显示为虚构的AWS账号22222222222222222222222222222222222222222222222222222222222222222222222222.
本节中的示例使用带有AmazonS3存储的KinesisDataFirehose传输流.
您还可以使用不同的设置设置KinesisDataFirehose传送流.
有关更多信息,请参阅.
创建KinesisDataFirehose传输流.
日志组和目标必须位于同一个AWS区域内.
但是,目标指向的AWS资源可位于不同的区域.
Note此功能不在亚太地区(大阪)提供,因为KinesisDataFirehose不在该地区提供.
94AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据主题步骤1:创建KinesisDataFirehose传输流(p.
95)步骤2:创建目标(p.
96)步骤3:创建订阅筛选器(p.
99)验证日志事件的流动(p.
99)在运行时修改目标成员资格(p.
100)步骤1:创建KinesisDataFirehose传输流Important步骤1中的所有步骤都需要在日志数据接收者账户中完成.
在以下示例中,示例命令使用了美国东部(弗吉尼亚北部).
将其替换为适用于您的部署的正确区域.
创建KinesisDataFirehose传输流以用作目标1.
创建AmazonS3存储桶:awss3apicreate-bucket--bucketfirehose-test-bucket1--create-bucket-configurationLocationConstraint=us-east-12.
创建向授予KinesisDataFirehose权限的IAM角色,以将数据放入存储桶.
a.
首先,使用文本编辑器在文件中创建信任策略~/TrustPolicyForFirehose.
json.
{"Statement":{"Effect":"Allow","Principal":{"Service":"firehose.
amazonaws.
com"},"Action":"sts:AssumeRole","Condition":{"StringEquals":{"sts:ExternalId":"222222222222"b.
创建IAM角色,并指定您刚刚创建的信任策略文件.
awsiamcreate-role\--role-nameFirehosetoS3Role\--assume-role-policy-documentfile://~/TrustPolicyForFirehose.
jsonc.
此命令的输出将类似于以下内容.
记下角色名称和角色ARN.
{"Role":{"Path":"/","RoleName":"FirehosetoS3Role","RoleId":"AROAR3BXASEKW7K635M53","Arn":"arn:aws:iam::222222222222:role/FirehosetoS3Role","CreateDate":"2021-02-02T07:53:10+00:00","AssumeRolePolicyDocument":{"Statement":{"Effect":"Allow","Principal":{"Service":"firehose.
amazonaws.
com"},"Action":"sts:AssumeRole","Condition":{"StringEquals":{"sts:ExternalId":"222222222222"}}}}95AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据}}3.
输入以下命令以创建KinesisDataFirehose传输流.
Replacemy-role-arn和my-bucket-arn为您的部署设置正确的值.
awsfirehosecreate-delivery-stream\--delivery-stream-name'my-delivery-stream'\--s3-destination-configuration\'{"RoleARN":"arn:aws:iam::222222222222:role/FirehosetoS3Role","BucketARN":"arn:aws:s3:::firehose-test-bucket1"}'该输出值应该类似于以下内容:{"DeliveryStreamARN":"arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream"}步骤2:创建目标Important此过程中的所有步骤都需要在日志数据接收者账户中完成.
创建目标1.
请KinesisDataFirehose等待,直到您在步骤1:创建KinesisDataFirehose传输流(p.
95)变为活动状态.
您可以使用以下命令检查流描述.
流状态属性.
awsfirehosedescribe-delivery-stream--delivery-stream-name"my-delivery-stream"此外,请注意交付流描述.
交付流流值,因为您需要在后面的步骤中用到它.
此命令的示例输出:{"DeliveryStreamDescription":{"DeliveryStreamName":"my-delivery-stream","DeliveryStreamARN":"arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream","DeliveryStreamStatus":"ACTIVE","DeliveryStreamEncryptionConfiguration":{"Status":"DISABLED"},"DeliveryStreamType":"DirectPut","VersionId":"1","CreateTimestamp":"2021-02-01T23:59:15.
567000-08:00","Destinations":[{"DestinationId":"destinationId-000000000001","S3DestinationDescription":{"RoleARN":"arn:aws:iam::222222222222:role/FirehosetoS3Role","BucketARN":"arn:aws:s3:::firehose-test-bucket1","BufferingHints":{"SizeInMBs":5,"IntervalInSeconds":300},"CompressionFormat":"UNCOMPRESSED","EncryptionConfiguration":{"NoEncryptionConfig":"NoEncryption"96AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据},"CloudWatchLoggingOptions":{"Enabled":false}},"ExtendedS3DestinationDescription":{"RoleARN":"arn:aws:iam::222222222222:role/FirehosetoS3Role","BucketARN":"arn:aws:s3:::firehose-test-bucket1","BufferingHints":{"SizeInMBs":5,"IntervalInSeconds":300},"CompressionFormat":"UNCOMPRESSED","EncryptionConfiguration":{"NoEncryptionConfig":"NoEncryption"},"CloudWatchLoggingOptions":{"Enabled":false},"S3BackupMode":"Disabled"}}],"HasMoreDestinations":false}}您的传输流可能需要一两分钟才会以活动状态显示.
2.
当交付流处于活动状态时,创建IAM角色,该角色将授予CloudWatchLogs将数据放入KinesisDataFirehose流的权限.
首先,您需要在文件~/TrustPolicyForCWL.
json中创建信任策略.
使用文本编辑器创建此策略.
有关CloudWatchLogs终端节点的更多信息,请参阅.
AmazonCloudWatchLogs日志终端节点和配额.
{"Statement":{"Effect":"Allow","Principal":{"Service":"logs.
us-east-1.
amazonaws.
com"},"Action":"sts:AssumeRole"}}3.
使用awsiamcreaterole命令创建IAM角色,并指定您刚创建的信任策略文件.
awsiamcreate-role\--role-nameCWLtoKinesisFirehoseRole\--assume-role-policy-documentfile://~/TrustPolicyForCWL.
json下面是示例输出.
记下返回的Role.
Arn值,因为您需要在后面的步骤中用到它.
{"Role":{"Path":"/","RoleName":"CWLtoKinesisFirehoseRole","RoleId":"AROAR3BXASEKYJYWF243H","Arn":"arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole","CreateDate":"2021-02-02T08:10:43+00:00","AssumeRolePolicyDocument":{"Statement":{"Effect":"Allow","Principal":{"Service":"logs.
us-east-1.
amazonaws.
com"97AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据},"Action":"sts:AssumeRole"}}}}4.
创建权限策略以定义CloudWatchLogs可对您的账户执行的操作.
首先,使用文本编辑器在文件中创建权限策略/许可证:{"Statement":[{"Effect":"Allow","Action":["firehose:*"],"Resource":["arn:aws:firehose:region:222222222222:*"]}]}5.
通过输入以下命令将权限策略与角色关联:awsiamput-role-policy--role-nameCWLtoKinesisFirehoseRole--policy-namePermissions-Policy-For-CWL--policy-documentfile://~/PermissionsForCWL.
json6.
在KinesisDataFirehose传输流进入活动状态并且您已创建IAM角色后,您便可以创建CloudWatchLogs目标.
a.
此步骤不会将访问策略与您的目标关联,它只是完成目标创建的两个步骤中的第一个步骤.
记下目的地.
arn返回的负载:awslogsput-destination\--destination-name"testFirehoseDestination"\--target-arn"arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream"\--role-arn"arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole"{"destination":{"destinationName":"testFirehoseDestination","targetArn":"arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream","roleArn":"arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole","arn":"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"}}b.
在上一步骤完成后,在日志数据接收者账户(22222222222222222222222222222222222222222222222222222222222222222222222222222222222222此策略使得日志数据发送者账户(11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111您可以使用文本编辑器将此策略放在~/AccessPolicy.
json文件中:{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"AWS":"111111111111"},98AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据"Action":"logs:PutSubscriptionFilter","Resource":"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"}]}c.
这将创建一个策略,该策略定义了对目标具有写入权限的人.
此策略必须指定logs:PutSubscriptionFilter操作才能访问目标.
跨账户用户将使用PutSubscriptionFilter操作向目标发送日志事件:awslogsput-destination-policy\--destination-name"testFirehoseDestination"\--access-policyfile://~/AccessPolicy.
json步骤3:创建订阅筛选器切换到发送帐户,在此示例中是11111111111111.
现在,您将在发送帐户中创建订阅筛选器.
在此示例中,筛选条件与一个包含AWSCloudTrail事件的日志组关联,以便将"根"AWS凭证执行的每个记录的活动传输到前面创建的目标.
有关如何将AWSCloudTirch事件发送到CloudWatchLogs的更多信息,请参阅.
将CloudTrail事件发送到CloudWatchLogs中的AWSCloudTrail用户指南.
awslogsput-subscription-filter\--log-group-name"aws-cloudtrail-logs-111111111111-300a971e"\--filter-name"firehose_test"\--filter-pattern"{$.
userIdentity.
type=AssumedRole}"\--destination-arn"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"日志组和目标必须位于同一个AWS区域内.
但是,目标可指向位于不同区域的AWS资源,如KinesisDataFirehose流.
验证日志事件的流动在创建订阅筛选条件后,CloudWatchLogs将与筛选条件模式匹配的所有传入事件日志转发到KinesisDataFirehose传输流.
数据开始显示在AmazonS3存储桶中,基于在KinesisDataFirehose传输流上设置的时间缓冲区间.
经过足够的时间后,您可以通过检查AmazonS3存储桶验证您的数据.
要检查存储桶,请输入以下命令:awss3apilist-objects--bucket'firehose-test-bucket1'该命令的输出将类似于以下内容:{"Contents":[{"Key":"2021/02/02/08/my-delivery-stream-1-2021-02-02-08-55-24-5e6dc317-071b-45ba-a9d3-4805ba39c2ba","LastModified":"2021-02-02T09:00:26+00:00","ETag":"\"EXAMPLEa817fb88fc770b81c8f990d\"","Size":198,"StorageClass":"STANDARD","Owner":{"DisplayName":"firehose+2test","ID":"EXAMPLE27fd05889c665d2636218451970ef79400e3d2aecca3adb1930042e0"}}99AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据]}然后,您可以通过输入以下命令从存储桶中检索特定对象.
替换key替换为您在上一个命令中找到的值.
awss3apiget-object--bucket'firehose-test-bucket1'--key'2021/02/02/08/my-delivery-stream-1-2021-02-02-08-55-24-5e6dc317-071b-45ba-a9d3-4805ba39c2ba'testfile.
gzAmazonS3对象中的数据以gzip格式压缩.
您可以使用以下命令之一检查命令行中的原始数据:Linux:zcattestfile.
gzmacOS:zcatgz在运行时修改目标成员资格您可能遇到必须在您拥有的目标中添加或删除日志发送者的情况.
您可通过新访问策略对您的目标使用PutDestinationPolicy操作.
在以下示例中,之前添加的账户1111111111将阻止再发送任何日志数据,并将账户3333333333已启用.
1.
提取当前与目标testDestination关联的策略并记下AccessPolicy:awslogsdescribe-destinations\--destination-name-prefix"testFirehoseDestination"{"destinations":[{"destinationName":"testFirehoseDestination","targetArn":"arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream","roleArn":"arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole","accessPolicy":"{\n\"Version\":\"2012-10-17\",\n\"Statement\":[\n{\n\"Sid\n\"Effect\":\"Allow\",\n\"Principal\":{\n\"AWS\":\"111111111111\"\n},\n\"Action\":\"logs:PutSubscriptionFilter\",\n\"Resource\":\"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination\"\n}\n]\n}\n\n","arn":"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination","creationTime":1612256124430}]}2.
更新策略以反映该帐户1111111111已停止,并且该帐户3333333333已启用.
将此策略放入~/NewAccessPolicy.
json文件:{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"AWS":"333333333333"100AmazonCloudWatchLogs用户指南使用KinesisDataFirehose共享跨账户日志数据},"Action":"logs:PutSubscriptionFilter","Resource":"arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"}]}3.
使用以下命令将新访问权限.
JSON文件与目标:awslogsput-destination-policy\--destination-name"testFirehoseDestination"\--access-policyfile://~/NewAccessPolicy.
json这将最终禁用账户ID中的日志事件1111111111.
从账户ID记录事件3333333333开始流向目标,只要账户的所有者3333333333将创建订阅筛选器.
101AmazonCloudWatchLogs用户指南将日志发布到CloudWatchLogs的AWS服务以下AWS服务会将日志发布到CloudWatchLogs.
有关这些服务发送的日志的信息,请参阅链接的文档.
服务文档AmazonAPIGateway在APIGateway中设置CloudWatchAPI日志记录AmazonAuroraMySQL将AmazonAuroraMySQL日志发布到AmazonCloudWatchLogsAWSCloudHSM监控AmazonCloudWatchLogs中的AWSCloudHSM审核日志AWSCloudTrail使用AmazonCloudTrailchLogs监控CloudWatchLogs文件AmazonCognito创建CloudWatchLogsIAM角色AmazonConnect日志记录和监控AmazonConnectAWSDataSync允许DDataSync将日志上传到AmazonCloudWatchLogs组AWSElasticBeanstalk将ElasticBeanstalk和AmazonCloudWatchLogs配合使用AmazonElasticContainerService将CloudWatchLogs与容器实例结合使用AmazonElasticKubernetesService亚马AmazonElasticKubernetesService控制平面日志记录AmazonElastiCacheforRedis日志传递AWSFargate使用awslogs日志驱动程序AWSGlueAWSGlue作业的连续日志记录AWSIoT使用CloudWatchLogs进行监控AWSLambda访问AWSLambda的AmazonCloudWatchLogsAmazonMacie使用AmazonCloudWatchLogs监控敏感数据发现作业AmazonMQ配置AmazonMQ以将常规日志和审核日志发布到AmazonCloudWatchLogsAWSOpsWorksAmazonCloudWatchLogs与AWSOpsWorksStacks使用AmazonRelationalDatabaseService将PostgreSQL日志发布到CloudWatchLogsAWSRoboMaker带有离线支持的AWSRoboMakerCloudWatchROS节点102AmazonCloudWatchLogs用户指南服务文档AmazonRoute53AmazonRoute53中的日志记录和监控AmazonSageMaker使用AmazonCloudWatch记录亚马逊SageMaker活动AmazonSimpleNotificationService查看CloudWatchLogsAmazonVPCVPC流日志103AmazonCloudWatchLogs用户指南从某些AWS服务启用日志记录虽然许多服务仅向CloudWatch日志发布日志,但有些AWS服务可以将日志直接发布到亚马逊简单存储服务或AmazonKinesisDataFirehose件.
如果日志主要是存储或处理这些服务中的某种服务,可以让生成日志的服务直接将其发送到AmazonS3或KinesisDataFirehose,无需额外的设置.
即使日志直接发布到AmazonS3或KinesisDataFirehose,仍会产生费用.
有关更多信息,请参阅.
存放日志上日志选项卡,位于AmazonCloudWatch定价.
权限其中某些AWS服务使用通用基础设施将其日志发送到CloudWatchLogs、AmazonS3或KinesisDataFirehose.
要使下表中列出的AWS服务能够将其日志发送到这些目标,您必须以具有特定权限的用户身份登录.
此外,必须向AWS授予权限才能发送日志.
AWS可以在设置日志时自动创建这些权限,也可以在设置日志记录之前先自己创建这些权限.
如果您选择在您或您组织中的某人首次设置日志发送时让AWS自动设置必要的权限和资源策略,则正在设置日志发送的用户必须具有特定的权限,如本节后面所述.
或者,您可以自己创建资源策略,然后设置日志发送的用户不需要尽可能多的权限.
下表汇总了本节中的信息适用于哪些类型的日志以及哪些日志目标.
日志类型CloudWatchLogs(p.
105)AmazonS3(p.
106)KinesisDataFirehose(p.
107)AmazonAPIGateway访问日志AmazonChime媒体质量指标日志和SIP消息日志CloudFront:访问日志用于Redis日志的亚马逊弹性缓存AWSGlobalAccelerator流日志AmazonMSK代理日志AWSNetworkFirewall日志NetworkLoadBalancer访问日志AmazonRoute53Resolver查询日志AmazonSageMaker工作人员事件EC2Spot实例数据源文件AWSStepFunctions工作流历史AWSStorageGateway审核日志和运行状况日志AmazonVirtualPrivateCloud流日志以下各部分提供了这些目标中每个目标的更多详细信息.
104AmazonCloudWatchLogs用户指南发送到CloudWatchLogs的日志发送到CloudWatchLogs的日志Important当您将以下列表中的日志类型设置为发送到CloudWatchLogs时,AWS会根据需要创建或更改与接收日志的日志组关联的资源策略.
继续阅读本节以查看详细信息.
当以下类型的日志被发送到CloudWatchLogs日志时,本部分适用:AmazonAPIGateway访问日志AWSStorageGateway审核日志和运行状况日志AmazonChime媒体质量指标日志和SIP消息日志用于Redis日志的亚马逊弹性缓存AmazonManagedStreamingforApacheKafka代理日志AWSNetworkFirewall日志AmazonRoute53Resolver查询日志AmazonSageMaker工作人员事件AWSStepFunctions表达工作流历史记录和标准工作流历史用户权限为了能够设置首次将任何类型的日志发送到CloudWatchLogs,您必须登录到具有以下权限的帐户.
logs:CreateLogDeliverylogs:PutResourcePolicylogs:DescribeResourcePolicieslogs:DescribeLogGroups如果这些类型的日志中的任何一种已被发送到CloudWatchLogs中的日志组,则要设置将其中一种日志发送到同一日志组,您只需要logs:CreateLogDelivery权限.
日志组资源策略发送日志的日志组必须具有包含特定权限的资源策略.
如果日志组当前没有资源策略,并且设置日志记录的用户具有logs:PutResourcePolicy、logs:DescribeResourcePolicies,和logs:DescribeLogGroups权限,那么当您开始将日志发送到CloudWatchLogs日志时,AWS会自动为其创建以下策略.
{"Version":"2012-10-17","Statement":[{"Sid":"AWSLogDeliveryWrite20150319","Effect":"Allow","Principal":{"Service":["delivery.
logs.
amazonaws.
com"]},"Action":["logs:CreateLogStream","logs:PutLogEvents"],"Resource":["arn:aws:logs:us-east-1:0123456789:log-group:my-log-group:log-stream:*"105AmazonCloudWatchLogs用户指南发送到AmazonS3的日志]}]}如果日志组确实具有资源策略,但该策略不包含上一个策略中显示的语句,并且设置日志记录的用户具有logs:PutResourcePolicy、logs:DescribeResourcePolicies,和logs:DescribeLogGroups权限,则该语句将附加到日志组的资源策略中.
日志组资源策略大小限制注意事项这些服务必须在资源策略中列出它们发送到的每个日志组,并且CloudWatchLogs资源策略不得超过5120个字符.
将日志发送到大量日志组的服务可能会达到此限制.
为了缓解这种情况,CloudWatchLogs监视发送日志的服务使用的资源策略的大小,并且在检测到某个策略接近5120个字符的大小限制时,CloudWatchLogs将自动启用/aws/vendedlogs/*在该服务的资源策略中.
然后,您可以针对以开头的日志组开始使用名称以/aws/vendedlogs/作为来自这些服务的日志的目标.
发送到AmazonS3的日志Important当您将以下列表中的日志类型设置为发送到AmazonS3时,AWS会根据需要创建或更改与接收日志的S3存储桶关联的资源策略.
继续阅读本节以查看详细信息.
当向AmazonS3发送以下类型的日志时,本部分适用:CloudFront访问日志和流式访问日志.
CloudFront使用与此列表中的其他服务不同的权限模型.
有关更多信息,请参阅.
配置标准日志记录和访问您的日志文件所需的权限.
AmazonEC2Spot实例数据源AWSGlobalAccelerator流日志AmazonManagedStreamingforApacheKafka代理日志NetworkLoadBalancer访问日志AWSNetworkFirewall日志AmazonVirtualPrivateCloud流日志直接发布到AmazonS3的日志将发布到您指定的现有存储桶.
每5分钟将在指定的存储桶中创建一个或多个日志文件.
当您首次向AmazonS3存储桶传送日志时,提供日志的服务会记录存储桶的所有者,以确保日志仅传送到属于此账户的存储桶.
因此,要更改AmazonS3存储桶所有者,您必须在原始服务中重新创建或更新日志订阅.
用户权限为了能够设置首次向AmazonS3发送这些类型的日志,您必须使用以下权限登录到账户.
logs:CreateLogDeliveryS3:GetBucketPolicyS3:PutBucketPolicy如果这些类型的日志中的任何一种已被发送到AmazonS3存储桶,则要设置将另一种类型的日志发送到同一存储桶,您只需具有logs:CreateLogDelivery权限.
106AmazonCloudWatchLogs用户指南发送到KinesisDataFirehose的日志S3存储桶资源策略发送日志的S3存储桶必须具有包含特定权限的资源策略.
如果存储桶当前没有资源策略,并且设置日志记录的用户具有S3:GetBucketPolicy和S3:PutBucketPolicy权限,那么当您开始向AmazonS3发送日志时,AWS会自动为其创建以下策略.
{"Version":"2012-10-17","Id":"AWSLogDeliveryWrite20150319","Statement":[{"Sid":"AWSLogDeliveryAclCheck","Effect":"Allow","Principal":{"Service":"delivery.
logs.
amazonaws.
com"},"Action":"s3:GetBucketAcl","Resource":"arn:aws:s3:::my-bucket"},{"Sid":"AWSLogDeliveryWrite","Effect":"Allow","Principal":{"Service":"delivery.
logs.
amazonaws.
com"},"Action":"s3:PutObject","Resource":"arn:aws:s3:::my-bucket/AWSLogs/account-ID/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}}}]}如果存储桶确实具有资源策略,但该策略不包含上一个策略中显示的语句,并且设置日志记录的用户具有S3:GetBucketPolicy和S3:PutBucketPolicy权限,则该语句将附加到存储桶的资源策略中.
发送到KinesisDataFirehose的日志当将以下类型的日志发送到KinesisDataFirehose时,本部分适用:用于Redis日志的亚马逊弹性缓存AmazonManagedStreamingforApacheKafka代理日志AWSNetworkFirewall日志AmazonRoute53Resolver查询日志用户权限为了能够设置首次将任何这些类型的日志发送到KinesisDataFirehose,您必须登录到具有以下权限的帐户.
logs:CreateLogDeliveryfirehose:TagDeliveryStreamiam:CreateServiceLinkedRole107AmazonCloudWatchLogs用户指南发送到KinesisDataFirehose的日志如果这些类型的日志中的任何一种已被发送到KinesisDataFirehose,那么要设置将其中一种类型的日志发送到KinesisDataFirehose,您只需要有logs:CreateLogDelivery和firehose:TagDeliveryStream权限.
用于权限的IAM角色由于KinesisDataFirehose不使用资源策略,因此AWS在将这些日志设置为发送到KinesisDataFirehose时使用IAM角色.
AWS将创建名为的服务相关角色AWS服务日志交付.
该服务相关角色包括以下权限.
{"Version":"2012-10-17","Statement":[{"Action":["firehose:PutRecord","firehose:PutRecordBatch","firehose:ListTagsForDeliveryStream"],"Resource":"*","Condition":{"StringEquals":{"firehose:ResourceTag/LogDeliveryEnabled":"true"}},"Effect":"Allow"}]}此服务链接的角色授予所有KinesisDataFirehose交付流的权限,这些交付流具有LogDeliveryEnabled标签设置为true.
当您设置日志记录时,AWS会将此标签提供给目标交付流.
该服务相关角色还具有信任策略,该策略允许delivery.
logs.
amazonaws.
com服务委托人来代入所需的服务相关角色.
该信任策略如下所示:{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"delivery.
logs.
amazonaws.
com"},"Action":"sts:AssumeRole"}]}108AmazonCloudWatchLogs用户指南Concepts将日志数据导出到AmazonS3您可以将日志数据从您的日志组导出到AmazonS3存储桶,然后使用此数据进行自定义处理和分析,或将其载入到其他系统.
不支持将日志数据导出到AmazonS3存储桶.
要开始导出进程,您必须创建一个用于存储导出的日志数据的S3存储桶.
您可以将已导出的文件存储在您的AmazonS3存储桶中,并定义AmazonS3生命周期规则以自动地存档或删除已导出的文件.
支持导出到使用AES-256加密的S3存储桶.
不支持导出到使用SSE-KMS加密的S3存储桶.
有关更多信息,请参阅如何为S3存储桶启用默认加密.
可将多个日志组或多个时间范围的日志导出至同一个S3存储桶中.
要分开每个导出任务的日志数据,您可以指定一个前缀,以便用作所有导出对象的AmazonS3keyprefix.
日志数据可能需要长达12小时才能用于导出.
有关日志数据接近实时的分析,请参阅CloudWatchLogsInsights分析日志数据(p.
30)或使用订阅实时处理日志数据(p.
77).
Note从2019年2月15日开始,导出到AmazonS3功能要求调用方将s3:PutObject访问目标存储桶.
目录Concepts(p.
109)使用控制台将日志数据导出到AmazonS3(p.
109)使用AWSCLICLI将日志数据导出到AmazonS3(p.
112)Concepts开始之前,请熟悉以下导出概念:日志组名称与导出任务关联的日志组的名称.
该日志组中的日志数据将导出至指定的AmazonS3存储桶中.
从(时间戳)必填的时间戳,表示自1970年1月1日00:00:00UTC以来的毫秒数.
日志组中该时间之后获得的所有日志事件都会被导出.
至(时间戳)必填的时间戳,表示自1970年1月1日00:00:00UTC以来的毫秒数.
日志组中该时间之前获得的所有日志事件都会被导出.
目标存储桶与导出任务关联的AmazonS3存储桶的名称.
此存储桶用于导出指定日志组中的日志数据.
目标前缀可选属性,用作所有导出对象的S3键前缀.
这有助于在您的存储桶中创建类似于文件夹的组织结构.
使用控制台将日志数据导出到AmazonS3在下面的示例中,您将使用AmazonCloudWatch控制台AmazonCloudWatchLogs所有数据从名为my-log-group添加到名为的AmazonS3存储桶my-exported-logs.
109AmazonCloudWatchLogs用户指南步骤1:创建AmazonS3存储桶不支持将日志数据导出到AmazonS3存储桶.
步骤1:创建AmazonS3存储桶我们建议您使用专为CloudWatchLogs创建的存储桶.
但是,如果要使用现有存储桶,请跳至第2步.
NoteAmazonS3存储桶必须与要导出的日志数据处于同一区域内.
CloudWatchLogs不支持将数据导出至其他区域中的AmazonS3存储桶.
创建AmazonS3存储桶1.
通过以下网址打开AmazonS3控制台:https://console.
aws.
amazon.
com/s3/.
2.
如果需要,可以更改区域.
从导航栏中,选择CloudWatchLogs所在的区域.
3.
选择CreateBucket.
4.
对于BucketName(存储桶名称),输入存储桶的名称.
5.
适用于区域中,选择CloudWatchLogs数据所在的区域.
6.
选择创建.
步骤2:创建具有对AmazonS3和CloudWatchLogs的完全访问权限的IAM用户在以下步骤中,您将创建具有必要权限的IAM用户.
创建必要的IAM用户1.
通过以下网址打开IAM控制台:https://console.
aws.
amazon.
com/iam/.
2.
依次选择Users(用户)和Adduser(添加用户).
3.
输入用户名,例如CWLExportUser.
4.
选择Programmaticaccess(编程访问)和AWSManagementConsoleaccess(AWS管理控制台访问).
5.
选择Autogeneratedpassword(自动生成的密码)或Custompassword(自定义密码).
6.
选择后续:权限.
7.
选择Attachexistingpoliciesdirectly(直接附加现有策略),然后将AmazonS3FullAccess和CloudWatchLogsFullAccess策略附加到用户.
您可以使用搜索框来查找策略.
8.
选择后续:Tags、后续:审核,然后创建用户.
步骤3:对AmazonS3存储桶设置权限默认情况下,所有AmazonS3存储桶和对象都是私有的.
仅资源所有者(创建了存储桶的AWS账户)能够访问存储桶及其包含的任何对象.
不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限.
当您设置策略时,建议包含一个随机生成的字符串作为存储桶的前缀,这样只会将目标日志流导出到该存储桶.
要设置AmazonS3存储桶上的权限1.
在AmazonS3控制台中,选择您在第1步中创建的存储桶.
2.
选择权限、存储桶策略.
110AmazonCloudWatchLogs用户指南步骤3:对AmazonS3存储桶设置权限3.
在BucketPolicyEditor(存储桶策略编辑器)中,添加以下策略之一.
将my-exported-logs更改为S3存储桶的名称,将random-string更改为随机生成的字符串.
请务必为Principal(委托人)指定正确的区域终端节点.
如果存储桶位于您的账户中,请添加以下策略.
{"Version":"2012-10-17","Statement":[{"Action":"s3:GetBucketAcl","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs","Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/random-string/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}}]}如果存储桶位于其他账户中,请改用以下策略.
它使用您在上一步中创建的IAM用户来包括附加语句.
{"Version":"2012-10-17","Statement":[{"Action":"s3:GetBucketAcl","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs","Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/random-string/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/random-string/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"AWS":"arn:aws:iam::SendingAccountID:user/CWLExportUser"}}]}4.
选择Save,将您刚添加的策略设置为存储桶上的访问策略.
此策略可让CloudWatch日志将日志数据导出到AmazonS3存储桶中.
存储桶拥有者对所有导出的对象拥有完全权限.
111AmazonCloudWatchLogs用户指南步骤4:创建导出任务Warning如果现有存储桶已附加一个或多个策略,请将CloudWatchLogs访问的语句添加到这些策略.
我们建议您评估生成的权限集,确保它们适合访问存储桶的用户.
步骤4:创建导出任务在本步骤中,您可创建导出任务以便从日志组中导出日志.
使用CloudWatch控制台将数据导出到AmazonS31.
以您在步骤2:创建具有对AmazonS3和CloudWatchLogs的完全访问权限的IAM用户.
2.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
3.
在导航窗格中,选择Loggroups(日志组).
4.
在LogGroups(日志组)屏幕上,选择日志组的名称.
5.
选择操作、将数据导出到AmazonS3.
6.
在存储库的将数据导出到AmazonS3屏幕,在定义数据导出中,使用设置要导出的数据的时间范围From和To.
7.
如果日志组有多个日志流,您可以提供一个日志流前缀,将日志组数据限定为特定流.
选择Advanced(高级),然后为Streamprefix(流前缀)输入日志流前缀.
8.
UNDER选择S3存储桶中,选择与AmazonS3存储桶关联的账户.
9.
适用于S3存储桶名称,选择AmazonS3存储桶.
10.
对于S3Bucketprefix(S3存储桶前缀),输入在存储桶策略中指定的随机生成的字符串.
11.
选择Export将日志数据导出到AmazonS3.
12.
要查看您导出到AmazonS3的日志数据的状态,选择操作然后查看AmazonS3的所有出口.
使用AWSCLICLI将日志数据导出到AmazonS3在下面的示例中,您将使用导出任务从名为的CloudWatchLogs组导出所有数据.
my-log-group添加到名为的AmazonS3存储桶my-exported-logs.
此示例假定您已创建了一个名为my-log-group的日志组.
不支持将日志数据导出到AmazonS3存储桶.
步骤1:创建AmazonS3存储桶我们建议您使用专为CloudWatchLogs创建的存储桶.
但是,如果要使用现有存储桶,请跳至第2步.
NoteAmazonS3存储桶必须与要导出的日志数据处于同一区域内.
CloudWatchLogs不支持将数据导出至其他区域中的AmazonS3存储桶.
使用AWSCLICLI创建AmazonS3存储桶在命令提示符处,运行以下create-bucket命令,其中LocationConstraint是您要将日志数据导出到的区域.
awss3apicreate-bucket--bucketmy-exported-logs--create-bucket-configurationLocationConstraint=us-east-2下面是示例输出.
112AmazonCloudWatchLogs用户指南步骤2:创建具有对AmazonS3和CloudWatchLogs的完全访问权限的IAM用户{"Location":"/my-exported-logs"}步骤2:创建具有对AmazonS3和CloudWatchLogs的完全访问权限的IAM用户在以下步骤中,您将创建具有必要权限的IAM用户.
创建角色并分配权限1.
输入以下命令以创建IAM用户.
awsiamcreate-user--user-nameCWLExportUser2.
将IAM托管策略附加到您刚刚创建的IAM用户.
exportS3POLICYARN=$(awsiamlist-policies--query'Policies[PolicyName==`AmazonS3FullAccess`].
{ARN:Arn}'--outputtext)exportCWLPOLICYARN=$(awsiamlist-policies--query'Policies[PolicyName==`CloudWatchLogsFullAccess`].
{ARN:Arn}'--outputtext)awsiamattach-user-policy--user-nameCWLExportUser--policy-arn$S3POLICYARNawsiamattach-user-policy--user-nameCWLExportUser--policy-arn$CWLPOLICYARN3.
确认已附加两个托管策略.
awsiamlist-attached-user-policies--user-nameCWLExportUser4.
将您的AWSCLI配置为包含CWLExportUserIAM用户.
有关更多信息,请参阅配置AWSCLI.
步骤3:对AmazonS3存储桶设置权限默认情况下,所有AmazonS3存储桶和对象都是私有的.
仅资源所有者(创建了存储桶的账户)能够访问存储桶及其包含的任何对象.
不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限.
要设置AmazonS3存储桶上的权限1.
创建一个名为policy.
json的文件并添加以下访问策略,将Resource更改为您的S3存储桶的名称,并将Principal更改为您要将日志数据导出到的区域的终端节点.
使用文本编辑器以创建此策略文件.
请勿使用IAM控制台.
如果存储桶位于您的账户中,请使用以下策略.
{"Version":"2012-10-17","Statement":[{"Action":"s3:GetBucketAcl","Effect":"Allow",113AmazonCloudWatchLogs用户指南步骤3:对AmazonS3存储桶设置权限"Resource":"arn:aws:s3:::my-exported-logs","Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}}]}如果存储桶位于其他账户中,请改用以下策略.
它使用您在上一步中创建的IAM用户来包括附加语句.
{"Version":"2012-10-17","Statement":[{"Action":"s3:GetBucketAcl","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs","Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/random-string/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/random-string/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"AWS":"arn:aws:iam::SendingAccountID:user/CWLExportUser"}}]}如果存储桶位于其他账户中,并且您使用IAM角色而不是IAM用户,请改用以下策略.
{"Version":"2012-10-17","Statement":[{"Action":"s3:GetBucketAcl","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs","Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/random-string/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"Service":"logs.
us-west-2.
amazonaws.
com"}},114AmazonCloudWatchLogs用户指南步骤4:创建导出任务{"Action":"s3:PutObject","Effect":"Allow","Resource":"arn:aws:s3:::my-exported-logs/random-string/*","Condition":{"StringEquals":{"s3:x-amz-acl":"bucket-owner-full-control"}},"Principal":{"AWS":"arn:aws:iam::SendingAccountID:role/CWLExportUser"}}]}2.
使用put-bucket-policy命令将您刚添加的策略设置为存储桶上的访问策略.
此策略可让CloudWatch日志将日志数据导出到AmazonS3存储桶中.
存储桶拥有者将对所有导出的对象拥有完全权限.
awss3apiput-bucket-policy--bucketmy-exported-logs--policyfile://policy.
jsonWarning如果现有存储桶已附加一个或多个策略,请将CloudWatchLogs访问的语句添加到这些策略.
我们建议您评估生成的权限集,确保它们适合访问存储桶的用户.
步骤4:创建导出任务创建从日志组导出日志的导出任务后,导出任务可能需要几秒到几小时的时间才能完成,具体取决于要导出的数据大小.
使用AWSCLICLI创建导出任务在命令提示符处,使用以下create-export-task命令创建导出任务.
awslogscreate-export-task--profileCWLExportUser--task-name"my-log-group-09-10-2015"--log-group-name"my-log-group"--from1441490400000--to1441494000000--destination"my-exported-logs"--destination-prefix"export-task-output"下面是示例输出.
{"taskId":"cda45419-90ea-4db5-9833-aade86253e66"}步骤5:说明导出任务创建导出任务后,您可以获取任务的当前状态.
使用AWSCLICLI使用导出任务在命令提示符处,使用以下describe-export-tasks命令.
awslogs--profileCWLExportUserdescribe-export-tasks--task-id"cda45419-90ea-4db5-9833-aade86253e66"下面是示例输出.
{"exportTasks":[115AmazonCloudWatchLogs用户指南步骤6:取消导出任务{"destination":"my-exported-logs","destinationPrefix":"export-task-output","executionInfo":{"creationTime":1441495400000},"from":1441490400000,"logGroupName":"my-log-group","status":{"code":"RUNNING","message":"StartedSuccessfully"},"taskId":"cda45419-90ea-4db5-9833-aade86253e66","taskName":"my-log-group-09-10-2015","tTo":1441494000000}]}您可以三种不同的方式使用describe-export-tasks命令:没有任何过滤器:按照与创建时间相反的顺序列出所有导出任务.
根据任务ID进行筛选:列出具有指定ID的导出任务(如果有).
根据任务状态进行筛选:列出具有指定状态的导出任务.
例如,使用以下命令筛选FAILED状态.
awslogs--profileCWLExportUserdescribe-export-tasks--status-code"FAILED"下面是示例输出.
{"exportTasks":[{"destination":"my-exported-logs","destinationPrefix":"export-task-output","executionInfo":{"completionTime":1441498600000"creationTime":1441495400000},"from":1441490400000,"logGroupName":"my-log-group","status":{"code":"FAILED","message":"FAILED"},"taskId":"cda45419-90ea-4db5-9833-aade86253e66","taskName":"my-log-group-09-10-2015","to":1441494000000}]}步骤6:取消导出任务您可以取消处于PENDING或RUNNING状态的导出任务.
使用AWSCLICLI取消导出任务在命令提示符处,使用以下cancel-export-task命令:116AmazonCloudWatchLogs用户指南步骤6:取消导出任务awslogs--profileCWLExportUsercancel-export-task--task-id"cda45419-90ea-4db5-9833-aade86253e66"您可以使用describe-export-tasks命令验证任务是否已成功取消.
117AmazonCloudWatchLogs用户指南PrerequisitesCloudWatchLogs流式传输到AmazonElasticsearchService中.
您可以将CloudWatchLogs日志组配置为通过CloudWatchLogs订阅将其收到的数据实时流式传输到AmazonElasticsearchService(AmazonES)集群中.
有关更多信息,请参阅使用订阅实时处理日志数据(p.
77).
根据要流式传输的日志数据量,您可能希望对函数设置函数级别并发执行限制.
有关更多信息,请参阅函数级别并发执行限制.
Note将大量CloudWatchLogs数据流式传输到AmazonES可能会产生较高的使用费.
我们建议您在"账单和成本管理"控制台中创建预算.
有关更多信息,请参阅通过预算管理成本.
Prerequisites在开始之前,请创建AmazonES域.
AmazonES域可能具有公有访问权限或VPC访问权限,但是您无法在创建该域后修改访问权限的类型.
稍后您可能需要检查AmazonES域设置,并基于集群将处理的数据量修改集群配置.
有关AmazonES的更多信息,请参阅AmazonElasticsearchService开发人员指南.
创建AmazonES域在命令提示符处,使用以下create-elasticsearch-domain命令:awsescreate-elasticsearch-domain--domain-namemy-domain将日志组订阅到AmazonES您可以使用CloudWatch控制台将日志组订阅到AmazonES.
将日志组订阅到AmazonES1.
通过以下网址打开CloudWatch控制台:https://console.
aws.
amazon.
com/cloudwatch/.
2.
在导航窗格中,选择Loggroups(日志组).
3.
选择日志组的名称.
4.
选择操作、创建Elasticsearch订阅筛选筛选.
5.
选择是要流式传输到此账户还是其他账户中的集群.
6.
适用于AmazonES集群中,选择您在上一步中创建的集群.
7.
UNERLambda函数,用于LambdaIAM执行角色,请选择Lambda在执行对AmazonES的调用时应使用的IAM角色,然后选择下一页.
您选择的IAM角色必须满足以下要求:它在信任关系中必须具有lambda.
amazonaws.
com.
118AmazonCloudWatchLogs用户指南将日志组订阅到AmazonES它必须包含以下策略:{"Version":"2012-10-17","Statement":[{"Action":["es:*"],"Effect":"Allow","Resource":"arn:aws:es:region:account-id:domain/target-domain-name/*"}]}如果目标AmazonES域使用VPC访问权限,则该角色必须具有AWSLambdaVPCAccessExecutionRole附加策略.
此Amazon托管策略将为Lambda授予对客户的VPC的访问权限,从而使Lambda能够在VPC中写入AmazonES终端节点.
8.
对于日志格式,请选择日志格式.
9.
对于订阅筛选模式,键入要在您的日志事件中查找的字词或模式.
这可确保只将您感兴趣的数据发送到AmazonES集群.
有关更多信息,请参阅使用筛选条件从日志事件创建指标(p.
62).
10.
(可选)对于选择要测试的日志数据,选择一个日志流,然后单击测试模式以确认搜索筛选器是否会返回您期望的结果.
11.
选择开始流式处理.
119AmazonCloudWatchLogs用户指南数据保护AmazonCloudWatchLogs的安全性云安全性一直是AWS的重中之重.
作为AWS客户,您将从专为满足大多数安全敏感型组织的要求而打造的数据中心和网络架构中受益.
安全性是AWS和您的共同责任.
责任共担模型将其描述为云的安全性和云中的安全性:云的安全性–AWS负责保护在AWS云中运行AWS服务的基础设施.
AWS还向您提供可安全使用的服务.
作为AWS合规性计划的一部分,第三方审计人员将定期测试和验证安全措施的有效性.
要了解适用于AmazonWorkSpaces的合规性计划,请参阅合规性计划范围内的AWS服务.
云中的安全性–您的责任是由使用的AWS服务决定的.
您还需要对其他因素负责,包括您的数据的敏感性、您公司的要求以及适用的法律法规.
此文档将帮助您了解如何在使用AmazonCloudWatchLogs时应用责任共担模式.
它说明了如何配置AmazonCloudWatchLogs以实现您的安全性和合规性目标.
您还将了解如何使用其他AWS服务来帮助您监控和保护您的CloudWatchLogs资源.
目录AmazonCloudWatchLogs中的数据保护(p.
120)适用于AmazonCloudWatchLogs的IdentityandAccessManagement(p.
121)AmazonCloudWatchLogs的合规性验证(p.
134)AmazonCloudWatchLogs中的恢复能力(p.
134)AmazonCloudWatchLogs中的基础设施安全性(p.
135)将CloudWatchLogs与接口VPC终端节点一起使用(p.
135)AmazonCloudWatchLogs中的数据保护AWS责任共担模式适用于AmazonCloudWatchLogs中的数据保护.
如该模式中所述,AWS负责保护运行所有AWS云的全球基础设施.
您负责维护对托管在此基础设施上的内容的控制.
此内容包括您所使用的AWS服务的安全配置和管理任务.
有关数据隐私的更多信息,请参阅数据隐私常见问题.
出于数据保护目的,我们建议您保护AWS账户凭证并使用AWSIdentityandAccessManagement(IAM)设置单独的用户账户.
这仅向每个用户授予履行其工作职责所需的权限.
我们还建议您通过以下方式保护您的数据:对每个账户使用Multi-FactorAuthentication(MFA).
使用SSL/TLS与AWS资源进行通信.
建议使用TLS1.
2或更高版本.
使用AWSCloudTrail设置API和用户活动日志记录.
使用AWS加密解决方案以及AWS服务中的所有默认安全控制.
使用高级托管安全服务(例如AmazonMacie),它有助于发现和保护存储在AmazonS3中的个人数据.
如果在通过命令行界面或API访问AWS时需要经过FIPS140-2验证的加密模块,请使用FIPS终端节点.
有关可用的FIPS终端节点的更多信息,请参阅美国联邦信息处理标准(FIPS)第140-2版.
我们强烈建议您切勿将敏感的可识别信息(例如您客户的账号)放入自由格式字段(例如Name(名称)字段).
这包括使用控制台、API、AWSCLI或AWS软件开发工具包处理CloudWatchLogs或其他AWS服务时.
您输入到CloudWatchLogs或其他服务中的任何数据都可能被选取以包含在诊断日志中.
当您向外部服务器提供URL时,请勿在URL中包含凭证信息来验证您对该服务器的请求.
120AmazonCloudWatchLogs用户指南静态加密静态加密CloudWatchLogs可以使用加密保护静态数据.
所有日志组均加密.
默认情况下,CloudWatchLogs服务管理服务器端加密密密密密密密密密密钥.
如果您希望管理用于加密和解密日志的密密密密密钥,请使用AWSKeyManagementService中的客户主密钥(CMK).
有关更多信息,请参阅使用AWSKeyManagementService加密CloudWatchLogs中的日志数据(p.
56).
传输中加密CloudWatchLogs使用端到端加密处理中的数据.
CloudWatchLogs服务管理服务器端加密密密密密密密密密密钥.
适用于AmazonCloudWatchLogs的IdentityandAccessManagement访问AmazonCloudWatchLogs时需要有AWS可以用来验证您的请求的凭证.
这些凭证必须有权访问AWS资源,例如检索有关您的云资源的CloudWatchLogs数据.
以下章节提供了有关如何使用AWSIdentityandAccessManagement(IAM)和CloudWatchLogs,控制谁能访问您的资源,从而帮助对这些资源进行保护.
Authentication(p.
121)访问控制(p.
122)Authentication您可以下面任一类型的身份访问AWS:AWS账户根用户—注册AWS时,您需要提供与您的AWS账户关联的电子邮件地址和密码.
这些是您的根凭证,它们提供对您所有AWS资源的完全访问权限.
Important出于安全考虑,我们建议您仅使用根凭证创建管理员用户,此类用户是对您的AWS账户具有完全访问权限的IAM用户.
然后,您可以使用该管理员用户创建具有有有有限权限的其他IAM用户和角色.
有关更多信息,请参阅IAM用户指南中的IAM最佳实践和创建管理员用户和组.
IAM用户—一个IAM用户只是您的AWS账户中的一种身份,它具有特定的自定义权限(例如,在CloudWatchLogs中查看指标的权限).
您可以使用IAM用户名和密码登录安全AWS网页,例如AWS管理控制台、AWS开发论坛或AWS支持中心.
除了用户名和密码之外,您还可以为每个用户生成访问密钥.
在通过以编程方式访问AWS服务时,可以使用这些密钥.
几个SDK之一或通过使用AWS命令行界面(AWSCLI).
SDK和CLI工具使用访问密钥对您的请求进行加密签名.
如果您不使用AWS工具,则必须自行对请求签名.
CloudWatchLogs支持SignatureVersion4,这是用于对入站API请求进行验证的协议.
有关对请求进行验证的更多信息,请参阅签名版本4签名流程中的AWS一般参考.
IAM角色—一个IAM角色是可在账户中创建的另一种具有特定权限的IAM身份.
它类似于IAM用户,但未与特定人员关联.
利用IAM角色,您可以获得可用于访问AWS服务和资源的临时访问密钥.
具有临时凭证的IAM角色在以下情况下很有用:121AmazonCloudWatchLogs用户指南访问控制联合身份用户访问-您不创建IAM用户,而是可以使用来自AWSDirectoryService、您的企业用户目录或Web身份提供商的既有用户身份.
他们被称为联合身份用户.
在通过身份提供商请求访问权限时,AWS将为联合身份用户分配角色.
有关联合身份用户的更多信息,请参阅IAM用户指南中的联合身份用户和角色.
跨账户访问-您可以使用账户中的IAM角色向另一个AWS账户授予对您账户的资源的访问权限.
有关示例,请参阅.
教程:使用IAM角色跨AWS账户的访问权限委托中的IAM用户指南.
AWS服务访问-您可以使用账户中的IAM角色向AWS服务授予对您账户的资源的访问权限.
例如,您可以创建一个角色,此角色允许AmazonRedshift代表您访问AmazonS3存储桶,然后将存储在存储桶中的数据加载到AmazonRedshift集群中.
有关更多信息,请参阅IAM用户指南中的创建向AWS服务委派权限的角色.
在AmazonEC2上运行的应用程序-您不用将访问密钥存储在EC2实例中以供在实例上运行的应用程序使用并发出AWSAPI请求,而是可以使用IAM角色来管理这些应用程序的临时凭证.
要将AWS角色分配给EC2实例并使其对该实例的所有应用程序可用,您可以创建一个附加到实例的实例配置文件.
实例配置文件包含角色,并使EC2实例上运行的程序能够获得临时凭证.
有关更多信息,请参阅IAM用户指南中的对AmazonEC2上的应用程序使用角色.
访问控制您可以使用有效的凭证来对自己的请求进行身份验证,但您还必须拥有权限才能创建或访问CloudWatchLogs资源.
例如,您必须拥有创建日志流、创建日志组和执行其他操作的权限.
下面几节介绍如何管理CloudWatchLogs的权限.
我们建议您先阅读概述.
管理您的CloudWatchLogs资源的访问权限概述(p.
122)为CloudWatchLogs使用基于身份的策略(IAM策略)(p.
125)CloudWatchLogs权限参考(p.
130)管理您的CloudWatchLogs资源的访问权限概述每个AWS资源都归某个AWS账户所有,创建和访问资源的权限由权限策略进行管理.
账户管理员可以向IAM身份(即:用户、组和角色)挂载权限策略,某些服务(如AWSLambda)也支持向资源挂载权限策略.
Note一个账户管理员(或管理员IAM用户)是具有管理员权限的用户.
有关更多信息,请参阅IAM用户指南中的IAM最佳实践.
在授予权限时,您要决定谁获得权限,获得对哪些资源的权限,以及您允许对这些资源执行的具体操作.
主题CloudWatchLogs资源和操作(p.
123)了解资源所有权(p.
123)管理对资源的访问(p.
123)指定策略元素:操作、效果和委托人(p.
125)在策略中指定条件(p.
125)122AmazonCloudWatchLogs用户指南访问管理概述CloudWatchLogs资源和操作在CloudWatchLogs中,主资源是日志组、日志流和目标.
CloudWatchLogs不支持子资源(与主资源一起使用的其他资源).
这些资源和子资源具有与其关联的唯一Amazon资源名称(ARN),如下表所示.
资源类型ARN格式日志组arn:aws:日志:region:account-id:log-group:log_group_name日志流arn:aws:日志:region:account-id:log-group:log_group_name:日志流:log-stream-name目的地arn:aws:日志:region:account-id:Destationdestination_name有关ARN的更多信息,请参阅ARNinIAM用户指南.
有关CloudWatchLogsARN的信息,请参阅Amazon资源名称(ARN)和AWS服务命名空间inAmazonWebServices一般参考.
有关包含CloudWatchLogs策略的示例策略,请参阅为CloudWatchLogs使用基于身份的策略(IAM策略)(p.
125).
CloudWatchLogs提供了一组操作来处理CloudWatchLogs资源.
有关可用操作的列表,请参阅CloudWatchLogs权限参考(p.
130).
了解资源所有权AWS账户对在该账户下创建的资源具有所有权,而无论创建资源的人员是谁.
具体而言,资源所有者是对资源创建请求进行身份验证的委托人实体(即根账户、IAM用户或IAM角色)的AWS账户.
以下示例说明了它的工作原理:如果您使用AWS账户的根账户凭证创建日志组,则您的AWS账户即为CloudWatchLogs资源的所有者.
如果您在您的AWS账户中创建IAM用户并对该用户授予创建CloudWatchLogs资源的权限,则该用户可以创建CloudWatchLogs资源.
但是,该用户所属的AWS账户拥有CloudWatchLogs资源.
如果您在AWS账户中创建一个具有CloudWatchLogs资源创建权限的IAM角色,则能够代入该角色的任何人都可以创建CloudWatchLogs资源.
该角色所属的AWS账户拥有CloudWatchLogs资源.
管理对资源的访问权限策略规定谁可以访问哪些内容.
下一节介绍创建权限策略时的可用选项.
Note此部分讨论如何在CloudWatchLogs范围内使用IAM.
这里不提供有关IAM服务的详细信息.
有关完整的IAM文档,请参阅什么是IAM中的IAM用户指南.
有关IAM策略语法和说明的信息,请参阅IAM策略参考中的IAM用户指南.
附加到IAM身份的策略称作基于身份的策略(IAM策略),附加到资源的策略称作基于资源的资源.
CloudWatchLogs支持基于身份的策略以及适用于目标的基于资源的策略,该策略用于启用跨账户订阅.
有关更多信息,请参阅与订阅的跨账户日志数据共享(p.
88).
主题日志组权限和参与者见解(p.
124)基于身份的策略(IAM策略)(p.
124)123AmazonCloudWatchLogs用户指南访问管理概述基于资源的策略(p.
124)日志组权限和参与者见解贡献者见解是CloudWatch的一项功能,您可以分析来自日志组的数据并创建显示贡献者数据的时间序列.
您可以查看有关前N个贡献者、独特贡献者总数及其使用情况的指标.
有关更多信息,请参阅使用ContributorInsights分析高基数数据.
当您向用户授予cloudwatch:PutInsightRule和cloudwatch:GetInsightRuleReport权限,该用户可以创建一个规则来评估CloudWatch日志中的任何日志组,然后查看结果.
结果可以包含这些日志组的贡献者数据.
请确保仅向应该能够查看此数据的用户授予这些权限.
基于身份的策略(IAM策略)您可以向IAM身份附加策略.
例如,您可以执行以下操作:将权限策略附加到账户中的用户或组-要授予在CloudWatchLogs控制台中查看日志的用户权限,您可以将权限策略附加到用户或用户所属的组.
将权限策略附加到角色(授予跨账户权限)—您可以将基于身份的权限策略挂载到IAM角色,以授予跨账户的权限.
例如,账户A中的管理员可以创建一个角色,以向其他AWS账户(如账户B)或某项AWS服务授予跨账户权限,如下所述:1.
账户A管理员可以创建一个IAM角色,然后向该角色附加授予其访问账户A中资源的权限策略.
2.
账户A管理员可以向将账户B标识为能够代入该角色的委托人的角色附加信任策略.
3.
之后,账户B管理员可以委派权限,指定账户B中的任何用户担任该角色.
这样,账户B中的用户就可以创建或访问账户A中的资源了.
如果您需要授予AWS服务权限来担任该角色,则信任策略中的委托人也可以是AWS服务委托人.
有关使用IAM委派权限的更多信息,请参阅访问控制中的IAM用户指南.
以下示例策略授予对logs:PutLogEvents、logs:CreateLogGroup,和logs:CreateLogStream在us-east-1所有资源的操作.
对于日志组,CloudWatchLogs支持对某些API操作使用资源ARN(也称为资源级权限)标识特定资源.
如果您希望包含所有日志组,则必须指定通配符(*).
{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Action":["logs:PutLogEvents","logs:CreateLogGroup","logs:CreateLogStream"],"Resource":"arn:aws:logs:us-east-1:*:*"}]}有关将基于身份的策略用于CloudWatchLogs的更多信息,请参阅为CloudWatchLogs使用基于身份的策略(IAM策略)(p.
125).
有关用户、组、角色和权限的更多信息,请参阅《IAM用户指南》中的身份(用户、组和角色).
基于资源的策略CloudWatchLogs支持适用于目标的基于资源的策略,您可以使用该策略启用跨账户订阅.
有关更多信息,请参阅创建目标(p.
89).
可使用PutDestinationAPI创建目标,您可使用PutDestinationAPI向124AmazonCloudWatchLogs用户指南使用基于身份的策略(IAM策略)目标添加资源策略.
以下示例允许账户ID为111122223333的另一个AWS账户将其日志组订阅到目标arn:aws:logs:us-east-1:123456789012:destination:testDestination.
{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"AWS":"111122223333"},"Action":"logs:PutSubscriptionFilter","Resource":"arn:aws:logs:us-east-1:123456789012:destination:testDestination"}]}指定策略元素:操作、效果和委托人对于每种CloudWatchLogs资源,该服务都定义了一组API操作.
为授予这些API操作的权限,CloudWatchLogs定义了一组您可以在策略中指定的操作.
某些API操作可能需要多个操作的权限才能执行API操作.
有关资源和API操作的更多信息,请参阅CloudWatchLogs资源和操作(p.
123)和CloudWatchLogs权限参考(p.
130).
以下是基本的策略元素:资源–您使用Amazon资源名称(ARN)来标识策略应用到的资源.
有关更多信息,请参阅CloudWatchLogs资源和操作(p.
123).
操作–您可以使用操作关键字标识要允许或拒绝的资源操作.
例如,logs.
DescribeLogGroups权限允许执行DescribeLogGroups操作的用户权限.
效果—用于指定在用户请求特定操作时的效果(可以是允许或拒绝).
如果没有显式授予(允许)对资源的访问权限,则隐式拒绝访问.
您也可显式拒绝对资源的访问,这样可确保用户无法访问该资源,即使有其他策略授予了访问权限的情况下也是如此.
委托人–在基于身份的策略(IAM策略)中,附加了策略的用户是隐式委托人.
对于基于资源的策略,您可以指定要接收权限的用户、账户、服务或其他实体(仅适用于基于资源的策略).
CloudWatchLogs支持适用于目标的基于资源的策略.
要详细了解IAM策略语法和说明,请参阅AWSIAM策略参考中的IAM用户指南.
有关显示所有CloudWatchLogsAPI操作及其适用于的资源的表,请参阅CloudWatchLogs权限参考(p.
130).
在策略中指定条件当您授予权限时,可使用访问策略语言来指定规定策略何时生效的条件.
例如,您可能希望策略仅在特定日期后应用.
有关使用策略语言指定条件的更多信息,请参阅Condition中的IAM用户指南.
要表示条件,您可以使用预定义的条件键.
有关每个AWS服务支持的上下文键列表以及AWS范围的策略键列表,请参阅AWS服务操作和条件上下文键和全局和IAM条件上下文键中的IAM用户指南.
为CloudWatchLogs使用基于身份的策略(IAM策略)本主题提供了基于身份的策略的示例,在这些策略中,账户管理员可以向IAM身份(即:用户、组和角色)附加权限策略.
125AmazonCloudWatchLogs用户指南使用基于身份的策略(IAM策略)Important我们建议您首先阅读以下介绍性主题,这些主题讲解了管理CloudWatchLogs资源访问的基本概念和选项.
有关更多信息,请参阅管理您的CloudWatchLogs资源的访问权限概述(p.
122).
本主题包含以下内容:使用CloudWatch控制台所需的权限(p.
126)适用于CloudWatchLogs的AWS托管(预定义)策略(p.
128)客户托管策略示例(p.
128)下面是权限策略的示例:{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents","logs:DescribeLogStreams"],"Resource":["arn:aws:logs:*:*:*"]}]}本策略具有一个语句,该语句授予了创建日志组和日志流、将事件上传到日志流和列出有关日志流的详细信息的权限.
Resource值结尾的通配符(*)表示一个语句,该语句授予了对任何日志组执行logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents和logs:DescribeLogStreams操作的权限.
要将此权限限制到特定日志组,请使用将资源ARN中的通配符(*)替换为特定日志组ARN.
有关IAM策略语句中的章节的更多信息,请参阅IAM策略元素参考inIAM用户指南.
有关显示所有CloudWatchLogs操作的列表,请参阅CloudWatchLogs权限参考(p.
130).
使用CloudWatch控制台所需的权限用户要能够使用CloudWatch控制台中的CloudWatchLogs,则必须拥有一组可在其AWS账户中描述其他AWS资源的最低权限.
要在CloudWatch控制台中使用CloudWatch日志,您必须拥有来自以下服务的权限:CloudWatchCloudWatchLogs(CloudWatch日志)AmazonESIAMKinesisLambdaAmazonS3如果创建比必需的最低权限更为严格的IAM策略,对于附加了该IAM策略的用户,控制台将无法按预期正常运行.
为确保这些用户仍可使用CloudWatch控制台,还请将CloudWatchReadOnlyAccess托管的策略添加到用户,如适用于CloudWatchLogs的AWS托管(预定义)策略(p.
128).
126AmazonCloudWatchLogs用户指南使用基于身份的策略(IAM策略)对于只需要调用AWSCLI或CloudWatchLogsAPI的用户,您无需为其提供最低控制台权限.
对于未使用控制台管理日志订阅的用户,使用CloudWatch控制台所需的完整权限集为:cloudwatch:getMetricDatacloudwatch:listMetricslogs:cancelExportTasklogs:createExportTasklogs:createLogGrouplogs:createLogStreamlogs:deleteLogGrouplogs:deleteLogStreamlogs:deleteMetricFilterlogs:deleteQueryDefinitionlogs:deleteRetentionPolicylogs:deleteSubscriptionFilterlogs:describeExportTaskslogs:describeLogGroupslogs:describeLogStreamslogs:describeMetricFilterslogs:describeQueryDefinitionslogs:describeSubscriptionFilterslogs:filterLogEventslogs:getLogEventslogs:putMetricFilterlogs:putQueryDefinitionlogs:putRetentionPolicylogs:putSubscriptionFilterlogs:testMetricFilter对于同时使用控制台来管理日志订阅的用户,还需要以下权限:es:describeElasticsearchDomaines:listDomainNamesiam:attachRolePolicyiam:createRoleiam:getPolicyiam:getPolicyVersioniam:getRoleiam:listAttachedRolePoliciesiam:listRoleskinesis:describeStreamskinesis:listStreamslambda:addPermissionlambda:createFunctionlambda:getFunctionConfigurationlambda:listAliases127AmazonCloudWatchLogs用户指南使用基于身份的策略(IAM策略)lambda:listFunctionslambda:listVersionsByFunctionlambda:removePermissions3:listBuckets适用于CloudWatchLogs的AWS托管(预定义)策略AWS通过提供由AWS创建和管理的独立IAM策略来解决许多常用案例.
托管策略可授予常用案例的必要权限,因此,您可以免去调查都需要哪些权限的工作.
有关更多信息,请参阅《IAM用户指南》中的AWS托管策略.
以下AWS托管策略(您可以将它们附加到自己账户中的用户)是特定于CloudWatchLogs的:CloudWatchLogsFullAccess—授予对CloudWatchLogs的完全访问权限.
CloudWatchLogsReadOnlyAccess—授予对CloudWatchLogs的只读访问权限.
Note您可以通过登录到IAM控制台并在该控制台中搜索特定策略来查看这些权限策略.
此外,您还可以创建您自己的自定义IAM策略,以授予CloudWatchLogs操作和资源的相关权限.
您可以将这些自定义策略附加到需要这些权限的IAM用户或组.
客户托管策略示例本节的用户策略示例介绍如何授予各CloudWatchLogs操作的权限.
当您使用CloudWatchLogsAPI、AWS开发工具包或AWSCLI时,可以使用这些策略.
示例示例1:允许对CloudWatchLogs进行完全访问(p.
128)示例2:允许对CloudWatchLogs进行只读访问(p.
128)示例3:允许访问一个日志组(p.
129)示例1:允许对CloudWatchLogs进行完全访问以下策略允许用户访问所有CloudWatchLogs操作.
{"Version":"2012-10-17","Statement":[{"Action":["logs:*"],"Effect":"Allow","Resource":"*"}]}示例2:允许对CloudWatchLogs进行只读访问AWS提供了一个CloudWatchLogsReadOnlyAccess策略,该策略允许对CloudWatchLogs数据进行只读访问.
此策略包含以下权限.
128AmazonCloudWatchLogs用户指南使用基于身份的策略(IAM策略){"Version":"2012-10-17","Statement":[{"Action":["logs:Describe*","logs:Get*","logs:List*","logs:StartQuery","logs:StopQuery","logs:TestMetricFilter","logs:FilterLogEvents"],"Effect":"Allow","Resource":"*"}]}示例3:允许访问一个日志组以下策略允许用户在一个指定的日志组中读取和写入日志事件.
{"Version":"2012-10-17","Statement":[{"Action":["logs:CreateLogStream","logs:DescribeLogStreams","logs:PutLogEvents","logs:GetLogEvents"],"Effect":"Allow","Resource":"arn:aws:logs:us-west-2:123456789012:log-group:SampleLogGroupName:*"}]}在日志组级别使用标记和IAM策略进行控制您可以为用户授予某些日志组的访问权限,同时禁止他们访问其他日志组.
为此,请标记您的日志组,并使用引用这些标签的IAM策略.
有关标记日志组的更多信息,请参阅标记AmazonCloudWatchLogs中的日志组(p.
54).
在标记日志组时,您可以为用户授予IAM策略以仅允许访问具有特定标签的日志组.
例如,以下策略语句仅授予Team标签键值为Green的日志组的访问权限.
{"Version":"2012-10-17","Statement":[{"Action":["logs:*"],"Effect":"Allow","Resource":"*","Condition":{"StringLike":{"logs:ResourceTag/Team":"Green"129AmazonCloudWatchLogs用户指南CloudWatchLogs权限参考}}}]}有关使用IAM策略语句的更多信息,请参阅使用策略控制访问中的IAM用户指南.
CloudWatchLogs权限参考在设置访问控制(p.
122)和编写您可挂载到IAM身份的权限策略(基于身份的策略)时,可以使用下表作为参考.
此表列出每个CloudWatchLogsAPI操作及您可授予执行该操作的权限的对应操作.
请在策略的Action字段中指定这些操作.
对于Resource字段中,您可以指定日志组或日志流的ARN,或者指定*来表示所有CloudWatchLogs资源.
您可以在CloudWatchLogs策略中使用AWS范围的条件键来表达条件.
有关AWS范围内的键的完整列表,请参阅AWS全局和IAM条件上下文键中的IAM用户指南.
Note要指定操作,请在API操作名称之前使用logs:前缀.
例如:logs:CreateLogGroup、logs:CreateLogStream,或者logs:*(适用于所有CloudWatchLogs操作).
CloudWatchLogsAPI操作和所需的操作权限CloudWatchLogsAPI操作所需权限(API操作)CancelExportTasklogs:CancelExportTask要求取消待处理或正在运行的导出任务.
CreateExportTasklogs:CreateExportTask要求将数据从日志组导出到AmazonS3存储桶.
CreateLogGrouplogs:CreateLogGroup要求创建新的日志组.
CreateLogStreamlogs:CreateLogStream要求在日志组中创建新的日志流.
DeleteDestinationlogs:DeleteDestination要求删除日志目标并对其禁用所有订阅筛选器.
DeleteLogGrouplogs:DeleteLogGroup要求删除日志组和所有关联的存档日志事件.
DeleteLogStreamlogs:DeleteLogStream要求删除日志流和所有关联的存档日志事件.
DeleteMetricFilterlogs:DeleteMetricFilter要求删除与日志组关联的指标筛选器.
DeleteQueryDefinitionlogs:DeleteQueryDefinition130AmazonCloudWatchLogs用户指南CloudWatchLogs权限参考CloudWatchLogsAPI操作所需权限(API操作)删除CloudWatchLogsInsights中保存的查询定义所必需的.
DeleteResourcePolicylogs:DeleteResourcePolicy要求删除CloudWatchLogs资源策略.
DeleteRetentionPolicylogs:DeleteRetentionPolicy要求删除日志组的保留策略.
DeleteSubscriptionFilterlogs:DeleteSubscriptionFilter要求删除与日志组关联的订阅筛选器.
DescribeDestinationslogs:DescribeDestinations要求查看与账户关联的所有目标.
DescribeExportTaskslogs:DescribeExportTasks要求查看与账户关联的所有导出任务.
DescribeLogGroupslogs:DescribeLogGroups要求查看与账户关联的所有日志组.
DescribeLogStreamslogs:DescribeLogStreams要求查看与日志组关联的所有日志流.
DescribeMetricFilterslogs:DescribeMetricFilters要求查看与日志组关联的所有指标.
DescribeQueryDefinitionslogs:DescribeQueryDefinitions查看CloudWatchLogsInsights中保存的查询定义列表所必需的.
DescribeQuerieslogs:DescribeQueries查看已计划、正在执行或最近已执行的CloudWatchLogsInsights查询列表所必需的.
DescribeResourcePolicieslogs:DescribeResourcePolicies查看CloudWatchLogs资源策略列表所必需的.
DescribeSubscriptionFilterslogs:DescribeSubscriptionFilters要求查看与日志组关联的所有订阅筛选器.
FilterLogEventslogs:FilterLogEvents要求按照日志组筛选器模式对日志事件进行排序.
GetLogEventslogs:GetLogEvents要求从日志流中检索日志事件.
131AmazonCloudWatchLogs用户指南CloudWatchLogs权限参考CloudWatchLogsAPI操作所需权限(API操作)GetLogGroupFieldslogs:GetLogGroupFields检索日志组中日志事件内包含的字段列表所必需的.
GetLogRecordlogs:GetLogRecord从单个日志事件中检索详细信息所必需的.
GetQueryResultslogs:GetQueryResults检索CloudWatchLogsInsights查询的结果所必需的.
ListTagsLogGrouplogs:ListTagsLogGroup要求列出与日志组关联的标签.
PutDestinationlogs:PutDestination创建或更新目标日志流(例如,Kinesis流)时需要.
PutDestinationPolicylogs:PutDestinationPolicy要求创建或更新与现有日志目标关联的访问策略.
PutLogEventslogs:PutLogEvents要求将一批日志事件上传到日志流.
PutMetricFilterlogs:PutMetricFilter要求创建或更新指标筛选器并将其与日志组关联.
PutQueryDefinitionlogs:PutQueryDefinition在CloudWatchLogsInsights中保存查询所必需的.
PutResourcePolicylogs:PutResourcePolicy要求创建CloudWatchLogs资源策略.
PutRetentionPolicylogs:PutRetentionPolicy要求设置日志组中的日志事件的保存(保留)天数.
PutSubscriptionFilterlogs:PutSubscriptionFilter要求创建或更新订阅筛选器并将其与日志组关联.
StartQuerylogs:StartQuery启动CloudWatchLogsInsights查询所必需的.
StopQuerylogs:StopQuery停止正在执行的CloudWatchLogsInsights查询所必需的.
132AmazonCloudWatchLogs用户指南使用服务相关角色CloudWatchLogsAPI操作所需权限(API操作)TagLogGrouplogs:TagLogGroup要求添加或更新日志组标签.
TestMetricFilterlogs:TestMetricFilter要求针对日志事件消息采样测试筛选器模式.
对CloudWatchLogs使用服务相关角色相关角色AmazonCloudWatchLogs使用AWSIdentityandAccessManagement(IAM)服务相关角色.
服务相关角色是一种与CloudWatchLogs直接关联的独特类型的IAM角色.
服务相关角色由CloudWatchLogs预定义,并具有服务代表您调用其他AWS服务所需的所有权限.
服务相关角色可让您更高效地设置CloudWatchLogs,因为您不必手动添加必要的权限.
CloudWatchLogs定义其服务相关角色的权限,除非另外定义,否则只有CloudWatchLogs可以代入这些角色.
定义的权限包括信任策略和权限策略.
该权限策略不能附加到任何其他IAM实体.
有关支持服务相关角色的其他服务的信息,请参阅与IAM配合使用的AWS服务.
然后查找具有的服务是中的服务相关角色column.
选择Yes与查看该服务的服务相关角色文档的链接.
CloudWatchLogs的服务相关角色权限CloudWatchLogs使用名为的服务相关角色相关角色.
AWS服务日志交付.
CloudWatchLogs使用此服务相关角色将日志直接写入KinesisDataFirehose.
有关更多信息,请参阅从某些AWS服务启用日志记录(p.
104).
这些区域有:AWS服务日志交付服务相关角色信任以下服务以代入该角色:CloudWatchLogs角色权限策略允许CloudWatchLogs对指定资源完成以下操作:操作:firehose:PutRecord和firehose:PutRecordBatch在所有KinesisDataFirehose流上,这些流具有LogDeliveryEnabled键的值为True.
当您创建订阅以将日志传送到KinesisDataFirehose时,此标记会自动附加到Kinesis数据消防器流.
您必须配置权限以允许IAM实体创建、编辑或删除服务相关角色.
此实体可以是用户、组或角色.
有关更多信息,请参阅.
服务相关角色权限中的IAM用户指南.
为CloudWatchLogs创建服务相关角色您无需手动创建服务相关角色.
在AWS管理控制台、AWSCLI或AWSAPI中将日志设置为直接发送到KinesisDataFirehose流时,CloudWatchLogs会为您创建服务相关角色.
如果您删除了此服务相关角色然后需要再次创建它,则可以使用相同的流程在您的账户中重新创建此角色.
再次将日志设置为直接发送到KinesisDataFirehose流时,CloudWatchLogs会再次为您创建服务相关角色.
编辑CloudWatchLogs的服务相关角色相关角色CloudWatchLogs不允许您编辑AWS服务日志交付或任何其他与服务相关的角色,创建后该角色.
您无法更改角色的名称,因为可能有多种实体引用该角色.
不过,您可以使用IAM编辑角色的说明.
有关更多信息,请参阅.
编辑服务相关角色中的IAM用户指南.
133AmazonCloudWatchLogs用户指南合规性验证删除CloudWatchLogs的服务相关角色相关角色如果您不再需要使用某个需要服务相关角色的功能或服务,我们建议您删除该角色.
这样您就没有未被主动监控或维护的未使用实体.
但是,您必须先清除服务相关角色的资源,然后才能手动删除它.
Note如果在您试图删除资源时CloudWatchLogs服务正在使用该角色,则删除操作可能会失败.
如果发生这种情况,则请等待几分钟后重试.
删除CloudWatchLogs资源的步骤AWSServiceRoleForLogDelivery服务相关角色停止将日志直接发送到KinesisDataFirehose流.
使用IAM手动删除服务相关角色使用IAM控制台、AWSCLI或AWSAPI删除AWS服务日志交付服务相关角色.
有关更多信息,请参阅.
删除服务相关角色CloudWatchLogs服务相关角色支持的区域CloudWatchLogs支持在提供服务相关角色的所有AWS区域中使用该服务.
有关更多信息,请参阅.
CloudWatchLogs区域和终端节点.
AmazonCloudWatchLogs的合规性验证作为多个AWS合规性计划的一部分,第三方审计员将评估AmazonCloudWatchLogs的安全性和合规性.
其中包括SOC、PCI、FedRAMP、HIPAA及其他.
有关特定合规性计划范围内的AWS服务列表,请参阅合规性计划范围内的AWS服务.
有关一般信息,请参阅AWS合规性计划.
您可以使用AWSArtifact下载第三方审计报告.
有关更多信息,请参阅下载AWSArtifact中的报告.
您在使用AmazonCloudWatchLogs时的合规性责任由您的数据的敏感性、您公司的合规性目标以及适用的法律法规决定.
AWS提供以下资源来帮助实现合规性:安全性与合规性快速入门指南安全性与合规性快速入门指南–这些部署指南讨论了架构注意事项,并提供了在AWS上部署基于安全性和合规性的基准环境的步骤.
《设计符合HIPAA安全性和合规性要求的架构》白皮书–此白皮书介绍公司如何使用AWS创建符合HIPAA要求的应用程序.
AWS合规性资源–这一系列的操作手册和指南可能适用于您所在的行业和地区.
使用规则评估资源中的AWSConfig开发人员指南—AWSConfig;评估您的资源配置对内部实践、行业指南和法规的遵循情况.
AWSSecurityHub–此AWS服务让您可以全面总览您在AWS中的安全性状况,帮助您检查对安全行业标准和最佳实践的遵守情况.
AmazonCloudWatchLogs中的恢复能力AWS全球基础设施围绕AWS区域和可用区构建.
区域提供多个在物理上独立且隔离的可用区,这些可用区通过延迟低、吞吐量高且冗余性高的网络连接在一起.
利用可用区,您可以设计和操作在可用区之间无中断地自动实现故障转移的应用程序和数据库.
与传统的单个或多个数据中心基础设施相比,可用区具有更高的可用性、容错性和可扩展性.
134AmazonCloudWatchLogs用户指南基础设施安全性有关AWS区域和可用区的更多信息,请参阅AWS全球基础设施.
AmazonCloudWatchLogs中的基础设施安全性作为一项托管服务,AmazonCloudWatchLogs由AmazonWebServices:安全过程概述白皮书.
您可以使用AWS发布的API调用通过网络访问AmazonCloudWatchLogs.
客户端必须支持传输层安全性(TLS)1.
0或更高版本.
建议使用TLS1.
2或更高版本.
客户端还必须支持具有完全向前保密(PFS)的密码套件,例如EphemeralDiffie-Hellman(DHE)或EllipticCurveEphemeralDiffie-Hellman(ECDHE).
大多数现代系统(如Java7及更高版本)都支持这些模式.
此外,必须使用访问密钥ID和与IAM委托人关联的秘密访问密钥来对请求进行签名.
或者,您可以使用AWSSecurityTokenService(AWSSTS)生成临时安全凭证来对请求进行签名.
将CloudWatchLogs与接口VPC终端节点一起使用如果使用AmazonVirtualPrivateCloud(AmazonVPC)托管AWS资源,则可以在VPC和CloudWatchLogs之间建立私有连接.
您可以使用此连接将日志发送到CloudWatchLogs,而无需通过Internet发送它们.
AmazonVPC是一项AWS服务,可用来启动在虚拟网络中定义的AWS资源.
借助VPC,您可以控制您的网络设置,如IP地址范围、子网、路由表和网络网关.
要将VPC连接到CloudWatchLogs,请定义一个接口VPC终端节点,了解CloudWatchLogs.
这种类型的终端节点使您能够将VPC连接到AWS服务.
该终端节点提供了到CloudWatchLogs的可靠、可扩展的连接,无需互联网关、网络地址转换(NAT)实例或VPN连接.
有关更多信息,请参阅.
AmazonVPC是什么中的AmazonVPC用户指南.
接口VPC终端节点由AWSPrivateLink提供支持,后者是一项AWS技术,可将elasticnetworkinterface与私有IP地址结合使用来支持AWS服务之间的私有通信.
有关更多信息,请参阅新增–适用于AWS服务的AWSPrivateLink.
以下步骤适用于AmazonVPC的用户.
有关更多信息,请参阅.
入门中的AmazonVPC用户指南.
AvailabilityCloudWatchLogs当前在以下区域中支持VPC终端节点:美国东部(俄亥俄)美国东部(弗吉尼亚北部)美国西部(加利福尼亚北部)美国西部(俄勒冈)亚太地区(香港)亚太地区(孟买)亚太地区(首尔)亚太地区(新加坡)亚太地区(悉尼)亚太区域(东京)加拿大(中部)欧洲(法兰克福)欧洲(爱尔兰)欧洲(伦敦)欧洲(巴黎)135AmazonCloudWatchLogs用户指南为CloudWatchLogs创建VPC终端节点南美洲(圣保罗)AWSGovCloud(美国东部)AWSGovCloud(美国西部)为CloudWatchLogs创建VPC终端节点要开始将CloudWatchLogs与VPC一起使用,请为CloudWatchLogs创建接口VPC终端节点.
要选择的服务是com.
amazonaws.
Region.
log.
您无需更改CloudWatchLogs的任何设置.
有关更多信息,请参阅AmazonVPC用户指南中的创建接口终端节点.
测试VPC和CloudWatchLogs之间的连接创建终端节点后,您可以测试连接.
测试VPC和CloudWatchLogs终端节点之间的连接1.
Connect到位于VPC中的AmazonEC2实例.
有关连接的信息,请参阅连接到Linux实例或者连接到您的Windows实例(在AmazonEC2文档中).
2.
在实例中,使用AWSCLI在您的一个现有日志组中创建日志条目.
首先,创建一个包含日志事件的JSON文件.
必须将时间戳指定为自1970年1月1日00:00:00UTC以来的毫秒数.
[{"timestamp":1533854071310,"message":"VPCConnectionTest"}]然后使用put-log-events命令创建日志条目:awslogsput-log-events--log-group-nameLogGroupName--log-stream-nameLogStreamName--log-eventsfile://JSONFileName如果对该命令的响应包含nextSequenceToken,则该命令已成功执行,并且您的VPC终端节点正常运行.
控制对您的CloudWatchLogsVPC终端节点的访问VPC终端节点策略是一种IAM资源策略,您在创建或修改终端节点时可将它附加到终端节点.
如果在创建终端节点时未附加策略,我们将为您附加默认策略以允许对服务进行完全访问.
终端节点策略不会覆盖或替换IAM用户策略或服务特定的策略.
这是一个单独的策略,用于控制从终端节点中对指定服务进行的访问.
终端节点策略必须采用JSON格式编写.
有关更多信息,请参阅.
使用VPC终端节点控制对服务的访问中的AmazonVPC用户指南.
下面是CloudWatchLogs的终端节点策略示例.
该策略允许通过VPC连接到CloudWatchLogs的用户创建日志流,将日志发送到CloudWatchLogs,并禁止他们执行其他CloudWatchLogs操作.
{"Statement":[136AmazonCloudWatchLogs用户指南对VPC上下文键的支持{"Sid":"PutOnly","Principal":"*","Action":["logs:CreateLogStream","logs:PutLogEvents"],"Effect":"Allow","Resource":"*"}]}修改CloudWatchLogs的VPC终端节点策略1.
通过以下网址打开AmazonVPC控制台:https://console.
aws.
amazon.
com/vpc/.
2.
在导航窗格中,选择终端节点.
3.
如果还没有为CloudWatchLogs创建终端节点,请选择创建终端节点.
然后选择com.
amazonaws.
Region.
log并选择创建终端节点.
4.
选择com.
amazonaws.
Region.
log端点,然后选择Policy选项卡中的下半部分.
5.
选择编辑策略并对策略进行更改.
对VPC上下文键的支持CloudWatchLogs支持aws:SourceVpc和aws:SourceVpce上文键,可以限制对特定VPC或特定VPC终端节点的访问.
这些键仅当用户使用VPC终端节点时才起作用.
有关更多信息,请参阅.
可用于部分服务的键中的IAM用户指南.
137AmazonCloudWatchLogs用户指南CloudWatch中的CloudTrailWatch日志信息在AWSCloudTrail中记录亚马逊云观察记录API调用AmazonCloudWatchLogs与AWSCloudTrail集成,后者是一项提供用户、角色或AWS服务在CloudWatchLogs中所采取操作的记录的服务.
CloudTrail捕获由您的AWS账户或者代表该账户执行的API调用.
捕获的调用包含来自CloudWatch控制台的调用和对CloudWatchLogsAPI操作的代码调用.
如果您创建跟踪,则可以使CloudTrail事件持续传送到AmazonS3存储桶(包括CloudWatchLogs的事件).
如果您不配置跟踪,则仍可在CloudTrail控制台中的Eventhistory(事件历史记录)中查看最新事件.
使用CloudTrail收集的信息,您可以确定向CloudWatchLogs发出了什么请求、发出请求的IP地址、何人发出的请求、请求的发出时间以及其他详细信息.
要了解有关CloudTrail的更多信息,包括如何对其进行配置和启用,请参阅AWSCloudTrail用户指南.
主题CloudWatch中的CloudTrailWatch日志信息(p.
138)了解日志文件条目(p.
139)CloudWatch中的CloudTrailWatch日志信息在您创建AWS账户时,将在该账户上启用CloudTrail.
当CloudWatchLogs中发生受支持的事件活动时,该活动将记录在CloudTrail事件中,并与其他AWS服务事件一起保存在CloudTrail(事件历史记录.
您可以在AWS账户中查看、搜索和下载最新事件.
有关更多信息,请参阅使用CloudTrail事件历史记录查看事件.
要持续记录AWS账户中的事件(包括CloudWatchLogs的事件),请创建跟踪.
通过trail(跟踪),CloudTrail可将日志文件传送至AmazonS3存储桶.
默认情况下,在控制台中创建跟踪时,此跟踪应用于所有AWS区域.
此跟踪记录来自AWS分区中的所有区域的事件,并将日志文件传送至您指定的AmazonS3存储桶.
此外,您可以配置其他AWS服务,进一步分析在CloudTrail日志中收集的事件数据并采取操作.
有关更多信息,请参阅下列内容:创建跟踪概述CloudTrail支持的服务和集成为CloudTrail配置AmazonSNS通知从多个区域接收CloudTrail日志文件和从多个账户接收CloudTrail日志文件CloudWatchLogs支持在CloudTrail日志文件中将以下操作记录为事件:CancelExportTaskCreateExportTaskCreateLogGroupCreateLogStreamDeleteDestinationDeleteLogGroupDeleteLogStreamDeleteMetricFilterDeleteRetentionPolicy138AmazonCloudWatchLogs用户指南了解日志文件条目DeleteSubscriptionFilterPutDestinationPutDestinationPolicyPutMetricFilterPutResourcePolicyPutRetentionPolicyPutSubscriptionFilterStartQueryStopQueryTestMetricFilterCloudTrail中仅记录请求元素,以执行以下CloudWatchLogsAPI操作:DescribeDestinationsDescribeExportTasksDescribeLogGroupsDescribeLogStreamsDescribeMetricFiltersDescribeQueriesDescribeResourcePoliciesDescribeSubscriptionFiltersGetLogGroupFieldsGetLogRecord每个事件或日志条目都包含有关生成请求的人员的信息.
身份信息帮助您确定以下内容:发出请求使用的是根凭证还是AWSIdentityandAccessManagement(IAM)用户凭证.
请求是使用角色还是联合身份用户的临时安全凭证发出的.
是否由其他AWS服务发出请求.
有关更多信息,请参阅CloudTrailuserIdentity元素.
了解日志文件条目跟踪是一种配置,可用于将事件作为日志文件传送到您指定的AmazonS3存储桶.
CloudTrail日志文件包含一个或多个日志条目.
一个事件表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息.
CloudTrail日志文件不是公用API调用的有序堆栈跟踪,因此它们不会按任何特定顺序显示.
以下日志文件条目显示某个用户调用了CloudWatchLogsCreateExportTaskaction.
{"eventVersion":"1.
03","userIdentity":{"type":"IAMUser","principalId":"EX_PRINCIPAL_ID","arn":"arn:aws:iam::123456789012:user/someuser","accountId":"123456789012","accessKeyId":"AKIAIOSFODNN7EXAMPLE",139AmazonCloudWatchLogs用户指南了解日志文件条目"userName":"someuser"},"eventTime":"2016-02-08T06:35:14Z","eventSource":"logs.
amazonaws.
com","eventName":"CreateExportTask","awsRegion":"us-east-1","sourceIPAddress":"127.
0.
0.
1","userAgent":"aws-sdk-ruby2/2.
0.
0.
rc4ruby/1.
9.
3x86_64-linuxSeahorse/0.
1.
0","requestParameters":{"destination":"yourdestination","logGroupName":"yourloggroup","to":123456789012,"from":0,"taskName":"yourtask"},"responseElements":{"taskId":"15e5e534-9548-44ab-a221-64d9d2b27b9b"},"requestID":"1cd74c1c-ce2e-12e6-99a9-8dbb26bd06c9","eventID":"fd072859-bd7c-4865-9e76-8e364e89307c","eventType":"AwsApiCall","apiVersion":"20140328","recipientAccountId":"123456789012"}140AmazonCloudWatchLogs用户指南代理配置文件CloudWatchLogs代理参考Important此参考适用于较早的CloudWatchLogs代理,该代理位于弃用路径上.
强烈建议您改用统一CloudWatch代理.
有关该代理的更多信息,请参阅使用CloudWatch代理从AmazonEC2实例和本地服务器中收集指标和日志.
CloudWatchLogs代理提供一种从AmazonEC2实例中将日志数据发送到CloudWatchLogs的自动化方式.
该代理包括以下组件:一个指向AWSCLI的插件,用于将日志数据推送到CloudWatchLogs中.
一个启动进程以将数据推送到CloudWatchLogs的脚本(守护程序).
一个确保该守护程序始终运行的cron作业.
代理配置文件CloudWatchLogs代理配置文件描述CloudWatchLogs代理需要的信息.
代理配置文件的[general]一节定义适用于所有日志流的通用配置.
[logstream]一节定义将本地文件发送到远程日志流所必需的信息.
您可以有多个[logstream]节,但是每一节的名称在该配置文件中都必须唯一,如[logstream1]、[logstream2]等等.
[logstream]值和日志文件第一行数据共同定义日志文件的标识.
[general]state_file=valuelogging_config_file=valueuse_gzip_http_content_encoding=[true|false][logstream1]log_group_name=valuelog_stream_name=valuedatetime_format=valuetime_zone=[LOCAL|UTC]file=valuefile_fingerprint_lines=integer|integer-integermulti_line_start_pattern=regex|{datetime_format}initial_position=[start_of_file|end_of_file]encoding=[ascii|utf_8|.
.
]buffer_duration=integerbatch_count=integerbatch_size=integer[logstream2].
.
.
state_file指定状态文件的存储位置.
logging_config_file(可选)指定代理日志记录配置文件的位置.
如果您未在此处指定代理日志记录配置文件,系统将使用默认文件awslogs.
conf.
如果使用脚本安装代理,默认文件位置是/var/awslogs/etc/awslogs.
conf,如果使用rpm安装代理,默认文件位置是/etc/awslogs/awslogs.
conf.
此141AmazonCloudWatchLogs用户指南代理配置文件文件采用Python配置文件格式(https://docs.
python.
org/2/library/logging.
config.
html#logging-config-fileformat).
可自定义具有以下名称的日志记录程序.
cwlogs.
pushcwlogs.
push.
readercwlogs.
push.
publishercwlogs.
push.
eventcwlogs.
push.
batchcwlogs.
push.
streamcwlogs.
push.
watcher尽管默认值为INFO,以下示例仍会将阅读者和发布者的级别更改为WARNING.
[loggers]keys=root,cwlogs,reader,publisher[handlers]keys=consoleHandler[formatters]keys=simpleFormatter[logger_root]level=INFOhandlers=consoleHandler[logger_cwlogs]level=INFOhandlers=consoleHandlerqualname=cwlogs.
pushpropagate=0[logger_reader]level=WARNINGhandlers=consoleHandlerqualname=cwlogs.
push.
readerpropagate=0[logger_publisher]level=WARNINGhandlers=consoleHandlerqualname=cwlogs.
push.
publisherpropagate=0[handler_consoleHandler]class=logging.
StreamHandlerlevel=INFOformatter=simpleFormatterargs=(sys.
stderr,)[formatter_simpleFormatter]format=%(asctime)s-%(name)s-%(levelname)s-%(process)d-%(threadName)s-%(message)suse_gzip_http_content_encoding在设置为true(默认值)时,启用gziphttp内容编码来将压缩的负载发送到CloudWatchLogs.
这可以降低CPU使用率,减少NetworkOut,并降低放入延迟.
要禁用此功能,请添加http_content_编码=false添加到[一般]部CloudWatchLogs然后重新启动代理.
Note此设置只在awscli-cwlogs版本1.
3.
3和更高版本中可用.
142AmazonCloudWatchLogs用户指南代理配置文件log_group_name指定目标日志组.
如果还没有日志组,则会自动创建一个日志组.
日志组名称的长度可介于1和512个字符之间.
允许的字符包括a–z、A–Z、0–9、"_"(下划线)、"-"(连字符)、"/"(正斜杠)和".
"(句点).
log_stream_name指定目标日志流.
您可以使用文字字符串或预定义的变量({instance_id}、{hostname}、{ip_address}),或这两者的组合来定义日志流名称.
如果还没有日志流,则会自动创建一个日志流.
datetime_format指定如何从日志提取时间戳.
时间戳用于检索日志事件和生成指标.
如果未提供datetime_format,则将当前时间用于每个日志事件.
如果提供的datetime_format值对于给定日志消息无效,则使用时间戳成功解析的最近日志事件的时间戳.
如果不存在以前的日志事件,则使用当前时间.
下面列出了常见datetime_format代码.
您也可以使用Pythondatetime.
strptime()支持的所有datetime_format代码.
时区偏移量(%z)也受支持(即使Python3.
2之前的版本都不支持它),[+-]HHMM,不带冒号(:).
有关更多信息,请参阅strftime()和strptime()行为.
%y:使用以零填充的十进制数字形式的没有世纪的年份.
00,01,.
.
.
,99%Y:使用十进制数字形式的年份%b:使用区域设置的缩写名称形式的月份.
Jan、Feb.
.
.
Dec(en_US);%B:使用区域设置的完整名称形式的月份.
January,February.
.
.
December(en_US);%m:使用以零填充的十进制数字形式的月份.
01,02,.
.
.
,12%d:使用以零填充的十进制数字形式的日期.
01,02,.
.
.
,31%H:使用以零填充的十进制数字形式的小时(24小时制).
00,01,.
.
.
,23%I:使用以零填充的十进制数字形式的小时(12小时制).
01,02,.
.
.
,12%p:区域设置中等效于AM或PM的表示形式.
%M:使用以零填充的十进制数字形式的分钟00,01,.
.
.
,59%S:使用以零填充的十进制数字形式的第二个.
00,01,.
.
.
,59%f:使用十进制数字形式的微秒,左边使用以零填充.
000000,.
.
.
,999999%z:使用+HHMM或-HHMM形式的UTC偏移量.
+0000,-0400,示例格式:Syslog:'%b%d%H:%M:%S',e.
g.
Jan2320:59:29Log4j:'%d%b%Y%H:%M:%S',e.
g.
24Jan201405:00:00ISO8601:'%Y-%m-%dT%H:%M:%S%z',e.
g.
2014-02-20T05:20:20+0000time_zone指定日志事件时间戳的时区.
支持的两个值为UTC和LOCAL.
默认值为LOCAL,如果无法基于datetime_format推断时区,则将使用此默认值.
file指定您要推送到CloudWatchLogs的日志文件.
File可以指向一个特定文件或多个文件(使用通配符,如/var/log/system.
log*).
根据文件修改时间,只有最新文件才会推送到CloudWatchLogs中.
我们建143AmazonCloudWatchLogs用户指南结合使用CloudWatchLogs代理与HTTP代理议您使用通配符指定同一类型的一系列文件(如access_log.
2014-06-01-01、access_log.
2014-06-01-02等)而不是多个类型的文件(如access_log_80和access_log_443).
要指定多个类型的文件,请在配置文件中再添加一个日志流条目,让每一种日志文件转到不同的日志流.
不支持压缩文件.
file_fingerprint_lines指定用于识别文件的行范围.
有效值是一个数字或两个用短划线分隔的数字,如"1"、"2-5".
默认值是"1",因此第一行用于计算指纹.
除非所有指定行都可用,否则指纹不会发送到CloudWatchLogs中.
multi_line_start_pattern指定用于识别日志消息开头的模式.
日志消息由与模式匹配的行以及与模式不匹配的任何以下行组成.
有效值为正则表达式或{datetime_format}.
使用{datetime_format}时,应指定datetime_format选项.
默认值为"^[^\s]",因此以非空格字符开头的任何行都会使上一个日志消息结束,并开始新的日志消息.
initial_position指定从何处开始读取数据(start_of_file或end_of_file).
默认位置是start_of_file.
仅当日志流没有持续状态时才会使用它.
编码指定日志文件的编码,以便正确读取该文件.
默认编码为utf_8.
Pythoncodecs.
decode()支持的编码可在此处使用.
Warning指定错误的编码可能导致数据丢失,因为无法解码的字符将被其他字符替代.
以下是一些常见编码:ascii,big5,big5hkscs,cp037,cp424,cp437,cp500,cp720,cp737,cp775,cp850,cp852,cp855,cp856,cp857,cp858,cp860,cp861,cp862,cp863,cp864,cp865,cp866,cp869,cp874,cp875,cp932,cp949,cp950,cp1006,cp1026,cp1140,cp1250,cp1251,cp1252,cp1253,cp1254,cp1255,cp1256,cp1257,cp1258,euc_jp,euc_jis_2004,euc_jisx0213,euc_kr,gb2312,gbk,gb18030,hz,iso2022_jp,iso2022_jp_1,iso2022_jp_2,iso2022_jp_2004,iso2022_jp_3,iso2022_jp_ext,iso2022_kr,latin_1,iso8859_2,iso8859_3,iso8859_4,iso8859_5,iso8859_6,iso8859_7,iso8859_8,iso8859_9,iso8859_10,iso8859_13,iso8859_14,iso8859_15,iso8859_16,johab,koi8_r,koi8_u,mac_cyrillic,mac_greek,mac_iceland,mac_latin2,mac_roman,mac_turkish,ptcp154,shift_jis,shift_jis_2004,shift_jisx0213,utf_32,utf_32_be,utf_32_le,utf_16,utf_16_be,utf_16_le,utf_7,utf_8,utf_8_sigbuffer_duration指定日志事件批量处理的时间段.
最小值为5000ms,默认值为5000ms.
batch_count指定批处理中的日志事件的最大数量(最大为10000).
默认值是10000.
batch_size指定批处理中的日志事件的最大大小(以字节为单位,最大为1048576字节).
默认值为1048576字节.
此大小的计算方式是UTF-8格式的所有事件消息之和加上代表每个日志事件的26字节.
结合使用CloudWatchLogs代理与HTTP代理您可以将CloudWatchLogs代理与HTTP代理结合使用.
144AmazonCloudWatchLogs用户指南划分CloudWatchLogs代理配置文件Note在awslogs-agent-setup.
py版本1.
3.
8或更高版本中支持HTTP代理.
结合使用CloudWatchLogs代理与HTTP代理1.
请执行下列操作之一:a.
对于CloudWatchLogs代理的新安装,请运行以下命令:curlhttps://s3.
amazonaws.
com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.
py-Osudopythonawslogs-agent-setup.
py--regionus-east-1--http-proxyhttp://your/proxy--https-proxyhttp://your/proxy--no-proxy169.
254.
169.
254为了维护在EC2实例上对AmazonEC2元数据服务的访问,请使用无代理(推荐).
有关更多信息,请参阅.
实例元数据和用户数据中的适用于Linux实例的AmazonEC2用户指南.
在http-proxy和https-proxy的值中,您指定完整URL.
b.
对于CloudWatchLogs代理的现有安装,请编辑/var/awslogs/etc/proxy.
conf,然后添加您的代理:HTTP_PROXY=HTTPS_PROXY=NO_PROXY=2.
重新启动代理以使更改生效:sudoserviceawslogsrestart如果您使用的是AmazonLinux2,请使用以下命令重新启动代理.
sudoserviceawslogsdrestart划分CloudWatchLogs代理配置文件如果您正在将awslogs-agent-setup.
py版本1.
3.
8或更高版本与awscli-cwlogs1.
3.
3或更高版本结合使用,可以通过在/var/awslogs/etc/config/目录中创建额外配置文件,独立于其他组件来导入各种组件的不同流配置.
在CloudWatchLogs代理启动时,将在这些额外的配置文件中包含所有流配置.
[general]节中的配置属性必须在主配置文件(/var/awslogs/etc/awslogs.
conf)中定义,并且在/var/awslogs/etc/config/中找到的任何额外配置文件中将被忽略.
如果您是使用rpm安装的代理,因此没有/var/awslogs/etc/config/目录,则可以使用/etc/awslogs/config/目录代替.
重新启动代理以使更改生效:sudoserviceawslogsrestart如果您使用的是AmazonLinux2,请使用以下命令重新启动代理.
sudoserviceawslogsdrestart145AmazonCloudWatchLogs用户指南CloudWatchLogs代理常见问题CloudWatchLogs代理常见问题支持哪些类型的文件轮换支持以下文件轮换机制:用数字后缀为现有日志文件命名,然后重新创建原始的空日志文件.
例如,/var/log/syslog.
log重命名为/var/log/syslog.
log.
1.
如果/var/log/syslog.
log.
1从上次轮换起就已存在,则重命名为/var/log/syslog.
log.
2.
在创建副本后截断原始日志文件.
例如,/var/log/syslog.
log复制到/var/log/syslog.
log.
1,会截断/var/log/syslog.
log.
这种情况下可能会有数据丢失,因此请谨慎使用这种文件轮换机制.
使用与旧文件相同的通用模式创建新文件.
例如,/var/log/syslog.
log.
2014-01-01仍然保留,将创建/var/log/syslog.
log.
2014-01-02.
文件的指纹(源ID)是通过将日志流键和文件内容第一行进行哈希处理计算得到的.
要覆盖此行为,可以使用file_fingerprint_lines选项.
当文件进行轮换时,新文件应该有新内容,旧文件不应追加内容;代理将在完成旧文件的读取后推送新文件.
如何确定我使用的是哪个版本的代理如果您使用安装脚本安装CloudWatchLogs代理,则可以使用/var/awslogs/bin/awslogs-version.
sh以检查您正在使用的代理版本.
它会打印代理的版本及其主要依赖关系.
如果您使用yum来安装CloudWatchLogs代理,则可以使用"百胜信息awslog"和"yum信息AWS-客户端插件-云监视日志"来检查CloudWatchLogs代理和插件的版本.
日志条目如何转换为日志事件日志事件包含两个属性:事件发生时的时间戳,以及原始日志消息.
默认情况下,以非空格字符开头的任何行都会使上一个日志消息结束(如果存在),并开始新的日志消息.
要覆盖此行为,可以使用multi_line_start_pattern,与模式匹配的任何行都开始新的日志消息.
模式可以是任何正则表达式或"{datetime_format}".
例如,如果每条日志消息的第一行包含一个时间戳,如"2014-01-02T13:13:01Z",那么multi_line_start_pattern可以设置为'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z'.
要简化配置,可以在指定datetime_format选项的情况下使用"{datetime_format}"变量.
对于同一个示例,如果datetime_format设置为"%Y-%m-%dT%H:%M:%S%z",则multi_line_start_pattern可以仅仅是"{datetime_format}".
如果未提供datetime_format,则将当前时间用于每个日志事件.
如果提供的datetime_format对于给定日志消息无效,则使用时间戳成功解析的最近日志事件的时间戳.
如果不存在以前的日志事件,则使用当前时间.
当日志事件回退到当前时间或上一个日志事件的时间时,会记录一个警告消息.
时间戳用于检索日志事件和生成指标,因此,如果您指定错误的格式,则可能无法检索日志事件,生成错误的指标.
日志事件如何批处理满足以下任意条件时,表示批次已满并且将发布:1.
从添加第一个日志事件以来,时间已经过了buffer_duration.
2.
累积的日志事件小于batch_size,但添加新的日志事件则会超出batch_size.
3.
日志事件的数量已达到batch_count.
4.
批处理中的日志事件的时间跨度不超过24小时,但添加新日志事件会超出24小时的限制.
什么原因可能导致跳过或截断日志条目、日志事件或批次为遵循PutLogEvents操作的限制,需注意,以下问题可能导致跳过日志事件或批次.
Note在跳过数据时,CloudWatchLogs代理在其日志中写入一条警告.
1.
如果日志事件的大小超过256KB,则将完全跳过日志事件.
2.
如果日志事件的时间戳晚于未来2小时,则跳过日志事件.
146AmazonCloudWatchLogs用户指南CloudWatchLogs代理常见问题3.
如果日志事件的时间戳早于过去14天,则跳过日志事件.
4.
如果任何日志事件的存在时间超过日志组的保留期,则跳过整个批次.
5.
如果单个PutLogEvents请求中的一批日志事件时间跨度超过24小时,则PutLogEvents操作将失败.
停止代理会导致数据丢失/重复条目吗只要状态文件可用,且从上次运行以来没有发生文件轮换,则不会.
CloudWatchLogs代理可以从它停止的地方启动,然后继续推送日志数据.
我可以将来自相同或不同主机的不同日志文件指向同一个日志流吗不支持配置多个日志源将数据发送到单个日志流.
代理调用哪些API(或我应该将哪些操作添加到IAM策略中)CloudWatchLogs代理需要CreateLogGroup、CreateLogStream、DescribeLogStreams,和PutLogEvents运算.
如果您使用最新的代理,则不需要DescribeLogStreams.
请参阅以下IAM策略示例.
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents","logs:DescribeLogStreams"],"Resource":["arn:aws:logs:*:*:*"]}]}我不希望CloudWatchLogs代理自动创建日志组或日志流.
我如何阻止代理重新创建日志组和日志流在您的IAM策略中,您可以限制该代理仅执行以下操作:DescribeLogStreams、PutLogEvents.
在撤销代理的CreateLogGroup和CreateLogStream权限之前,请确保创建希望代理使用的日志组和日志流.
如果日志代理没有CreateLogGroup和CreateLogStream权限,它将无法在您创建的日志组中创建日志流.
在进行故障排除时我应当查看哪些日志代理安装日志位于/var/log/awslogs-agent-setup.
log,代理日志位于/var/log/awslogs.
log.
147AmazonCloudWatchLogs用户指南CloudWatchLogs指标使用CloudWatch指标进行监控CloudWatchLogs每分钟都会向AmazonCloudWatch发送指标.
CloudWatchLogs指标AWS/Logs命名空间包括以下指标.
指标描述DeliveryErrorsCloudWatchLogs将数据转发到订阅目标时收到错误的日志事件的数量.
有效维度:LogGroupName、DestinationType、FilterName有效统计数据:总计单位:无DeliveryThrottling将数据转发到订阅目标时被阻止CloudWatchLogs的日志事件的数量.
有效维度:LogGroupName、DestinationType、FilterName有效统计数据:总计单位:无ForwardedBytes以压缩字节转发到订阅目标的日志事件的容量.
有效维度:LogGroupName、DestinationType、FilterName有效统计数据:总计单位:字节ForwardedLogEvents转发到订阅目标的日志事件的数量.
有效维度:LogGroupName、DestinationType、FilterName有效统计数据:总计单位:无IncomingBytes以未压缩字节上传到CloudWatchLogs的日志事件的容量.
当用于LogGroupName维度时,这是以未压缩字节上传到日志组的日志事件的容量.
有效维度:LogGroupName有效统计数据:总计单位:字节IncomingLogEvents上传到CloudWatchLogs的日志事件的数量.
当用于LogGroupName维度时,这是上传到日志组的日志事件的数量.
有效维度:LogGroupName148AmazonCloudWatchLogs用户指南CloudWatchLogs指标的维度指标描述有效统计数据:总计单位:无CloudWatchLogs指标的维度下面列出了可用于CloudWatchLogs指标的维度.
维度描述LogGroupName要显示其指标的CloudWatchLogs日志日志日志组的名称.
DestinationTypeCloudWatchLogs数据的订阅目标,可以是AWSLambda、AmazonKinesisDataStreams或AmazonKinesisDataFirehose.
FilterName将数据从日志组转发到目标的订阅筛选器的名称.
CloudWatch将自动将订阅筛选器名称转换为ASCII,且任何不受支持的字符将被替换为问号().
149AmazonCloudWatchLogs用户指南CloudWatchLogs配额CloudWatchLogs具有以下配额:资源默认配额批处理大小1MB(最大).
无法更改此配额.
数据存档最多免费存档5GB的数据.
无法更改此配额.
CreateLogStream每秒50个事务(TPS/账户/区域),随后事务将被限制.
您可以请求提高配额.
DescribeLogGroups每秒5个事务(TPS/账户/区域).
您可以请求提高配额.
DescribeLogStreams每秒5个事务(TPS/账户/区域).
您可以请求提高配额.
发现的日志字段CloudWatchLogsInsights在日志组中可以发现最多1000个日志事件字段.
无法更改此配额.
有关更多信息,请参阅支持的日志和发现的字段(p.
30).
从JSON日志中提取日志字段CloudWatchLogsInsights可以从JSON日志中提取最多100个日志事件字段.
无法更改此配额.
有关更多信息,请参阅支持的日志和发现的字段(p.
30).
事件大小256KB(最大).
无法更改此配额.
导出任务每个账户一次一个活动(运行中或等待中)的导出任务.
无法更改此配额.
FilterLogEvents每秒5个事务(TPS)/账户/区域.
无法更改此配额.
GetLogEvents每个区域的每个账户每秒10个请求.
无法更改此配额.
如果您持续处理新的数据,建议您进行订阅.
如果需要历史数据,建议将数据导出到AmazonS3.
传入数据最多免费传入5GB的数据.
无法更改此配额.
日志组每个区域每个账户每个账户1,000000个日志组.
您可以请求提高配额.
对可属于一个日志组的日志流数没有配额.
指标筛选器每个日志组100个.
无法更改此配额.
嵌入式指标格式指标每个日志事件100个指标,每个指标9个维度.
有关嵌入式指标格式的更多信息,请参阅规范:嵌入式指标格式.
PutLogEvents每个日志流每秒5个请求.
额外的请求将被阻止.
无法更改此配额.
PutLogEvents请求的最大批处理大小为1MB.
每区域每账户每秒800个事务.
您可以请求提高配额.
150AmazonCloudWatchLogs用户指南资源默认配额查询执行超时值CloudWatchLogsInsights中的查询将在15分钟后超时.
无法更改此时间限制.
查询的日志组在单个CloudWatchLogsInsights查询中最多可以查询20个日志组.
无法更改此配额.
查询并发性最多10个并发CloudWatchLogsInsights查询,包括已添加到控制面板的查询.
您可以请求提高配额.
查询结果可用性查询的结果可在7天内检索.
无法更改此可用时间.
显示在控制台中的查询结果控制台默认最多显示1000行查询结果.
在查询中,您可以使用limit命令将此数量增加到最多10000行.
有关更多信息,请参阅CloudWatchLogsInsights查询语法(p.
35).
资源策略每个账户每个区域最多10个CloudWatchLogs资源策略.
无法更改此配额.
保存的查询每个账户每个区域可以保存多达1000个CloudWatchLogsInsights查询.
无法更改此配额.
订阅筛选器每个日志组2个.
无法更改此配额.
151AmazonCloudWatchLogs用户指南文档历史记录下表列出了从2018年6月开始的每个版本的CloudWatchLogs用户指南中的重要更改.
如需对此文档更新的通知,您可以订阅RSS源.
update-history-changeupdate-history-descriptionupdate-history-dateCloudWatchLogsInsights发布(p.
152)您可以使用CloudWatchLogsInsights以交互方式搜索和分析您的日志数据.
有关更多信息,请参阅.
使用CloudWatchLogsInsights分析日志数据中的AmazonCloudWatchLogs用户指南2018年11月27日对AmazonVPC终端节点的支持(p.
152)您现在可以在VPC和CloudWatchLogs之间建立私有连接.
有关更多信息,请参阅.
将CloudWatchLogs与接口VPC终端节点一起使用中的AmazonCloudWatchLogs用户指南.
2018年28月6日下表介绍了对AmazonCloudWatchLogs用户指南的一些重要更改.
变更描述发行日期接口VPC终端节点在某些区域,您可以使用接口VPC终端节点,以防止AmazonVPC和CloudWatchLogs之间的流量离开Amazon网络.
有关更多信息,请参阅将CloudWatchLogs与接口VPC终端节点一起使用(p.
135).
2018年3月7日Route53DNS查询日志您可以使用CloudWatchLogs存储有关Route53收到的DNS查询的日志.
有关更多信息,请参阅.
什么是AmazonCloudWatchLogs(p.
1)或者记录DNS查询,请参阅AmazonRoute53开发人员指南.
2017年9月7日标记日志组您可以使用标签对日志组进行分类.
有关更多信息,请参阅标记AmazonCloudWatchLogs中的日志组(p.
54).
2016年12月13日控制台改进您可以从指标图导航到关联的日志组.
有关更多信息,请参阅从指标定向至日志(p.
53).
2016年11月7日控制台可用性改进改善了体验以更轻松地搜素、筛选和排查问题.
例如,您现在可以筛选出某个日期和时间范围内的日志数据.
有关更多信息,请参阅查看发送到CloudWatchLogs的日志数据(p.
51).
2016年8月29日添加了针对AmazonCloudWatchLogs和新的添加了对CloudWatchLogs的AWSCloudTrail支持.
有关更多信息,请参阅在AWSCloudTrail中记录亚马逊云观察记录API调用(p.
138).
2016年3月10日152AmazonCloudWatchLogs用户指南变更描述发行日期CloudWatchLogs指标的AWSCloudTrail支持添加了对CloudWatchLogs导出到AmazonS3的支持添加了对将CloudWatchLogs数据导出到AmazonS3的支持.
有关更多信息,请参阅将日志数据导出到AmazonS3(p.
109).
2015年12月7日添加了对AmazonCloudWatchLogs中记录的AWSCloudTrail事件的支持您可以在CloudWatch中创建警报并接收CloudTrail捕获的特定API活动的通知,然后使用通知执行问题排查.
2014年11月10日添加了对AmazonCloudWatchLogs的支持您可以使用AmazonCloudWatchLogs监控、存储和访问来自AmazonElasticComputeCloudWatchLogs(AmazonEC2)实例或其他来源的系统、应用程序和自定义日志文件.
然后,您可以使用AmazonCloudWatch控制台、AWSCLI中的CloudWatch日志命令或CloudWatchLogs软件开发工具包从CloudWatch日志中检索关联的日志数据.
有关更多信息,请参阅什么是AmazonCloudWatchLogs(p.
1).
2014年7月10日153AmazonCloudWatchLogs用户指南AWS词汇表ForthelatestAWSterminology,seetheAWSglossaryintheAWSGeneralReference.
154AmazonCloudWatchLogs用户指南本文属于机器翻译版本.
若本译文内容与英语原文存在差异,则一律以英文原文为准.
clv
轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:1.用户购...
这个月11号ShockHosting发了个新上日本东京机房的邮件,并且表示其他机房可以申请转移到日本,刚好赵容手里有个美国的也没数据就发工单申请新开了一个,这里做个简单的测试,方便大家参考。ShockHosting成立于2013年,目前提供的VPS主机可以选择11个数据中心,包括美国洛杉矶、芝加哥、达拉斯、杰克逊维尔、新泽西、澳大利亚、新加坡、日本、荷兰和英国等。官方网站:https://shoc...
便宜的香港vps多少钱?现在国外VPS主机的价格已经很便宜了,美国VPS主机最低一个月只要十几元,但同样免备案的香港VPS价格贵不贵呢?或者说便宜的香港VPS多少钱?香港vps主机价格要比美国机房的贵一些,但比国内的又便宜不少,所以目前情况是同等配置下,美国VPS比香港的便宜,香港VPS比国内(指大陆地区)的便宜。目前,最便宜香港vps低至3元/首月、18元/月起,今天云服务器网(www.yunt...
favicon为你推荐
朝阳分局犯罪嫌疑人标准化信息采集系统支持ipad支持ipad支持ipad阿片类药物:您需要知道什么化学品安全技术说明书ipad如何上网如何用手机流量在IPAD上上网css下拉菜单css下拉菜单代码css下拉菜单html+css下拉菜单怎么制作win7telnet怎样在win7下打开telnet 命令
主机域名 linode日本 hostgator 息壤主机 mediafire 缓存服务器 bash漏洞 info域名 java空间 网通ip qq数据库下载 元旦促销 我爱水煮鱼 hkt 能外链的相册 免费私人服务器 无限流量 跟踪路由命令 web服务器是什么 中国域名 更多