

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

# 日志传输
<a name="Log_Delivery"></a>

**注意**  
Valkey 7.x 及更高版本以及使用 6.0 和更高版本引擎的 Redis OSS 集群和复制组支持慢速日志。  
Valkey 7.x 及更高版本以及使用 6.2 和更高版本引擎的 Redis OSS 集群和复制组支持引擎日志。

日志传输可让您将[慢日志](https://valkey.io/commands/slowlog)或**引擎日志**流式传输到以下两个目的地之一：
+ Amazon Data Firehose
+ Amazon CloudWatch 日志

使用创建或修改集群时，您可以启用和配置日志传输 ElastiCache APIs。每个日志条目将以两种格式之一传输到指定的目的地：*JSON* 或 *TEXT*。

将定期从引擎中检索固定数量的慢日志条目。根据针对引擎参数 `slowlog-max-len` 指定的值，可能不会将其他慢日志条目传送到目的地。

您可以随时使用AWS控制台或其中一个修改选项选择更改传输配置或禁用日志传输 APIs，即[modify-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-cluster.html)或[modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)。

您必须为所有日志传输修改设置 `apply-immediately` 参数。

**注意**  
启用 CloudWatch 日志传输后，即使日志直接传送到 Amazon Data Firehose，也会收取亚马逊日志费用。有关更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)中的 “销售日志” 部分。

## 慢日志条目的内容
<a name="Log_contents"></a>

慢日志包含以下信息：
+ **CacheClusterId**— 集群的 ID
+ **CacheNodeId**— 缓存节点的 ID
+ **Id** – 每个慢日志条目的唯一渐进式标识符
+ **Timestamp** – 处理已录入的命令时的 Unix 时间戳
+ **Duration** – 其执行所需的时间（以微秒为单位）
+ **Command** – 客户端使用的命令。例如，`set foo bar`其中`foo`是密钥，其中`bar`是值。 ElastiCache 将实际的密钥名称和值替换`(2 more arguments)`为以避免暴露敏感数据。
+ **ClientAddress**— 客户端 IP 地址和端口
+ **ClientName**— 客户端名称（如果通过`CLIENT SETNAME`命令设置） 

## 引擎日志条目的内容
<a name="Log_contents-engine-log"></a>

引 ElastiCache 擎日志包含以下信息：
+ **CacheClusterId**— 集群的 ID
+ **CacheNodeId**— 缓存节点的 ID
+ **日志级别** — LogLevel 可以是以下任一项：`VERBOSE("-")`、`NOTICE("*")`、`WARNING("#")`。
+ **Time** – 日志消息的 UTC 时间。时间采用以下格式：`"DD MMM YYYY hh:mm:ss.ms UTC"`
+ **Role** – 发出日志的节点的角色。它可以是以下之一：“M” 代表主进程，“S” 代表副本，“C” 代表正在处理的写入子进程，“X” 代表哨兵。 RDB/AOF 
+ **Message** – 引擎日志消息。

## 配置日志记录的权限
<a name="Log_permissions"></a>

您需要在您的 IAM 策略中包含以下 IAM user/role 权限：
+ `logs:CreateLogDelivery`
+ `logs:UpdateLogDelivery`
+ `logs:DeleteLogDelivery`
+ `logs:GetLogDelivery`
+ `logs:ListLogDeliveries`

有关更多信息，请参阅[访问管理概览：权限和策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_access-management.html)。

## 日志类型和日志格式规范
<a name="Destination_Formats"></a>

### 慢日志
<a name="Destination_Formats-slowlog"></a>

慢日志支持 JSON 和 TEXT 两种格式

以下示例演示了 JSON 格式：

```
{
  "CacheClusterId": "logslowxxxxmsxj", 
  "CacheNodeId": "0001", 
  "Id": 296, 
  "Timestamp": 1605631822, 
  "Duration (us)": 0, 
  "Command": "GET ... (1 more arguments)", 
  "ClientAddress": "192.168.12.104:55452", 
  "ClientName": "logslowxxxxmsxj##" 
}
```

