

# Amazon Glue 作业的日志记录
<a name="monitor-continuous-logging"></a>

 在 Amazon Glue 5.0 中，所有作业都具有实时日志记录功能。此外，您可以通过指定自定义配置选项来自定义日志记录行为，包括设置 Amazon CloudWatch 日志组名称、Amazon CloudWatch 日志流前缀（将添加到 Amazon Glue 作业运行 ID 和驱动程序/执行程序 ID 之前）以及日志消息的日志转换模式等。借助这些配置，您可以将日志聚合到具有不同过期策略的自定义 Amazon CloudWatch 日志组中。此外，您还可以使用自定义日志流前缀和转换模式来更有效地分析日志。借助这种自定义级别，您可以根据自己的具体需求优化日志管理和分析。

## Amazon Glue 5.0 中的日志记录行为
<a name="monitor-logging-behavior-glue-50"></a>

 默认情况下，系统日志、Spark 进程守护程序日志、和用户 Amazon Glue Logger 日志都会写入 Amazon CloudWatch 中的 `/aws-glue/jobs/error` 日志组，而用户 stdout（标准输出）和 stderr（标准错误）日志则会默认写入 `/aws-glue/jobs/output` 日志组。

## 自定义日志记录
<a name="monitor-logging-custom"></a>

 您可以使用以下作业参数来自定义默认日志组和日志流前缀：
+  `--custom-logGroup-prefix`：让您能够为 `/aws-glue/jobs/error` 和 `/aws-glue/jobs/output` 日志组指定自定义前缀。如果您提供了自定义前缀，则日志组名称将为以下格式：
  +  `/aws-glue/jobs/error` 将为 `{{<customer prefix>}}/error` 
  +  `/aws-glue/jobs/output ` 将为 `{{<customer prefix>}}/output` 
+  `--custom-logStream-prefix`：让您能够为日志组内的日志流名称指定自定义前缀。如果您提供了自定义前缀，则日志流名称将为以下格式：
  +  `jobrunid-driver` 将为 `{{<customer log stream>}}-driver` 
  +  `jobrunid-executorNum` 将为 `{{<customer log stream>}}-executorNum` 

 自定义前缀的验证规则和限制：
+  完整日志流名称长度必须介于 1 到 512 个字符之间。
+  自定义前缀本身的长度不应超过 400 个字符。
+  自定义前缀必须匹配正则表达式模式“[^:\*]\*”（允许的特殊字符为“\_”、“-”和“/”）。

## 使用自定义脚本日志记录程序记录特定于应用程序的消息
<a name="monitor-logging-script"></a>

您可以使用 Amazon Glue 日志记录程序记录在脚本中记录任何特定于应用程序的消息，这些消息实时发送到驱动程序日志流。

以下示例显示了一个 Python 脚本。

```
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)
logger = glueContext.get_logger()
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
```

以下示例显示了一个 Scala 脚本。

```
import com.amazonaws.services.glue.log.GlueLogger

object GlueApp {
  def main(sysArgs: Array[String]) {
    val logger = new GlueLogger
    logger.info("info message")
    logger.warn("warn message")
    logger.error("error message")
  }
}
```

## 启用进度栏以显示作业进度
<a name="monitor-logging-progress"></a>

Amazon Glue 在 `JOB_RUN_ID-progress-bar` 日志流下提供了实时进度栏，用于查看 Amazon Glue 作业运行状态。目前，它仅支持初始化 `glueContext` 的作业。如果您运行纯 Spark 作业而没有初始化 `glueContext`，则不显示 Amazon Glue 进度栏。

进度栏每 5 秒显示下列进度更新。

```
Stage Number (Stage Name): > (numCompletedTasks + numActiveTasks) / totalNumOfTasksInThisStage]
```

## Amazon CloudWatch 日志记录的安全配置
<a name="monitor-security-config-logging"></a>

 为 Amazon CloudWatch 日志启用安全配置后，Amazon Glue 会使用包含安全配置名称的特定命名模式创建日志组。

### 包含安全配置的日志组命名规范
<a name="monitor-log-group-naming"></a>

 默认日志组和自定义日志组将如下所示：
+  **默认错误日志组：**`/aws-glue/jobs/{{Security-Configuration-Name}}-role/{{glue-job-role}}/error`
+  **默认输出日志组：**`/aws-glue/jobs/{{Security-Configuration-Name}}-role/{{glue-job-role}}/output`
+  **自定义错误日志组（Amazon Glue 5.0）：**`{{custom-log-group-prefix}}/{{Security-Configuration-Name}}-role/{{glue-job-role}}/error`
+  **自定义输出日志组（Amazon Glue 5.0）：**`{{custom-log-group-prefix}}/{{Security-Configuration-Name}}-role/{{glue-job-role}}/output`

### 必需的 IAM 权限
<a name="monitor-logging-iam-permissions"></a>

 您需要将 `logs:AssociateKmsKey` 权限添加到您的 IAM 角色权限中（如果您使用 Amazon CloudWatch Logs 启用了安全配置）。如果不包括该权限，连续日志记录将禁用。

 此外，要为 Amazon CloudWatch Logs 配置加密，请遵循《Amazon Amazon CloudWatch Logs 用户指南》中 [Encrypt Log Data in Amazon CloudWatch Logs Using Amazon Key Management Service](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html) 部分的说明。

### 附加信息
<a name="additional-info"></a>

 有关创建安全配置的更多信息，请参阅[在 Amazon Glue 控制台上管理安全配置](https://docs.amazonaws.cn/glue/latest/dg/console-security-configurations.html)。

**Topics**
+ [Amazon Glue 5.0 中的日志记录行为](#monitor-logging-behavior-glue-50)
+ [自定义日志记录](#monitor-logging-custom)
+ [使用自定义脚本日志记录程序记录特定于应用程序的消息](#monitor-logging-script)
+ [启用进度栏以显示作业进度](#monitor-logging-progress)
+ [Amazon CloudWatch 日志记录的安全配置](#monitor-security-config-logging)
+ [为 Amazon Glue 4.0 和更早期版本作业启用连续日志记录](monitor-continuous-logging-enable.md)
+ [查看 Amazon Glue 作业的日志](monitor-continuous-logging-view.md)