在 Apache Flink 的托管服务中设置应用程序登录 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink 之前称为 Amazon Kinesis Data Analytics for Apache Flink。

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

在 Apache Flink 的托管服务中设置应用程序登录

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

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

请注意以下有关向应用程序添加 CloudWatch 日志记录选项的注意事项:

  • 使用控制台添加 CloudWatch 日志选项时,适用于 Apache 的托管服务 Flink 会为您创建 CloudWatch 日志组和日志流,并添加应用程序写入日志流所需的权限。

  • 使用添加 CloudWatch 日志记录选项时API,还必须创建应用程序的日志组和日志流,并添加应用程序写入日志流所需的权限。

使用控制台设置 CloudWatch 日志

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

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

/AWS/KinesisAnalytics/ApplicationName

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

kinesis-analytics-log-stream

您可以使用配置应用程序页面的监控日志级别部分来设置应用程序监控指标级别和监控日志级别。有关应用程序日志级别的信息,请参阅控制应用程序监控级别

使用设置 CloudWatch 日志记录 CLI

要使用添加 CloudWatch 日志记录选项 AWS CLI,请完成以下操作:

  • 创建 CloudWatch 日志组和日志流。

  • 使用操作创建应用程序时添加日志记录选项,或者使用CreateApplication操作向现有应用程序添加日志记录选项。AddApplicationCloudWatchLoggingOption

  • 在应用程序的策略中添加权限以写入到日志。

创建 CloudWatch 日志组和日志流

您可以使用 CloudWatch 日志控制台或创建日志组并进行流式传输API。 CloudWatch 有关创建 CloudWatch 日志组和日志流的信息,请参阅使用日志组和日志流

使用应用程序 CloudWatch 日志选项

使用以下API操作向新应用程序或现有应用程序添加 CloudWatch 日志选项或更改现有应用程序的日志选项。有关如何使用JSON文件作为API操作输入的信息,请参见适用于 Apache 的托管服务 Flink 示例代码 API

在创建应用程序时添加 CloudWatch 日志选项

以下示例演示了在创建应用程序时如何使用CreateApplication操作添加 CloudWatch 日志选项。在示例中,替换 Amazon Resource Name (ARN) of the CloudWatch Log stream to add to the new application 用你自己的信息。有关该操作的更多信息,请参阅 CreateApplication

{ "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 日志选项

以下示例演示如何使用AddApplicationCloudWatchLoggingOption操作向现有应用程序添加 CloudWatch 日志选项。在示例中,替换每个 user input placeholder 用你自己的信息。有关该操作的更多信息,请参阅 AddApplicationCloudWatchLoggingOption

{ "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 日志选项

以下示例演示如何使用UpdateApplication操作修改现有的 CloudWatch 日志选项。在示例中,替换每个 user input placeholder 用你自己的信息。有关该操作的更多信息,请参阅 UpdateApplication

{ "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 日志选项

以下示例演示如何使用DeleteApplicationCloudWatchLoggingOption操作删除现有 CloudWatch 日志选项。在示例中,替换每个 user input placeholder 用你自己的信息。有关该操作的更多信息,请参阅 DeleteApplicationCloudWatchLoggingOption

{ "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> }

设置应用程序日志级别

要设置应用程序日志记录级别,请使用CreateApplication操作的MonitoringConfiguration参数或UpdateApplication操作的MonitoringConfigurationUpdate参数。

有关应用程序日志级别的信息,请参阅控制应用程序监控级别

创建应用程序时设置应用程序日志记录级别

CreateApplication 操作的以下示例请求将应用程序日志级别设置为 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" }
更新应用程序日志级别

UpdateApplication 操作的以下示例请求将应用程序日志级别设置为 INFO

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

添加写入 CloudWatch 日志流的权限

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

有关使用适用于 Apache Flink 的托管服务IAM角色的更多信息,请参阅。Amazon Managed Service for Apache Flink 的身份和访问管理

信任策略

要向 Apache Flink 托管服务授予代入IAM角色的权限,您可以将以下信任策略附加到服务执行角色。

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

权限策略

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

{ "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:*", ] } ] }

控制应用程序监控级别

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

应用程序的监控指标级别控制日志消息的粒度。监控指标级别定义如下:

应用程序的监控日志级别控制应用程序日志的详细程度。监控日志级别定义如下:

  • 错误:应用程序的潜在灾难性事件。

  • 警告:应用程序的可能有害情况。

  • 信息:应用程序的信息性和暂时性故障事件。我们建议您使用该日志记录级别。

  • 调试:对调试应用程序非常有用的精细信息性事件。注意:仅将该级别用于临时调试目的。

应用日志记录最佳实践

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

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

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

执行日志故障排除

如果没有将应用程序日志写入到日志流,请验证以下内容:

  • 验证您的应用程序的IAM角色和策略是否正确。应用程序的策略需要具有以下权限以访问日志流:

    • logs:PutLogEvents

    • logs:DescribeLogGroups

    • logs:DescribeLogStreams

    有关更多信息,请参阅 添加写入 CloudWatch 日志流的权限

  • 验证应用程序是否正在运行。要检查应用程序的状态,请在控制台中查看应用程序的页面,或者使用DescribeApplicationListApplications操作。

  • 监控 CloudWatch 指标downtime,例如诊断其他应用程序问题。有关读取 CloudWatch 指标的信息,请参阅

使用 CloudWatch 日志见解

在应用程序中启用 CloudWatch 日志记录功能后,您可以使用 CloudWatch Logs Insights 来分析您的应用程序日志。有关更多信息,请参阅 使用 “日志见解” 分析 CloudWatch 日志