

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建计划查询
<a name="create-scheduled-query"></a>

创建计划查询，自动运行 L CloudWatch ogs Insights 查询并将结果传送到您选择的目的地。

## 先决条件
<a name="create-scheduled-query-prerequisites"></a>

在创建计划查询之前，请确保您具备以下条件：
+ **日志组**-包含要分析的数据的一个或多个日志组
+ **执行 IAM 角色**-具有以下权限的 IAM 角色：
  + `logs:StartQuery`-启动 CloudWatch 日志见解查询的权限
  + `logs:GetQueryResults`-检索查询结果的权限
  + `logs:DescribeLogGroups`-访问日志组信息的权限。只有基于前缀的日志组才需要这样做，以便发现日志组
+ **目的地权限**-您所选目的地的其他 IAM 权限：
  + 对于亚马逊 S3 目的地：`s3:PutObject`
+ **fo AWS CLI r 和 API 用法**-配置了具有调用 CloudWatch 日志权限的 AWS 凭证 APIs

有关详细的 IAM 策略示例，请参阅[Amazon CloudWatch 日志的身份和访问管理](auth-and-access-control-cwl.md)。另外需要注意的是，每个账户只能有 1000 个预定查询。

------
#### [ Console ]

**创建计划查询（控制台）**

1. 在[https://us-east-1.console.aws.amazon.com/cloudwatch/家打开 CloudWatch 日志控制台？ region=us-east-1 \#logsv2: Logs-Insigh](https://us-east-1.console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:logs-insights)

1. 在导航窗格中，选择**日志、见解**。

1. 选择 “**创建计划查询”**。

1. 在 “**查询定义**” 部分中：

   1. 对于**查询语言**，请从列表中选择要使用的查询语言。

   1. 对于**查询字符串**，在框中输入您的 CloudWatch Logs Insights 查询。

   1. 对于**日志组**，请从列表中选择要查询的日志组。

1. 在 “**时间表设置**” 部分：

   1. 对于**计划表达式**，请配置查询的运行时间。从预定义的选项中选择或输入自定义 cron 表达式。

   1. 对于 “**创建时生效**”，请指定计划何时生效。选择立即开始或使用YYYY/MM/DD格式在特定的日期和时间开始。

   1. 在 “**时间范围**” 中，指定每次执行查询的回顾周期。输入以分钟为单位的持续时间，该持续时间定义了从执行时间向后多久进行查询。

   1. 对于**无限期继续**，请指定计划何时结束。使用YYYY/MM/DD格式选择无限期运行或直到特定的日期和时间运行。

1. 控制台将根据您的配置显示接下来的三次计划查询运行，并以 UTC 显示查询执行的确切日期和时间。

1. 在 “将**查询结果发布到 S3-可选**” 部分（如果使用 S3 目标）：

   1. 对于 **S3 存储桶**，如果目标存储桶在同一个**账户中，则选择此** AWS 账户；如果存储桶位于不同的**账户中，则选择其他** AWS 账户，并提供拥有存储桶的账户的账户 ID 作为输入。

   1. 对于 **Amazon S3 URI**，请输入存储结果的 Amazon S3 存储桶和前缀（例如`s3://my-bucket/query-results/`）。如果您选择了 “**此账户**”，则可以选择 “**浏览 Amazon S3**” 进行导航，然后选择现有的 Amazon S3 地点。

   1. （可选）对于 **KMS 密钥 ARN**，请输入客户托管密 AWS KMS 钥的 ARN 以使用 SSE-KMS 对查询结果进行加密。密钥必须与目标 Amazon S3 存储桶位于同一 AWS 区域。

1. 在 “**用于将查询结果发布到 Amazon S3 的 IAM 角色**” 部分中，选择以下选项之一：

   1. 选择 “**自动创建具有默认权限的新角色**”，以自动设置一个 IAM 角色，该角色具有 CloudWatch 日志将查询结果传送到 Amazon S3 所需的权限。

   1. 选择**使用现有角色选择一个现有** IAM 角色，该角色具有将查询结果传送到 Amazon S3 所需的 CloudWatch 日志策略。使用搜索字段从列表中查找并选择相应的 IAM 角色。

1. 在**用于计划查询执行的 IAM 角色**部分，选择以下选项之一：

   1. 选择 “**自动创建具有默认权限的新角色”**，以自动设置一个 IAM 角色，该角色具有 CloudWatch 日志执行计划查询所需的权限。

   1. 选择**使用现有角色**选择具有 CloudWatch 日志执行计划查询所需策略的现有 IAM 角色。使用搜索字段从列表中查找并选择相应的 IAM 角色。

1. 选择**创建计划**以创建计划查询。

------
#### [ AWS CLI ]

**创建计划查询 (AWS CLI)**
+ 使用`create-scheduled-query`命令创建新的计划查询：

  ```
  aws logs create-scheduled-query \
      --name "ErrorAnalysisQuery" \
      --query-language "CWLI" \
      --query-string "fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m)" \
      --schedule-expression "cron(8 * * * ? *)" \
      --execution-role-arn "arn:aws:iam::123456789012:role/CloudWatchLogsScheduledQueryRole" \
      --log-group-identifiers "/aws/lambda/my-function" "/aws/apigateway/my-api" \
      --state "ENABLED"
  ```

------
#### [ API ]

**创建计划查询 (API)**
+ 使用`CreateScheduledQuery`操作创建新的计划查询。以下示例创建了每小时运行一次的计划查询：

  ```
  {
      "name": "ErrorAnalysisQuery",
      "queryLanguage": "CWLI",
      "queryString": "fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m)",
      "scheduleExpression": "cron(8 * * * ? *)",
      "executionRoleArn": "arn:aws:iam::123456789012:role/CloudWatchLogsScheduledQueryRole",
      "logGroupIdentifiers": ["/aws/lambda/my-function", "/aws/apigateway/my-api"],
      "state": "ENABLED"
  }
  ```

------

创建计划查询后，您可以从 “**计划查询” 页面和使用 ListScheduledQueries API 查看和管理该查询**，API 会显示您的所有计划查询及其名称、创建日期、上次运行状态、上次触发时间和重复频率。