

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

# 規劃 CloudWatch 部署
<a name="planning-cloudwatch-deployment"></a>

記錄和監控解決方案的複雜性和範圍取決於幾個因素，包括：
+ 使用多少環境、區域和帳戶，以及此數字可能如何增加。
+ 現有工作負載和架構的多樣性和類型。
+ 必須記錄和監控的運算類型和OSs。
+ 是否有內部部署位置和 AWS 基礎設施。
+ 多個系統和應用程式的彙總和分析需求。
+ 防止未經授權暴露日誌和指標的安全要求。
+ 必須與您的記錄和監控解決方案整合，以支援操作程序的產品和解決方案。

您必須使用新的或更新的工作負載部署，定期檢閱和更新記錄和監控解決方案。發現問題時，應識別並套用記錄、監控和警示的更新。然後，可以主動識別並防止未來發生這些問題。

您必須確保持續安裝和設定軟體和服務，以擷取和擷取日誌和指標。已建立的記錄和監控方法針對不同的網域 （例如安全性、效能、聯網或分析），使用多個 AWS 或獨立的軟體廠商 (ISV) 服務和解決方案。每個網域都有自己的部署和組態需求。

建議使用 CloudWatch 來擷取和擷取多個OSs和運算類型的日誌和指標。許多 AWS 服務使用 CloudWatch 來記錄、監控和發佈日誌和指標，而不需要進一步的組態。CloudWatch 提供[軟體代理程式](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)，可針對不同的OSs和環境進行安裝和設定。下列各節概述如何為多個帳戶、區域和組態部署、安裝和設定 CloudWatch 代理程式：

**Topics**
+ [在集中式或分散式帳戶中使用 CloudWatch](cloudwatch-centralized-distributed-accounts.md)
+ [管理 CloudWatch 代理程式組態檔案](create-store-cloudwatch-configurations.md)

# 在集中式或分散式帳戶中使用 CloudWatch
<a name="cloudwatch-centralized-distributed-accounts"></a>

雖然 CloudWatch 旨在監控一個帳戶和區域中 AWS 的服務或資源，但您可以使用中央帳戶從多個帳戶和區域擷取日誌和指標。如果您使用多個帳戶或區域，您應該評估是否使用集中式帳戶方法或個別帳戶來擷取日誌和指標。一般而言，多帳戶和多區域部署需要混合式方法，以支援安全、分析、操作和工作負載擁有者的需求。

下表提供選擇使用集中式、分散式或混合式方法時應考慮的領域。


****  

