

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

# 使用 Amazon CloudWatch 监控 MemoryDB
<a name="monitoring-cloudwatch"></a>

您可以使用 CloudWatch 监控 MemoryDB，CloudWatch 会收集原始数据并将其处理为易读且近乎实时的指标。这些统计数据会保存 15 个月，从而使您能够访问历史信息，并能够更好地了解您的 Web 应用程序或服务的执行情况。此外，可以设置用于监测特定阈值的警报，并在达到相应阈值时发送通知或执行操作。有关更多信息，请参阅《[Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)》。

以下部分列出了 MemoryDB 的指标和维度。

**Topics**
+ [主机级指标](metrics.HostLevel.md)
+ [MemoryDB 的指标](metrics.memorydb.md)
+ [应监控哪些指标？](metrics.whichshouldimonitor.md)
+ [选择指标统计数据和周期](metrics.ChoosingStatisticsAndPeriods.md)
+ [监控 CloudWatch 指标](cloudwatchmetrics.md)

# 主机级指标
<a name="metrics.HostLevel"></a>

`AWS/MemoryDB` 命名空间包含各个节点的以下主机级指标。

**另请参阅**
+ [MemoryDB 的指标](metrics.memorydb.md)


| 指标 | 描述 | 单位 | 
| --- | --- | --- | 
| CPUUtilization |  整个主机的 CPU 使用率百分比。由于 Valkey 和 Redis OSS 是单线程的，所以我们建议您监控有 4 个或更多 vCPU 的节点的 EngineCPUUtilization 指标。 |  百分比  | 
| FreeableMemory  |  主机上可用的闲置内存量。此数字源自操作系统报告为可释放的 RAM 和缓冲区中的内存。 |  字节  | 
| NetworkBytesIn |  主机已从网络读取的字节数。 |  字节  | 
| NetworkBytesOut | 实例在所有网络接口上发送的字节数。 |  字节  | 
| NetworkPacketsIn | 实例在所有网络接口上收到的数据包的数量。此指标依据单个实例上的数据包数量来标识传入流量的量。 | 计数  | 
| NetworkPacketsOut | 实例在所有网络接口上发送的数据包的数量。此指标依据单个实例上的数据包数量标识传出流量的量。 | 计数  | 
| NetworkBandwidthInAllowanceExceeded | 因入站聚合带宽超过实例的最大值而形成的数据包的数量。 | 计数  | 
| NetworkConntrackAllowanceExceeded | 由于连接跟踪超过实例的最大值且无法建立新连接而形成的数据包的数量。这可能会导致进出实例的流量丢失数据包。 | 计数  | 
| NetworkBandwidthOutAllowanceExceeded | 因出站聚合带宽超过实例的最大值而形成的数据包的数量。 | 计数  | 
| NetworkPacketsPerSecondAllowanceExceeded | 因双向每秒数据包数量超过实例的最大值而形成的数据包数量。 | 计数  | 
| NetworkMaxBytesIn | 每分钟内接收字节的最大每秒突增量。 | 字节 | 
| NetworkMaxBytesOut  | 每分钟内传输字节的最大每秒突增量。 | 字节 | 
| NetworkMaxPacketsIn | 每分钟内接收数据包的最大每秒突增量。 | 计数  | 
| NetworkMaxPacketsOut | 每分钟内传输数据包的最大每秒突增量。 | 计数  | 
| SwapUsage |  主机上的交换区使用量。 |  字节  | 

# MemoryDB 的指标
<a name="metrics.memorydb"></a>

`AWS/MemoryDB` 命名空间包括以下指标。

除 `ReplicationLag`、`EngineCPUUtilization`、`SuccessfulWriteRequestLatency` 和 `SuccessfulReadRequestLatency` 外，这些指标源自 Valkey 和 Redis OSS 的 **info** 命令。每项指标都是按照节点级计算的。

