

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

# Amazon Managed Service for Apache Flink 的日志记录和监控
<a name="monitoring-overview"></a>

要保持Managed Service for Apache Flink的应用程序的可靠性、可用性和性能，监控是一个重要环节。您应该从 AWS 解决方案的所有部分收集监控数据，以便在出现多点故障时可以更轻松地进行调试。

在开始监控Managed Service for Apache Flink之前，您应该创建一个监控计划，其中包括以下问题的答案：
+ 监控目的是什么？
+ 您将监控哪些资源？
+ 监控这些资源的频率如何？
+ 您将使用哪些监控工具？
+ 谁负责执行监控任务？
+ 出现错误时应通知谁？

下一步是为您环境中正常的Managed Service for Apache Flink的性能设置基准。您可以通过在不同时间和不同负载条件下衡量性能来获得这一基准。在监控Managed Service for Apache Flink时，您可以存储历史监控数据。然后，您可以将其与当前性能数据进行比较，确定正常的性能模式和性能异常，并找出解决问题的方法。

**Topics**
+ [Managed Service for Apache Flink 中的日志记录](logging.md)
+ [在 Managed Service for Apache Flink 中监控](monitoring.md)
+ [设置 Managed Service for Apache Flink 中的应用程序日志记录](cloudwatch-logs.md)
+ [使用 “日志见解” 分析 CloudWatch 日志](cloudwatch-logs-reading.md)
+ [Managed Service for Apache Flink 中的指标和维度](metrics-dimensions.md)
+ [将自定义消息写入 CloudWatch 日志](cloudwatch-logs-writing.md)
+ [使用记录适用于 Apache 的托管服务 Flink API 调用 AWS CloudTrail](logging-using-cloudtrail.md)

# Managed Service for Apache Flink 中的日志记录
<a name="logging"></a>

日志记录对于生产应用程序了解错误和故障非常重要。但是，日志子系统需要收集日志条目并将其转发到日志中。虽然有些 CloudWatch 日志记录是可以的，但大量的日志记录可能会使服务过载并导致 Flink 应用程序落后。日志记录异常和警告当然是个好主意。但是，您无法为 Flink 应用程序处理的每条消息生成日志消息。Flink 针对高吞吐量和低延迟进行了优化，但日志记录子系统却没有。如果确实需要为每条已处理的消息生成日志输出，请在 Flink 应用程序中使用额外的 DataStream 日志和适当的接收器将数据发送到 Amazon S3 或 CloudWatch。请勿为此使用 Java 日志记录系统。此外，Managed Service for Apache Flink `Debug Monitoring Log Level` 设置会生成大量流量，这可能会造成反向压力。只有在积极调查应用程序问题时才应使用它。

## 使用 “日志见解” 查询 CloudWatch 日志
<a name="logging-querying"></a>

CloudWatch Logs Insights 是一项强大的服务，可以大规模查询日志。客户应利用其功能快速搜索日志，以识别和减少操作事件期间的错误。

 以下查询在所有任务管理器日志中查找异常，并根据异常发生的时间对其进行排序。

```
fields @timestamp, @message
| filter isPresent(throwableInformation.0) or isPresent(throwableInformation) or @message like /(Error|Exception)/
| sort @timestamp desc
```

有关其他有用的查询，请参阅[示例查询](https://docs.aws.amazon.com/managed-flink/latest/java/cloudwatch-logs-reading.html#cloudwatch-logs-reading-examples)。

# 在 Managed Service for Apache Flink 中监控
<a name="monitoring"></a>

在生产环境中运行流式处理应用程序时，您要设法连续且无限期地执行该应用程序。对所有组件（而不仅仅是 Flink 应用程序）实施监控和适当的警报至关重要。否则，您有可能在早期错过新出现的问题，在操作事件完全呈现且更难缓解时才意识到该事件。需要监控的一般内容包括：
+ 源是否在摄取数据？
+ 数据是否从源头读取（从来源的角度来看）？
+ Flink 应用程序是否正在接收数据？
+ Flink 应用程序是否正常还是性能有所下降？
+ Flink 应用程序是否一直将数据传入到接收器（从应用程序的角度来看）？
+ 接收器正在接收数据吗？

然后，应考虑为 Flink 应用程序制定更具体的指标。此[CloudWatch 仪表板](https://github.com/aws-samples/kda-metrics-dashboard)提供了一个很好的起点。有关生产应用程序应监控哪些指标的更多信息，请参阅[在适用于 Apache Flink 的亚马逊托管服务中使用 CloudWatch 警报](monitoring-metrics-alarms.md)。这些指标包括：
+ **records\$1lag\$1max** 和 **millisbehindLatest** — 如果应用程序从 Kinesis 或 Kafka 使用，则这些指标会表明应用程序性能是否下降，是否需要进行扩展以匹配当前的负载。这是一个很好的通用指标，对于各种应用程序都很容易跟踪。但它只能用于被动扩展，即当应用程序性能已经有所下降时。
+ **CPU利用**率**heapMemoryUtilization**和 — 这些指标可以很好地指示应用程序的总体资源利用率，除非应用程序已绑定，否则可用于主动扩展。 I/O 
+ **停机时间** — 停机时间大于零表示应用程序已失败。如果该值大于 0，则应用程序不处理任何数据。
+ **lastCheckpointSize**而且 *lastCheckpointDuration*— 这些指标监控状态下存储了多少数据以及检查点需要多长时间。如果检查点增加或花费很长时间，则应用程序会持续花费时间进行检查点操作，从而减少实际处理的周期。在某些时候，检查点可能会变得太大或花费很长时间以至于失败。除了监控绝对值外，客户还应考虑使用`RATE(lastCheckpointSize)`和`RATE(lastCheckpointDuration)`监控变化率。
+ **numberOfFailed检查点**-此指标计算自应用程序启动以来失败的检查点数量。根据应用程序的不同，如果检查点偶尔失败，则是可以容忍的。但是，如果检查点经常出现故障，则该应用程序很可能运行状况不佳，需要进一步关注。我们建议通过监控`RATE(numberOfFailedCheckpoints)`而不是绝对值来设置梯度报警。

# 设置 Managed Service for Apache Flink 中的应用程序日志记录
<a name="cloudwatch-logs"></a>

通过在 Apache Flink 托管服务应用程序中添加 Amazon CloudWatch 日志选项，您可以监控应用程序事件或配置问题。

本主题介绍如何配置您的应用程序以将应用程序事件写入 CloudWatch 日志流。 CloudWatch 日志选项是应用程序设置和权限的集合，您的应用程序使用这些设置和权限来配置将应用程序事件写入 CloudWatch 日志的方式。您可以使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 添加和配置 CloudWatch 日志记录选项。

请注意以下有关向应用程序添加 CloudWatch 日志记录选项的注意事项：
+ 使用控制台添加 CloudWatch 日志选项时，适用于 Apache 的托管服务 Flink 会为您创建 CloudWatch 日志组和日志流，并添加应用程序写入日志流所需的权限。
+ 使用 API 添加 CloudWatch 日志记录选项时，还必须创建应用程序的日志组和日志流，并添加应用程序写入日志流所需的权限。

## 使用控制台设置 CloudWatch 日志
<a name="cloudwatch-logs-console"></a>

当您在控制台中为应用程序启用 CloudWatch 日志记录功能时，将为您创建 CloudWatch 日志组和日志流。此外，还会使用写入到流的权限更新应用程序的权限策略。

适用于 Apache 的托管服务 Flink 使用以下约定创建一个命名的日志组，其中*ApplicationName*是您的应用程序的名称。

```
/aws/kinesis-analytics/ApplicationName
```

Managed Service for Apache Flink使用以下名称在新日志组中创建一个日志流。

```
kinesis-analytics-log-stream
```

您可以使用**配置应用程序**页面的**监控日志级别**部分来设置应用程序监控指标级别和监控日志级别。有关应用程序日志级别的信息，请参阅[控制应用程序监控级别](#cloudwatch_levels)。

## 使用 CLI 设置 CloudWatch 日志
<a name="cloudwatch-logs-api"></a>

要使用添加 CloudWatch 日志记录选项 AWS CLI，请完成以下操作：
+ 创建 CloudWatch 日志组和日志流。
+ 使用操作创建应用程序时添加日志记录选项，或者使用[CreateApplication](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html)操作向现有应用程序添加日志记录选项。[AddApplicationCloudWatchLoggingOption](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html)
+ 在应用程序的策略中添加权限以写入到日志。

### 创建 CloudWatch 日志组和日志流
<a name="cloudwatch-logs-api-create"></a>

您可以使用 CloudWatch 日志控制台或 API 创建 CloudWatch 日志组并进行流式传输。有关创建 CloudWatch 日志组和日志流的信息，请参阅[使用日志组和日志流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

### 使用应用程序 CloudWatch 日志选项
<a name="adding_cloudwatch"></a>

使用以下 API 操作向新应用程序或现有应用程序添加 CloudWatch 日志选项或更改现有应用程序的日志选项。有关如何将 JSON 文件用于 API 操作输入的信息，请参阅 [Managed Service for Apache Flink API 示例代码](api-examples.md)。

#### 在创建应用程序时添加 CloudWatch 日志选项
<a name="add_cloudwatch_create"></a>

以下示例演示了在创建应用程序时如何使用`CreateApplication`操作添加 CloudWatch 日志选项。在示例中，将 *Amazon Resource Name (ARN) of the CloudWatch Log stream to add to the new application* 替换为您自己的信息。有关该操作的更多信息，请参阅 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html)。

```
{
    "ApplicationName": "test",
    "ApplicationDescription": "test-application-description",
    "RuntimeEnvironment": "FLINK-1_15",
    "ServiceExecutionRole": "arn:aws:iam::123456789123:role/myrole",
    "ApplicationConfiguration": {
        "ApplicationCodeConfiguration": {
            "CodeContent": {
                "S3ContentLocation":{
                              "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket",
                              "FileKey": "myflink.jar"
                }
            },
            "CodeContentType": "ZIPFILE"
        }
    },
    "CloudWatchLoggingOptions": [{
      "LogStreamARN": "<Amazon Resource Name (ARN) of the CloudWatch log stream to add to the new application>"
	}]
}
```

#### 向现有应用程序添加 CloudWatch 日志选项
<a name="add_to_existing_app"></a>

以下示例演示如何使用`AddApplicationCloudWatchLoggingOption`操作向现有应用程序添加 CloudWatch 日志选项。在示例中，用您自己的信息替换每个*user input placeholder*信息。有关该操作的更多信息，请参阅 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html)。

```
{
   "ApplicationName": "<Name of the application to add the log option to>",
   "CloudWatchLoggingOption": { 
      "LogStreamARN": "<ARN of the log stream to add to the application>"
   },
   "CurrentApplicationVersionId": <Version of the application to add the log to>
}
```

#### 更新现有 CloudWatch 日志选项
<a name="update_existing"></a>

以下示例演示如何使用`UpdateApplication`操作修改现有的 CloudWatch 日志选项。在示例中，用您自己的信息替换每个*user input placeholder*信息。有关该操作的更多信息，请参阅 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html)。

```
{
   "ApplicationName": "<Name of the application to update the log option for>",
   "CloudWatchLoggingOptionUpdates": [ 
         { 
            "CloudWatchLoggingOptionId": "<ID of the logging option to modify>",
            "LogStreamARNUpdate": "<ARN of the new log stream to use>"
         }
      ],
   "CurrentApplicationVersionId": <ID of the application version to modify>
}
```

#### 从应用程序中删除 CloudWatch 日志选项
<a name="delete-log"></a>

以下示例演示如何使用`DeleteApplicationCloudWatchLoggingOption`操作删除现有 CloudWatch 日志选项。在示例中，用您自己的信息替换每个*user input placeholder*信息。有关该操作的更多信息，请参阅 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_DeleteApplicationCloudWatchLoggingOption.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_DeleteApplicationCloudWatchLoggingOption.html)。

