本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 CloudWatch 代理程式傳送內嵌指標格式日誌
本節說明如何安裝和使用 CloudWatch 代理程式。本節的第一部分說明如何安裝 CloudWatch 代理程式。本節的第二部分說明如何使用 CloudWatch 代理程式傳送內嵌指標格式日誌。如果您想要使用此方法,您必須為 AWS 服務 要從中傳送內嵌指標格式日誌的 安裝 CloudWatch 代理程式。然後,您可以開始傳送事件。CloudWatch 代理程式必須是 1.230621.0 版或更新版本。
注意
您不需要安裝 CloudWatch 代理程式來從 Lambda 函數傳送日誌。
Lambda 函數逾時不會自動處理。這表示如果您的函數在排清指標前逾時,便不會擷取該呼叫的指標。
安裝 CloudWatch 代理程式
為每個要傳送內嵌指標格式日誌的服務安裝 CloudWatch 代理程式。
在 EC2 上安裝 CloudWatch 代理程式
首先,請在執行個體上安裝 CloudWatch 代理程式。如需詳細資訊,請參閱安裝 CloudWatch 代理程式。
一旦您安裝了代理程式,請設定代理程式在 UDP 或 TCP 連接埠上接聽內嵌指標格式日誌。以下是此組態的範例,此組態會在預設通訊端 tcp:25888
上接聽。如需代理程式組態的詳細資訊,請參閱手動建立或編輯 CloudWatch 代理程式組態檔案。
{ "logs": { "metrics_collected": { "emf": { } } } }
在 Amazon ECS 上安裝 CloudWatch 代理程式
在 Amazon ECS 上部署 CloudWatch 代理程式最簡單的方式,便是以附屬方式執行代理程式,並在與您應用程式相同的任務定義中定義代理程式。
建立代理程式組態檔案
在本機建立您的 CloudWatch 代理程式組態檔案。在此範例中,相對檔案路徑將會是 amazon-cloudwatch-agent.json
。
如需代理程式組態的詳細資訊,請參閱手動建立或編輯 CloudWatch 代理程式組態檔案。
{ "logs": { "metrics_collected": { "emf": { } } } }
將組態推送至 SSM 參數存放區
輸入下列命令,將 CloudWatch 代理程式組態檔案推送至 AWS Systems Manager (SSM) 參數存放區。
aws ssm put-parameter \ --name "cwagentconfig" \ --type "String" \ --value "`cat amazon-cloudwatch-agent.json`" \ --region "{{region}}"
設定任務定義
設定您的任務定義,以使用 CloudWatch 代理程式並公開 TCP 或 UDP 連接埠。您應使用的範例任務定義取決於您的網路模式。
請注意,webapp
會指定 AWS_EMF_AGENT_ENDPOINT
環境變數。此環境變數會由程式庫使用,且應指向代理程式正在接聽的端點。此外,cwagent
會指定 CW_CONFIG_CONTENT
為 “valueFrom” 參數,其指向您在先前步驟中建立的 SSM 組態。
本節包含一個橋接模式的範例,以及一個託管模式或 awsvpc 模式的範例。如需如何在 Amazon ECS 上設定 CloudWatch 代理程式的詳細範例,請參閱 Github 範例儲存庫
以下是橋接模式的範例。啟用橋接模式聯網時,代理程式需要使用 links
參數連結至您的應用程式,並且必須使用容器名稱來定址。
{ "containerDefinitions": [ { "name": "webapp", "links": [ "cwagent" ], "image": "my-org/web-app:latest", "memory": 256, "cpu": 256, "environment": [{ "name": "AWS_EMF_AGENT_ENDPOINT", "value": "tcp://cwagent:25888" }], }, { "name": "cwagent", "mountPoints": [], "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "memory": 256, "cpu": 256, "portMappings": [{ "protocol": "tcp", "containerPort": 25888 }], "environment": [{ "name": "CW_CONFIG_CONTENT", "valueFrom": "cwagentconfig" }], } ], }
以下是託管模式或 awsvpc 模式的範例。在這些網路模式上執行時,代理程式可以透過 localhost
定址。
{ "containerDefinitions": [ { "name": "webapp", "image": "my-org/web-app:latest", "memory": 256, "cpu": 256, "environment": [{ "name": "AWS_EMF_AGENT_ENDPOINT", "value": "tcp://127.0.0.1:25888" }], }, { "name": "cwagent", "mountPoints": [], "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "memory": 256, "cpu": 256, "portMappings": [{ "protocol": "tcp", "containerPort": 25888 }], "environment": [{ "name": "CW_CONFIG_CONTENT", "valueFrom": "cwagentconfig" }], } ], }
注意
在 awsvpc 模式中,您必須給予 VPC 一個公有 IP 地址 (僅限 Fargate)、設定 NAT 閘道,或是設定 CloudWatch Logs VPC 端點。如需設定 NAT 的詳細資訊,請參閱 NAT 閘道。如需設定 CloudWatch Logs VPC 端點的詳細資訊,請參閱搭配介面 VPC 端點使用 CloudWatch Logs。
以下是如何將公有 IP 地址指派給使用 Fargate 啟動類型任務的範例。
aws ecs run-task \ --cluster {{cluster-name}} \ --task-definition cwagent-fargate \ --region {{region}} \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[{{subnetId}}],securityGroups=[{{sgId}}],assignPublicIp=ENABLED}"
確認許可
確認執行您任務的 IAM 角色具有從 SSM 參數存放區讀取的許可。您可以透過連接 AmazonSSMReadOnlyAccess 來新增此許可。若要執行此作業,請輸入以下命令。
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \ --role-name CWAgentECSExecutionRole
在 Amazon EKS 上安裝 CloudWatch 代理程式
如果您已經在此叢集上安裝了 CloudWatch Container Insights,則可以跳過此程序的某些部分。
許可
如果您尚未安裝 Container Insights,首先請先確認您的 Amazon EKS 節點具有適當的 IAM 許可。這些節點應該已連接了 CloudWatchAgentServerPolicy。如需詳細資訊,請參閱在 CloudWatch 中驗證 Container Insights 的先決條件。
建立 ConfigMap
為代理程式建立 ConfigMap。ConfigMap 也會告知代理程式在 TCP 或 UDP 連接埠上接聽。請使用以下 ConfigMap。
# cwagent-emf-configmap.yaml apiVersion: v1 data: # Any changes here must not break the JSON format cwagentconfig.json: | { "agent": { "omit_hostname": true }, "logs": { "metrics_collected": { "emf": { } } } } kind: ConfigMap metadata: name: cwagentemfconfig namespace: default
如果您已經安裝了 Container Insights,請將以下的 "emf": { }
行新增至您現有的 ConfigMap。
套用 ConfigMap
輸入以下命令來套用 ConfigMap。
kubectl apply -f cwagent-emf-configmap.yaml
部署代理程式
若要將 CloudWatch 代理程式作為附屬部署,請將代理程式新增至您的 pod 定義,如以下範例所示。
apiVersion: v1 kind: Pod metadata: name: myapp namespace: default spec: containers: # Your container definitions go here - name: web-app image: my-org/web-app:latest # CloudWatch Agent configuration - name: cloudwatch-agent image: public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest imagePullPolicy: Always resources: limits: cpu: 200m memory: 100Mi requests: cpu: 200m memory: 100Mi volumeMounts: - name: cwagentconfig mountPath: /etc/cwagentconfig ports: # this should match the port configured in the ConfigMap - protocol: TCP hostPort: 25888 containerPort: 25888 volumes: - name: cwagentconfig configMap: name: cwagentemfconfig
使用 CloudWatch 代理程式傳送內嵌指標格式日誌
在您安裝 CloudWatch 代理程式並執行 後,您便可以透過 TCP 或 UDP 傳送內嵌指標格式日誌。透過代理程式傳送日誌時有兩個需求:
-
日誌必須包含
LogGroupName
索引鍵,告知代理程式要使用的日誌群組。 -
每個日誌事件都必須在單獨的一行上。換句話說,日誌事件不能包含換行 (\n) 字元。
日誌事件也必須遵循內嵌指標格式規格。如需詳細資訊,請參閱規格:內嵌指標格式。
如果您打算在使用內嵌指標格式建立的指標上建立警示,請參閱在以內嵌指標格式建立的指標上設定警示以取得相關建議。
以下是從 Linux bash shell 手動傳送日誌事件的範例。您可以改為使用您所選擇程式設計語言提供的 UDP 通訊端介面。
echo '{"_aws":{"Timestamp":1574109732004,"LogGroupName":"Foo","CloudWatchMetrics":[{"Namespace":"MyApp","Dimensions":[["Operation"]],"Metrics":[{"Name":"ProcessingLatency","Unit":"Milliseconds","StorageResolution":60}]}]},"Operation":"Aggregator","ProcessingLatency":100}' \ > /dev/udp/0.0.0.0/25888
注意
借助內嵌指標格式,您可以透過在您帳戶的 AWS/Logs
命名空間中發佈的指標追蹤 EMF 日誌的處理進度。這些指標可用於追蹤從 EMF 產生指標失敗的情形,以及失敗是否因剖析或驗證造成。如需詳細資訊,請參閱使用 CloudWatch 指標進行監控。