有关 **INFO** 命令的完整文档，请参阅 [INFO](http://valkey.io/commands/info)。

**另请参阅。**
+ [主机级指标](metrics.HostLevel.md)

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/metrics.memorydb.html)

以下是一些类型的命令的集合，派生自 **info commandstats**。commandstats 部分根据命令类型提供统计信息，包括调用次数。

有关可用命令的完整列表，请参阅[命令](https://valkey.io/commands)。


| 指标  | 描述  | 单位  | 
| --- | --- | --- | 
| EvalBasedCmds | 基于 eval 的命令的命令总数。这是根据 commandstats 统计数据得出的，方式是计算 eval 与 evalsha 的总和。 | 计数 | 
| GeoSpatialBasedCmds | 基于地理空间的命令的命令总数。这是根据 commandstats 统计数据得出的。它是通过汇总所有地理类型的命令的总和得出的：geoadd、geodist、geohash、geopos、georadius 和 georadiusbymember。 | 计数 | 
| GetTypeCmds | read-only 类型命令的总数。这是根据 commandstats 统计数据得出的，方法是计算所有 read-only 类型命令（get、hget、scard、lrange 等）的总和。 | 计数 | 
| HashBasedCmds | 基于哈希的命令总数。这是根据 commandstats 统计数据得出的，方法是计算所有作用于一个或多个哈希的命令（hget、hkeys、hvals、hdel 等）的总和。 | 计数 | 
| HyperLogLogBasedCmds | 基于 HyperLogLog 的命令的总数。这是根据 commandstats 统计数据得出的，方法是计算所有 pf 类型的命令（pfadd、pfcount、pfmerge 等）的总和。 | 计数 | 
|  JsonBasedCmds |  基于 JSON 的命令总数。这是根据 commandstats 统计数据得出的，方式是计算所有作用于一个或多个 JSON 文档对象的命令的总和。 | 计数 | 
| KeyBasedCmds | 基于密钥的命令总数。这是根据 commandstats 统计数据得出的，方法是计算所有作用于多个数据结构中的一个或多个键的命令（del、expire、rename 等）的总和。 | 计数 | 
| ListBasedCmds | 基于列表的命令总数。这是根据 commandstats 统计数据得出的，方法是计算所有作用于一个或多个列表的命令（lindex、lrange、lpush、ltrim 等）的总和。 | 计数 | 
| PubSubBasedCmds | 用于发布/订阅功能的命令总数。这是根据 commandstats 统计数据得出的，方式是计算所有用于发布/订阅功能的命令（psubscribe、publish、pubsub、punsubscribe、subscribe 和 unsubscribe）的总和。 | 计数 | 
| SearchBasedCmds | 二级索引和搜索命令的总数，包括读取和写入命令。这是根据 commandstats 统计数据得出的，方式是计算所有作用于二级索引的搜索命令的总和。 | 计数 | 
| SearchBasedGetCmds | 二级索引和搜索只读命令的总数。这是根据 commandstats 统计数据得出的，方式是计算所有二级索引和搜索获取命令的总和。 | 计数 | 
| SearchBasedSetCmds | 二级索引和搜索写入命令的总数。这是根据 commandstats 统计数据得出的，方式是计算所有二级索引和搜索集命令的总和。 | 计数 | 
| SearchNumberOfIndexes | 索引的总数。 | 计数 | 
| SearchNumberOfIndexedKeys | 已编入索引的键的总数  | 计数 | 
| SearchTotalIndexSize | 所有索引占用的内存（字节）。 | 字节 | 
| SetBasedCmds | 基于设置的命令总数。这是根据 commandstats 统计数据得出的，方法是计算所有作用于一个或多个集合的命令（scard、sdiff、sadd、sunion 等）的总和。 | 计数 | 
| SetTypeCmds | write 类型命令的总数。这是根据 commandstats 统计数据得出的，方法是计算对数据执行操作的所有 mutative 类型的命令（set、hset、sadd、lpop 等）的总和。 | 计数 | 
| SortedSetBasedCmds | 基于设置的已排序命令总数。这是根据 commandstats 统计数据得出的，方法是计算所有作用于一个或多个已排序集合的命令（zcount、zrange、zrank、zadd 等）的总和。 | 计数 | 
| StringBasedCmds | 基于字符串的命令总数。这是根据 commandstats 统计数据得出的，方法是计算所有作用于一个或多个字符串的命令（strlen、setex、setrange 等）的总和。 | 计数 | 
| StreamBasedCmds | 基于流的命令总数。这是根据 commandstats 统计数据得出的，方法是计算所有作用于一个或多个流数据类型的命令（xrange、xlen、xadd、xdel 等）的总和。 | 计数 | 

# 应监控哪些指标？
<a name="metrics.whichshouldimonitor"></a>

通过以下 CloudWatch 指标可深入了解 MemoryDB 性能。在许多情况下，我们建议对这些指标设置 CloudWatch 告警，以便您可以在性能问题出现之前采取纠正措施。

**Topics**
+ [CPUUtilization](#metrics-cpu-utilization)
+ [EngineCPUUtilization](#metrics-engine-cpu-utilization)
+ [SwapUsage](#metrics-swap-usage)
+ [移出](#metrics-evictions)
+ [当前连接](#metrics-curr-connections)
+ [内存](#metrics-memory)
+ [网络](#metrics-network)
+ [延迟](#metrics-latency)
+ [复制](#metrics-replication)

## CPUUtilization
<a name="metrics-cpu-utilization"></a>

这是以百分比形式报告的主机级指标。有关更多信息，请参阅 [主机级指标](metrics.HostLevel.md)。

 对于有 2 个或更少 vCPU 的较小节点类型，可使用 `CPUUtilization ` 指标来监控工作负载。

一般来说，我们建议您将阈值设置为可用 CPU 的 90%。因为 Valkey 和 Redis OSS 是单线程的，实际阈值应计算为节点总容量的一小部分。例如，假设您使用具有两个核心的节点类型。在这种情况下，CPU 使用率的阈值为 90/2，或 45%。要查找您的节点类型具有的核心（vCPU）数量，请参阅 [ MemoryDB 定价](https://aws.amazon.com/memorydb/pricing/?p=ps)。

您需要根据所使用的节点中的核心数，来确定自己的阈值。如果超过此阈值，并且主要工作负载来自读取请求，则请通过添加只读副本来扩展集群。如果主要工作负载来自写入请求，我们建议您添加更多分片，以在更多主节点中分配写入工作负载。

**提示**  
您可能可以使用向您报告有关 Valkey 或 Redis OSS 引擎核心的使用率百分比的指标 `EngineCPUUtilization`，而不是使用主机级指标 `CPUUtilization`。要了解此指标在您的节点上是否可用并了解更多信息，请参阅 [MemoryDB 的指标](https://docs.aws.amazon.com/memorydb/latest/devguide/metrics.memorydb.html)。

对于有 4 个或更多 vCPU 的较大节点类型，您可能希望使用 `EngineCPUUtilization` 指标，该指标可以向您报告 Valkey 或 Redis OSS 引擎核心的使用率百分比。要了解此指标在您的节点上是否可用并了解更多信息，请参阅 [MemoryDB 的指标](https://docs.aws.amazon.com/memorydb/latest/devguide/metrics.memorydb.html)。

## EngineCPUUtilization
<a name="metrics-engine-cpu-utilization"></a>

对于有 4 个或更多 vCPU 的较大节点类型，您可能希望使用 `EngineCPUUtilization` 指标，该指标可以向您报告 Valkey 或 Redis OSS 引擎核心的使用率百分比。要了解此指标在您的节点上是否可用并了解更多信息，请参阅 [MemoryDB 的指标](https://docs.aws.amazon.com/memorydb/latest/devguide/metrics.memorydb.html)。

## SwapUsage
<a name="metrics-swap-usage"></a>

这是以字节为单位报告的主机级指标。有关更多信息，请参阅 [主机级指标](metrics.HostLevel.md)。

如果 `FreeableMemory` CloudWatch 指标接近 0（即低于 100MB），或者 `SwapUsage` 指标大于 `FreeableMemory` 指标，则节点可能正承受内存压力。

## 移出
<a name="metrics-evictions"></a>

这是引擎指标。我们建议您根据应用程序需求，为此指标确定自己的警报阈值。

## 当前连接
<a name="metrics-curr-connections"></a>

这是引擎指标。我们建议您根据应用程序需求，为此指标确定自己的警报阈值。

*当前连接*的数量不断增加，可能表示应用程序出现问题；您需要调查应用程序行为以解决此问题。

## 内存
<a name="metrics-memory"></a>

内存是 Valkey 和 Redis OSS 的核心。了解集群的内存利用率对于避免数据丢失和适应数据集的未来增长是必要的。有关节点内存利用率的统计信息可在 [INFO](https://valkey.io/commands/info) 命令的内存部分中找到。

## 网络
<a name="metrics-network"></a>

集群网络带宽容量的决定因素之一是您选择的节点类型。有关节点的网络容量的更多信息，请参阅 [Amazon MemoryDB 定价](https://aws.amazon.com/memorydb/pricing/)。

## 延迟
<a name="metrics-latency"></a>

延迟指标 `SuccessfulWriteRequestLatency` 和 `SuccessfulReadRequestLatency` 测量 Valkey 引擎的 MemoryDB 响应请求所需的总时间。

**注意**  
当在 Valkey 客户端上启用 CLIENT REPLY 并使用 Valkey 流水线技术时，可能会出现 `SuccessfulWriteRequestLatency` 和 `SuccessfulReadRequestLatency` 指标数值偏高的情况。Valkey 流水线技术是一种通过一次性发出多个命令而不等待每个单独命令的响应来提高性能的技术。为避免数值偏高，我们建议将您的 Redis 客户端配置为使用 [CLIENT REPLY OFF](https://valkey.io/commands/client-reply/) 来流水线化命令。

## 复制
<a name="metrics-replication"></a>

可通过 `ReplicationBytes` 指标了解被复制的数据量。您可以根据复制吞吐量监控 `MaxReplicationThroughput`。建议在达到最大复制吞吐量时添加更多分片。

`ReplicationDelayedWriteCommands` 还可以提示工作负载是否超过最大复制吞吐量。有关在 MemoryDB 中使用复制的更多信息，请参阅[了解 MemoryDB 复制](https://docs.aws.amazon.com/memorydb/latest/devguide/replication.html)

# 选择指标统计数据和周期
<a name="metrics.ChoosingStatisticsAndPeriods"></a>

虽然 CloudWatch 将允许您为每个指标选择统计数据和周期，但并非所有的组合都有用。例如，CPU 利用率的平均、最小和最大统计数据均有用，但求和统计数据却无用。

适用于每个单独节点之所有 MemoryDB 示例的发布时间都为 60 秒持续时间。对于任何 60 秒期间，节点的度量标准将只包含一个单一示例。

# 监控 CloudWatch 指标
<a name="cloudwatchmetrics"></a>

MemoryDB 和 CloudWatch 集成在一起，因此您可收集多种指标。您可使用 CloudWatch 监控这些指标。

**注意**  
下列示例需要使用 CloudWatch 命令行工具。有关 CloudWatch 的更多信息和下载开发工具，请参阅 [CloudWatch 产品页面](https://aws.amazon.com/cloudwatch)。

以下程序将介绍如何使用 CloudWatch 收集过去一小时内集群的存储空间统计数据。

**注意**  
下述示例中提供的 `StartTime` 和 `EndTime` 值都供说明之用。确保针对您的节点使用适当的开始和结束时间值替代示例中的相应值。

有关 MemoryDB 限制的信息，请参阅 MemoryDB 的[AWS 服务限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_memorydb)。

## 监控 CloudWatch 指标（控制台）
<a name="cloudwatchmetricsclusters.viewdetails"></a>

 **收集集群的 CPU 利用率统计数据** 

1. 登录到 AWS 管理控制台 并打开 MemoryDB 控制台，网址：[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/)。

1. 选择您希望查看其度量标准的节点。
**注意**  
若选择 20 个以上的节点，则将禁用在控制台上查看指标。

   1. 在 AWS 管理控制台的**集群**页面上，单击一个或多个集群的名称。

      显示集群的详情页面。

   1. 单击位于窗口顶部的 **Nodes** 选项卡。

   1. 在详情窗口的 **Nodes** 选项卡上，选择您希望查看其度量标准的节点。

      一份可用 CloudWatch 度量标准列表会显示在控制台窗口的底部。

   1. 单击 **CPU 利用率** 度量标准。

      CloudWatch 控制台将打开，其中会显示您选择的指标。您可以使用**统计数据**和**周期**下拉列表框以及**时间范围** 选项卡来更改所显示的指标。

## 使用 CloudWatch CLI 监控 CloudWatch 指标
<a name="cloudwatchmetrics.cli"></a>

 **收集集群的 CPU 利用率统计数据** 
+ 使用以下参数调用 CloudWatch 命令 **aws cloudwatch get-metric-statistics**（请注意，此处的开始和结束时间仅作为示例；您需要替换为适合您自己的开始和结束时间）：

  对于 Linux、macOS 或 Unix：

  ```
  1. aws cloudwatch get-metric-statistics CPUUtilization \
  2.     --dimensions=ClusterName=mycluster,NodeId=0002" \
  3.     --statistics=Average \
  4.     --namespace="AWS/MemoryDB" \
  5.     --start-time 2013-07-05T00:00:00 \
  6.     --end-time 2013-07-06T00:00:00 \
  7.     --period=60
  ```

  对于 Windows：

  ```
  1. mon-get-stats CPUUtilization ^
  2.     --dimensions=ClusterName=mycluster,NodeId=0002" ^
  3.     --statistics=Average ^
  4.     --namespace="AWS/MemoryDB" ^
  5.     --start-time 2013-07-05T00:00:00 ^
  6.     --end-time 2013-07-06T00:00:00 ^
  7.     --period=60
  ```

## 使用 CloudWatch API 监控 CloudWatch 指标
<a name="cloudwatchmetrics.api"></a>

 **收集集群的 CPU 利用率统计数据** 
+ 使用以下参数调用 CloudWatch API `GetMetricStatistics`（请注意，此处的开始和结束时间仅作为示例；您需要替换为适合您自己的开始和结束时间）：
  + `Statistics.member.1``=Average`
  + `Namespace``=AWS/MemoryDB`
  + `StartTime``=2013-07-05T00:00:00`
  + `EndTime``=2013-07-06T00:00:00`
  + `Period``=60`
  + `MeasureName``=CPUUtilization`
  + `Dimensions``=ClusterName=mycluster,NodeId=0002`  
**Example**  

  ```
   1. http://monitoring.amazonaws.com/
   2.     ?SignatureVersion=4
   3.     &Action=GetMetricStatistics
   4.     &Version=2014-12-01
   5.     &StartTime=2013-07-16T00:00:00
   6.     &EndTime=2013-07-16T00:02:00
   7.     &Period=60
   8.     &Statistics.member.1=Average
   9.     &Dimensions.member.1="ClusterName=mycluster"
  10.     &Dimensions.member.2="NodeId=0002"
  11.     &Namespace=Amazon/memorydb
  12.     &MeasureName=CPUUtilization						
  13.     &Timestamp=2013-07-07T17%3A48%3A21.746Z
  14.     &AWS;AccessKeyId=<&AWS; Access Key ID>
  15.     &Signature=<Signature>
  ```