```
{
   "ApplicationName": "<Name of application to delete log option from>",
   "CloudWatchLoggingOptionId": "<ID of the application log option to delete>",
   "CurrentApplicationVersionId": <Version of the application to delete the log option from>
}
```

#### 设置应用程序日志记录级别
<a name="cloudwatch-level"></a>

要设置应用程序日志记录级别，请使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 操作的 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfiguration.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfiguration.html) 参数或 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 操作的 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html) 参数。

有关应用程序日志级别的信息，请参阅[控制应用程序监控级别](#cloudwatch_levels)。

##### 在创建应用程序时设置应用程序日志记录级别
<a name="cloudwatch-level-create"></a>

[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 操作的以下示例请求将应用程序日志级别设置为 `INFO`。

```
{
   "ApplicationName": "MyApplication",                    
   "ApplicationDescription": "My Application Description",
   "ApplicationConfiguration": {
      "ApplicationCodeConfiguration":{
      "CodeContent":{
        "S3ContentLocation":{
          "BucketARN":"arn:aws:s3:::amzn-s3-demo-bucket",
          "FileKey":"myflink.jar",
          "ObjectVersion":"AbCdEfGhIjKlMnOpQrStUvWxYz12345"
        }
      },
      "CodeContentType":"ZIPFILE"
      },
      "FlinkApplicationConfiguration": 
         "MonitoringConfiguration": { 
            "ConfigurationType": "CUSTOM",
            "LogLevel": "INFO"
         }
      },
   "RuntimeEnvironment": "FLINK-1_15",
   "ServiceExecutionRole": "arn:aws:iam::123456789123:role/myrole"
}
```

##### 更新应用程序日志记录级别
<a name="cloudwatch-level-update"></a>

[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 操作的以下示例请求将应用程序日志级别设置为 `INFO`。

```
{
   "ApplicationConfigurationUpdate": {
      "FlinkApplicationConfigurationUpdate": { 
         "MonitoringConfigurationUpdate": { 
            "ConfigurationTypeUpdate": "CUSTOM",
            "LogLevelUpdate": "INFO"
         }
      }
   }
}
```

### 添加写入 CloudWatch 日志流的权限
<a name="enable_putlogevents"></a>

适用于 Apache Flink 的托管服务需要写入配置错误的权限。 CloudWatch您可以将这些权限添加到适用于 Apache Flink 的托管服务 AWS Identity and Access Management (IAM) 角色中。

有关使用Managed Service for Apache Flink的 IAM 角色的更多信息，请参阅[Amazon Managed Service for Apache Flink 的身份和访问管理](security-iam.md)。

#### 信任策略
<a name="enable_putlogevents_trust_policy"></a>

要授权Managed Service for Apache Flink担任 IAM 角色，您可以将以下信任策略附加到服务执行角色。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "kinesisanalytics.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

#### 权限策略
<a name="enable_putlogevents_permissions_policy"></a>

要向应用程序授予 CloudWatch 从 Apache Flink 托管服务 Flink 资源写入日志事件的权限，您可以使用以下 IAM 权限策略。为您的日志组和直播提供正确的 Amazon 资源名称 (ARNs)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt0123456789000",
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:123456789012:log-group:my-log-group:log-stream:my-log-stream*",
                "arn:aws:logs:us-east-1:123456789012:log-group:my-log-group:*",
                "arn:aws:logs:us-east-1:123456789012:log-group:*"
            ]
        }
    ]
}
```

------

## 控制应用程序监控级别
<a name="cloudwatch_levels"></a>

您可以使用应用程序的*监控指标级别*和*监控日志级别*，以控制生成应用程序日志消息的过程。

应用程序的监控指标级别控制日志消息的粒度。监控指标级别定义如下：
+ **应用程序**：指标范围是整个应用程序。
+ **任务**：指标范围是每个任务。有关任务的信息，请参阅[实施 Managed Service for Apache Flink 中的应用程序扩展](how-scaling.md)。
+ **操作符**：指标范围是每个操作符。有关操作符的信息，请参阅[使用 API 在 Apache Flink 托管服务中使用运算符转换数据 DataStream](how-operators.md)。
+ **并行度**：指标范围是应用程序并行度。您只能使用 [ UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)API 的[ MonitoringConfigurationUpdate](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html)参数设置此指标级别。您无法使用控制台设置此指标级别。有关并行度的信息，请参阅[实施 Managed Service for Apache Flink 中的应用程序扩展](how-scaling.md)。

应用程序的监控日志级别控制应用程序日志的详细程度。监控日志级别定义如下：
+ **错误**：应用程序的潜在灾难性事件。
+ **警告**：应用程序的可能有害情况。
+ **信息**：应用程序的信息性和暂时性故障事件。我们建议您使用该日志记录级别。
+ **调试**：对调试应用程序非常有用的精细信息性事件。*注意*：仅将该级别用于临时调试目的。

## 应用日志记录最佳实践
<a name="cloudwatch_bestpractices"></a>

我们建议您的应用程序使用**信息**日志记录级别。我们建议您使用该级别，以确保您看到 Apache Flink 错误，这些错误是在**信息**级别而不是**错误**级别记录的。

我们建议您仅在调查应用程序问题时临时使用**调试**级别。在解决问题后，请切换回**信息**级别。使用**调试**日志记录级别将严重影响应用程序的性能。

过多的日志记录也可能会严重影响应用程序性能。例如，我们建议您不要为每个处理的记录写入一个日志条目。过多的日志记录可能会导致严重的数据处理瓶颈，并且可能会导致从源中读取数据时出现反向压力。

## 执行日志记录故障排除
<a name="cloudwatch_troubleshooting"></a>

如果没有将应用程序日志写入到日志流，请验证以下内容：
+ 验证应用程序的 IAM 角色和策略是否正确。应用程序的策略需要具有以下权限以访问日志流：
  + `logs:PutLogEvents`
  + `logs:DescribeLogGroups`
  + `logs:DescribeLogStreams`

  有关更多信息，请参阅 [添加写入 CloudWatch 日志流的权限](#enable_putlogevents)。
+ 验证应用程序是否正在运行。要检查应用程序的状态，请在控制台中查看应用程序的页面，或者使用[DescribeApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_DescribeApplication.html)或[ListApplications](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ListApplications.html)操作。
+ 监控 CloudWatch 指标`downtime`，例如诊断其他应用程序问题。有关读取 CloudWatch 指标的信息，请参阅[Managed Service for Apache Flink 中的指标和维度](metrics-dimensions.md)。

## 使用 CloudWatch 日志见解
<a name="cloudwatch_next"></a>

在应用程序中启用 CloudWatch 日志记录功能后，您可以使用 CloudWatch Logs Insights 来分析您的应用程序日志。有关更多信息，请参阅 [使用 “日志见解” 分析 CloudWatch 日志](cloudwatch-logs-reading.md)。

# 使用 “日志见解” 分析 CloudWatch 日志
<a name="cloudwatch-logs-reading"></a>

如上一节所述，向应用程序添加了 CloudWatch 日志记录选项后，您可以使用 Lo CloudWatch gs Insights 来查询日志流中的特定事件或错误。

CloudWatch Logs Insights 使您能够以交互方式搜索和分析日志中的 CloudWatch 日志数据。

有关开始使用 L CloudWatch ogs Insights 的信息，请参阅使用 Logs [Insights 分析 CloudWatch 日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。

## 运行示例查询
<a name="cloudwatch-logs-reading-run"></a>

本节介绍如何运行 L CloudWatch ogs Insights 查询示例。

**先决条件**
+ 在 Logs 中设置的现有日志组和 CloudWatch 日志流。
+ 存储在日志中的现有 CloudWatch 日志。

如果您使用诸如 AWS CloudTrail Amazon Route 53 或 Amazon VPC 之类的服务，则可能已经将这些服务的日志设置为进入 CloudWatch 日志。有关向日志发送 CloudWatch 日志的更多信息，请参阅[ CloudWatch 日志入门](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_GettingStarted.html)。

L CloudWatch ogs Insights 中的查询要么返回一组来自日志事件的字段，要么返回对日志事件执行的数学聚合或其他操作的结果。本节说明了一个返回一组日志事件的查询。

**运行 L CloudWatch ogs Insights 示例查询**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择 **Insights**。

   

1. 屏幕顶部附近的查询编辑器包含一个默认查询，它返回 20 个最近的日志事件。在查询编辑器上方，选择一个要查询的日志组。

   

   当您选择日志组时， CloudWatch Logs Insights 会自动检测日志组中数据中的字段，并将其显示在右侧窗格的**已发现字段**中。它还显示此日志组中的日志事件随时间变化的条形图。该条形图显示与您的查询和时间范围匹配的日志组中的事件分布情况，而不仅仅是表中显示的事件。

1. 选择**运行查询**。

   显示此查询的结果。在本示例中，结果是任何类型的最新 20 个日志事件。

1. 要查看某个返回的日志事件的所有字段，请选择该日志事件左侧的箭头。

有关如何运行和修改 CloudWatch Logs Insights 查询的更多信息，请参阅[运行和修改示例查询](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_RunSampleQuery.html)。

## 查看示例查询
<a name="cloudwatch-logs-reading-examples"></a>

本节包含用于分析 Apache Flink 托管服务应用程序 CloudWatch 日志的 Logs Insights 示例查询。这些查询搜索一些示例错误情况，并作为模板以编写查找其他错误情况的查询。

**注意**  
将以下查询示例中的区域 (*us-west-2**012345678901*)、账户 ID (*YourApplication*) 和应用程序名称 () 替换为应用程序的区域和账户 ID。

**Topics**
+ [分析操作：分配任务](#cloudwatch-logs-reading-tm)
+ [分析操作：更改并行度](#cloudwatch-logs-reading-auto)
+ [分析错误：访问被拒绝](#cloudwatch-logs-reading-access)
+ [分析错误：找不到源或接收器](#cloudwatch-logs-reading-con)
+ [分析错误：应用程序的任务相关故障](#cloudwatch-logs-reading-apps)

### 分析操作：分配任务
<a name="cloudwatch-logs-reading-tm"></a>

以下 L CloudWatch ogs Insights 查询返回 Apache Flink Job Manager 在任务管理器之间分配的任务数。您需要设置查询的时间范围以与某个任务运行匹配，以便查询不会返回以前任务的任务。有关并行度的更多信息，请参阅[实施应用程序扩展](how-scaling.md)。

```
fields @timestamp, message
| filter message like /Deploying/
| parse message " to flink-taskmanager-*" as @tmid
| stats count(*) by @tmid
| sort @timestamp desc
| limit 2000
```

以下 CloudWatch Logs Insights 查询返回分配给每个任务管理器的子任务。子任务总数是每个任务的并行度的总和。任务并行度来自于操作符并行度，默认情况下，它与应用程序的并行度相同，除非您在代码中指定 `setParallelism` 以对其进行更改。有关设置运算符并行度的信息，请参阅 [Apache Flink 文档](https://nightlies.apache.org/flink/flink-docs-release-1.15/)中的[设置并行度：运算符](https://nightlies.apache.org/flink/flink-docs-release-1.15/dev/parallel.html#operator-level)。

```
fields @timestamp, @tmid, @subtask
| filter message like /Deploying/
| parse message "Deploying * to flink-taskmanager-*" as @subtask, @tmid
| sort @timestamp desc
| limit 2000
```

有关任务计划的更多信息，请参阅 [Apache Flink 文档](https://nightlies.apache.org/flink/flink-docs-release-1.15/)中的[任务和计划](https://nightlies.apache.org/flink/flink-docs-release-1.15/internals/job_scheduling.html)。

### 分析操作：更改并行度
<a name="cloudwatch-logs-reading-auto"></a>

以下 CloudWatch Logs Insights 查询返回应用程序并行度的变化（例如，由于自动缩放）。该查询还会返回对应用程序并行度的手动更改。有关自动扩展的更多信息，请参阅[在 Managed Service for Apache Flink 中使用自动扩展](how-scaling-auto.md)。

```
fields @timestamp, @parallelism
| filter message like /property: parallelism.default, /
| parse message "default, *" as @parallelism
| sort @timestamp asc
```

### 分析错误：访问被拒绝
<a name="cloudwatch-logs-reading-access"></a>

以下 CloudWatch Logs Insights 查询返回`Access Denied`日志。

```
fields @timestamp, @message, @messageType
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /AccessDenied/
| sort @timestamp desc
```

### 分析错误：找不到源或接收器
<a name="cloudwatch-logs-reading-con"></a>

以下 CloudWatch Logs Insights 查询返回`ResourceNotFound`日志。 `ResourceNotFound`如果找不到 Kinesis 源或接收器，则会记录结果。

```
fields @timestamp,@message
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /ResourceNotFoundException/
| sort @timestamp desc
```

### 分析错误：应用程序的任务相关故障
<a name="cloudwatch-logs-reading-apps"></a>

以下 CloudWatch Logs Insights 查询返回应用程序与任务相关的失败日志。如果应用程序的状态从 `RUNNING` 转变为 `RESTARTING`，则会生成这些日志。

```
fields @timestamp,@message
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /switched from RUNNING to RESTARTING/
| sort @timestamp desc
```

对于使用 Apache Flink 1.8.2 及更早版本的应用程序，与任务相关的故障将导致应用程序状态从`RUNNING`切换到`FAILED`。使用 Apache Flink 1.8.2 及更早版本时，请使用以下查询来搜索与应用程序任务相关的故障：

```
fields @timestamp,@message
| filter applicationARN like /arn:aws:kinesisanalyticsus-west-2:012345678901:application\/YourApplication/
| filter @message like /switched from RUNNING to FAILED/
| sort @timestamp desc
```

# Managed Service for Apache Flink 中的指标和维度
<a name="metrics-dimensions"></a>

当您的适用于 Apache Flink 的托管服务处理数据源时，适用于 Apache Flink 的托管服务会向亚马逊报告以下指标和维度。 CloudWatch

**Flink 2.2 指标发生了变化**  
Flink 2.2 引入的指标更改可能会影响您的监控和警报。升级前请查看以下更改：  
该`fullRestarts`指标已被删除。请改用 `numRestarts`。
`uptime`和`downtime`指标已被弃用，并将在未来的版本中删除。迁移到新的州特定指标。
Kinesis Data Streams 连接器 6.0.0 的`bytesRequestedPerFetch`指标已被删除。

## 应用程序指标
<a name="metrics-dimensions-jobs"></a>


| 指标 | 单位 | 说明 | 级别 | 使用说明 | 
| --- | --- | --- | --- | --- | 
| backPressuredTimeMsPerSecond\$1 | 毫秒 | 该任务或运算符每秒受到反向压力的时间（以毫秒为单位）。 | 任务、运算符、并行度 | \$1仅适用于运行 Flink 版本 1.13 的 Managed Service for Apache Flink 应用程序。 这些指标可用于识别应用程序中的瓶颈。 | 
| busyTimeMsPerSecond\$1 | 毫秒 | 该任务或运算符每秒忙碌的时间（以毫秒为单位）（既没有空闲也没有反向压力）。如果无法计算该值，则可以为 NaN。 | 任务、运算符、并行度 | \$1仅适用于运行 Flink 版本 1.13 的 Managed Service for Apache Flink 应用程序。 这些指标可用于识别应用程序中的瓶颈。 | 
| cpuUtilization | 百分比 | 任务管理器中 CPU 利用率的总体百分比。例如，如果有五个任务管理器，则 Managed Service for Apache Flink 将在每个报告间隔内发布该指标的五个样本。 | 应用程序 | 您可以使用此指标来监控应用程序中的最低、平均和最大 CPU 利用率。该CPUUtilization指标仅考虑容器内运行的 TaskManager JVM 进程的 CPU 使用率。 | 
| containerCPUUtilization | 百分比 | Flink 应用程序集群中任务管理器容器中 CPU 利用率的总体百分比。例如，如果有五个任务管理器，则相应地有五个 TaskManager 容器，而适用于 Apache Flink 的托管服务每 1 分钟报告间隔就会发布 2 \$1 5 个该指标的样本。 | 应用程序 | 每个容器的计算公式为： *容器消耗的 CPU 总时间（以秒为单位）\$1 100 /容器 CPU 限制（以 CPUs /秒为单位）* 该`CPUUtilization`指标仅考虑容器内运行的 TaskManager JVM 进程的 CPU 使用率。JVM 之外还有其他组件在同一个容器内运行。该`containerCPUUtilization`指标可让您更全面地了解容器 CPU 耗尽以及由此导致的故障，包括所有进程。  | 
| containerMemoryUtilization | 百分比 | Flink 应用程序集群中任务管理器容器中内存利用率的总体百分比。例如，如果有五个任务管理器，则相应地有五个 TaskManager 容器，而适用于 Apache Flink 的托管服务每 1 分钟报告间隔就会发布 2 \$1 5 个该指标的样本。 | 应用程序 | 每个容器的计算公式为： *容器内存使用量（字节）\$1 100 /容器内存限制（按照 Pod 部署规范）（以字节为单位）* `HeapMemoryUtilization`和`ManagedMemoryUtilzations`指标仅考虑特定的内存指标，例如 TaskManager JVM 的堆内存使用量或托管内存（[RocksD](https://flink.apache.org/2021/01/18/rocksdb.html#:~:text=Conclusion-,The%20RocksDB%20state%20backend%20(i.e.%2C%20RocksDBStateBackend)%20is%20one%20of,with%20exactly%2Donce%20processing%20guarantees.) B State Backend 等本机进程在 JVM 之外的内存使用情况）。该`containerMemoryUtilization`指标包括工作集内存，可以更好地跟踪总内存耗尽情况，从而更全面地了解工作集内存。当它耗尽后，它就会进入`Out of Memory Error` TaskManager 吊舱。  | 
| containerDiskUtilization | 百分比 | Flink 应用程序集群中任务管理器容器中磁盘利用率的总体百分比。例如，如果有五个任务管理器，则相应地有五个 TaskManager 容器，而适用于 Apache Flink 的托管服务每 1 分钟报告间隔就会发布 2 \$1 5 个该指标的样本。 | 应用程序 | 每个容器的计算公式为： *磁盘使用量（以字节为单位）\$1 100 /容器的磁盘限制（以字节为单位）* 对于容器，它表示在其中设置容器根卷的文件系统的利用率。  | 
| currentInputWatermark | 毫秒 | 上次收到application/operator/task/thread的水印 | 应用程序、运算符、任务、并行度 | 此记录仅针对具有两个输入的维度发出。这是上次收到的水印的最小值。 | 
| currentOutputWatermark | 毫秒 | application/operator/task/thread它发出的最后一个水印 | 应用程序、运算符、任务、并行度 |  | 
| downtime[已弃用] | 毫秒 | 对于目前处于困 failing/recovering 境中的工作，则是在这次停机期间所经过的时间。 | 应用程序 | 该指标测量任务发生故障或恢复时经过的时间。该指标为运行的任务返回 0，并为完成的任务返回 -1。如果该指标不是 0 或 -1，则表明应用程序的 Apache Flink 任务无法运行。**在 Flink 2.2 中已弃用。** and/or `failingTime`改用`restartingTime``cancellingTime`、、。 | 
| failingTime | 毫秒 | 应用程序处于失败状态的时间（以毫秒为单位）。使用此指标来监控应用程序故障并触发警报。 | 应用程序、流程 | 可从 Flink 2.2 中获得。替换部分已弃用的downtime指标。 | 
| heapMemoryUtilization | 百分比 | 任务管理器的总体堆内存利用率。例如，如果有五个任务管理器，则 Managed Service for Apache Flink 将在每个报告间隔内发布该指标的五个样本。 | 应用程序 | 您可以使用此指标来监控应用程序中的最低、平均和最大堆内存利用率。HeapMemoryUtilization仅考虑特定的内存指标，例如 TaskManager JVM 的堆内存使用情况。 | 
| idleTimeMsPerSecond\$1 | 毫秒 | 此任务或运算符每秒处于空闲状态（没有要处理的数据）的时间（以毫秒为单位）。空闲时间不包括反向压力时间，因此，如果任务受到反向压力，则不会处于空闲状态。 | 任务、运算符、并行度 | \$1仅适用于运行 Flink 版本 1.13 的 Managed Service for Apache Flink 应用程序。 这些指标可用于识别应用程序中的瓶颈。 | 
| lastCheckpointSize | 字节 | 上一个检查点的总大小 | 应用程序 | 您可以使用该指标确定运行的应用程序存储使用率。如果该指标的值不断增加，则可能表明应用程序出现问题，例如内存泄漏或瓶颈。 | 
| lastCheckpointDuration | 毫秒 | 完成上一个检查点所花的时间 | 应用程序 | 该指标测量完成最近的检查点所花的时间。如果该指标的值不断增加，则可能表明应用程序出现问题，例如内存泄漏或瓶颈。在某些情况下，您可以禁用检查点以解决该问题。 | 
| managedMemoryUsed\$1 | 字节 | 当前使用的托管内存量。 | 应用程序、运算符、任务、并行度 | \$1仅适用于运行 Flink 版本 1.13 的 Managed Service for Apache Flink 应用程序。 这与 Flink 在 Java 堆之外托管的内存有关。它用于 RocksDB 状态后端，也可供应用程序使用。 | 
| managedMemoryTotal\$1 | 字节 | 托管内存的总量。 | 应用程序、运算符、任务、并行度 | \$1仅适用于运行 Flink 版本 1.13 的 Managed Service for Apache Flink 应用程序。 这与 Flink 在 Java 堆之外托管的内存有关。它用于 RocksDB 状态后端，也可供应用程序使用。该`ManagedMemoryUtilzations`指标仅考虑特定的内存指标，例如托管内存（[RocksDB 状态后端](https://flink.apache.org/2021/01/18/rocksdb.html#:~:text=Conclusion-,The%20RocksDB%20state%20backend%20(i.e.%2C%20RocksDBStateBackend)%20is%20one%20of,with%20exactly%2Donce%20processing%20guarantees.)等本机进程在 JVM 外部的内存使用情况） | 
| managedMemoryUtilization\$1 | 百分比 | 派生自 managedMemoryUsed/managedMemoryTotal | 应用程序、运算符、任务、并行度 | \$1仅适用于运行 Flink 版本 1.13 的 Managed Service for Apache Flink 应用程序。 这与 Flink 在 Java 堆之外托管的内存有关。它用于 RocksDB 状态后端，也可供应用程序使用。 | 
| numberOfFailedCheckpoints | 计数 | 检查点失败的次数。 | 应用程序 | 您可以使用此指标来监控应用程序的运行状况和进度。检查点可能由于应用程序问题（例如吞吐量或权限问题）而失败。 | 
| numRecordsIn\$1 | 计数 | 该应用程序、运算符或任务收到的总记录数。 | 应用程序、运算符、任务、并行度 | \$1要在一段时间（秒/分钟）内应用 SUM 统计数据，请执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/metrics-dimensions.html) 该指标的级别指定该指标是衡量整个应用程序、特定运算符还是特定任务收到的记录总数。 | 
| numRecordsInPerSecond\$1 | 计数/秒 | 该应用程序、运算符或任务每秒收到的总记录数。 | 应用程序、运算符、任务、并行度 | \$1要在一段时间（秒/分钟）内应用 SUM 统计数据，请执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/metrics-dimensions.html) 该指标的级别指定该指标是衡量整个应用程序、特定运算符还是特定任务每秒收到的记录总数。 | 
| numRecordsOut\$1 | 计数 | 该应用程序、运算符或任务发出的总记录数。 | 应用程序、运算符、任务、并行度 |  \$1要在一段时间（秒/分钟）内应用 SUM 统计数据，请执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/metrics-dimensions.html) 该指标的级别指定该指标是衡量整个应用程序、特定运算符还是特定任务发出的记录总数。 | 
| numLateRecordsDropped\$1 | 计数 | 应用程序、运算符、任务、并行度 |  | \$1要在一段时间（秒/分钟）内应用 SUM 统计数据，请执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/metrics-dimensions.html) 由于到达延迟，该操作符或任务丢弃的记录数。 | 
| numRecordsOutPerSecond\$1 | 计数/秒 | 该应用程序、运算符或任务每秒发出的总记录数。 | 应用程序、运算符、任务、并行度 |  \$1要在一段时间（秒/分钟）内应用 SUM 统计数据，请执行以下操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/metrics-dimensions.html) 该指标的级别指定该指标是衡量整个应用程序、特定运算符还是特定任务每秒发出的记录总数。 | 
| oldGenerationGCCount | 计数 | 所有任务管理器中发生的旧垃圾回收操作总数。 | 应用程序 |  | 
| oldGenerationGCTime | 毫秒 | 执行旧垃圾回收操作所花费的总时间。 | 应用程序 | 您可以使用此指标来监控垃圾回收的总时间、平均时间和最大时间。 | 
| threadsCount | 计数 | 应用程序使用的实时线程总数。 | 应用程序 | 该指标衡量应用程序代码使用的线程数。这与应用程序并行度不同。 | 
| cancellingTime | 毫秒 | 应用程序处于取消状态的时间（以毫秒为单位）。使用此指标来监控应用程序取消操作。 | 应用程序、流程 | 可从 Flink 2.2 中获得。替换部分已弃用的downtime指标。 | 
| restartingTime | 毫秒 | 应用程序在重启状态下所花费的时间（以毫秒为单位）。使用此指标来监控应用程序的重启行为。 | 应用程序、流程 | 可从 Flink 2.2 中获得。替换部分已弃用的downtime指标。 | 
| runningTime | 毫秒 | 应用程序不间断运行的时间（以毫秒为单位）。替换已弃用的uptime指标。 | 应用程序、流程 | 可从 Flink 2.2 中获得。用作已弃用uptime指标的直接替代品。 | 
| uptime[已弃用] | 毫秒 | 任务不间断运行的时间。 | 应用程序 | 您可以使用此指标来确定任务是否成功运行。该指标为完成的任务返回 -1。**在 Flink 2.2 中已弃用。**请改用 `runningTime`。 | 
| jobmanagerFileDescriptorsMax | 计数 | 可供使用的文件描述符的最大数量。 JobManager | 应用程序、流程、主机 | 使用此指标来监控文件描述符容量。 | 
| jobmanagerFileDescriptorsOpen | 计数 | 的当前打开文件描述符的 JobManager数量。 | 应用程序、流程、主机 | 使用此指标来监控文件描述符的使用情况并检测潜在的资源耗尽情况。 | 
| taskmanagerFileDescriptorsMax | 计数 | 每个 TaskManager文件描述符可用的最大数量。 | 应用程序、流程、主机、tm\$1id | 使用此指标来监控文件描述符容量。 | 
| taskmanagerFileDescriptorsOpen | 计数 | 每个 TaskManager文件描述符的当前打开文件描述符的数量。 | 应用程序、流程、主机、tm\$1id | 使用此指标来监控文件描述符的使用情况并检测潜在的资源耗尽情况。 | 
| KPUs\$1 | 计数 | 应用程序 KPUs 使用的总数。 | 应用程序 | \$1此指标在每个账单周期（一小时）接收一个示例。要可视化一段 KPUs 时间内的数量，请在至少一 (1) 小时内使用 MAX 或 AVG。 KPU 计数包括 `orchestration` KPU。有关更多信息，请参阅 [Managed Service for Apache Flink 定价](https://aws.amazon.com/managed-service-apache-flink/pricing/)。 | 

**Flink 2.2 指标迁移指南**  
**从 FullRestarts 迁移：**该`fullRestarts`指标已在 Flink 2.2 中删除。改用该`numRestarts`指标。该`numRestarts`指标提供同等功能，无需调整阈值即可直接替代 CloudWatch 警报。  
**从正常运行时间迁移：**该`uptime`指标已在 Flink 2.2 中弃用，并将在未来的版本中删除。改用该`runningTime`指标。该`runningTime`指标提供同等功能，无需调整阈值即可直接替代 CloudWatch 警报。  
**停机后迁移：**该`downtime`指标已在 Flink 2.2 中弃用，并将在未来的版本中删除。根据您要监控的内容，使用以下一个或多个指标：  
`restartingTime`: 监控重启应用程序所花费的时间
`cancellingTime`：监控取消应用程序所花费的时间
`failingTime`: 监控在故障状态下所花费的时间

## Kinesis Data Streams 连接器指标
<a name="metrics-dimensions-stream"></a>

AWS 除以下内容外，还会发出 Kinesis Data Streams 的所有记录：


| 指标 | 单位 | 说明 | 级别 | 使用说明 | 
| --- | --- | --- | --- | --- | 
| millisbehindLatest | 毫秒 | 使用者落后流开头的毫秒数，表示使用者落后当前时间有多远。 | 应用程序（对于 Stream）、并行度（适用于） ShardId | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/metrics-dimensions.html)  | 

**注意**  
该`bytesRequestedPerFetch`指标已在 Flink AWS 连接器版本 6.0.0（唯一与 Flink 2.2 兼容的连接器版本）中删除。Flink 2.2 中唯一可用的 Kinesis Data Streams 连接器指标是。`millisBehindLatest`

## Amazon MSK 连接器指标
<a name="metrics-dimensions-msk"></a>

AWS 除以下内容外，还会发出 Amazon MSK 的所有记录：


| 指标 | 单位 | 说明 | 级别 | 使用说明 | 
| --- | --- | --- | --- | --- | 
| currentoffsets | 不适用 | 使用者的当前读取偏移量（对于每个分区）。可以按主题名称和分区 ID 来指定特定分区的指标。 | 应用程序（用于主题）、并行度（用于） PartitionId |  | 
| commitsFailed | 不适用 | 如果启用了偏移提交和检查点功能，则向 Kafka 提交偏移失败的总数。 | 应用程序、运算符、任务、并行度 | 将偏移量提交回 Kafka 只是显示使用者进度的一种手段，因此提交失败不会影响 Flink 的检查点分区偏移量的完整性。 | 
| commitsSucceeded | 不适用 | 如果启用了偏移提交和检查点功能，则向 Kafka 提交偏移成功的总数。 | 应用程序、运算符、任务、并行度 |  | 
| committedoffsets | 不适用 | 上次成功提交的 Kafka 偏移量（对于每个分区）。可以按主题名称和分区 ID 来指定特定分区的指标。 | 应用程序（用于主题）、并行度（用于） PartitionId |  | 
| records\$1lag\$1max | 计数 | 最大延迟，以该窗口中的任何分区的记录数表示 | 应用程序、运算符、任务、并行度 |  | 
| bytes\$1consumed\$1rate | 字节 | 主题平均每秒使用的字节数 | 应用程序、运算符、任务、并行度 |  | 

## Apache Zeppelin 指标
<a name="metrics-dimensions-zeppelin"></a>

对于 Studio 笔记本电脑，会在应用程序级别 AWS 发出以下指标：`KPUs``cpuUtilization`、`heapMemoryUtilization`、、`oldGenerationGCTime``oldGenerationGCCount`、和`threadCount`。此外，它还会在应用程序级别发布下表所示的指标。


****  

| 指标 | 单位 | 说明 | Prometheus 名称 | 
| --- | --- | --- | --- | 
| zeppelinCpuUtilization | 百分比 | Apache Zeppelin 服务器中 CPU 利用率的总体百分比。 | process\$1cpu\$1usage | 
| zeppelinHeapMemoryUtilization | 百分比 | Apache Zeppelin 服务器中堆内存利用率的总体百分比。 | jvm\$1memory\$1used\$1bytes | 
| zeppelinThreadCount | 计数 | Apache Zeppelin 服务器使用的实时线程总数。 | jvm\$1threads\$1live\$1threads | 
| zeppelinWaitingJobs | 计数 | 排队等待线程的 Apache Zeppelin 任务数量。 | jetty\$1threads\$1jobs | 
| zeppelinServerUptime | 秒 | 服务器启动和运行的总时间。 | process\$1uptime\$1seconds | 

# 查看 CloudWatch 指标
<a name="metrics-dimensions-viewing"></a>

您可以使用 Amazon CloudWatch 控制台或查看应用程序的 CloudWatch 指标 AWS CLI。

**使用 CloudWatch 控制台查看指标**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择**指标**。

1. 在 Apache Flink 托管服务的 “**按类别划分的CloudWatch 指标**” 窗格中，选择一个指标类别。

1. 在上方窗格中，滚动以查看完整指标列表。

**要查看指标，请使用 AWS CLI**
+ 在命令提示符处，使用以下命令。

  ```
  1. aws cloudwatch list-metrics --namespace "AWS/KinesisAnalytics" --region region
  ```

# 设置 CloudWatch 指标报告级别
<a name="cloudwatch-logs-levels"></a>

您可以控制应用程序创建的应用程序指标的级别。Managed Service for Apache Flink 支持以下指标级别：
+ **应用程序：**应用程序仅报告每个应用程序的最高指标级别。默认情况下，Managed Service for Apache Flink 指标是在应用程序级别发布的。
+ **任务：**应用程序针对任务指标报告级别定义的指标，报告特定于任务的指标维度，例如每秒进出应用程序的记录数。
+ **运算符：**应用程序针对运算符指标报告级别定义的指标，报告特定于运算符的指标维度，例如每个筛选或映射操作的指标。
+ **并行度：**应用程序为每个执行线程报告 `Task` 和 `Operator` 级别的指标。由于成本过高，建议不要将该报告级别用于并行度设置高于 64 的应用程序。
**注意**  
由于服务生成的指标数据量很大，因此您只能使用此指标级别进行故障排除。您只能使用 CLI 设置此指标级别。此指标级别在控制台中不可用。

默认级别是**应用程序**。应用程序报告当前级别和所有更高级别的指标。例如，如果报告级别设置为**操作员**，则应用程序报告**应用程序**、**任务**和**操作员**指标。

您可以使用操作的参数或[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html)操作的`MonitoringConfiguration`参数来设置 CloudWatch 指标报告级别。`MonitoringConfigurationUpdate` [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html)以下示例[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html)操作请求将 CloudWatch 指标报告级别设置为 “**任务”**：

```
{
   "ApplicationName": "MyApplication",  
   "CurrentApplicationVersionId": 4,
   "ApplicationConfigurationUpdate": { 
      "FlinkApplicationConfigurationUpdate": { 
         "MonitoringConfigurationUpdate": { 
            "ConfigurationTypeUpdate": "CUSTOM",
            "MetricsLevelUpdate": "TASK"
         }
      }
   }
}
```

您也可以使用 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html) 操作的 `LogLevel` 参数或 [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) 操作的 `LogLevelUpdate` 参数来配置日志记录级别。您可以使用以下日志级别：
+ `ERROR`：记录潜在可恢复的错误事件。
+ `WARN`：记录可能导致错误的警告事件。
+ `INFO`：记录信息性事件。
+ `DEBUG`：记录常规调试事件。

有关 Log4j 日志记录级别的更多信息，请参阅 [Apache Log4j](https://logging.apache.org/log4j/2.x/) 文档中的[自定义日志级别](https://logging.apache.org/log4j/2.x/manual/customloglevels.html)。

# 将自定义指标与 Amazon Managed Service for Apache Flink 结合使用
<a name="monitoring-metrics-custom"></a>

适用于 Apache Flink 的托管服务公开了 19 个指标 CloudWatch，包括资源使用量和吞吐量指标。此外，您可以创建自己的指标来跟踪应用程序特定的数据，例如处理事件或访问外部资源。

**Topics**
+ [工作原理](#monitoring-metrics-custom-howitworks)
+ [查看创建映射类的示例](#monitoring-metrics-custom-examples)
+ [查看自定义指标](#monitoring-metrics-custom-examples-viewing)

## 工作原理
<a name="monitoring-metrics-custom-howitworks"></a>

Managed Service for Apache Flink 中的自定义指标使用 Apache Flink 指标系统。Apache Flink 指标具有以下属性：
+ **类型：**指标的类型描述了它如何衡量和报告数据。可用的 Apache Flink 指标类型包括计数、计量表、直方图和计量器。有关 Apache Flink 指标类型的更多信息，请参阅[指标类型](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html#metric-types)。
**注意**  
AWS CloudWatch 指标不支持 Histogram Apache Flink 指标类型。 CloudWatch 只能显示计数、仪表和仪表类型的 Apache Flink 指标。
+ **范围：**指标的范围由其标识符和一组键值对组成，这些键值对表示将如何报告该指标。 CloudWatch指标的标识符由以下内容组成：
  + 系统范围，表示报告指标的级别（例如运算符）。
  + 用户范围，用于定义诸如用户变量或指标组名称之类的属性。这些属性是使用[https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-java.lang.String-](https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-java.lang.String-)或[https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-](https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/metrics/MetricGroup.html#addGroup-java.lang.String-)定义的。

  有关指标范围的更多信息，请参阅[范围](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html#scope)。

有关 Apache Flink 指标的更多信息，请参阅 [Apache Flink 文档](https://nightlies.apache.org/flink/flink-docs-release-1.15/)中的[指标](https://nightlies.apache.org/flink/flink-docs-release-1.15/monitoring/metrics.html)。

要在 Managed Service for Apache Flink 中创建自定义指标，您可以从任何通过调用 [https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/api/common/functions/RuntimeContext.html#getMetricGroup--](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/api/common/functions/RuntimeContext.html#getMetricGroup--) 扩展 `RichFunction` 的用户函数访问 Apache Flink 指标系统。此方法返回一个可用于创建和注册自定义指标的[MetricGroup](https://nightlies.apache.org/flink/flink-docs-release-1.15/api/java/org/apache/flink/metrics/MetricGroup.html)对象。适用于 Apache 的托管服务 Flink 报告使用组密钥`KinesisAnalytics`创建的所有指标。 CloudWatch您定义的自定义指标具有以下特征：
+ 您的自定义指标具有指标名称和组名称。根据 [Prometheus 命名规则](https://prometheus.io/docs/instrumenting/writing_exporters/#naming)，这些名称必须由字母数字字符组成。
+ 您在用户范围（`KinesisAnalytics`指标组除外）中定义的属性将作为 CloudWatch 维度发布。
+ 默认情况下，自定义指标是在该`Application`级别发布的。
+ 维度（任务/运算符/并行度）将根据应用程序的监控级别添加到指标中。您可以使用操作的参数或[CreateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_CreateApplication.html)操作的或[MonitoringConfiguration](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfiguration.html)参数来设置应用程序的[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)监控级别。[MonitoringConfigurationUpdate](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_MonitoringConfigurationUpdate.html)

## 查看创建映射类的示例
<a name="monitoring-metrics-custom-examples"></a>

以下代码示例演示如何创建映射类以创建和增加自定义指标，以及如何通过将映射类添加到 `DataStream` 对象以在应用程序中实现该映射类。

### 记录计数自定义指标
<a name="monitoring-metrics-custom-examples-recordcount"></a>

以下代码示例演示如何创建映射类，该映射类用于创建对数据流中的记录进行计数的指标（功能与`numRecordsIn`指标相同）：

```
    private static class NoOpMapperFunction extends RichMapFunction<String, String> {
        private transient int valueToExpose = 0;
        private final String customMetricName;
 
        public NoOpMapperFunction(final String customMetricName) {
            this.customMetricName = customMetricName;
        }
 
        @Override
        public void open(Configuration config) {
            getRuntimeContext().getMetricGroup()
                    .addGroup("KinesisAnalytics")
                    .addGroup("Program", "RecordCountApplication")
                    .addGroup("NoOpMapperFunction")
                    .gauge(customMetricName, (Gauge<Integer>) () -> valueToExpose);
        }
 
        @Override
        public String map(String value) throws Exception {
            valueToExpose++;
            return value;
        }
    }
