Habilitación de Application Signals en los clústeres de Amazon EKS
CloudWatch Application Signals es compatible con las aplicaciones Java, Python, Node.js y .NET. Para habilitar Application Signals en sus aplicaciones en un clúster existente de Amazon EKS, puede utilizar AWS Management Console, AWS CDK o la configuración avanzada de Auto monitor del complemento de observabilidad de CloudWatch.
Temas
Habilitación de Application Signals en un clúster de Amazon EKS con la consola
Para habilitar CloudWatch Application Signals en las aplicaciones de un clúster de Amazon EKS existente, siga las instrucciones de esta sección.
importante
Si ya utiliza OpenTelemetry con una aplicación que pretende habilitar para Application Signals, consulte Compatibilidad con OpenTelemetry antes de activar Application Signals.
Para habilitar Application Signals para aplicaciones en un clúster de Amazon EKS existente
nota
Si aún no ha habilitado Application Signals, siga las instrucciones que se indican en Habilitación de Application Signals en su cuenta y siga el procedimiento que se indica a continuación.
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. Seleccione Application Signals.
En Especificar plataforma, elija EKS.
En Seleccionar un clúster EKS, seleccione el clúster en el que desee habilitar Application Signals.
Si este clúster aún no tiene habilitado el complemento Observabilidad de Amazon CloudWatch en EKS, se le solicitará que lo habilite. En este caso, realice lo siguiente:
Seleccione Añadir el complemento de observabilidad CloudWatch de EKS. Aparece la consola de Amazon EKS.
Seleccione la casilla Observabilidad de Amazon CloudWatch y elija Siguiente.
El complemento CloudWatch Observability de EKS brinda tanto a Application Signals como a Información de contenedores de CloudWatch capacidad de observabilidad mejorada para Amazon EKS. Para obtener más información sobre Información de contenedores, consulte Información de contenedores.
Seleccione la versión más reciente del complemento para instalar.
Seleccione un rol de IAM para usarlo en el complemento. Si elige Heredar del nodo, asocie los permisos correctos al rol de IAM utilizado por los nodos de trabajo. Sustituya
my-worker-node-role
por el rol de IAM que utilizan sus nodos de trabajo de Kubernetes.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/AWSXRayWriteOnlyAccessSi desea crear un rol de servicio para utilizar el complemento, consulteInstalación del agente de CloudWatch con el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm.
Seleccione Siguiente, confirme la información de la pantalla y seleccione Crear.
En la siguiente pantalla, seleccione Habilitar CloudWatch Application Signals para volver a la consola de CloudWatch y finalizar el proceso.
-
Hay dos opciones para habilitar sus aplicaciones para Application Signals. Para mantener la coherencia, recomendamos elegir una opción por clúster.
La opción de consola es más sencilla. El uso de este método hace que los pods se reinicien inmediatamente.
El método Annotate Manifest File le brinda más control sobre cuándo se reinician sus pods y también puede ayudarlo a administrar su supervisión de una manera más descentralizada si no desea centralizarlo.
nota
Si desea habilitar Application Signals para una aplicación Node.js con ESM, consulte Configuración de una aplicación Node.js con el formato de módulo ESM.
Elija Ver servicios cuando haya terminado. Esto lo llevará a la vista de los servicios de Application Signals, donde podrá ver los datos que Application Signals recopila. Es posible que se tarde unos minutos en mostrar los datos.
Para habilitar Application Signals en otro clúster de Amazon EKS, seleccione Habilitar Application Signals en la pantalla Servicios.
Para obtener más información sobre la vista de los Servicios, consulte Monitoreo del estado operativo de sus aplicaciones con Application Signals.
nota
Si utiliza un servidor WSGI para su aplicación de Python, consulte No hay datos de Application Signals para la aplicación de Python que usa un servidor WSGI para obtener información sobre cómo hacer que Application Signals funcione.
También hemos identificado otras consideraciones que debe tener en cuenta al habilitar las aplicaciones de Python para Application Signals. Para obtener más información, consulte La aplicación Python no se inicia después de activar Application Signals.
Configuración de una aplicación Node.js con el formato de módulo ESM
La compatibilidad ofrecida para las aplicaciones Node.js con el formato de módulo ESM es limitada. Para obtener más información, consulte Limitaciones conocidas de Node.js con ESM.
Para el formato de módulo ESM, no es posible habilitar Application Signals a través de la consola ni anotando el archivo de manifiesto. Omita el paso 8 del procedimiento anterior y siga estos pasos:
Para habilitar Application Signals para una aplicación Node.js con ESM
Instale en su aplicación Node.js las dependencias pertinentes para la autoinstrumentación:
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
Agregue las siguientes variables de entorno al archivo Dockerfile de su aplicación y cree la imagen.
... 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"]Agregue las variables de entorno
OTEL_RESOURCE_ATTRIBUTES_POD_NAME
,OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
,OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME
,POD_NAMESPACE
yOTEL_RESOURCE_ATTRIBUTES
al archivo de implementación yaml de la aplicación. Por ejemplo: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)"Implemente la aplicación Node.js en el clúster.
Una vez que haya habilitado sus aplicaciones en los clústeres de Amazon EKS, podrá supervisar el estado de las mismas. Para obtener más información, consulte Monitoreo del estado operativo de sus aplicaciones con Application Signals.
Habilitación de Application Signals en un clúster de Amazon EKS mediante la configuración avanzada del complemento de observabilidad de CloudWatch
A partir de la versión v4.0.0-eksbuild.1 del complemento de observabilidad de CloudWatch para Amazon EKS, puede habilitar automáticamente Application Signals para todas las cargas de trabajo de los servicios en sus clústeres de EKS mediante un nuevo indicador de configuración centralizado Auto monitor en la configuración avanzada del complemento.
Para elegir la característica Auto monitor, debe modificar la configuración avanzada al crear o actualizar el complemento o el gráfico de Helm. Al establecer monitorAllServices
como true, el complemento de observabilidad de CloudWatch detectará todas las cargas de trabajo del servicio de Kubernetes e intentará inyectar automáticamente los SDK de AWS Distro para OpenTelemetry (ADOT) durante la implementación. Además, al habilitar restartPods
, se reiniciarán todos los pods de carga de trabajo del servicio para inyectar inmediatamente los SDK de ADOT como parte de un proceso de reimplementación automatizado.
--configuration-values '{ "manager":{ "applicationSignals":{ "autoMonitor":{ "monitorAllServices":true, "restartPods":true } } } }'
El complemento de observabilidad de CloudWatch también proporciona un control adicional más preciso para incluir o excluir servicios específicos según sea necesario en la nueva configuración avanzada. Para obtener más información, consulte Configuración de Application Signals para su clúster de Amazon EKS .
Habilitación de Application Signals en Amazon EKS con el AWS CDK
Si aún no ha activado Application Signals en esta cuenta, debe conceder a Application Signals los permisos que necesita para detectar los servicios. Consulte Habilitación de Application Signals en su cuenta.
Habilite Application Signals para sus aplicaciones
import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );
El recurso Discovery de CloudFormation otorga a Application Signals los siguientes permisos:
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
Para obtener más información acerca de este rol, consulte Permisos de roles vinculados a un servicio para CloudWatch Application Signals.
-
Instale el complemento
amazon-cloudwatch-observability
.Cree un rol de IAM con la
CloudWatchAgentServerPolicy
y el OIDC asociado al clúster.const cloudwatchRole = new Role(this, 'CloudWatchAgentAddOnRole', { assumedBy: new OpenIdConnectPrincipal(cluster.openIdConnectProvider), managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('CloudWatchAgentServerPolicy')], });
Instale el complemento con el rol de IAM creado anteriormente.
new CfnAddon(this, 'CloudWatchAddon', { addonName: 'amazon-cloudwatch-observability', clusterName: cluster.clusterName, serviceAccountRoleArn: cloudwatchRole.roleArn });
Añada una de las siguientes opciones en la sección
PodTemplate
del archivo de manifiesto de carga de trabajo.Idioma Archivos 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)