我想在我的 ElastiCache for Redis 快取叢集中開啟 Redis 慢速日誌。我該如何進行?
簡短描述
Redis Slow 慢速日誌功能會記錄超過指定時長的查詢記錄。慢速日誌提供了一種選項,可以將慢速查詢記錄至 Amazon CloudWatch 或是 Amazon Kinesis Data Firehose。Redis 慢速日誌是偵錯和追蹤 Redis 資料庫的實用工具,特別適合用於遇到高延遲和/或高 CPU 使用率的情況。
當指令的執行時間超過 slowlog-log-slower-than 參數所設定的時長時,慢速日誌就會新增一個條目。每個日誌條目都會以 JSON 或文字格式傳遞至指定的目的地(CloudWatch 或 Kinees)。
以下是各別格式的範例:
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##"
}
文字
logslowxxxxmsxj,0001,1605631822,30,GET ... (1 more arguments),192.168.12.104:55452,logslowxxxxmsxj##
解析度
先決條件
Redis 慢速日誌需要 Redis 引擎版本 6.0 及更高版本。如果您的引擎版本低於 6.0,您可以使用 slowlog get 128 指令手動擷取慢速日誌。每個節點都有專屬的慢速日誌。因此,您必須從叢集中的每個節點取得日誌檔。
在叢集建立或修改期間開啟「慢速日誌」功能需要發佈到 CloudWatch 或 Kinesis Firehose 的權限。請建立 Identify and Access Management 政策並將其連接至負責的使用者,以使用下列權限:
Amazon CloudWatch 許可權:
{
"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"
}
]
}
Amazon Kinesis Data Firehose許可權:
{
"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": "Amazon Kinesis Data Firehose delivery stream ARN",
"Effect": "Allow"
}
]
}
在您的 ElastiCache 叢集中開啟 Redis 慢速日誌
確定符合先決條件後,您可以在建立或修改現有叢集時開啟慢速日誌。
如需進一步瞭解如何從 AWS Console 開啟 Redis 慢速日誌,請參閱使用主控台指定日誌傳遞。
慢速日誌內容
選取日誌目的地後,當查詢超過指定的時間範圍時,事件就會記錄至日誌目的地。每個日誌事件都包含下列內容:
- CacheClusterId:快取叢集的 ID。
- CacheNodeId:快取節點的 ID。
- Id:每個慢速日誌條目的唯一流水 ID。
- Timestamp:處理日誌所記錄的指令的 Unix 時間戳記。
- Duration:執行所需的時間長度,以微秒為單位。
- Command:用戶端所使用的指令。例如設定 foo bar,其中 foo 為索引鍵 (key),bar 為值 (value)。ElastiCache for Redis 會將實際的索引鍵名稱和值取代為 (另外 2 個引數),避免暴露敏感資料。
- ClientAddress:用戶端的 IP 地址和連接埠。
- ClientName:用戶端名稱(如果是透過 CLIENT SETNAME 指令設定)。