以下示例演示了 TEXT 格式：

```
logslowxxxxmsxj,0001,1605631822,30,GET ... (1 more arguments),192.168.12.104:55452,logslowxxxxmsxj## 
```

### 引擎日志
<a name="Destination_Formats-engine-log"></a>

引擎日志支持 JSON 和 TEXT 两种格式

以下示例演示了 JSON 格式：

```
{ 
  "CacheClusterId": "xxxxxxxxxzy-engine-log-test", 
  "CacheNodeId": "0001", 
  "LogLevel": "VERBOSE", 
  "Role": "M", 
  "Time": "12 Nov 2020 01:28:57.994 UTC", 
  "Message": "Replica is waiting for next BGSAVE before synchronizing with the primary. Check back later" 
}
```

以下示例演示了 TEXT 格式：

```
xxxxxxxxxxxzy-engine-log-test/0001:M 29 Oct 2020 20:12:20.499 UTC * A slow-running Lua script detected that is still in execution after 1000 microseconds.
```

# ElastiCache 登录目的地
<a name="Logging-destinations"></a>

本节介绍您可以为日志选择的 ElastiCache 日志记录目的地。每个部分都提供了有关配置目标类型日志记录的指导，以及有关特定于目标类型的任何行为的信息。配置日志目标后，您可以向日志记录配置提供其规格以开始向其登录。 ElastiCache 

