本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本節提供不同的案例,概述如何完成 CloudWatch 代理程式的常見組態和自訂任務。
主題
以不同的使用者身分執行 CloudWatch 代理程式
根據預設,在 Linux 伺服器上以根使用者身分執行 CloudWatch。若要以不同的使用者身分執行代理,請在 CloudWatch 代理程式組態檔案中的 agent
區段使用 run_as_user
參數。此選項僅供 Linux 伺服器使用。
如果您已使用根使用者身分執行代理,並想要變更為使用不同的使用者身分,請使用下列程序之一。
在執行 Linux 的 EC2 執行個體上以其他使用者身分執行 CloudWatch 代理
下載並安裝新的 CloudWatch 代理程式套件。如需詳細資訊,請參閱下載 CloudWatch 代理程式套件。
建立新的 Linux 使用者,或使用 RPM 或 DEB 檔案所建立名為
cwagent
的預設使用者。以下列方式之一提供此使用者的登入資料:
如果檔案
.aws/credentials
存在於根使用者的主目錄中,您必須為執行 CloudWatch 代理程式時使用的使用者建立憑證檔案。這個登入資料檔案會是/home/
。然後,將username
/.aws/credentialscommon-config.toml
中的shared_credential_file
參數值設為登入資料檔案的路徑名稱。如需詳細資訊,請參閱(選用) 修改代理或區域資訊的常見組態。如果檔案
.aws/credentials
不存在於根使用者的主目錄中,您可執行下列操作之一:建立憑證檔案,讓您要用的使用者執行 CloudWatch 代理程式。這個登入資料檔案會是
/home/
。然後,將username
/.aws/credentialscommon-config.toml
中的shared_credential_file
參數值設為登入資料檔案的路徑名稱。如需詳細資訊,請參閱(選用) 修改代理或區域資訊的常見組態。不要建立憑證檔案,而是將 IAM 角色連接到執行個體。代理會使用這個角色作為登入資料提供者。
在 CloudWatch 代理程式組態檔案中,在
agent
區段新增下列行:"run_as_user": "
username
"視需要對組態檔案執行其他修改。如需詳細資訊,請參閱 建立 CloudWatch 代理程式組態檔案
提供使用者必要的許可。使用者必須擁有要收集之日誌檔的讀取 (r) 許可,而且必須擁有日誌檔路徑中每個目錄的 Execute (x) 許可。
使用您剛才修改的組態檔案啟動代理。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:
configuration-file-path
如要在執行 Linux 的內部部署伺服器上以其他使用者身分執行 CloudWatch 代理程式
下載並安裝新的 CloudWatch 代理程式套件。如需詳細資訊,請參閱下載 CloudWatch 代理程式套件。
建立新的 Linux 使用者,或使用 RPM 或 DEB 檔案所建立名為
cwagent
的預設使用者。將此使用者的登入資料存放在使用者可以存取的路徑,例如,
/home/
。username
/.aws/credentials將
common-config.toml
中的shared_credential_file
參數值設為登入資料檔案的路徑名稱。如需詳細資訊,請參閱(選用) 修改代理或區域資訊的常見組態。在 CloudWatch 代理程式組態檔案中,在
agent
區段新增下列行:"run_as_user": "
username
"視需要對組態檔案執行其他修改。如需詳細資訊,請參閱 建立 CloudWatch 代理程式組態檔案
提供使用者必要的許可。使用者必須擁有要收集之日誌檔的讀取 (r) 許可,而且必須擁有日誌檔路徑中每個目錄的 Execute (x) 許可。
使用您剛才修改的組態檔案啟動代理。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:
configuration-file-path
CloudWatch 代理程式如何處理稀疏日誌檔案
稀疏檔案是同時具有空白區塊和實際內容的檔案。稀疏檔案透過將代表空白區塊的簡短資訊 (而不是組成區塊的實際空白位元組) 寫入磁碟,以更有效率的方式使用磁碟空間。這使稀疏檔案的實際大小往往比其表面上的大小小得多。
不過,CloudWatch 代理程式處理稀疏檔案的方式與一般檔案並無不同。當代理程式讀取稀疏檔案時,空白區塊會被視為填滿空位元組的「真實」區塊。有鑑於此,CloudWatch 代理程式會將稀疏檔案表面大小的相同位元組數目發佈至 CloudWatch。
設定 CloudWatch 代理程式來發佈稀疏檔案可能會導致高出預期的 CloudWatch 成本,因此我們建議您不要這麼做。例如,/var/logs/lastlog
在 Linux 中通常是一個非常稀疏的檔案,我們建議您不要將它發佈到 CloudWatch。
將自訂維度新增至 CloudWatch 代理程式收集的指標
若要新增自訂維度,例如代理程式收集的標籤指標,請將 append_dimensions
欄位新增至列出這些指標的代理程式組態檔案區段。
例如,以下組態檔案範例區段將名為 stackName
的自訂維度與 Prod
值,新增至代理程式收集的 cpu
和 disk
指標。
"cpu":{
"resources":[
"*"
],
"measurement":[
"cpu_usage_guest",
"cpu_usage_nice",
"cpu_usage_idle"
],
"totalcpu":false,
"append_dimensions":{
"stackName":"Prod"
}
},
"disk":{
"resources":[
"/",
"/tmp"
],
"measurement":[
"total",
"used"
],
"append_dimensions":{
"stackName":"Prod"
}
}
請記住,無論何時,只要變更代理程式組態檔案,您就必須重新啟動代理程式,才能使變更生效。
多個 CloudWatch 代理程式組態檔案
在 Linux 伺服器和 Windows 伺服器上,您可以設定 CloudWatch 代理程式來使用多個組態檔案。例如,您可以使用收集一組指標、日誌和追蹤的常見組態檔,而您一向會從基礎設施的所有伺服器收集它們。然後,您可以使用從某些應用程式或某些情況下收集指標的其他組態檔案。
若要設定,請先建立您要使用的組態檔案。將在相同伺服器上一起使用的任何組態檔案都必須具有不同的檔案名稱。您可以將組態檔案存放在伺服器或參數存放區中。
使用 fetch-config
選項啟動 CloudWatch 代理程式,並指定第一個組態檔案。若要在執行中的代理程式附加第二個組態檔案,使用相同命令但請搭配 append-config
選項。會收集組態檔案中列出的所有指標、日誌和追蹤。下列範例命令使用組態存放區做為檔案來說明此案例。第一行使用 infrastructure.json
組態檔案來啟動代理程式,第二個行則附加 app.json
組態檔案。
下列範例命令適用於 Linux。
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/tmp/infrastructure.json
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -s -c file:/tmp/app.json
下列範例命令適用於 Windows Server。
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:"C:\Program Files\Amazon\AmazonCloudWatchAgent\infrastructure.json"
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a append-config -m ec2 -s -c file:"C:\Program Files\Amazon\AmazonCloudWatchAgent\app.json"
以下範例組態檔案說明如何使用此功能。第一個組態檔案用於基礎設施中的所有伺服器,第二個組態檔案僅收集來自特定應用程式的日誌,並附加到執行該應用程式的伺服器。
infrastructure.json
{
"metrics": {
"metrics_collected": {
"cpu": {
"resources": [
"*"
],
"measurement": [
"usage_active"
],
"totalcpu": true
},
"mem": {
"measurement": [
"used_percent"
]
}
}
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
"log_group_name": "amazon-cloudwatch-agent.log"
},
{
"file_path": "/var/log/messages",
"log_group_name": "/var/log/messages"
}
]
}
}
}
}
app.json
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/app/app.log*",
"log_group_name": "/app/app.log"
}
]
}
}
}
}
附加到組態的任何組態檔案都必須具有彼此不同的檔案名稱,且該名稱也必須和初始組態檔案不同。若您搭配具有和代理程式已正在使用組態檔案相同檔案名稱的組態檔案,使用 append-config
,則附加命令會覆寫來自第一個組態檔案的資訊,而非附加到其中。即使具有相同檔案名稱的兩個組態檔案位於不同的檔案路徑上,也是如此。
上面的範例顯示了兩個組態檔案的使用,但可以附加到代理程式組態的組態檔案數沒有限制。您也可以混合使用位於伺服器的組態檔案和位於參數存放區的組態。
彙總或累計 CloudWatch 代理程式收集的指標
若要彙整或累計代理程式收集的指標,請將 aggregation_dimensions
欄位新增至代理程式組態檔案中該指標的區段。
例如,以下組態檔案片段累計 AutoScalingGroupName
維度上的指標。每個 Auto Scaling 群組的所有執行個體的指標都將彙總並可整體檢視。
"metrics": {
"cpu":{...}
"disk":{...}
"aggregation_dimensions" : [["AutoScalingGroupName"]]
}
除了以 Auto Scaling 群組名稱彙整之外,若要彙整每個 InstanceId
和 InstanceType
維度的組合,請新增以下內容。
"metrics": {
"cpu":{...}
"disk":{...}
"aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]]
}
或者,若要將指標彙整至一個集合,請使用 []
。
"metrics": {
"cpu":{...}
"disk":{...}
"aggregation_dimensions" : [[]]
}
請記住,無論何時,只要變更代理程式組態檔案,您就必須重新啟動代理程式,才能使變更生效。
使用 CloudWatch 代理程式收集高解析度指標
metrics_collection_interval
欄位指定收集指標的時間間隔 (以秒為單位)。藉由為此欄位指定小於 60 的值,就會以高解析度指標來收集指標。
例如,若您的指標都必須是高解析度,且每 10 秒收集一次,請為 metrics_collection_interval
區段下方的 agent
指定 10 作為值,以作為全域指標的收集間隔。
"agent": {
"metrics_collection_interval": 10
}
或者,以下範例會設定每秒收集 cpu
指標一次,而所有其他指標則每分鐘收集一次。
"agent":{
"metrics_collection_interval": 60
},
"metrics":{
"metrics_collected":{
"cpu":{
"resources":[
"*"
],
"measurement":[
"cpu_usage_guest"
],
"totalcpu":false,
"metrics_collection_interval": 1
},
"disk":{
"resources":[
"/",
"/tmp"
],
"measurement":[
"total",
"used"
]
}
}
}
請記住,無論何時,只要變更代理程式組態檔案,您就必須重新啟動代理程式,才能使變更生效。
將指標、日誌和追蹤傳送到不同帳戶
若要讓 CloudWatch 代理程式將指標、日誌或追蹤傳送到不同帳戶,請在傳送伺服器上的代理程式組態檔案中指定 role_arn
參數。role_arn
值會指定當將資料傳送給目標帳戶時,代理程式使用之目標帳戶的 IAM 角色。將指標或日誌交付給目標帳戶時,此角色可讓傳送帳戶擔任在目標帳戶中的對應角色。
您也可以在代理程式組態檔案中指定單獨的 role_arn
字串:一個用於傳送指標,一個用於傳送日誌,一個用於傳送追蹤。
以下範例是組態檔案 agent
區段的一部分,這部分會設定代理程式在將資料傳送給不同帳戶時使用 CrossAccountAgentRole
。
{
"agent": {
"credentials": {
"role_arn": "arn:aws:iam::123456789012:role/CrossAccountAgentRole"
}
},
.....
}
或者,以下範例設定在傳送指標、日誌和追蹤時傳送帳戶所用的不同角色:
"metrics": {
"credentials": {
"role_arn": "RoleToSendMetrics"
},
"metrics_collected": {....
"logs": {
"credentials": {
"role_arn": "RoleToSendLogs"
},
....
需要政策
當您在代理程式組態檔案中指定 role_arn
時,也必須確定傳送和目標帳戶的 IAM 角色擁有特定的政策。傳送和目標帳戶的角色都應該要有 CloudWatchAgentServerPolicy
。如需將此政策指派給角色的詳細資訊,請參閱 建立 IAM 角色,以便在 Amazon EC2 執行個體上搭配 CloudWatch 代理程式使用。
傳送帳戶的角色也必須包含下列政策。編輯角色時,您可以將此政策新增至 IAM 主控台中的 Permissions (許可) 標籤。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::target-account-ID
:role/agent-role-in-target-account
"
]
}
]
}
目標帳戶中的角色必須包含以下政策,才能辨識傳送帳戶所使用的 IAM 角色。編輯角色時,您可以將此政策新增至 IAM 主控台中的 Trust relationships (信任關係) 標籤。您在目標帳戶中新增此政策的角色,就是您在 建立 IAM 角色和使用者以使用 CloudWatch 代理程式 中建立的角色。這個角色是在傳送帳戶使用的政策中以
指定的角色。agent-role-in-target-account
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::sending-account-ID
:role/role-in-sender-account
"
]
},
"Action": "sts:AssumeRole"
}
]
}
統一的 CloudWatch 代理程式與舊版的 CloudWatch Logs 代理程式之間的時間戳記差異
相較於較舊的 CloudWatch Logs 代理程式,CloudWatch 代理程式支援不同的時間戳記格式符號組。這些差異如下表所示。
兩種代理程式都支援的符號 | 僅統一的 CloudWatch 代理程式支援的符號 | 僅舊版的 CloudWatch Logs 代理程式支援的符號 |
---|---|---|
%A、%a、%b、%B、%d、%f、%H、%l、%m、%M、%p、%S、%y、%Y、%Z、%z |
%-d、%-l、%-m、%-M、%-S |
%c、%j、%U、%W、%w |
如需更多有關新 CloudWatch 代理程式支援之符號意義的詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的 CloudWatch 代理程式組態檔案:Logs (日誌) 區段。如需 CloudWatch Logs 代理程式支援之符號的詳細資訊,請參閱《Amazon CloudWatch Logs 使用者指南》中的代理程式組態檔案。
附加 OpenTelemetry 收集器組態檔案
CloudWatch 代理程式支援補充 OpenTelemetry 收集器組態檔案及其自己的組態檔案。此功能可讓您透過 CloudWatch 代理程式組態使用 CloudWatch Application Signals 或 Container Insights 等 CloudWatch 代理程式功能,並使用單一代理程式加入現有的 OpenTelemetry 收集器組態。
為了防止與 CloudWatch 代理程式自動建立的管道發生合併衝突,我們建議您將自訂字尾新增至 OpenTelemetry 收集器組態中的每個元件和管道。
receivers:
otlp/custom-suffix:
protocols:
http:
exporters:
awscloudwatchlogs/custom-suffix:
log_group_name: "test-group"
log_stream_name: "test-stream"
service:
pipelines:
logs/custom-suffix:
receivers: [otlp/custom-suffix]
exporters: [awscloudwatchlogs/custom-suffix]
若要設定 CloudWatch 代理程式,請使用 fetch-config
選項啟動 CloudWatch 代理程式,並指定 CloudWatch 代理程式的組態檔案。CloudWatch 代理程式需要至少一個 CloudWatch 代理程式組態檔案。
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -c file:/tmp/agent.json -s
接著,使用 append-config
選項指定 OpenTelemetry 收集器組態檔案。
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -c file:/tmp/otel.yaml -s
代理程式會在啟動時合併兩個組態檔案,並記錄已解析的組態。