

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 事件、日誌和稽核追蹤
<a name="events-logs-audit"></a>

監控[資料庫執行個體指標](db-instance-monitoring.md)和[作業系統指標](os-monitoring.md)、分析趨勢並將指標與基準值進行比較，以及在值超出定義的閾值時產生警示，這些都是協助您實現和維護 Amazon RDS 資料庫執行個體可靠性、可用性、效能和安全性的必要最佳實務。不過，完整的解決方案也必須監控 MySQL 和 MariaDB 資料庫的資料庫事件、日誌檔案和稽核線索。

**章節**
+ [Amazon RDS 事件](rds-events.md)
+ [資料庫日誌](database-logs.md)
+ [稽核線索](audit-trails.md)

# Amazon RDS 事件
<a name="rds-events"></a>

*Amazon* *RDS 事件*表示 Amazon RDS 環境中的變更。例如，當資料庫執行個體狀態從*開始*變更為*可用*時，Amazon RDS 會產生事件 `RDS-EVENT-0088 The DB instance has been started`。Amazon RDS 會以近乎即時的方式將事件交付至 Amazon EventBridge。您可以透過 Amazon RDS 主控台、 AWS CLI 命令 [describe-events](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-events.html) 或 Amazon RDS API 操作 [DescribeEvents](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeEvents.html) 存取事件。下列畫面圖顯示 Amazon RDS 主控台上顯示的事件和日誌。