|  |  | 
| --- |--- |
| 帳戶結構 | 您的組織可能有數個不同的帳戶 （例如，非生產和生產工作負載的帳戶），或特定環境中單一應用程式的數千個帳戶。我們建議您在工作負載執行所在的帳戶中維護應用程式日誌和指標，讓工作負載擁有者能夠存取日誌和指標。這可讓他們在記錄和監控中具有作用中的角色。我們也建議您使用個別的記錄帳戶來彙總所有工作負載日誌，以進行分析、彙總、趨勢和集中式操作。單獨的記錄帳戶也可以用於安全性、封存和監控和分析。 | 
| 存取要求 | 團隊成員 （例如，工作負載擁有者或開發人員） 需要存取日誌和指標，以排除故障並進行改善。日誌應該保留在工作負載的帳戶中，讓存取和故障診斷更容易。如果日誌和指標維護在與工作負載不同的帳戶中，使用者可能需要定期在帳戶之間切換。使用集中式帳戶為授權使用者提供日誌資訊，而不授予工作負載帳戶的存取權。這可以簡化分析工作負載的存取需求，其中需要多個帳戶中執行的工作負載進行彙總。集中式記錄帳戶也可以有替代的搜尋和彙總選項，例如 Amazon OpenSearch Service 叢集。Amazon OpenSearch Service [提供精細的存取控制](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/fgac.html)，可低至日誌的欄位層級。當您擁有需要特殊存取和許可的敏感或機密資料時，精細存取控制非常重要。 | 
| 操作 | 許多組織都有集中式操作和安全團隊，或外部組織提供需要存取日誌以進行監控的操作支援。集中式記錄和監控可讓您更輕鬆地識別趨勢、搜尋、彙總和執行所有帳戶和工作負載的分析。如果您的組織使用 DevOps 的「[建置它」](https://aws.amazon.com//blogs/enterprise-strategy/enterprise-devops-why-you-should-run-what-you-build/)方法 DevOps ，則工作負載擁有者需要在其帳戶中記錄和監控資訊。除了分散式工作負載擁有權之外，可能需要混合式方法來滿足中央操作和分析。 | 
| Environment (環境)  |  您可以選擇在生產帳戶的中央位置託管日誌和指標，並將其他環境的日誌和指標 （例如開發或測試） 保留在相同或個別的帳戶中，視安全需求和帳戶架構而定。這有助於防止更廣泛的受眾存取生產期間建立的敏感資料。   | 

CloudWatch 提供多種[選項](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Subscriptions.html)，可讓您使用 CloudWatch 訂閱篩選條件即時處理日誌。您可以使用訂閱篩選條件，將日誌即時串流至 AWS 服務，以進行自訂處理、分析和載入至其他系統。如果您採取混合方式，在個別帳戶和區域中提供日誌和指標，以及集中式帳戶和區域，這可能會特別有用。下列清單提供可用於此項目 AWS 的服務範例：
+ [Amazon Data Firehose](https://docs.aws.amazon.com//firehose/latest/dev/what-is-this-service.html) – Firehose 提供串流解決方案，可根據產生的資料磁碟區自動擴展和調整大小。您不需要管理 Amazon Kinesis 資料串流中的碎片數量，而且可以直接連線至 Amazon Simple Storage Service (Amazon S3)、Amazon OpenSearch Service 或 Amazon Redshift，無需額外的編碼。如果您想要將日誌集中在 AWS 這些服務中，Firehose 是有效的解決方案。
+ [Amazon Kinesis Data Streams](https://docs.aws.amazon.com//streams/latest/dev/introduction.html) – 如果您需要與 Firehose 不支援並實作其他處理邏輯的服務整合，則 Kinesis Data Streams 是適當的解決方案。您可以在帳戶和區域中建立 Amazon CloudWatch Logs 目的地，指定中央帳戶中的 Kinesis 資料串流，以及授予其在串流中放置記錄的許可的 AWS Identity and Access Management (IAM) 角色。Kinesis Data Streams 為您的日誌資料提供彈性的開放式登陸區域，然後可供不同的選項使用。您可以將 Kinesis Data Streams 日誌資料讀取至您的帳戶、執行預先處理，並將資料傳送至您選擇的目的地。

  不過，您必須設定串流的碎片，以便針對產生的日誌資料適當調整大小。Kinesis Data Streams 可做為日誌資料的臨時媒介或佇列，您可以將資料存放在 Kinesis 串流中 1 到 365 天。Kinesis Data Streams 也支援重播功能，這表示您可以重播未使用的資料。
+ [Amazon OpenSearch Service](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/what-is.html) – CloudWatch Logs 可以將日誌群組中的日誌串流到個別或集中帳戶中的 OpenSearch 叢集。當您設定日誌群組將資料串流至 OpenSearch 叢集時，會在與日誌群組相同的帳戶和區域中建立 Lambda 函數。Lambda 函數必須與 OpenSearch 叢集具有網路連線。除了自訂 Amazon OpenSearch Service 的擷取之外，您還可以自訂 Lambda 函數來執行額外的預先處理。使用 Amazon OpenSearch Service 的集中式記錄可讓您更輕鬆地分析、搜尋和疑難排解雲端架構中多個元件的問題。
+ [Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html) – 如果您使用 Kinesis Data Streams，則需要佈建和管理耗用串流資料的運算資源。若要避免這種情況，您可以直接將日誌資料串流至 Lambda 進行處理，並根據邏輯將其傳送至目的地。這表示您不需要佈建和管理運算資源，即可處理傳入的資料。如果您選擇使用 Lambda，請確定您的解決方案與 [Lambda 配額](https://docs.aws.amazon.com//lambda/latest/dg/gettingstarted-limits.html)相容。

您可能需要以檔案格式處理或共用存放在 CloudWatch Logs 中的日誌資料。您可以建立匯出任務，將特定日期或時間範圍的[日誌群組匯出至 Amazon S3](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/S3Export.html)。例如，您可以選擇每天將日誌匯出至 Amazon S3 進行分析和稽核。Lambda 可用來自動化此解決方案。您也可以將此解決方案與 Amazon S3 複寫結合，將日誌從多個帳戶和區域運送和集中到一個集中帳戶和區域。

CloudWatch 代理程式組態也可以在 [`agent`區段](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html#CloudWatch-Agent-Configuration-File-Agentsection)中指定`credentials`欄位。這會指定將指標和日誌傳送到不同帳戶時要使用的 IAM 角色。如果指定，此欄位會包含 `role_arn` 參數。當您只需要在特定集中帳戶和區域中集中記錄和監控時，即可使用此欄位。

您也可以使用 [AWS SDK](https://aws.amazon.com/developer/tools/) 以您選擇的語言撰寫自己的自訂處理應用程式、從您的帳戶讀取日誌和指標，以及將資料傳送至集中式帳戶或其他目的地，以進行進一步的處理和監控。

# 管理 CloudWatch 代理程式組態檔案
<a name="create-store-cloudwatch-configurations"></a>

我們建議您建立標準 Amazon CloudWatch 代理程式組態，其中包含您要在所有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體和內部部署伺服器中擷取的系統日誌和指標。您可以使用 CloudWatch 代理程式[組態檔案精靈](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html)來協助您建立組態檔案。您可以多次執行組態精靈，為不同的系統和環境產生唯一的組態。您也可以使用組態檔案[結構描述來修改組態檔案](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)或建立變化。CloudWatch 代理程式組態檔案可以存放在 [AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)參數中。 如果您有[多個 CloudWatch 代理程式組態檔案](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-common-scenarios.html#CloudWatch-Agent-multiple-config-files)，您可以建立個別的參數存放區參數。如果您使用多個 AWS 帳戶或 AWS 區域，您必須管理和更新每個帳戶和區域中的參數存放區參數。或者，您可以將 CloudWatch 組態作為 Amazon S3 中的檔案或您選擇的版本控制工具集中管理。 

CloudWatch 代理程式隨附的`amazon-cloudwatch-agent-ctl`指令碼可讓您指定組態檔案、參數存放區參數或代理程式的預設組態。預設組態符合基本的預先定義指標集，並設定代理程式向 CloudWatch 報告記憶體和磁碟空間指標。不過，它不包含任何日誌檔案組態。如果您使用 CloudWatch 代理程式的 [Systems Manager Quick Setup](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-quick-setup.html) ，也會套用預設組態。

由於預設組態不包含記錄，也未根據您的需求自訂，因此建議您建立並套用自訂的 CloudWatch 組態，以符合您的需求。

## 管理 CloudWatch 組態
<a name="store-cloudwatch-configuration-s3"></a>

根據預設，CloudWatch 組態可以儲存並套用為參數存放區參數或 CloudWatch 組態檔案。最佳選擇取決於您的需求。在本節中，我們會討論這兩個選項的優缺點。代表性解決方案也詳細說明如何管理多個 AWS 帳戶和 AWS 區域的 CloudWatch 組態檔案。

**Systems Manager 參數存放區參數**

如果您有單一、標準 CloudWatch 代理程式組態檔案，想要在一組小型 AWS 帳戶和區域中套用和管理，請使用參數存放區參數來管理 CloudWatch 組態。當您將 CloudWatch 組態儲存為參數存放區參數時，您可以使用 CloudWatch 代理程式組態工具 (`amazon-cloudwatch-agent-ctl`在 Linux 上） 從參數存放區讀取和套用組態，而無需將組態檔案複製到執行個體。您可以使用 **AmazonCloudWatch-ManageAgent **Systems Manager 命令文件，在單一執行中更新多個 EC2 執行個體上的 CloudWatch 組態。由於參數存放區參數是區域參數，您必須更新和維護每個 AWS 區域和 AWS 帳戶中的 CloudWatch 參數存放區參數。如果您要將多個 CloudWatch 組態套用至每個執行個體，則必須自訂 **AmazonCloudWatch-ManageAgent** Command 文件** **以包含這些參數。

**CloudWatch 組態檔案**

如果您有多個 AWS 帳戶和區域，而且您正在管理多個 CloudWatch 組態檔案，則將 CloudWatch 組態做為檔案管理得很好。使用此方法，您可以在資料夾結構中瀏覽、組織和管理它們。  您可以將安全規則套用至個別資料夾或檔案，以限制和授予存取，例如更新和讀取許可。您可以在 AWS 外部共用和轉移它們以進行協同合作。您可以控制檔案的版本，以追蹤和管理變更。您可以將組態檔案複製到 CloudWatch 代理程式組態目錄，而無需個別套用每個組態檔案，即可共同套用 CloudWatch 組態。對於 Linux，CloudWatch 組態目錄位於 `/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d`。對於 Windows，組態目錄位於 `C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs`。

當您啟動 CloudWatch 代理程式時，代理程式會自動附加這些目錄中找到的每個檔案，以建立 CloudWatch 複合組態檔案。組態檔案應存放在中央位置 （例如，S3 儲存貯體），可供您所需的帳戶和區域存取。提供使用此方法的範例解決方案。

**組織 CloudWatch 組態**

無論用於管理 CloudWatch 組態的方法為何，請組織您的 CloudWatch 組態。您可以使用如下所示的方法，將組態整理成檔案或參數存放區路徑。


|  |  | 
| --- |--- |
| */config/standard/windows/ec2* | 存放 Amazon EC2 的標準 Windows 特定 CloudWatch 組態檔案。您可以在此資料夾下進一步分類不同 Windows 版本、EC2 執行個體類型和環境的標準作業系統 (OS) 組態。 | 
| */config/standard/windows/onpremises* | 存放內部部署伺服器的標準 Windows 特定 CloudWatch 組態檔案。您也可以在此資料夾下進一步分類不同 Windows 版本、伺服器類型和環境的標準作業系統組態。 | 
| */config/standard/linux/ec2* | 儲存 Amazon EC2 的標準 Linux 特定 CloudWatch 組態檔案。您可以在此資料夾下進一步分類不同 Linux 發行版本、EC2 執行個體類型和環境的標準作業系統組態。 | 
| */config/standard/linux/onpremises* | 儲存適用於內部部署伺服器的標準 Linux 特定 CloudWatch 組態檔案。您可以在此資料夾下進一步分類不同 Linux 發行版本、伺服器類型和環境的標準作業系統組態。 | 
| */config/ecs* | 如果您使用 Amazon ECS 容器執行個體，請存放 Amazon Elastic Container Service (Amazon ECS) 特有的 CloudWatch 組態檔案。這些組態可以附加到 Amazon ECS 特定系統層級記錄和監控的標準 Amazon EC2 組態。 | 
| */config/<application\$1name>* | 存放應用程式特定的 CloudWatch 組態檔案。您可以使用環境和版本的其他資料夾和字首進一步分類您的應用程式。 | 

## 範例：將 CloudWatch 組態檔案存放在 S3 儲存貯體
<a name="example"></a>

本節提供使用 Amazon S3 存放 CloudWatch 組態檔案的範例，以及用於擷取和套用 CloudWatch 組態檔案的自訂 Systems Manager Runbook。此方法可以解決大規模使用 CloudWatch 組態的 Systems Manager 參數存放區參數的一些挑戰：
+ 如果您使用多個區域，則必須同步每個區域的參數存放區中的 CloudWatch 組態更新。參數存放區是區域服務，必須在使用 CloudWatch 代理程式的每個區域中更新相同的參數。
+ 如果您有多個 CloudWatch 組態，您必須啟動每個參數存放區組態的擷取和應用程式。您必須個別從參數存放區擷取每個 CloudWatch 組態，並在每次新增組態時更新擷取方法。相反地，CloudWatch 提供用於儲存組態檔案的組態目錄，並在目錄中套用每個組態，而不需要個別指定這些組態。
+ 如果您使用多個帳戶，則必須確保每個新帳戶在其參數存放區中具有所需的 CloudWatch 組態。您也必須確保未來會將任何組態變更套用至這些帳戶及其區域。

您可以將 CloudWatch 組態存放在可從所有帳戶和區域存取的 S3 儲存貯體中。然後，您可以使用 Systems Manager Automation Runbooks 和 Systems Manager State Manager，將這些組態從 S3 儲存貯體複製到 CloudWatch 組態目錄。您可以使用 [cloudwatch-config-s3-bucket.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/cloudwatch-config-s3-bucket.yaml) AWS CloudFormation 範本來建立可從 AWS Organizations 中組織內多個帳戶存取的 S3 儲存貯體。範本包含 參數 `OrganizationID` ，可授予 [組織內](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)所有帳戶的讀取存取權。

本指南 [的設定狀態管理員和適用於 CloudWatch 代理程式的 Distributor 部署和組態](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/install-cloudwatch-systems-manager.html#set-up-systems-manager-distributor) 區段中提供的擴增範例 Systems Manager Runbook，設定為使用 [cloudwatch-config-s3-bucket.yaml](https://github.com/aws-samples/logging-monitoring-apg-guide-examples/blob/main/cloudwatch-config-s3-bucket.yaml) AWS CloudFormation 範本建立的 S3 儲存貯體擷取檔案。

或者，您可以使用版本控制系統 （例如 GitHub) 來存放您的組態檔案。如果您想要自動擷取儲存在版本控制系統中的組態檔案，您必須管理或集中登入資料儲存，並更新 Systems Manager Automation Runbook，其用於跨您的帳戶和擷取登入資料 AWS 區域。