本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用您的服務,在 Amazon EKS 叢集上啟用 Application Signals
若要在現有 Amazon EKS 叢集上的應用程式上啟用 CloudWatch Application Signals,請使用本節中的指示。
重要
如果您已經在搭配使用 OpenTelemetry 與您想要為 Application Signals 啟用的應用程式,請在啟用 Application Signals 之前參閱 OpenTelemetry 相容性。
在現有 Amazon EKS 叢集上為您的應用程式啟用 Application Signals
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 在導覽窗格中,選擇服務。
如果尚未在此帳戶中啟用 Application Signals,則必須授予 Application Signals 所需的許可,以探索您的服務。為此,請執行下列操作。您的帳戶只需執行一次此操作。
選擇開始探索您的服務。
選取核取方塊,然後選擇開始探索服務。
第一次在您的帳戶中完成此步驟會建立 AWSServiceRoleForCloudWatchApplicationSignals 服務連結角色。此角色會授予 Application Signals 下列許可:
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
如需有關此角色的詳細資訊,請參閱 CloudWatch Application Signals 的服務連結角色許可。
-
選擇啟用 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-name
my-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 立即重新啟動。
Annotate Manifest File 方法可讓您更妥善地控制 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 應用程式有限支援。如需詳細資訊,請參閱 使用 ESM 的 Node.js 已知限制。
對於 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_DEPLOYMENT_NAME
、OTEL_RESOURCE_ATTRIBUTES_NODE_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 應用程式部署到叢集。