

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

# 操作系统监控
<a name="os-monitoring"></a>

Amazon RDS for MySQL 或 MariaDB 中的数据库实例在 Linux 操作系统上运行，该操作系统使用底层系统资源：CPU、内存、网络和存储。

```
MySQL [(none)]> SHOW variables LIKE 'version%';
+-------------------------+---------------------+
| Variable_name           | Value               |
+-------------------------+---------------------+
| version                 | 8.0.28              |
| version_comment         | Source distribution |
| version_compile_machine | aarch64             |
| version_compile_os      | Linux               |
| version_compile_zlib    | 1.2.11              |
+-------------------------+---------------------+
5 rows in set (0.00 sec)
```

数据库和底层操作系统的整体性能在很大程度上取决于系统资源的利用率。例如，CPU 是系统性能的关键组件，因为它运行数据库软件指令并管理其他系统资源。如果 CPU 被过度利用（即，如果负载需要的 CPU 处理能力超过为数据库实例预调配的 CPU 处理能力），则此问题将影响数据库的性能和稳定性，从而影响您的应用程序的性能和稳定性。

数据库引擎动态分配和释放内存。当 RAM 中没有足够的内存来完成当前工作时，系统会将内存页面写入位于磁盘上的交换内存。由于磁盘比内存慢得多，因此即使磁盘基于 SSD NVMe 技术，内存分配过多也会导致性能下降。高内存利用率会导致数据库响应延迟增加，因为页面文件的大小会增加以支持额外的内存。如果内存分配过高以至耗尽了 RAM 和交换内存空间，则数据库服务可能会变得不可用，用户可能会观察到诸如 `[ERROR] mysqld: Out of memory (Needed xyz bytes)` 之类的错误。

MySQL 和 MariaDB 数据库管理系统利用存储子系统，该子系统由磁盘组成，用于存储[磁盘上的结构](https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html)，例如表、索引、二进制日志、重做日志、撤消日志和双写缓冲区文件。因此，与其他类型的软件相比，数据库必须执行大量磁盘活动。为了确保数据库的最佳运行，监控和调整磁盘 I/O 利用率和磁盘空间分配非常重要。数据库达到磁盘支持的最大 IOPS 或吞吐量的限制时，数据库性能可能会受到影响。例如，索引扫描导致的随机访问爆发可能会导致每秒大量 I/O 操作，这最终可能会达到底层存储的限制。全表扫描可能未达到 IOPS 限制，但它们可能会导致以每秒兆字节为单位的高吞吐量。监控磁盘空间分配并生成提醒至关重要，因为诸如 `OS error code 28: No space left on device` 之类的错误可能会导致数据库不可用和损坏。

Amazon RDS 为数据库实例运行的操作系统实时提供指标。Amazon RDS 会自动向 CloudWatch 发布一组操作系统指标。您可以在 Amazon RDS 控制台和 CloudWatch 控制面板中显示和分析这些指标，且可以在 CloudWatch 中对所选指标设置告警。示例包括：
+ `CPUUtilization`：CPU 使用百分率。
+ `BinLogDiskUsage`：二进制日志所占的磁盘空间大小。
+ `FreeableMemory`：随机存取内存的可用大小。这表示 `/proc/meminfo` 的 `MemAvailable` 字段的值。
+ `ReadIOPS`：每秒平均磁盘读取 I/O 操作数。
+ `WriteThroughput`：本地存储每秒写入磁盘的平均字节数。
+ `NetworkTransmitThroughput`：数据库节点上的传出网络流量，它结合了数据库流量和用于监控和复制的 Amazon RDS 流量。

有关 Amazon RDS 向 CloudWatch 发布的所有指标的完整参考，请参阅 Amazon RDS 文档中的 [Amazon RDS 的 Amazon CloudWatch 指标](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html)。

下图显示了 Amazon RDS 控制台上显示的 Amazon RDS 的 CloudWatch 指标示例。