**Topics**
+ [Amazon CloudWatch 日志](#Destination_Specs_CloudWatch_Logs)
+ [Amazon Data Firehose](#Destination_Specs_Kinesis_Firehose_Stream)

## Amazon CloudWatch 日志
<a name="Destination_Specs_CloudWatch_Logs"></a>
+ 您可以指定一个 CloudWatch 日志日志组，用于传送日志。
+ 来自多个 Valkey 或 Redis OSS 集群和复制组的日志可以发送到同一个日志组。
+ 将为集群或复制组中的每个节点创建一个新的日志流，并将日志发送到各自的日志流。日志流名称将使用以下格式：`elasticache/${engine-name}/${cache-cluster-id}/${cache-node-id}/${log-type}`

**向日志发布 CloudWatch 日志的权限** 

要将日志发送 ElastiCache 到日志 CloudWatch 日志组，您必须具有以下权限设置才能进行配置：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow",
            "Sid": "ElastiCacheLogging"
        },
        {
            "Sid": "ElastiCacheLoggingCWL",
            "Action": [
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

有关更多信息，请参阅[发送到日志的 CloudWatch 日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-CWL)。

## Amazon Data Firehose
<a name="Destination_Specs_Kinesis_Firehose_Stream"></a>
+ 您需要指定一个将向其中传输日志的 Firehose 传输流。
+ 来自多个 Valkey 或 Redis OSS 集群和复制组的日志可以传输到同一个传输流。
+ 集群或复制组中每个节点的日志将传输到同一个传输流。您可以根据各个日志消息中包括的 `cache-cluster-id` 和 `cache-node-id` 来区分不同缓存节点的日志消息。
+ 亚太地区（大阪）区域目前不支持将日志传输到 Firehose。

**将日志发布到 Firehose 所需的权限** 

要将日志发送 ElastiCache 到亚马逊 Kinesis Data Firehose 传输流，您必须具有以下权限才能进行配置。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow",
            "Sid": "ElastiCacheLogging"
        },
        {
            "Sid": "ElastiCacheLoggingFHSLR",
            "Action": [
                "iam:CreateServiceLinkedRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Sid": "ElastiCacheLoggingFH",
            "Action": [
                "firehose:TagDeliveryStream"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Effect": "Allow"
        }
    ]
}
```

------

# 使用控制台指定日志传输
<a name="Console_Log"></a>

使用 AWS 管理控制台，您可以按照[创建 Valkey（已禁用集群模式）集群（控制台）](SubnetGroups.designing-cluster-pre.valkey.md#Clusters.Create.CON.valkey-gs)中的步骤创建 Valkey 或 Redis OSS（已启用集群模式）集群，或按照[创建 Valkey 或 Redis OSS（已启用集群模式）集群（控制台）](Clusters.Create.md#Clusters.Create.CON.RedisCluster)中的步骤创建 Valkey 或 Redis OSS（已启用集群模式）集群。在上述任何一种情况下，您都可以通过执行以下操作来配置日志传输；

1. 在**高级设置**下，选择**日志**，然后选中**慢日志**或**引擎日志**。

1. 在 **Log format（日志格式）**下，选择 **Text（文本）**或 **JSON**。

1. 在 **Destination Type**（目标类型）下，选择 **CloudWatch Logs** 或 **Kinesis Firehose**。

1. 在 **Log destination**（日志目标）下，选择 **Create new**（创建新的），然后输入您的 Amazon S3 存储桶名称、CloudWatchLogs 日志组名称或 Kinesis Data Firehose 流名称，或选择 **Select existing**（选择现有），然后选择您的 CloudWatch Logs 日志组名称或您的 Kinesis Data Firehose 流名称，

**修改集群时：**

您可以选择启用/禁用日志传输，也可以更改目的地类型、格式或目的地：

1. 登录到控制台并打开 ElastiCache 控制台 ([https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/home))。

1. 在导航窗格中，选择 **Valkey 集群**或 **Redis OSS 集群**。

1. 从集群列表中，选择要修改的集群。选择 **Cluster name（集群名称）**而不是旁边的复选框。

1. 在 **Cluster name（集群名称）**页面上，选择 **Logs（日志）**选项卡。

1. 要启用/禁用慢日志，请选择 **Enable slow logs（启用慢日志）**或 **Disable slow logs（禁用慢日志）**。

1. 要启用/禁用引擎日志，请选择 **Enable engine logs**（启用引擎日志）或 **Disable engine logs**（禁用引擎日志）。

1. 要更改配置，请选择 **Modify slow logs**（修改慢日志）或 **Modify engine logs**（修改引擎日志）：
   + 在 **Destination Type（目标类型）**下，选择 **CloudWatch Logs** 或 **Kinesis Firehose**。
   + 在 **Log destination（日志目标）**下，选择 **Create new（创建新的）**，然后输入您的 CloudWatch Logs 日志组名称或 Kinesis Data Firehose 流名称。或者选择 **Select existing（选择现有）**，然后选择您的 CloudWatch Logs 日志组名称或 Kinesis Data Firehose 流名称。

# 使用 AWS CLI 指定日志传输
<a name="CLI_Log"></a>

**慢日志**

创建将慢日志传输到 CloudWatch Logs 的复制组。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
    --replication-group-id test-slow-log \
    --replication-group-description test-slow-log \
    --engine redis \
    --cache-node-type cache.r5.large \
    --num-cache-clusters 2 \
    --log-delivery-configurations '{
        "LogType":"slow-log", 
        "DestinationType":"cloudwatch-logs",  
        "DestinationDetails":{ 
          "CloudWatchLogsDetails":{ 
            "LogGroup":"my-log-group"
          } 
        }, 
        "LogFormat":"json" 
      }'
```

对于 Windows：

```
aws elasticache create-replication-group ^
    --replication-group-id test-slow-log ^
    --replication-group-description test-slow-log ^
    --engine redis ^
    --cache-node-type cache.r5.large ^
    --num-cache-clusters 2 ^
    --log-delivery-configurations '{
        "LogType":"slow-log", 
        "DestinationType":"cloudwatch-logs", 
        "DestinationDetails":{ 
          "CloudWatchLogsDetails":{ 
            "LogGroup":"my-log-group"
          } 
        }, 
        "LogFormat":"json" 
      }'
```

修改复制组以将慢日志传输到 CloudWatch Logs

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
    --replication-group-id test-slow-log \
    --apply-immediately \
    --log-delivery-configurations '
    {
      "LogType":"slow-log", 
      "DestinationType":"cloudwatch-logs", 
      "DestinationDetails":{ 
        "CloudWatchLogsDetails":{ 

          "LogGroup":"my-log-group"
        } 
      },
      "LogFormat":"json" 
    }'
```

对于 Windows：

```
aws elasticache modify-replication-group ^
    --replication-group-id test-slow-log ^
    --apply-immediately ^
    --log-delivery-configurations '
    {
      "LogType":"slow-log", 
      "DestinationType":"cloudwatch-logs", 
      "DestinationDetails":{ 
        "CloudWatchLogsDetails":{ 
          "LogGroup":"my-log-group"
        } 
      },
      "LogFormat":"json" 
    }'
```

修改复制组以禁用慢日志传递

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
    --replication-group-id test-slow-log \
    --apply-immediately \
    --log-delivery-configurations ' 
    {
      "LogType":"slow-log", 
      "Enabled":false 
    }'
```

对于 Windows：

```
aws elasticache modify-replication-group ^
    --replication-group-id test-slow-log ^
    --apply-immediately ^
    --log-delivery-configurations '  
    {
      "LogType":"slow-log", 
      "Enabled":false 
    }'
```

**引擎日志**

创建将引擎日志传输到 CloudWatch Logs 的复制组。

对于 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
    --replication-group-id test-slow-log \
    --replication-group-description test-slow-log \
    --engine redis \
    --cache-node-type cache.r5.large \
    --num-cache-clusters 2 \
    --log-delivery-configurations '{
        "LogType":"engine-log", 
        "DestinationType":"cloudwatch-logs",  
        "DestinationDetails":{ 
          "CloudWatchLogsDetails":{ 
            "LogGroup":"my-log-group"
          } 
        }, 
        "LogFormat":"json" 
      }'
```

对于 Windows：

```
aws elasticache create-replication-group ^
    --replication-group-id test-slow-log ^
    --replication-group-description test-slow-log ^
    --engine redis ^
    --cache-node-type cache.r5.large ^
    --num-cache-clusters 2 ^
    --log-delivery-configurations '{
        "LogType":"engine-log", 
        "DestinationType":"cloudwatch-logs", 
        "DestinationDetails":{ 
          "CloudWatchLogsDetails":{ 
            "LogGroup":"my-log-group"
          } 
        }, 
        "LogFormat":"json" 
      }'
