本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon EKS 叢集上啟用 Application Signals
CloudWatch Application Signals 支援 Java、Python、Node.js 和 .NET 應用程式。若要為現有 Amazon EKS 叢集上的應用程式啟用 Application Signals,您可以使用 AWS 管理主控台 AWS CDK或 CloudWatch Observability 附加元件自動監控進階組態。
主題
透過主控台在 Amazon EKS 叢集上啟用 Application Signals
若要在現有 Amazon EKS 叢集上為應用程式啟用 CloudWatch Application Signals,請依循本節中的說明操作。
重要
如果您已經在搭配使用 OpenTelemetry 與您想要為 Application Signals 啟用的應用程式,請在啟用 Application Signals 之前參閱 支援的系統。
在現有 Amazon EKS 叢集上為您的應用程式啟用 Application Signals
注意
如果尚未啟用 Application Signals,請遵循 在您的帳戶中啟用 Application Signals 中的說明,然後完成下列程序。
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 選擇 Application Signals。
針對指定平台,選擇 EKS。
針對選取 EKS 叢集,選取要啟用 Application Signals 的叢集。
如果此叢集尚未啟用 Amazon CloudWatch Observability EKS 附加元件,系統會提示您啟用它。在此情況下,請執行下列操作:
選擇新增 CloudWatch Observability EKS 附加元件。Amazon EKS 主控台會出現。
選取 Amazon CloudWatch Observability 的核取方塊,然後選擇下一步。
CloudWatch Observability EKS 附加元件會啟用 Application Signals 和 CloudWatch Container Insights,搭配 Amazon EKS 的增強可觀測性。如需更多 Container Insights 的相關資訊,請參閱 Container Insights。
選取最新版本的附加元件進行安裝。
選取要用於附加元件的 IAM 角色。如果選擇從節點繼承,請將正確的許可附接至工作節點使用的 IAM 角色。使用 Kubernetes 工作節點使用的 IAM 角色,來取代
my-worker-node-role。aws iam attach-role-policy \ --role-namemy-worker-node-role\ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --policy-arn arn:aws:iam::aws:policy/AWSXRayWriteOnlyAccess如果想要建立服務角色以使用附加元件,請參閱 使用 Amazon CloudWatch 可觀測性 EKS 附加元件或 Helm Chart 安裝 CloudWatch 代理程式 Amazon CloudWatch 。
選擇下一步,確認畫面上的資訊,然後選擇建立。
在下一個畫面中,選擇啟用 CloudWatch Application Signals 以返回 CloudWatch 主控台並完成此程序。
-
為 Application Signals 啟用應用程式的方法有兩種。為保持一致性,建議您為每個叢集選擇一個選項。
主控台選項更簡單。使用此方法會導致您的 Pod 即刻重新啟動。
透過註釋資訊清單檔案方法,您可以進一步控制 Pod 重新啟動的時間,如果不想集中管控,還能以更分散的方式管理監控。
注意
如果使用 ESM 為 Node.js 應用程式啟用 Application Signals,請跳至 設定採用 ESM 模組格式的 Node.js 應用程式。
選擇完成後檢視服務。這會帶您前往 Application Signals Services 檢視,您可以在其中查看 Application Signals 正在收集的資料。可能需要幾分鐘的時間才會顯示資料。
若要在其他 Amazon EKS 叢集中啟用 Application Signals,請從服務畫面中選擇啟用 Application Signals。
如需服務檢視的詳細資訊,請參閱 使用 Application Signals 監控應用程式的運作狀態。
注意
如果為 Python 應用程式使用 WSGI 伺服器,請參閱 使用 WSGI 伺服器的 Python 應用程式沒有 Application Signals 資料 以取得有關使 Application Signals 正常運作的資訊。
我們還發現其他需留意事項,當您為 Application Signals 啟用 Python 應用程式時,應謹記於心。如需詳細資訊,請參閱啟用 Application Signals 後,Python 應用程式無法啟動。
設定採用 ESM 模組格式的 Node.js 應用程式
對於採用 ESM 模組格式的 Node.js 應用程式,我們提供有限支援。如需詳細資訊,請參閱Node.js 搭配使用 ESM 的已知限制。
對於 ESM 模組格式,無法透過主控台或透過標註資訊清單檔案來啟用 Application Signals。略過先前程序的步驟 8,然後改為執行下列動作。
為採用 ESM 的 Node.js 應用程式啟用 Application Signals
將相關的相依項安裝到 Node.js 應用程式以進行自動檢測:
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0將下列環境變數新增至應用程式的 Dockerfile,然後建置映像。
... ENV OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true ENV OTEL_TRACES_SAMPLER_ARG='endpoint=http://cloudwatch-agent.amazon-cloudwatch:2000' ENV OTEL_TRACES_SAMPLER='xray' ENV OTEL_EXPORTER_OTLP_PROTOCOL='http/protobuf' ENV OTEL_EXPORTER_OTLP_TRACES_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/traces' ENV OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/metrics' ENV OTEL_METRICS_EXPORTER='none' ENV OTEL_LOGS_EXPORTER='none' ENV NODE_OPTIONS='--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs' ENV OTEL_SERVICE_NAME='YOUR_SERVICE_NAME' #replace with a proper service name ENV OTEL_PROPAGATORS='tracecontext,baggage,b3,xray' ... # command to start the application # for example # CMD ["node", "index.mjs"]將環境變數
OTEL_RESOURCE_ATTRIBUTES_POD_NAME、OTEL_RESOURCE_ATTRIBUTES_NODE_NAME、OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME、POD_NAMESPACE和OTEL_RESOURCE_ATTRIBUTES新增至應用程式的部署 yaml 檔案。例如:apiVersion: apps/v1 kind: Deployment metadata: name: nodejs-app labels: app: nodejs-app spec: replicas: 2 selector: matchLabels: app: nodejs-app template: metadata: labels: app: nodejs-app # annotations: # make sure this annotation doesn't exit # instrumentation.opentelemetry.io/inject-nodejs: 'true' spec: containers: - name: nodejs-app image:your-nodejs-application-image#replace with a proper image uri imagePullPolicy: Always ports: - containerPort: 8000 env: - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME valueFrom: fieldRef: fieldPath: metadata.labels['app'] # Assuming 'app' label is set to the deployment name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: OTEL_RESOURCE_ATTRIBUTES value: "k8s.deployment.name=$(OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME),k8s.namespace.name=$(POD_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)"將 Node.js 應用程式部署至叢集。
在 Amazon EKS 上啟用應用程式後,即可監控應用程式的運作狀態。如需詳細資訊,請參閱使用 Application Signals 監控應用程式的運作狀態。
使用 CloudWatch Observability 附加元件進階組態在 Amazon EKS 叢集上啟用 Application Signals
根據預設,安裝 CloudWatch 可觀測性 EKS 附加元件 (V5.0.0 或更高版本) 或 Helm Chart 時,透過 Application Signals 啟用 OpenTelemetry (OTEL) 型應用程式效能監控 (APM)。您可以使用 Amazon EKS 附加元件的進階組態或使用 Helm Chart 覆寫值,進一步自訂具體設定。
注意
如果您使用任何 OpenTelemetry (OTEL) 型 APM 解決方案,啟用 Application Signals 會影響現有的可觀測性設定。在繼續之前,請先檢閱您目前的實作。若要在升級至 V5.0.0 或更新版本後維護現有的 APM 設定,請參閱 選擇不接收 Application Signals。
CloudWatch Observability 附加元件還提供更細緻的控制選項,可視需要在新的進階組態中包含或排除特定服務。如需詳細資訊,請參閱 透過 Amazon EKS 叢集的 Application Signals 啟用 APM。
使用 在 Amazon EKS 上啟用 Application Signals AWS CDK
如果尚未在此帳戶中啟用 Application Signals,則必須授予 Application Signals 所需的許可,以探索您的服務。請參閱 在您的帳戶中啟用 Application Signals。
為您的應用程式啟用 Application Signals。
import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );Discovery CloudFormation 資源將授與 Application Signals 下列許可:
-
xray:GetServiceGraph -
logs:StartQuery -
logs:GetQueryResults -
cloudwatch:GetMetricData -
cloudwatch:ListMetrics -
tag:GetResources
如需有關此角色的詳細資訊,請參閱 CloudWatch Application Signals 的服務連結角色許可。
-
安裝
amazon-cloudwatch-observability附加元件。使用與叢集關聯的
CloudWatchAgentServerPolicy和 OIDC 建立 IAM 角色。const cloudwatchRole = new Role(this, 'CloudWatchAgentAddOnRole', { assumedBy: new OpenIdConnectPrincipal(cluster.openIdConnectProvider), managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('CloudWatchAgentServerPolicy')], });
使用上面建立的 IAM 角色安裝附加元件。
new CfnAddon(this, 'CloudWatchAddon', { addonName: 'amazon-cloudwatch-observability', clusterName: cluster.clusterName, serviceAccountRoleArn: cloudwatchRole.roleArn });將下列其中一項新增至工作負載資訊清單檔案的
PodTemplate區段。Language 檔案 Java
instrumentation.opentelemetry.io/inject-java: "true"
Python
instrumentation.opentelemetry.io/inject-python: "true"
.Net
instrumentation.opentelemetry.io/inject-dotnet: "true"
Node.js
instrumentation.opentelemetry.io/inject-nodejs: "true"
const deployment = { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "sample-app" }, spec: { replicas: 3, selector: { matchLabels: { "app": "sample-app" } }, template: { metadata: { labels: { "app": "sample-app" }, annotations: { "instrumentation.opentelemetry.io/inject-$LANG": "true" } }, spec: {...}, }, }, }; cluster.addManifest('sample-app', deployment)
使用模型內容通訊協定 (MCP) 在 Amazon EKS 上啟用應用程式訊號
您可以使用 CloudWatch Application Signals Model Context Protocol (MCP) 伺服器,透過對話式 AI 互動在 Amazon EKS 叢集上啟用 Application Signals。這提供用於設定 Application Signals 監控的自然語言界面。
MCP 伺服器會了解您的需求並產生適當的組態,以自動化啟用程序。您可以直接描述要啟用的內容,而不是手動遵循主控台步驟或撰寫 CDK 程式碼。
先決條件
使用 MCP 伺服器啟用 Application Signals 之前,請確定您已:
支援 MCP 的開發環境 (例如 Kiro、Claude Desktop、VSCode 搭配 MCP 延伸模組或其他 MCP 相容工具)
在您的 IDE 中設定的 CloudWatch Application Signals MCP 伺服器。如需詳細設定說明,請參閱 CloudWatch Application Signals MCP Server 文件
。
使用 MCP 伺服器
在 IDE 中設定 CloudWatch Application Signals MCP 伺服器後,您可以使用自然語言提示請求啟用指引。雖然編碼助理可以從專案結構推斷內容,但在提示中提供特定詳細資訊有助於確保更準確和相關的指導。包含資訊,例如您的應用程式語言、Amazon EKS 叢集名稱,以及基礎設施和應用程式程式碼的絕對路徑。
最佳實務提示 (特定且完整):
"Enable Application Signals for my Python service running on EKS. My app code is in /home/user/flask-api and IaC is in /home/user/flask-api/terraform" "I want to add observability to my Node.js application on EKS cluster 'production-cluster'. The application code is at /Users/dev/checkout-service and the Kubernetes manifests are at /Users/dev/checkout-service/k8s" "Help me instrument my Java Spring Boot application on EKS with Application Signals. Application directory: /opt/apps/payment-api CDK infrastructure: /opt/apps/payment-api/cdk"
效率較低的提示:
"Enable monitoring for my app" → Missing: platform, language, paths "Enable Application Signals. My code is in ./src and IaC is in ./infrastructure" → Problem: Relative paths instead of absolute paths "Enable Application Signals for my EKS service at /home/user/myapp" → Missing: programming language
快速範本:
"Enable Application Signals for my [LANGUAGE] service on EKS. App code: [ABSOLUTE_PATH_TO_APP] IaC code: [ABSOLUTE_PATH_TO_IAC]"
使用 MCP 伺服器的優點
使用 CloudWatch Application Signals MCP 伺服器有幾個優點:
自然語言界面:描述您想要啟用的內容,而不記住命令或組態語法
內容感知指引:MCP 伺服器了解您的特定環境,並提供量身打造的建議
減少錯誤:自動化組態產生可將手動輸入錯誤降至最低
更快速的設定:更快速地從意圖到實作
學習工具:查看產生的組態並了解 Application Signals 的運作方式
如需有關設定和使用 CloudWatch Application Signals MCP 伺服器的詳細資訊,請參閱 MCP 伺服器文件