![\[Amazon RDS 主控台上顯示的警示、事件和日誌\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/alarms-events-logs-rds-console.png)


Amazon RDS 會發出不同類型的事件，包括資料庫執行個體事件、資料庫參數群組事件、資料庫安全群組事件、資料庫快照事件、RDS Proxy 事件，以及藍/綠部署事件。資訊包括：
+ 來源名稱和來源類型；例如： `"SourceIdentifier": "database-1", "SourceType": "db-instance"`
+ 事件的日期和時間；例如： `"Date": "2022-12-01T09:20:28.595000+00:00"`
+ 與事件相關聯的訊息；例如： `"Message": "Finished updating DB parameter group"`
+ 事件類別；例如： `"EventCategories": ["configuration change"]`

如需完整參考，請參閱 [Amazon RDS 文件中的 Amazon RDS 事件類別和事件訊息](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html)。

我們建議您監控 Amazon RDS 事件，因為這些事件指出資料庫執行個體可用性的狀態變更、組態變更、僅供讀取複本狀態變更、備份和復原事件、容錯移轉動作、失敗事件、安全群組的修改，以及許多其他通知。例如，如果您已設定僅供讀取複本資料庫執行個體，為資料庫提供增強的效能和耐用性，我們建議您監控與資料庫執行個體相關聯的僅供*讀取複本*事件類別的 Amazon RDS 事件。這是因為 等事件`RDS-EVENT-0057 Replication on the read replica was terminated`表示您的僅供讀取複本不再與主要資料庫執行個體同步。向負責團隊通知此類事件已發生，有助於及時緩解問題。Amazon EventBridge 和其他 AWS 服務，例如 AWS Lambda Amazon Simple Queue Service (Amazon SQS) 和 Amazon Simple Notification Service (Amazon SNS)，可協助您自動回應資料庫可用性問題或資源變更等系統事件。

在 Amazon RDS 主控台上，您可以擷取過去 24 小時內的事件。如果您使用 AWS CLI 或 Amazon RDS API 來檢視事件，您可以使用 **describe-events** 命令擷取過去 14 天內的事件，如下所示。

```
$ aws rds describe-events --source-identifier database-1 --source-type db-instance
{
    "Events": [
        {
            "SourceIdentifier": "database-1",
            "SourceType": "db-instance",
            "Message": "CloudWatch Logs Export enabled for logs [audit, error, general, slowquery]",
            "EventCategories": [],
            "Date": "2022-12-01T09:20:28.595000+00:00",
            "SourceArn": "arn:aws:rds:eu-west-3:111122223333:db:database-1"
        },
        {
            "SourceIdentifier": "database-1",
            "SourceType": "db-instance",
            "Message": "Finished updating DB parameter group",
            "EventCategories": [
                "configuration change"
            ],
            "Date": "2022-12-01T09:22:40.413000+00:00",
            "SourceArn": "arn:aws:rds:eu-west-3:111122223333:db:database-1"
        }
    ]
}
```

如果您想要長期存放事件，直到指定的過期期間或永久存放，您可以使用 [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 記錄 Amazon RDS 所產生事件的相關資訊。若要實作此解決方案，您可以使用 Amazon SNS 主題來接收 Amazon RDS 事件通知，然後呼叫 Lambda 函數在 CloudWatch Logs 中記錄事件。

1. 建立將在事件上呼叫的 Lambda 函數，並將事件中的資訊記錄到 CloudWatch Logs。CloudWatch Logs 已與 Lambda 整合，並透過將**列印**函數用於 ，提供記錄事件資訊的便利方式`stdout`。

1. 建立訂閱 Lambda 函數 （將**通訊協定**設定為 Lambda) 的 SNS 主題，並將**端點**設定為您在上一個步驟中建立的 Lambda 函數的 Amazon Resource Name (ARN)。

1. 設定您的 SNS 主題以接收 Amazon RDS 事件通知。如需詳細說明，請參閱 [AWS re：Post 文章](https://repost.aws/knowledge-center/sns-topics-rds-notifications)，了解如何取得 Amazon SNS 主題以接收 Amazon RDS 通知。

1. 在 Amazon RDS 主控台上，建立新的事件訂閱。將**目標**設定為 ARN，然後選取您先前建立的 SNS 主題。根據您的需求設定要包含的**來源類型**和事件類別。 ****如需詳細資訊，請參閱 [Amazon RDS 文件中的訂閱 Amazon RDS 事件通知](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Subscribing.html)。

# 資料庫日誌
<a name="database-logs"></a>

MySQL 和 MariaDB 資料庫會產生您可以存取的日誌，以進行稽核和故障診斷。這些日誌包括：
+ [稽核](https://mariadb.com/kb/en/mariadb-audit-plugin-log-format/) – 稽核線索是一組記錄伺服器活動的記錄。對於每個用戶端工作階段，它會記錄連線至伺服器的人員 （使用者名稱和主機）、執行的查詢、存取的資料表，以及變更的伺服器變數。
+ [錯誤](https://dev.mysql.com/doc/refman/8.0/en/error-log.html) – 此日誌包含伺服器的 (`mysqld`) 啟動和關閉時間，以及診斷訊息，例如在伺服器啟動和關閉期間，以及伺服器執行期間的錯誤、警告和備註。
+ [一般](https://dev.mysql.com/doc/refman/8.0/en/query-log.html) – 此日誌會記錄 的活動`mysqld`，包括每個用戶端的連線和中斷連線活動，以及從用戶端收到的 SQL 查詢。當您懷疑發生錯誤並想知道用戶端傳送至 的內容時，一般查詢日誌非常有用`mysqld`。
+ [慢查詢](https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html) – 此日誌提供 SQL 查詢的記錄，這些查詢需要很長時間才能執行。

最佳實務是，您應該將[資料庫日誌從 Amazon RDS 發佈至 Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Procedural.UploadtoCloudWatch.html)。使用 CloudWatch Logs，您可以執行日誌資料的即時分析、將資料存放在高耐用性的儲存體中，以及使用 CloudWatch Logs 代理程式管理資料。您可以從 Amazon RDS 主控台[存取和監看資料庫日誌](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Procedural.Watching.html)。您也可以使用 CloudWatch Logs Insights 以互動方式搜尋和分析 CloudWatch Logs 中的日誌資料。下列範例說明稽核日誌上的查詢，該查詢會檢查`CONNECT`事件在日誌中出現的次數、連接的對象，以及它們連線的用戶端 (IP 地址）。稽核日誌中的摘錄可能如下所示：

```
20221201 14:07:05,ip-10-22-1-51,rdsadmin,localhost,821,0,CONNECT,,,0,SOCKET
20221201 14:07:05,ip-10-22-1-51,rdsadmin,localhost,821,0,DISCONNECT,,,0,SOCKET
20221201 14:12:20,ip-10-22-1-51,rdsadmin,localhost,822,0,CONNECT,,,0,SOCKET
20221201 14:12:20,ip-10-22-1-51,rdsadmin,localhost,822,0,DISCONNECT,,,0,SOCKET
20221201 14:17:35,ip-10-22-1-51,rdsadmin,localhost,823,0,CONNECT,,,0,SOCKET
20221201 14:17:35,ip-10-22-1-51,rdsadmin,localhost,823,0,DISCONNECT,,,0,SOCKET
20221201 14:22:50,ip-10-22-1-51,rdsadmin,localhost,824,0,CONNECT,,,0,SOCKET
20221201 14:22:50,ip-10-22-1-51,rdsadmin,localhost,824,0,DISCONNECT,,,0,SOCKET
```

Log Insights 查詢範例顯示`localhost`每 5 分鐘`rdsadmin`連線至資料庫一次，總共 22 次，如下圖所示。這些結果表示活動源自內部 Amazon RDS 程序，例如監控系統本身。

![\[Log Insights 報告\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/amazon-rds-monitoring-alerting/images/log-insights.png)


日誌事件經常包含您要計數的重要訊息，例如有關與 MySQL 和 MariaDB 資料庫執行個體相關聯操作的警告或錯誤。例如，如果 操作失敗，可能會發生錯誤，並會記錄到錯誤日誌檔案中，如下所示：`ERROR 1114 (HY000): The table zip_codes is full`。您可能想要監控這些項目，以了解您錯誤的趨勢。您可以使用[篩選條件從 Amazon RDS 日誌建立自訂 CloudWatch 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html)，以啟用 Amazon RDS 資料庫日誌的自動監控，以監控特定模式的特定日誌，並在違反預期行為時產生警示。[例如](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CountOccurrencesExample.html)，為日誌群組建立指標篩選條件`/aws/rds/instance/database-1/error`，以監控錯誤日誌並搜尋[特定模式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)，例如 `ERROR`。將**篩選條件模式**設定為 `ERROR`，並將**指標值**設定為 `1`。篩選條件會偵測具有關鍵字 的每個日誌記錄`ERROR`，並為每個包含 "ERROR" 的日誌事件將計數增加 1。建立篩選條件後，您可以設定警示，在 MySQL 或 MariaDB 錯誤日誌中偵測到錯誤時通知您。

若要進一步了解如何透過建立 CloudWatch 儀表板和使用 CloudWatch Logs Insights 來監控慢查詢日誌和錯誤日誌，請參閱部落格文章[建立 Amazon CloudWatch 儀表板以監控 Amazon RDS 和 Amazon Aurora MySQL。](https://aws.amazon.com/blogs/database/creating-an-amazon-cloudwatch-dashboard-to-monitor-amazon-rds-and-amazon-aurora-mysql/)

# 稽核線索
<a name="audit-trails"></a>

稽核追蹤 （或稽核日誌） 提供 中事件的安全相關時間記錄 AWS 帳戶。它包含 Amazon RDS 的事件，可提供一系列影響資料庫或雲端環境的活動的文件證據。在 Amazon RDS for MySQL 或 MariaDB 中，使用稽核線索涉及：
+ 監控資料庫執行個體稽核日誌
+ 在 中監控 Amazon RDS API 呼叫 AWS CloudTrail

對於 Amazon RDS 資料庫執行個體，稽核的目標通常包括：
+ 啟用下列項目的責任：
  + 在參數或安全組態上執行的修改
  + 在資料庫結構描述、資料表或資料列中執行的動作，或影響特定內容的動作
+ 入侵偵測和調查
+ 可疑活動偵測和調查
+ 偵測授權問題；例如，識別一般或特殊權限使用者濫用的存取權

資料庫稽核線索會嘗試回答下列典型問題：*誰檢視或修改了資料庫中的敏感資料？ 何時發生這種情況？ 特定使用者從何處存取資料？ 特殊權限使用者是否濫用其無限制的存取權？*

MySQL 和 MariaDB 都使用 MariaDB 稽核外掛程式來實作資料庫執行個體稽核追蹤功能。此外掛程式會記錄資料庫活動，例如使用者登入資料庫，以及對資料庫執行的查詢。資料庫活動的記錄會儲存在日誌檔中。若要存取稽核記錄，資料庫執行個體必須使用含有選項 `MARIADB_AUDIT_PLUGIN` 的自訂選項群組。如需詳細資訊，請參閱 Amazon RDS 文件中的 [MariaDB 稽核外掛程式對 MySQL 的支援](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html)。稽核日誌中的記錄會以特定格式儲存，如 外掛程式所定義。您可以在 [MariaDB Server 文件](https://mariadb.com/kb/en/mariadb-audit-plugin-log-format/)中找到有關稽核日誌格式的詳細資訊。

您 AWS 帳戶的 AWS 雲端 稽核線索是由 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)服務提供。CloudTrail 會擷取 Amazon RDS 的 API 呼叫當作事件。會記錄所有 Amazon RDS 動作。CloudTrail 提供由使用者、角色或其他 AWS 服務在 Amazon RDS 中執行的動作記錄。事件包括在 AWS 管理主控台中採取的動作 AWS CLI，以及 AWS SDKs和 APIs。

## 範例
<a name="example"></a>

在典型的稽核案例中，您可能需要結合 AWS CloudTrail 追蹤與資料庫稽核日誌和 Amazon RDS 事件監控。例如，您可能會遇到 Amazon RDS 資料庫執行個體的資料庫參數 （例如 `database-1`) 已修改的情況，而您的任務是識別修改的人員、變更的內容，以及變更發生的時間。

若要完成任務，請遵循下列步驟：

1. 列出資料庫執行個體發生的 Amazon RDS 事件，`database-1`並判斷類別中是否有`configuration change`具有訊息 的事件`Finished updating DB parameter group`。

   ```
   $ aws rds describe-events --source-identifier database-1 --source-type db-instance
   {
       "Events": [
           {
               "SourceIdentifier": "database-1",
               "SourceType": "db-instance",
               "Message": "Finished updating DB parameter group",
               "EventCategories": [
                   "configuration change"
               ],
               "Date": "2022-12-01T09:22:40.413000+00:00",
               "SourceArn": "arn:aws:rds:eu-west-3:111122223333:db:database-1"
           }
       ]
   }
   ```

1. 識別資料庫執行個體正在使用的資料庫參數群組：

   ```
   $ aws rds describe-db-instances --db-instance-identifier database-1 --query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups]'
   [
       [
           "database-1",
           "mariadb",
           [
               {
                   "DBParameterGroupName": "mariadb10-6-test",
                   "ParameterApplyStatus": "pending-reboot"
               }
           ]
       ]
   ]
   ```

1. [使用 AWS CLI 在部署的 區域中、步驟 1 中探索的 Amazon RDS 事件前後的期間內，以及 所在的 中搜尋 CloudTrail ](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events-cli.html)事件`EventName=ModifyDBParameterGroup`。 `database-1`

   ```
   $ aws cloudtrail --region eu-west-3 lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=ModifyDBParameterGroup --start-time "2022-12-01, 09:00 AM" --end-time "2022-12-01, 09:30 AM"    
   
   {
       "eventVersion": "1.08",
       "userIdentity": {
           "accountId": "111122223333",
           "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
           "sessionContext": {
               "sessionIssuer": {
                   "type": "Role",
                   "principalId": "AIDACKCEVSQ6C2EXAMPLE",
                   "arn": "arn:aws:iam::111122223333:role/Role1",
                   "accountId": "111122223333",
                   "userName": "User1"
               }
           }
       },
       "eventTime": "2022-12-01T09:18:19Z",
       "eventSource": "rds.amazonaws.com",
       "eventName": "ModifyDBParameterGroup",
       "awsRegion": "eu-west-3",
       "sourceIPAddress": "AWS Internal",
       "userAgent": "AWS Internal",
       "requestParameters": {
           "parameters": [
               {
                   "isModifiable": false,
                   "applyMethod": "pending-reboot",
                   "parameterName": "innodb_log_buffer_size",
                   "parameterValue": "8388612"
               },
               {
                   "isModifiable": false,
                   "applyMethod": "pending-reboot",
                   "parameterName": "innodb_write_io_threads",
                   "parameterValue": "8"
               }
           ],
           "dBParameterGroupName": "mariadb10-6-test"
       },
       "responseElements": {
           "dBParameterGroupName": "mariadb10-6-test"
       },
       "requestID": "fdf19353-de72-4d3d-bf29-751f375b6378",
       "eventID": "0bba7484-0e46-4e71-93a8-bd01ca8386fe",
       "eventType": "AwsApiCall",
       "managementEvent": true,
       "recipientAccountId": "111122223333",
       "eventCategory": "Management",
       "sessionCredentialFromConsole": "true"
   }
   ```

CloudTrail 事件顯示，`User1`帳戶 111122223333 `Role1`中 AWS 具有 角色的 已修改資料庫參數群組 `mariadb10-6-test`，該群組由 `database-1`上的資料庫執行個體使用`2022-12-01 at 09:18:19 h`。已修改兩個參數，並設定為下列值：
+ `innodb_log_buffer_size = 8388612`
+ `innodb_write_io_threads = 8`

## 其他 CloudTrail 和 CloudWatch Logs 功能
<a name="additional-features"></a>

您可以在 CloudTrail 主控台上檢視**事件歷史記錄**，對過去 90 天內的操作和安全性事件進行疑難排解。若要延長保留期並利用其他查詢功能，您可以使用 [AWS CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html)。使用 AWS CloudTrail Lake，您可以在事件資料存放區中保留事件資料長達七年。此外，此服務支援複雜的 SQL 查詢，可提供比事件**歷史記錄**中簡單鍵值查詢提供的檢視更深入且更可自訂的事件檢視。

若要監控稽核線索、設定警示，並在特定活動發生時取得通知，您需要[設定 CloudTrail 將其線索記錄傳送至 CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)。將追蹤記錄儲存為 CloudWatch Logs 之後，您可以定義指標篩選條件來評估日誌事件以符合詞彙、片語或值，並將指標指派給指標篩選條件。此外，您可以建立 CloudWatch 警示，這些警示會根據您指定的閾值和期間產生。例如，您可以設定警示，將通知傳送給負責的團隊，讓他們可以採取適當的動作。您也可以設定 CloudWatch 自動執行動作，以回應警示。