

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

# 為 EC2 執行個體和內部部署伺服器設定 CloudWatch 代理程式
<a name="configure-cloudwatch-ec2-on-premises"></a>

許多組織會在實體伺服器和虛擬機器 (VMs上執行工作負載。這些工作負載通常在不同作業系統上執行，每個OSs都有擷取和擷取指標的唯一安裝和組態需求。

如果您選擇使用 EC2 執行個體，您可以高度控制執行個體和作業系統組態。不過，這種更高層級的控制和責任需要您監控和調整組態，以實現更有效率的使用。您可以建立記錄和監控的標準，並套用標準安裝和組態方法來擷取和擷取日誌和指標，以改善您的營運效率。

將 IT 投資遷移或擴展到 AWS 雲端的組織可以利用 CloudWatch 來實現統一的記錄和監控解決方案。CloudWatch 定價表示您要擷取的指標和日誌會遞增付費。您也可以使用與 Amazon EC2 類似的 CloudWatch 代理程式安裝程序，擷取內部部署伺服器的日誌和指標。

開始安裝和部署 CloudWatch 之前，請務必評估系統和應用程式的日誌記錄和指標組態。請確定您定義了要為要使用OSs擷取的標準日誌和指標。系統日誌和指標是記錄和監控解決方案的基礎和標準，因為它們是由作業系統產生，Linux 和 Windows 不同。除了 Linux 版本或發行版本特有的指標和日誌檔案之外，Linux 發行版本也有一些重要的指標和日誌檔案可用。此差異也會在不同 Windows 版本之間發生。

## 設定 CloudWatch 代理程式
<a name="configure-cloudwatch-agent-ec2"></a>

CloudWatch 會使用 CloudWatch 代理程式和每個作業系統特有的代理程式組態檔案，擷取 Amazon EC2 和內部部署伺服器的指標和日誌。 [CloudWatch ](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) 建議您先定義組織的標準指標和日誌擷取組態，再開始在帳戶中大規模安裝 CloudWatch 代理程式。

您可以結合多個 CloudWatch 代理程式組態，以形成複合 CloudWatch 代理程式組態。建議的方法之一是在系統和應用程式層級定義和分割日誌和指標的組態。下圖說明如何結合適用於不同需求的多個 CloudWatch 組態檔案類型，以形成複合 CloudWatch 組態：

![\[合併不同需求的組態，以形成複合 CloudWatch 組態。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/images/logging-monitoring-image-1.png)


這些日誌和指標也可以針對特定環境或需求進一步分類和設定。例如，您可以為不受管制的開發環境定義更小的日誌和指標子集，精確度較低，並為受管制的生產環境定義更大型、更完整的設定，精確度較高。

## 設定 EC2 執行個體的日誌擷取
<a name="log-capture-configuration-ec2"></a>

根據預設，Amazon EC2 不會監控或擷取日誌檔案。相反地，日誌檔案是由安裝在 EC2 執行個體、 AWS API 或 AWS Command Line Interface () 上的 CloudWatch 代理程式軟體擷取並擷取至 CloudWatch Logs AWS CLI。我們建議使用 CloudWatch 代理程式，將日誌檔案擷取至 Amazon EC2 和內部部署伺服器的 CloudWatch Logs。

您可以搜尋和篩選日誌，以及擷取指標，並根據 CloudWatch 中日誌檔案中的模式修補來執行自動化。CloudWatch 支援純文字、空格分隔和 JSON 格式的篩選條件和模式語法選項，搭配 JSON 格式的日誌可提供最大的彈性。若要增加篩選和分析選項，您應該使用格式化的日誌輸出，而不是純文字。

CloudWatch 代理程式使用組態檔案來定義要傳送至 CloudWatch 的日誌和指標。然後CloudWatch 會將每個日誌檔案擷取為[日誌串流](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)，並將這些日誌串流分組為[日誌群組](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。這可協助您從 EC2 執行個體跨日誌執行操作，例如搜尋相符的字串。

預設日誌串流名稱與 EC2 執行個體 ID 相同，預設日誌群組名稱與日誌檔案路徑相同。日誌串流的名稱在 CloudWatch 日誌群組中必須是唯一的。您可以在日誌串流和日誌群組名稱中使用 `instance_id`、`local_hostname`、 `hostname`或 `ip_address`進行動態替換，這表示您可以在多個 EC2 執行個體間使用相同的 CloudWatch 代理程式組態檔案。

下圖顯示用於擷取日誌的 CloudWatch 代理程式組態。日誌群組由擷取的日誌檔案定義，並包含每個 EC2 執行個體的個別日誌串流，因為 `{instance_id}`變數用於日誌串流名稱和 EC2 執行個體 IDs是唯一的。

![\[用於擷取日誌的 CloudWatch 代理程式組態。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/images/cloudwatch-image-1.png)


日誌群組定義其包含之日誌串流的保留、標籤、安全性、指標篩選條件和搜尋範圍。以日誌檔案名稱為基礎的預設分組行為可協助您搜尋、建立指標，以及對帳戶和區域中跨 EC2 執行個體之日誌檔案的特定資料發出警示。您應該評估是否需要進一步的日誌群組精簡。例如，您的帳戶可能由多個業務單位共用，並且擁有不同的技術或操作擁有者。這表示您必須進一步精簡日誌群組名稱，以反映分離和擁有權。此方法可讓您將分析和故障診斷集中在相關的 EC2 執行個體上。

如果多個環境使用一個帳戶，您可以為每個環境中執行的工作負載分開記錄。下表顯示包含業務單位、專案或應用程式和環境的日誌群組命名慣例。


|  |  | 
| --- |--- |
| 日誌群組名稱 | /<Business unit>/<Project or application name>/<Environment>/<Log file name> | 
| 日誌串流名稱 | <EC2 instance ID>  | 

您也可以將所有 EC2 執行個體的日誌檔案分組到相同的日誌群組。這可讓您更輕鬆地搜尋和分析單一 EC2 執行個體的一組日誌檔案。如果您的大多數 EC2 執行個體為一個應用程式或工作負載提供服務，而且每個 EC2 執行個體都具有特定用途，這很有用。下表顯示如何格式化您的日誌群組和日誌串流命名，以支援此方法。


|  |  | 
| --- |--- |
| 日誌群組名稱 | /<Business unit>/<Project or application name>/<Environment>/<EC2 instance ID> | 
| 日誌串流名稱 | <Log file name> | 

## 設定 EC2 執行個體的指標擷取
<a name="metrics-configuration-ec2"></a>

根據預設，您的 EC2 執行個體會啟用基本監控，並且每五分鐘會自動將[一組標準指標](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html) （例如 CPU、網路或儲存相關指標） 傳送至 CloudWatch。CloudWatch 指標可能會因執行個體系列而有所不同，例如，[爆量效能執行個體](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/burstable-performance-instances.html)具有 CPU 點數的指標。Amazon EC2 標準指標包含在執行個體價格中。如果您啟用 EC2 執行個體[的詳細監控](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/using-cloudwatch-new.html)，您可以在一分鐘期間內接收資料。期間頻率會影響 CloudWatch 成本，因此請務必評估所有或僅部分 EC2 執行個體是否需要詳細監控。例如，您可以啟用生產工作負載的詳細監控，但對非生產工作負載使用基本監控。

內部部署伺服器不包含 CloudWatch 的任何預設指標，且必須使用 CloudWatch 代理程式 AWS CLI、 或 AWS SDK 來擷取指標。這表示您必須定義要在 CloudWatch 組態檔案中擷取的指標 （例如 CPU 使用率）。您可以建立唯一的 CloudWatch 組態檔案，其中包含內部部署伺服器的標準 EC2 執行個體指標，並套用它，以及您的標準 CloudWatch 組態。

CloudWatch 中的[指標](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/working_with_metrics.html)由指標名稱和零個或多個維度唯一定義，並在指標命名空間中唯一分組。 AWS 服務提供的指標具有開頭為 的命名空間 `AWS`（例如 `AWS/EC2`)，非AWS 指標則視為自訂指標。您使用 CloudWatch 代理程式設定和擷取的指標都視為自訂指標。由於建立的指標數目會影響 CloudWatch 成本，因此您應該評估所有或僅部分 EC2 執行個體是否需要每個指標。例如，您可以為生產工作負載定義一組完整的指標，但針對非生產工作負載使用這些指標的較小子集。

`CWAgent` 是 CloudWatch 代理程式發佈之指標的預設命名空間。與日誌群組類似，指標命名空間會組織一組指標，以便在同一位置一起找到它們。您應該修改命名空間，以反映業務單位、專案或應用程式，以及環境 （例如 `/<Business unit>/<Project or application name>/<Environment>`)。如果多個不相關的工作負載使用相同的帳戶，此方法很有用。您也可以將命名空間命名慣例與 CloudWatch 日誌群組命名慣例建立關聯。

指標也會透過其維度來識別，這可協助您根據一組條件來分析指標，並且是記錄觀察的屬性。Amazon EC2 包含具有 `InstanceId`和 `AutoScalingGroupName`維度之 EC2 執行個體的[個別指標](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-dimensions)。如果您啟用詳細監控，也會收到具有 `ImageId`和 `InstanceType`維度的指標。例如，Amazon EC2 為 CPU 使用率提供單獨的 EC2 執行個體指標與`InstanceId`維度，以及為`InstanceType`維度提供單獨的 CPU 使用率指標。除了特定執行個體類型的所有 EC2 執行個體之外，這可協助您分析每個唯一 EC2 執行個體的 CPU 使用率。 EC2 [https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-types.html](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-types.html) 

新增更多維度可增加您的分析功能，但也會增加整體成本，因為每個指標和唯一維度值組合都會產生新的指標。例如，如果您針對維`InstanceId`度建立記憶體使用率百分比的指標，則這是每個 EC2 執行個體的新指標。如果您的組織執行數千個 EC2 執行個體，這會導致數千個指標並產生更高的成本。若要控制和預測成本，請確定您判斷指標的基數，以及哪些維度會新增最大值。例如，您可以為生產工作負載指標定義一組完整的維度，但為非生產工作負載定義這些維度的較小子集。

您可以使用 `append_dimensions` 屬性，將維度新增至 CloudWatch 組態中定義的一個或所有指標。您也可以動態將 `ImageId`、`InstanceType`、 `InstanceId`和 附加`AutoScalingGroupName`到 CloudWatch 組態中的所有指標。或者，您可以在該指標上使用 `append_dimensions` 屬性來附加特定指標的任意維度名稱和值。CloudWatch 也可以彙總您使用 `aggregation_dimensions` 屬性定義之指標維度的統計資料。

例如，您可以彙總針對`InstanceType`維度使用的記憶體，以查看所有 EC2 執行個體針對每個執行個體類型使用的平均記憶體。如果您使用在區域中執行的`t2.micro`執行個體，您可以判斷使用 `t2.micro`類別的工作負載是否過度利用或過度利用提供的記憶體。利用率不足可能是使用 EC2 類別搭配不需要記憶體容量之工作負載的跡象。相反地，過度使用可能是使用記憶體不足之 Amazon EC2 類別的工作負載跡象。

下圖顯示使用自訂命名空間、新增維度和 彙總的範例 CloudWatch 指標組態`InstanceType`。

![\[使用 CloudWatch 代理程式的 CloudWatch 指標組態範例。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/images/cloudwatch-image-2.png)


# 系統層級 CloudWatch 組態
<a name="system-level-cloudwatch-configuration"></a>

系統層級指標和日誌是監控和記錄解決方案的核心元件，而 CloudWatch 代理程式具有適用於 Windows 和 Linux 的特定組態選項。

我們建議您使用 [CloudWatch 組態檔案精靈](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html)或組態檔案結構描述，為您計劃支援的每個作業系統定義 CloudWatch 代理程式組態檔案。其他工作負載特定的作業系統層級日誌和指標可以在單獨的 CloudWatch 組態檔案中定義，並附加至標準組態。這些唯一的組態檔案應分別存放在 S3 儲存貯體中，以供 EC2 執行個體擷取。此用途的 S3 儲存貯體設定範例說明於本指南的 [管理 CloudWatch 組態](create-store-cloudwatch-configurations.md#store-cloudwatch-configuration-s3)一節。您可以使用 State Manager 和 Distributor 自動擷取和套用這些組態。

## 設定系統層級日誌
<a name="system-level-logs"></a>

系統層級日誌對於診斷和疑難排解內部部署或 AWS 雲端的問題至關重要。您的日誌擷取方法應包含作業系統產生的任何系統和安全日誌。根據作業系統版本，作業系統產生的日誌檔案可能會有所不同。

CloudWatch 代理程式支援透過提供事件日誌名稱來監控 Windows 事件日誌。您可以選擇要監控的 Windows 事件日誌 （例如 `System`、 `Application`或 `Security`)。

Linux 系統的系統、應用程式和安全日誌通常存放在 `/var/log`目錄中。下表定義了您應該監控的常見預設日誌檔案，但您應該檢查 `/etc/rsyslog.conf`或 `/etc/syslog.conf` 檔案，以確定系統日誌檔案的特定設定。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/system-level-cloudwatch-configuration.html)

您的組織可能也有其他代理程式或系統元件，可產生您要監控的日誌。您應該評估並決定這些代理程式或應用程式產生的日誌檔案，並透過識別它們的檔案位置將其包含在組態中。例如，您應該在組態中包含 Systems Manager 和 CloudWatch 代理程式日誌。下表提供這些 Windows 和 Linux 代理程式日誌的位置。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/system-level-cloudwatch-configuration.html)

如果日誌檔案是在 CloudWatch 代理程式組態中定義，但找不到，則 CloudWatch 會忽略日誌檔案。當您想要維護 Linux 的單一日誌組態，而不是每個發行版本的個別組態時，這會很有用。在代理程式或軟體應用程式開始執行之前，日誌檔案不存在時也很有用。

## 設定系統層級指標
<a name="system-level-metrics"></a>

記憶體和磁碟空間使用率不包含在 Amazon EC2 提供的標準指標中。若要包含這些指標，您必須在 EC2 執行個體上安裝和設定 CloudWatch 代理程式。CloudWatch 代理程式組態精靈會使用[預先定義的指標](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html#cloudwatch-agent-preset-metrics)建立 CloudWatch 組態，您可以視需要新增或移除指標。請務必檢閱預先定義的指標集，以判斷您需要的適當層級。

最終使用者和工作負載擁有者應根據伺服器或 EC2 執行個體的特定需求發佈其他系統指標。這些指標定義應該存放在單獨的 CloudWatch 代理程式組態檔案中，並進行版本控制和維護，並在中央位置 （例如 Amazon S3) 共用，以便重複使用和自動化。

標準 Amazon EC2 指標不會在內部部署伺服器中自動擷取。這些指標必須在內部部署執行個體所使用的 CloudWatch 代理程式組態檔案中定義。您可以使用 CPU 使用率等指標為內部部署執行個體建立個別的指標組態檔案，並將這些指標附加至標準指標組態檔案。

# 應用程式層級 CloudWatch 組態
<a name="application-level-configuration"></a>

應用程式日誌和指標是由執行中的應用程式產生，並且是應用程式特定的。請確定您定義了充分監控組織定期使用之應用程式所需的日誌和指標。例如，您的組織可能已針對 Web 應用程式在 Microsoft Internet Information Server (IIS) 上標準化。您可以為 IIS 建立標準日誌和指標 CloudWatch 組態，也可以在您的組織中使用。應用程式特定的組態檔案可以存放在集中位置 （例如 S3 儲存貯體），並由工作負載擁有者或透過自動擷取存取，並複製到 CloudWatch 組態目錄。CloudWatch 代理程式會自動將每個 EC2 執行個體或伺服器的組態檔案目錄中找到的 CloudWatch 組態檔案合併為複合 CloudWatch 組態。最終結果是包含組織標準系統層級組態的 CloudWatch 組態，以及所有相關應用程式層級 CloudWatch 組態。

工作負載擁有者應識別和設定所有關鍵應用程式和元件的日誌檔案和指標。

## 設定應用程式層級日誌
<a name="application-logs-configuration"></a>

應用程式層級記錄會根據應用程式是商用off-the-shelf(COTS) 還是自訂開發的應用程式而有所不同。COTS 應用程式及其元件可能會為日誌組態和輸出提供數個選項，例如日誌詳細資訊層級、日誌檔案格式和日誌檔案位置。不過，大多數 COTS 或第三方應用程式不允許您從根本上變更記錄 （例如，更新應用程式的程式碼以包含無法設定的其他日誌陳述式或格式）。您至少應該設定 COTS 或第三方應用程式的記錄選項，以記錄警告和錯誤層級資訊，最好是 JSON 格式。

您可以在 CloudWatch 組態中包含應用程式的日誌檔案，將自訂開發的應用程式與 CloudWatch Logs 整合。自訂應用程式可提供更好的日誌品質和控制，因為除了包含任何其他必要的詳細資訊之外，您還可以自訂日誌輸出格式、分類和分隔元件輸出以分隔日誌檔案。請務必檢閱並標準化記錄程式庫，以及組織所需的資料和格式，以便更輕鬆地分析和處理。

您也可以使用 CloudWatch Logs `[PutLogEvents](https://docs.aws.amazon.com//AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)` API 呼叫或使用 AWS SDK 寫入 CloudWatch 日誌串流。您可以使用 API 或 SDK 進行自訂記錄需求，例如協調跨分散式元件和伺服器的單一日誌串流記錄。不過，維護最簡單且最廣泛適用的解決方案是設定您的應用程式寫入日誌檔案，然後使用 CloudWatch 代理程式讀取日誌檔案並將其串流至 CloudWatch。

您也應該考慮要從應用程式日誌檔案測量的指標類型。您可以使用指標篩選條件來測量、繪製和警示 CloudWatch 日誌群組中的此資料。例如，您可以使用指標篩選條件，在 日誌中識別失敗的登入嘗試，以計算失敗的登入嘗試次數。

您也可以在應用程式日誌檔案中使用 [https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html)。

## 設定應用程式層級指標
<a name="application-metrics"></a>

自訂指標是由 AWS 服務直接提供給 CloudWatch 的指標，它們會在 CloudWatch 指標的自訂命名空間中發佈。所有應用程式指標都視為自訂 CloudWatch 指標。應用程式指標可能符合 EC2 執行個體、應用程式元件、API 呼叫，甚至是商業函數。您還必須考慮您為指標選擇的維度的重要性和基數。具有高基數的維度會產生大量自訂指標，並可能增加您的 CloudWatch 成本。

CloudWatch 可協助您以多種方式擷取應用程式層級指標，包括下列項目：
+ 透過定義您要從 [ procstat 外掛程式](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-procstat-process-metrics.html)擷取的個別程序，來擷取程序層級指標。
+ 應用程式會將指標發佈至 Windows Performance Monitor，此指標是在 CloudWatch 組態中定義。
+ 指標篩選條件和模式會套用到 CloudWatch 中的應用程式日誌。
+ 應用程式會使用 CloudWatch 內嵌指標格式寫入 CloudWatch 日誌。
+ 應用程式會透過 API 或 AWS SDK 將指標傳送至 CloudWatch。
+ 應用程式會使用設定的 CloudWatch 代理程式，將指標傳送至[已收集](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-collectd.html)或 [StatsD](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-custom-metrics-statsd.html) 協助程式。

您可以使用 procstat 來監控和測量 CloudWatch 代理程式的關鍵應用程式程序。這可協助您在應用程式不再執行關鍵程序時發出警示並採取動作 （例如，通知或重新啟動程序）。您也可以測量應用程式程序的效能特性，並在特定程序運作異常時發出警示。

如果您無法使用其他自訂指標更新 COTS 應用程式，Procstat 監控也很有用。例如，您可以建立測量 `my_process` `cpu_time`並包含自訂`application_version`維度的指標。如果您的不同指標有不同的維度，您也可以為應用程式使用多個 CloudWatch 代理程式組態檔案。

如果您的應用程式在 Windows 上執行，您應該評估應用程式是否已將指標發佈至 Windows Performance Monitor。許多 COTS 應用程式與 Windows Performance Monitor 整合，可協助您輕鬆監控應用程式指標。CloudWatch 也會與 Windows Performance Monitor 整合，而且您可以擷取其中現有的任何指標。

請務必檢閱應用程式提供的日誌格式和日誌資訊，以判斷可以使用指標篩選條件擷取哪些指標。您可以檢閱應用程式的歷史日誌，以判斷錯誤訊息和異常關機的呈現方式。您也應該檢閱先前報告的問題，以判斷是否可以擷取指標，以防止問題重複發生。您也應該檢閱應用程式的文件，並要求應用程式開發人員確認如何識別錯誤訊息。

對於自訂開發的應用程式，請與應用程式的開發人員合作，定義可使用 CloudWatch 內嵌指標格式、 AWS SDK 或 AWS API 實作的重要指標。建議的方法是使用內嵌指標格式。您可以使用 AWS 提供的開放原始碼內嵌指標格式程式庫，協助您以所需的格式撰寫陳述式。您也需要更新[應用程式特定的 CloudWatch 組態](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Generation_CloudWatch_Agent.html)，以包含內嵌指標格式代理程式。這會導致 EC2 執行個體上執行的代理程式充當本機內嵌指標格式端點，將內嵌指標格式指標傳送至 CloudWatch。

如果您的應用程式已支援將指標發佈至收集或統計，您可以利用這些指標將指標擷取至 CloudWatch。