```

在前面的示例中，应用程序处理的每条记录的`valueToExpose`变量都会递增。

定义映射类后，您将创建一个实现映射的应用程序内部流：

```
DataStream<String> noopMapperFunctionAfterFilter =
    kinesisProcessed.map(new NoOpMapperFunction("FilteredRecords"));
```

有关此应用程序的完整代码，请参阅[记录计数自定义指标应用程序](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/CustomMetrics/RecordCount)。

### 字数计数自定义指标
<a name="monitoring-metrics-custom-examples-wordcount"></a>

以下代码示例演示如何创建映射类，该映射类用于创建对数据流中的字数进行计数的指标：

```
private static final class Tokenizer extends RichFlatMapFunction<String, Tuple2<String, Integer>> {
     
            private transient Counter counter;
     
            @Override
            public void open(Configuration config) {
                this.counter = getRuntimeContext().getMetricGroup()
                        .addGroup("KinesisAnalytics")
                        .addGroup("Service", "WordCountApplication")
                        .addGroup("Tokenizer")
                        .counter("TotalWords");
            }
     
            @Override
            public void flatMap(String value, Collector<Tuple2<String, Integer>>out) {
                // normalize and split the line
                String[] tokens = value.toLowerCase().split("\\W+");
     
                // emit the pairs
                for (String token : tokens) {
                    if (token.length() > 0) {
                        counter.inc();
                        out.collect(new Tuple2<>(token, 1));
                    }
                }
            }
        }
