

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

# 疑難排解 VPC 流量日誌
<a name="flow-logs-troubleshooting"></a>

以下是使用流量日誌時可能會遇到的問題。

**Topics**
+ [不完整的流量日誌記錄](#flow-logs-troubleshooting-incomplete-records)
+ [流量日誌作用中，但沒有任何流量日誌記錄或日誌群組](#flow-logs-troubleshooting-no-log-group)
+ ['LogDestinationNotFoundException' 或 'Access Denied for LogDestination' 錯誤](#flow-logs-troubleshooting-not-found)
+ [超過 Amazon S3 儲存貯體原則限制](#flow-logs-troubleshooting-policy-limit)
+ [LogDestination 無法傳遞](#flow-logs-troubleshooting-kms-id)
+ [流量日誌資料大小與帳單資料不相符](#flow-logs-data-size-mismatch)

## 不完整的流量日誌記錄
<a name="flow-logs-troubleshooting-incomplete-records"></a>

**問題**  
您的流量日誌記錄不完整，或已不再發布。

**原因**  
流量日誌可能存在無法交付至 CloudWatch Logs 日誌群組的問題，或日誌中[可能存在 SkipData 項目](flow-logs-records-examples.md#flow-log-example-no-data)。

**解決方案**  
檢查 VPC、子網路或網路介面的**流量日誌**索引標籤。請注意，您無法描述與自己共用的 VPC 或子網路的流量日誌，但可以描述您在共用 VPC 或子網路中自行建立的網路介面的流量日誌。若存在任何錯誤，即會出現在**狀態**欄位中。或者，使用 [describe-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-flow-logs.html) 命令，然後檢查在 `DeliverLogsErrorMessage` 欄位中傳回的值。

以下是狀態可能出現的錯誤值：
+ `Rate limited`：此錯誤可能會在套用 CloudWatch Logs 調節時發生 — 即網路介面的流量日誌記錄數大於可在特定時間範圍內發佈的最大記錄數時。在您到達您可以建立的 CloudWatch Logs 日誌群組數配額時，也可能會發生此錯誤。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的 [CloudWatch 服務配額](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html)。
+ `Access error`：此錯誤可能的發生原因如下：
  + 您流量日誌的 IAM 角色沒有足夠的許可將流量日誌記錄發佈到 CloudWatch 日誌群組。
  + IAM 角色與流量日誌服務沒有信任關係
  + 信任關係不指定流量日誌服務為委託人

  如需詳細資訊，請參閱[用於將流程日誌發佈至 CloudWatch Logs 的 IAM 角色](flow-logs-iam-role.md)。
+ `Unknown error`：流量日誌服務發生內部錯誤。

## 流量日誌作用中，但沒有任何流量日誌記錄或日誌群組
<a name="flow-logs-troubleshooting-no-log-group"></a>

**問題**  
您已建立流量日誌，且 Amazon VPC 或 Amazon EC2 主控台顯示流量日誌狀態為 `Active`。但是，您無法在 Amazon S3 儲存貯體中看到 CloudWatch Logs 或日誌檔案中的任何日誌串流。

**可能原因**
+ 系統仍在建立流量日誌。在某些情況下，在您建立流量日誌之後，可能需要十分鐘以上，才會建立日誌群組及顯示資料。
+ 尚未記錄到任何網路介面的流量。只有在記錄流量時，才會建立 CloudWatch Logs 中的日誌群組。

**解決方案**  
等待幾分鐘建立日誌群組或記錄流量。

## 'LogDestinationNotFoundException' 或 'Access Denied for LogDestination' 錯誤
<a name="flow-logs-troubleshooting-not-found"></a>

**問題**  
當您建立流量記錄檔時，會收到 `Access Denied for LogDestination` 或 `LogDestinationNotFoundException` 錯誤。

**可能原因**
+ 建立可將資料發佈至 Amazon S3 儲存貯體的流量記錄檔時若出現此錯誤，表示找不到指定的 S3 儲存貯體，或儲存貯體政策不允許將記錄檔傳送至該儲存貯體。
+ 建立將資料發佈到 Amazon CloudWatch Logs 的流量記錄檔時若發生此錯誤，表示 IAM 角色不允許將記錄檔傳送到記錄檔群組。

**解決方案**
+ 將資料發佈到 Amazon S3 儲存貯體時，請確保現有的 S3 儲存貯體已有指定的 ARN，而且該 ARN 的格式正確。如果您未擁有 S3 儲存貯體，則請確認[儲存貯體政策](flow-logs-s3-permissions.md)具有所需的許可，並在 ARN 中使用正確的帳戶 ID 和儲存貯體名稱。
+ 發佈至 CloudWatch Logs 時，請確認 [IAM 角色](flow-logs-iam-role.md)具有所需的許可。

## 超過 Amazon S3 儲存貯體原則限制
<a name="flow-logs-troubleshooting-policy-limit"></a>

**問題**  
當您嘗試建立流量日誌時，得到下列錯誤：`LogDestinationPermissionIssueException`。

**可能原因**  
此外，Amazon S3 儲存貯體原則的大小限制為 20 KB。

每次您建立流量日誌發布到 Amazon S3 儲存貯體時，我們都會自動將包括資料夾路徑的指定儲存貯體 ARN 新增到儲存貯體原則的 `Resource` 元素中。

建立多個發布到相同儲存貯體的流量日誌可能造成您超過儲存貯體政策限制。

**解決方案**
+ 移除不再需要的流量記錄檔項目以清除儲存貯體的政策。
+ 以下列內容取代個別的流量日誌項目，將許可授予整個儲存貯體。

  ```
  arn:aws:s3:::bucket_name/*
  ```

  若您授予許可給整個儲存貯體，新的流量日誌訂閱不會將新的許可加入到儲存貯體政策。

## LogDestination 無法傳遞
<a name="flow-logs-troubleshooting-kms-id"></a>

**問題**  
當您嘗試建立流量日誌時，得到下列錯誤：`LogDestination <bucket name> is undeliverable`。

**可能原因**  
使用伺服器端加密搭配 AWS KMS (SSE-KMS) 加密目標 Amazon S3 儲存貯體，儲存貯體的預設加密是 KMS 金鑰 ID。

**解決方案**  
此值必須為 KMS 金鑰 ARN。將預設 S3 加密類型從 KMS 金鑰 ID 變更為 KMS 金鑰 ARN。如需詳細資訊，請參閱*《Amazon Simple Storage Service 使用者指南》*中的[設定預設加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-bucket-encryption.html)。

## 流量日誌資料大小與帳單資料不相符
<a name="flow-logs-data-size-mismatch"></a>

**問題**  
流量日誌的總資料大小與帳單資料報告的大小不相符。

**可能原因**  
流量日誌中可能存在 SKIPDATA 項目。如需 SKIPDATA 項目的說明，請參閱[無任何資料及略過的記錄](flow-logs-records-examples.md#flow-log-example-no-data)。

**解決方案**  
透過查詢日誌中 log-status 欄位的不同取值，確認日誌項目中是否存在 SKIPDATA 項目。

用於檢查 SKIPDATA 的查詢範例：

CW Insights：

```
fields @timestamp, @message, @logStream, @log
| filter interfaceId = 'eni-123'
| stats count(*) by interfaceId, logStatus
| sort by interfaceId, logStatus
```

Athena：

```
SELECT log_status, interface_id, count(1)
FROM vpc_flow_logs
WHERE interface_id IN ('eni-1', 'eni-2', 'eni-3')
GROUP BY log_status, interface_id
```