```

修改复制组以将引擎日志传送到 Firehose

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
    --replication-group-id test-slow-log \
    --apply-immediately \
    --log-delivery-configurations '
    {
      "LogType":"engine-log", 
      "DestinationType":"kinesis-firehose",
      "DestinationDetails":{
      "KinesisFirehoseDetails":{
         "DeliveryStream":"test"
       }    
     },
      "LogFormat":"json" 
    }'
```

对于 Windows：

```
aws elasticache modify-replication-group ^
    --replication-group-id test-slow-log ^
    --apply-immediately ^
    --log-delivery-configurations '
    {
      "LogType":"engine-log",       
      "DestinationType":"kinesis-firehose",
      "DestinationDetails":{
      "KinesisFirehoseDetails":{
         "DeliveryStream":"test"
       }  
      },
      "LogFormat":"json" 
    }'
```

修改复制组以切换到引擎格式

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
    --replication-group-id test-slow-log \
    --apply-immediately \
    --log-delivery-configurations ' 
    {
       "LogType":"engine-log",
       "LogFormat":"json"
    }'
```

对于 Windows：

```
aws elasticache modify-replication-group ^
    --replication-group-id test-slow-log ^
    --apply-immediately ^
    --log-delivery-configurations ' 
    {
       "LogType":"engine-log",
       "LogFormat":"json"
    }'
```

修改复制组以禁用引擎日志传递

对于 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
    --replication-group-id test-slow-log \
    --apply-immediately \
    --log-delivery-configurations ' 
    {
      "LogType":"engine-log", 
      "Enabled":false 
    }'
```

对于 Windows：

```
aws elasticache modify-replication-group ^
    --replication-group-id test-slow-log ^
    --apply-immediately ^
    --log-delivery-configurations '  
    {
      "LogType":"engine-log", 
      "Enabled":false 
    }'
```