```

在前面的示例中，应用程序处理的每个字的`counter`变量都会递增。

定义映射类后，您将创建一个实现映射的应用程序内部流：

```
// Split up the lines in pairs (2-tuples) containing: (word,1), and
// group by the tuple field "0" and sum up tuple field "1"
DataStream<Tuple2<String, Integer>> wordCountStream = input.flatMap(new Tokenizer()).keyBy(0).sum(1);
     
// Serialize the tuple to string format, and publish the output to kinesis sink
wordCountStream.map(tuple -> tuple.toString()).addSink(createSinkFromStaticConfig());
```

有关此应用程序的完整代码，请参阅[字数计数自定义指标应用程序](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/java/CustomMetrics/WordCount)。

## 查看自定义指标
<a name="monitoring-metrics-custom-examples-viewing"></a>

应用程序的自定义指标显示在控制**AWS/KinesisAnalytics**面板的 CloudWatch Metrics 控制台的**应用程序**指标组下。

# 在适用于 Apache Flink 的亚马逊托管服务中使用 CloudWatch 警报
<a name="monitoring-metrics-alarms"></a>

使用 Amazon CloudWatch 指标警报，您可以监控您指定的时间段内的 CloudWatch 指标。告警根据指标或表达式在多个时间段内相对于某阈值的值执行一项或多项操作。操作的示例是向 Amazon Simple Notification Service (Amazon SNS) 主题发送通知。

有关 CloudWatch 警报的更多信息，请参阅[使用 Amazon CloudWatch 警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

## 查看建议的警报
<a name="monitoring-metrics-alarms-recommended"></a>

本节包含用于监控 Managed Service for Apache Flink 应用程序的推荐警报。

该表描述了推荐的警报，并包含以下各列：
+ **指标表达式：**要根据阈值进行测试的指标或指标表达式。
+ **统计数据：**用于检查指标的统计数据，例如，**平均值**。
+ **阈值：**使用此警报需要您确定一个阈值，该阈值定义了预期应用程序性能的极限。您需要通过在正常条件下监控您的应用程序来确定此阈值。
+ **描述：**可能触发此警报的原因以及可能的解决方法。


| 指标表达式 | Statistic | Threshold | 说明 | 
| --- |--- |--- |--- |
| downtime> 0 | 平均值 | 0 |  停机时间大于零表示应用程序已失败。如果该值大于 0，则应用程序不处理任何数据。推荐用于所有应用程序。该Downtime指标衡量中断的持续时间。停机时间大于零表示应用程序已失败。有关故障排除，请参阅[应用程序正在重新启动](troubleshooting-rt-restarts.md)。 | 
| RATE (numberOfFailedCheckpoints)> 0 | 平均值 | 0 | 此指标计算自应用程序启动以来失败的检查点数量。根据应用程序的不同，如果检查点偶尔失败，则是可以容忍的。但是，如果检查点经常出现故障，则该应用程序很可能运行状况不佳，需要进一步关注。我们建议监控 RATE（numberOfFailedCheckpoint），以报警梯度，而不是绝对值。推荐用于所有应用程序。使用此指标来监控应用程序运行状况和检查点进度。当状态数据运行正常时，应用程序会将状态数据保存到检查点。如果应用程序在处理输入数据方面没有取得进展，则检查点可能会由于超时而失败。有关故障排除，请参阅[检查点操作已超时](troubleshooting-chk-timeout.md)。 | 
| Operator.numRecordsOutPerSecond< 阈值 | 平均值 | 在正常条件下，应用程序发出的最小记录数。 | 推荐用于所有应用程序。低于此阈值可能表示应用程序在输入数据方面没有取得预期的进展。有关故障排除，请参阅[吞吐量太慢](troubleshooting-rt-throughput.md)。 | 
| records\$1lag\$1max\$1millisbehindLatest> 阈值 | 最大值 | 正常条件下的最大预期延迟。 | 如果应用程序从 Kinesis 或 Kafka 消耗，则这些指标表明应用程序是否落后，是否需要进行扩展以跟上当前负载。这是一个很好的通用指标，对于各种应用程序都很容易跟踪。但它只能用于被动扩展，即当应用程序性能已经有所下降时。推荐用于所有应用程序。将该records\$1lag\$1max指标用于 Kafka 来源，或使用 Kinesis 直播源的指标。millisbehindLatest超过此阈值可能表示应用程序在输入数据方面没有取得预期的进展。有关故障排除，请参阅[吞吐量太慢](troubleshooting-rt-throughput.md)。 | 
| lastCheckpointDuration> 阈值 | 最大值 | 正常条件下的最大预期检查点持续时间。 | 监控状态下存储了多少数据以及检查点需要多长时间。如果检查点增加或花费很长时间，则应用程序会持续花费时间进行检查点操作，从而减少实际处理的周期。在某些时候，检查点可能会变得太大或花费很长时间以至于失败。除了监控绝对值外，客户还应考虑使用RATE(lastCheckpointSize)和RATE(lastCheckpointDuration)监控变化率。如果lastCheckpointDuration持续增加，则超过此阈值可能表示应用程序在输入数据方面没有取得预期的进展，或者应用程序运行状况存在问题，例如背压。有关故障排除，请参阅[无限制的状态增长](troubleshooting-rt-stateleaks.md)。 | 
| lastCheckpointSize> 阈值 | 最大值 | 正常情况下预期的最大检查点大小。 | 监控状态下存储了多少数据以及检查点需要多长时间。如果检查点增加或花费很长时间，则应用程序会持续花费时间进行检查点操作，从而减少实际处理的周期。在某些时候，检查点可能会变得太大或花费很长时间以至于失败。除了监控绝对值外，客户还应考虑使用RATE(lastCheckpointSize)和RATE(lastCheckpointDuration)监控变化率。如果lastCheckpointSize持续增加，则超过此阈值可能表示应用程序正在积累状态数据。如果状态数据变得太大，则应用程序在从检查点恢复时可能会耗尽内存，或者从检查点恢复可能需要很长时间。有关故障排除，请参阅[无限制的状态增长](troubleshooting-rt-stateleaks.md)。 | 
| heapMemoryUtilization> 阈值 | 最大值 | 这可以很好地表明应用程序的总体资源利用率，并且可用于主动扩展，除非应用程序已 I/O 绑定。正常条件下的最heapMemoryUtilization大预期尺寸，建议值为 90%。 | 您可以使用此指标来监控整个应用程序中任务管理器的最大内存利用率。如果应用程序达到此阈值，则需要预置更多资源。您可以通过启用自动缩放或增加应用程序并行度来实现此目的。有关增加资源的更多信息，请参阅[实施应用程序扩展](how-scaling.md)。 | 
| cpuUtilization> 阈值 | 最大值 | 这可以很好地表明应用程序的总体资源利用率，并且可用于主动扩展，除非应用程序已 I/O 绑定。正常条件下的最cpuUtilization大预期尺寸，建议值为 80%。 | 您可以使用此指标来监控应用程序中任务管理器的最大 CPU 利用率。如果应用程序达到此阈值，则需要配置更多资源。您可以通过启用自动扩展或增加应用程序并行度来实现此目的。有关增加资源的更多信息，请参阅[实施应用程序扩展](how-scaling.md)。 | 
| threadsCount> 阈值 | 最大值 | 正常条件下的最threadsCount大预期尺寸。 | 您可以使用此指标来监视应用程序中任务管理器中的线程泄漏情况。如果此指标达到此阈值，请检查您的应用程序代码中是否有未关闭的线程正在创建中。 | 
| (oldGarbageCollectionTime \$1 100)/60\$1000 over 1 min period')> 阈值 | 最大值 | 预期的最大oldGarbageCollectionTime持续时间。我们建议设置一个阈值，使典型的垃圾收集时间为指定阈值的 60%，但应用程序的正确阈值会有所不同。 | 如果该指标持续增加，则可能表明整个应用程序的任务管理器中存在内存泄漏。 | 
| RATE(oldGarbageCollectionCount) > 阈值 | 最大值 | 正常条件oldGarbageCollectionCount下预期的最大值。您的应用程序的正确阈值会有所不同。 | 如果该指标持续增加，则可能表明整个应用程序的任务管理器中存在内存泄漏。 | 
| Operator.currentOutputWatermark - Operator.currentInputWatermark > 阈值 | 最小值 | 正常条件下的最小预期水位线增量。您的应用程序的正确阈值会有所不同。 | 如果该指标持续增加，则可能表明应用程序正在处理越来越旧的事件，或者上游子任务在越来越长的时间内没有发送水印。 | 

# 将自定义消息写入 CloudWatch 日志
<a name="cloudwatch-logs-writing"></a>

您可以向 Apache Flink 应用程序日志的托管服务写入自定义消息。 CloudWatch 您可以使用 Apache [https://logging.apache.org/log4j/](https://logging.apache.org/log4j/) 库或 [https://www.slf4j.org/](https://www.slf4j.org/) 库以执行该操作。

**Topics**
+ [使用 Log4J 写入 CloudWatch 日志](#cloudwatch-logs-writing-log4j)
+ [使用 SLF4 J 写入 CloudWatch 日志](#cloudwatch-logs-writing-slf4j)

## 使用 Log4J 写入 CloudWatch 日志
<a name="cloudwatch-logs-writing-log4j"></a>

1. 将以下依赖项添加到应用程序的 `pom.xml` 文件中：

   ```
   <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
       <version>2.6.1</version>
   </dependency>
   <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
       <version>2.6.1</version>
   </dependency>
   ```

1. 包括库中的对象：

   ```
   import org.apache.logging.log4j.Logger;
   ```

1. 实例化 `Logger` 对象并传入您的应用程序类：

   ```
   private static final Logger log = LogManager.getLogger.getLogger(YourApplicationClass.class);
   ```

1. 使用 `log.info` 写入到日志。将在应用程序日志中写入大量消息。为了便于筛选自定义消息，请使用 `INFO` 应用程序日志级别。

   ```
   log.info("This message will be written to the application's CloudWatch log");
   ```

应用程序在日志中写入一条记录，并显示类似下面的消息：

```
{
  "locationInformation": "com.amazonaws.services.managed-flink.StreamingJob.main(StreamingJob.java:95)", 
  "logger": "com.amazonaws.services.managed-flink.StreamingJob", 
  "message": "This message will be written to the application's CloudWatch log", 
  "threadName": "Flink-DispatcherRestEndpoint-thread-2", 
  "applicationARN": "arn:aws:kinesisanalyticsus-east-1:123456789012:application/test", 
  "applicationVersionId": "1", "messageSchemaVersion": "1", 
  "messageType": "INFO" 
}
```

## 使用 SLF4 J 写入 CloudWatch 日志
<a name="cloudwatch-logs-writing-slf4j"></a>

1. 将以下依赖项添加到应用程序的 `pom.xml` 文件中：

   ```
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.7.7</version>
       <scope>runtime</scope>
   </dependency>
   ```

1. 包括库中的对象：

   ```
   import org.slf4j.Logger;
   import org.slf4j.LoggerFactory;
   ```

1. 实例化 `Logger` 对象并传入您的应用程序类：

   ```
   private static final Logger log = LoggerFactory.getLogger(YourApplicationClass.class);
   ```

1. 使用 `log.info` 写入到日志。将在应用程序日志中写入大量消息。为了便于筛选自定义消息，请使用 `INFO` 应用程序日志级别。

   ```
   log.info("This message will be written to the application's CloudWatch log");
   ```

应用程序在日志中写入一条记录，并显示类似下面的消息：

```
{
  "locationInformation": "com.amazonaws.services.managed-flink.StreamingJob.main(StreamingJob.java:95)", 
  "logger": "com.amazonaws.services.managed-flink.StreamingJob", 
  "message": "This message will be written to the application's CloudWatch log", 
  "threadName": "Flink-DispatcherRestEndpoint-thread-2", 
  "applicationARN": "arn:aws:kinesisanalyticsus-east-1:123456789012:application/test", 
  "applicationVersionId": "1", "messageSchemaVersion": "1", 
  "messageType": "INFO" 
}
```

# 使用记录适用于 Apache 的托管服务 Flink API 调用 AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

适用于 Apache Flink 的托管服务与 AWS CloudTrail一项服务集成，该服务提供用户、角色或服务在 Apache Flink 托管 AWS 服务中执行的操作的记录。 CloudTrail 捕获所有 Apache Flink 托管服务的 API 调用作为事件。捕获的调用包括来自 Managed Service for Apache Flink 控制台的调用，以及对 Managed Service for Apache Flink API 操作的代码调用。如果您创建跟踪，则可以允许将 CloudTrail 事件持续传输到 Amazon S3 存储桶，包括适用于 Apache Flink 的托管服务的事件。如果您未配置跟踪，您仍然可以在 CloudTrail 控制台的 “事件**历史记录” 中查看最新的事件**。使用收集的信息 CloudTrail，您可以确定向 Apache Flink 托管服务发出的请求、发出请求的 IP 地址、谁发出了请求、何时发出请求以及其他详细信息。

要了解更多信息 CloudTrail，请参阅《[AWS CloudTrail 用户指南》](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

## 适用于 Apache 的托管服务 Flink 中的信息 CloudTrail
<a name="service-name-info-in-cloudtrail"></a>

CloudTrail 在您创建 AWS 账户时已在您的账户上启用。**当 Apache Flink 托管服务中发生活动时，该活动会与其他 AWS 服务 CloudTrail 事件一起记录在事件历史记录中。**您可以在自己的 AWS 账户中查看、搜索和下载最近发生的事件。有关更多信息，请参阅[使用事件历史记录查看 CloudTrail 事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

要持续记录 AWS 账户中的事件，包括适用于 Apache Flink 的托管服务的事件，请创建跟踪。*跟踪*允许 CloudTrail 将日志文件传输到 Amazon S3 存储桶。默认情况下，当您在控制台中创建跟踪时，该跟踪将应用于所有 AWS 区域。跟踪记录 AWS 分区中所有区域的事件，并将日志文件传送到您指定的 Amazon S3 存储桶。此外，您可以配置其他 AWS 服务，以进一步分析和处理 CloudTrail 日志中收集的事件数据。有关更多信息，请参阅下列内容：
+ [创建跟踪概述](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支持的服务和集成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [配置 Amazon SNS 通知 CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [接收来自多个区域的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[接收来自多个账户的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

所有适用于 Apache Flink 的托管服务 Flink 操作都由 Ap [ache Flink 托管服务 API 参考](/managed-flink/latest/apiv2/Welcome.html)记录 CloudTrail 并记录在案。例如，调用`[CreateApplication](/managed-flink/latest/apiv2/API_CreateApplication.html)`和` [UpdateApplication](/managed-flink/latest/apiv2/API_UpdateApplication.html)`操作会在 CloudTrail 日志文件中生成条目。

每个事件或日志条目都包含有关生成请求的人员信息。身份信息有助于您确定以下内容：
+ 请求是使用根证书还是 AWS Identity and Access Management (IAM) 用户凭证发出。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他 AWS 服务发出。

有关更多信息，请参阅 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 了解 Managed Service for Apache Flink 日志文件条目
<a name="understanding-service-name-entries"></a>

跟踪是一种配置，允许将事件作为日志文件传输到您指定的 Amazon S3 存储桶。 CloudTrail 日志文件包含一个或多个日志条目。事件代表来自任何来源的单个请求，包括有关请求的操作、操作的日期和时间、请求参数等的信息。 CloudTrail 日志文件不是公共 API 调用的有序堆栈跟踪，因此它们不会按任何特定的顺序出现。

以下示例显示了一个演示[AddApplicationCloudWatchLoggingOption](/managed-flink/latest/apiv2/API_AddApplicationCloudWatchLoggingOption.html)和[DescribeApplication](/managed-flink/latest/apiv2/API_DescribeApplication.html)操作的 CloudTrail 日志条目。

```
{
    "Records": [
        {
            "eventVersion": "1.05",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2019-03-07T01:19:47Z",
            "eventSource": "kinesisanlaytics.amazonaws.com",
            "eventName": "AddApplicationCloudWatchLoggingOption",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "applicationName": "cloudtrail-test",
                "currentApplicationVersionId": 1,
                "cloudWatchLoggingOption": {
                    "logStreamARN": "arn:aws:logs:us-east-1:012345678910:log-group:cloudtrail-test:log-stream:flink-cloudwatch"
                }
            },
            "responseElements": {
                "cloudWatchLoggingOptionDescriptions": [
                    {
                        "cloudWatchLoggingOptionId": "2.1",
                        "logStreamARN": "arn:aws:logs:us-east-1:012345678910:log-group:cloudtrail-test:log-stream:flink-cloudwatch"
                    }
                ],
                "applicationVersionId": 2,
                "applicationARN": "arn:aws:kinesisanalyticsus-east-1:012345678910:application/cloudtrail-test"
            },
            "requestID": "18dfb315-4077-11e9-afd3-67f7af21e34f",
            "eventID": "d3c9e467-db1d-4cab-a628-c21258385124",
            "eventType": "AwsApiCall",
            "apiVersion": "2018-05-23",
            "recipientAccountId": "012345678910"
        },
        {
            "eventVersion": "1.05",
            "userIdentity": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::012345678910:user/Alice",
                "accountId": "012345678910",
                "accessKeyId": "EXAMPLE_KEY_ID",
                "userName": "Alice"
            },
            "eventTime": "2019-03-12T02:40:48Z",
            "eventSource": "kinesisanlaytics.amazonaws.com",
            "eventName": "DescribeApplication",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "127.0.0.1",
            "userAgent": "aws-sdk-java/unknown-version Linux/x.xx",
            "requestParameters": {
                "applicationName": "sample-app"
            },
            "responseElements": null,
            "requestID": "3e82dc3e-4470-11e9-9d01-e789c4e9a3ca",
            "eventID": "90ffe8e4-9e47-48c9-84e1-4f2d427d98a5",
            "eventType": "AwsApiCall",
            "apiVersion": "2018-05-23",
            "recipientAccountId": "012345678910"
        }
    ]
}
```