![\[Amazon RDS 控制台上显示的 Amazon RDS 的 CloudWatch 指标\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/cloudwatch-metrics-rds-console.png)


下图显示了 CloudWatch 控制面板中显示的类似指标。

![\[CloudWatch 控制台上显示的 Amazon RDS 的 CloudWatch 指标\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/cloudwatch-metrics-cw-console.png)


另一组操作系统指标由 Amazon RDS 的[增强监控](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.overview.html)收集。该工具通过提供实时系统指标和操作系统进程信息，让您可以更深入地了解 Amazon RDS for MariaDB 和 Amazon RDS for MySQL 数据库实例的运行状况。当您在数据库实例上[启用“增强监控”](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.Enabling.html)并设置所需的粒度时，该工具会收集操作系统指标和进程信息，您可以在 [Amazon RDS 控制台](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.html)上显示和分析这些指标和流程信息，如以下屏幕所示。

![\[“增强监控”收集的操作系统指标\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/enhanced-monitoring.png)


“增强监控”提供的一些关键指标是：
+ `cpuUtilization.total`：使用的 CPU 总百分比。
+ `cpuUtilization.user`：用户程序使用的 CPU 百分比。
+ `memory.active`：已分配的内存量（以 KB 为单位）。
+ `memory.cached`：用于缓存基于文件系统的 I/O 的内存量。
+ `loadAverageMinute.one`：过去 1 分钟内请求 CPU 时间的进程数。

有关指标的完整列表，请参阅 Amazon RDS 文档中的[“增强监控”中的操作系统指标](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring-Available-OS-Metrics.html)。

在 Amazon RDS 控制台上，操作系统进程列表提供了数据库实例中运行的每个进程的详细信息。该列表分为三个部分：
+ **操作系统进程**：本节汇总了所有内核和系统进程的摘要。这些进程通常对数据库性能的影响降至最低。
+ **RDS 进程**：本节概述了支持 Amazon RDS 数据库实例所需的 AWS 进程。例如，其中包括 Amazon RDS 管理代理、监控和诊断进程以及类似的进程。
+ **RDS 子进程**：本节概述了支持数据库实例的 Amazon RDS 进程，在本例中为 `mysqld` 进程及其线程。`mysqld` 线程似乎嵌套在父 `mysqld` 进程下。

以下屏幕插图显示了 Amazon RDS 控制台中的操作系统进程列表。

![\[Amazon RDS 控制台中的操作系统进程列表\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/os-process-list.png)


Amazon RDS 将增强监测中的指标传输到您的 CloudWatch Logs 账户。Amazon RDS 控制台中显示的监控数据是从 CloudWatch Logs 中检索的。您还可以从 CloudWatch Logs 中[检索数据库实例的指标作为日志流](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.CloudWatchLogs.html)。这些指标以 JSON 格式存储。此外，您可以在选择的监控系统中通过 Amazon CloudWatch Logs 使用增强监测 JSON 输出。

要在 CloudWatch 控制面板上显示图表并创建告警，以便在指标超出定义的阈值时启动操作，您必须通过 CloudWatch Logs 在 CloudWatch 中创建指标筛选条件。有关详细说明，请参阅 [AWS re:Post 文章](https://repost.aws/knowledge-center/custom-cloudwatch-metrics-rds)，了解如何筛选“增强监控”CloudWatch Logs 以生成 Amazon RDS 的自动自定义指标。

以下示例说明了 `Custom/RDS` 命名空间中的自定义指标 `CPU.User`。此自定义指标是通过筛选来自 CloudWatch Logs 的 `cpuUtilization.user`“增强监控”指标创建的。

![\[CPU.User 自定义指标\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/cpu-user-custom-metric.png)


当该指标在 CloudWatch 存储库中可用时，您可以在 CloudWatch 控制面板中显示和分析该指标，应用进一步的数学和查询运算，并设置告警以监控此特定指标，并在观察到的值与定义的告警条件不一致时生成提醒。