本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Kubernetes 平台上啟用應用程式訊號
若要啟用 Amazon 以外的 Kubernetes 系統上執行的應用程式EKS,請遵循本節中的指示。Application Signals 支援 Java、Python 和 .NET 應用程式。
需求
您在要啟用 Application Signals 的 Kubernetes 叢集上具有管理員許可。
您必須在執行 Kubernetes 叢集的環境中 AWS CLI 安裝 。如需安裝 的詳細資訊 AWS CLI,請參閱安裝或更新最新版本的 AWS CLI。
步驟 1:在您的帳戶中啟用 Application Signals
如果尚未在此帳戶中啟用 Application Signals,則必須授予 Application Signals 所需的許可,以探索您的服務。為此,請執行下列操作。您的帳戶只需執行一次此操作。
為您的應用程式啟用 Application Signals
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽窗格中,選擇服務。
選擇開始探索您的服務。
選取核取方塊,然後選擇開始探索您的服務。
當您第一次在帳戶中完成此步驟時,Application Signals 會建立AWSServiceRoleForCloudWatchApplicationSignals服務連結角色。此角色會授予 Application Signals 下列許可:
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
如需有關此角色的詳細資訊,請參閱 CloudWatch Application Signals 的服務連結角色許可。
-
步驟 2:在您的叢集中安裝 CloudWatch 代理程式運算子
安裝 CloudWatch 代理程式運算子會將運算子、 CloudWatch 代理程式和其他自動儀器安裝到您的叢集。若要執行此作業,請輸入以下命令。Replace (取代) $REGION
您的 AWS 區域。Replace (取代) $YOUR_CLUSTER_NAME
您想要在 Application Signals 儀表板中顯示叢集的名稱。
helm repo add aws-observability https://aws-observability.github.io/helm-charts helm install amazon-cloudwatch-operator aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch --create-namespace \ --set region=
$REGION
\ --set clusterName=$YOUR_CLUSTER_NAME
如需詳細資訊,請參閱 amazon-cloudwatch-observability
步驟 3:為您的 Kubernetes 叢集設定 AWS 憑證
重要
如果您的 Kubernetes 叢集託管在 Amazon 上EC2,您可以略過本節並繼續 步驟 4:新增註釋。
如果您的 Kubernetes 叢集是內部部署託管,您必須使用本節中的指示,將 AWS 憑證新增至 Kubernetes 環境。
設定內部部署 Kubernetes 叢集的許可
建立要用來提供許可給內部部署主機IAM的使用者:
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 選擇使用者 ,建立使用者 。
在使用者詳細資訊 中,針對使用者名稱 輸入新IAM使用者的名稱。這是用於驗證主機 AWS 的登入名稱。然後選擇 Next (下一步)
在設定許可頁面的許可選項 下,選取直接連接政策 。
從許可政策清單中,選取要新增至使用者CloudWatchAgentServerPolicy的政策。然後選擇下一步。
在檢閱和建立頁面上,請確定您對使用者名稱感到滿意,且CloudWatchAgentServerPolicy政策位於許可摘要 中。
選擇建立使用者
建立和擷取您的 AWS 存取金鑰和私密金鑰:
在IAM主控台的導覽窗格中,選擇使用者,然後選擇您在上一個步驟中建立的使用者名稱。
在使用者頁面上,選擇安全憑證索引標籤。然後,在存取金鑰區段中,選擇建立存取金鑰 。
針對建立存取金鑰步驟 1,選擇命令列介面 (CLI)。
對於建立存取金鑰步驟 2,選擇性地輸入標籤,然後選擇下一步。
針對建立存取金鑰步驟 3,選取下載 .csv 檔案,以儲存具有IAM使用者存取金鑰和秘密存取金鑰的 .csv 檔案。您需要此資訊才能進行後續步驟。
選擇完成。
輸入下列命令,在內部部署主機中設定您的 AWS 憑證。Replace (取代)
ACCESS_KEY_ID
以及SECRET_ACCESS_ID
使用您在上一個步驟中下載的 .csv 檔案中新產生的存取金鑰和秘密存取金鑰。根據預設,憑證檔案會儲存在/home/
user
/.aws/credentials.$ aws configure --profile AmazonCloudWatchAgent AWS Access Key ID [None]:
ACCESS_KEY_ID
AWS Secret Access Key [None]:SECRET_ACCESS_ID
Default region name [None]:MY_REGION
Default output format [None]: json編輯 CloudWatch 客服人員使用 Helm Chart 安裝的自訂資源,以新增新建立的 AWS 憑證秘密。
kubectl edit amazoncloudwatchagent cloudwatch-agent -n amazon-cloudwatch
當檔案編輯器開啟時,將下列組態新增至部署頂端,將 AWS 憑證掛載到 CloudWatch 代理程式容器中。將路徑取代
/home/
為本機 AWS 憑證檔案的位置。user
/.aws/credentialsapiVersion: cloudwatch.aws.amazon.com/v1alpha1 kind: AmazonCloudWatchAgent metadata: name: cloudwatch-agent namespace: amazon-cloudwatch spec: volumeMounts: - mountPath: /rootfs volumeMounts: - name: aws-credentials mountPath: /root/.aws readOnly: true volumes: - hostPath: path: /home/
user
/.aws/credentials name: aws-credentials ---
步驟 4:新增註釋
下一個步驟是透過將語言特定的註釋
新增 Application Signals 的註釋
-
有兩個注釋選項:
註釋工作負載會自動執行叢集中的單一工作負載。
標註命名空間會自動檢測所選命名空間中部署的所有工作負載。
選擇其中一個選項,然後遵循適當的步驟。
若要註釋單一工作負載,請輸入下列其中一個命令。Replace (取代)
$WORKLOAD_TYPE
以及$WORKLOAD_NAME
工作負載的值。對於 Java 工作負載:
kubectl patch
$WORKLOAD_TYPE
$WORKLOAD_NAME
-p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-java": "true"}}}}}'對於 Python 工作負載:
kubectl patch
$WORKLOAD_TYPE
$WORKLOAD_NAME
-p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-python": "true"}}}}}'對於 Python 應用程式,還有其他必要的組態。如需詳細資訊,請參閱啟用 Application Signals 後,Python 應用程式不會啟動。
對於 .NET 工作負載:
kubectl patch
$WORKLOAD_TYPE
$WORKLOAD_NAME
-p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-dotnet": "true"}}}}}'注意
若要在以 Alpine Linux (
linux-musl-x64
) 為基礎的映像上為 .NET 工作負載啟用 Application Signals,請新增下列額外註釋。instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: "linux-musl-x64"
對於 Node.js 工作負載:
kubectl patch
$WORKLOAD_TYPE
$WORKLOAD_NAME
-p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-nodejs": "true"}}}}}'
-
若要註釋命名空間中的所有工作負載,請輸入下列其中一個命令。Replace (取代)
$NAMESPACE
使用命名空間的名稱。如果命名空間包含 Java、Python 和 。NET 工作負載,請將所有註釋新增至命名空間。
對於命名空間中的 Java 工作負載:
kubectl annotate ns
$NAMESPACE
instrumentation.opentelemetry.io/inject-java=true對於命名空間中的 Python 工作負載:
kubectl annotate ns
$NAMESPACE
instrumentation.opentelemetry.io/inject-python=true對於 Python 應用程式,還有其他必要的組態。如需詳細資訊,請參閱啟用 Application Signals 後,Python 應用程式不會啟動。
-
對於命名空間中的 .NET 工作負載:
kubectl annotate ns
$NAMESPACE
instrumentation.opentelemetry.io/inject-dotnet=true -
對於命名空間中的 Node.js 工作負載:
kubectl annotate ns
$NAMESPACE
instrumentation.opentelemetry.io/inject-nodejs=true
新增註釋後,輸入下列命令,重新啟動命名空間中的所有 Pod:
kubectl rollout restart
完成上述步驟後,在 CloudWatch 主控台中選擇 Application Signals 、 Services 。這會開啟儀表板,您可以在其中查看 Application Signals 收集的資料。可能需要幾分鐘的時間才會顯示資料。
如需服務檢視的詳細資訊,請參閱 使用 Application Signals 監控應用程式的運作狀態。
使用ESM模組格式設定 Node.js 應用程式
我們提供ESM模組格式的 Node.js 應用程式有限支援。如需詳細資訊,請參閱 使用 的 Node.js 的已知限制 ESM。
對於ESM模組格式,透過註釋資訊清單檔案來啟用 Application Signals 是無效的。略過先前的程序,改為執行下列動作:
使用 為 Node.js 應用程式啟用 Application Signals ESM
將相關的相依性安裝到您的 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 it 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 應用程式部署至 Kubernetes 叢集。