Habilitar aplicações em clusters do Amazon EKS
O CloudWatch Application Signals é compatível com aplicações desenvolvidas em Java, Python, Node.js e .NET. Para habilitar o Application Signals para suas aplicações em um cluster do Amazon EKS existente, você pode usar o AWS Management Console, o AWS CDK, ou a configuração avançada, chamada Monitoramento automático, do complemento de observabilidade do CloudWatch.
Tópicos
Habilitar o Application Signals em um cluster do Amazon EKS usando o console
Para habilitar o CloudWatch Application Signals nas aplicações em um cluster do Amazon EKS existente, use as instruções apresentadas nesta seção.
Importante
Se você já estiver usando o OpenTelemetry com uma aplicação para a qual pretende habilitar o Application Signals, consulte Compatibilidade com o OpenTelemetry antes de habilitar o Application Signals.
Como habilitar o Application Signals para suas aplicações em um cluster do Amazon EKS existente
nota
Se você ainda não tiver habilitado o Application Signals, siga as instruções em Habilitar o Application Signals na conta e, em seguida, siga o procedimento abaixo.
Abra o console do CloudWatch, em https://console.aws.amazon.com/cloudwatch/
. Escolha Application Signals.
Em Especificar plataforma, escolha EKS.
Em Selecionar um cluster do EKS, selecione o cluster no qual você deseja habilitar o Application Signals.
Se esse cluster ainda não tiver o complemento Amazon CloudWatch Observability do EKS habilitado, você será solicitado a habilitá-lo. Se for esse o caso, faça o seguinte:
Escolha Adicionar o complemento CloudWatch Observability do EKS. O console do Amazon EKS será exibido.
Marque a caixa de seleção para Amazon CloudWatch Observability e escolha Próximo.
O complemento CloudWatch Observability do EKS habilita o Application Signals e o CloudWatch Container Insights com observabilidade aprimorada para o Amazon EKS. Para obter mais informações sobre o Container Insights, consulte Container Insights.
Selecione a versão mais recente do complemento para a instalação.
Selecione um perfil do IAM para usar com o complemento. Se você escolher Herdar do nó, anexe as permissões adequadas ao perfil do IAM usado pelos nós de processamento. Substitua
my-worker-node-role
pelo perfil do IAM usado por seus nós de processamento do 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/AWSXRayWriteOnlyAccessCaso deseje criar um perfil de serviço para usar o complemento, consulte Instalação do agente do CloudWatch com o complemento de observabilidade do EKS do Amazon CloudWatch ou com o chart do Helm.
Escolha Próximo, confirme as informações na tela e escolha Criar.
Na próxima tela, escolha Habilitar o CloudWatch Application Signals para retornar ao console do CloudWatch e finalizar o processo.
-
Existem duas opções para habilitar as aplicações para o Application Signals. Para manter a consistência, recomendamos que você escolha uma opção por cluster.
A opção Console é mais simples. O uso desse método resulta na reinicialização imediata dos seus pods.
O método Anotar o arquivo de manifesto oferece mais controle sobre quando os pods serão reiniciados e também pode ajudar no gerenciamento do monitoramento de uma forma mais descentralizada se você não desejar centralizá-lo.
nota
Se você estiver habilitando o Application Signals para uma aplicação do Node.js com ESM, avance para a seção Configuração de uma aplicação do Node.js usando o formato de módulo ESM.
Escolha Visualizar os serviços na conclusão. Isso direciona você para a visualização dos serviços do Application Signals, um local no qual você pode consultar os dados que o Application Signals está coletando. Pode demorar alguns minutos para que os dados sejam exibidos.
Para habilitar o Application Signals em outro cluster do Amazon EKS, escolha Habilitar o Application Signals usando a tela Serviços.
Para obter mais informações sobre a visualização dos Serviços, consulte Monitorar a integridade operacional das suas aplicações com o Application Signals.
nota
Se você estiver usando um servidor WSGI para a aplicação em Python, consulte Não há dados do Application Signals para aplicações em Python que usam um servidor WSGI para obter informações sobre como fazer o Application Signals funcionar.
Além disso, identificamos outras considerações que você deve considerar ao habilitar aplicações em Python para o Application Signals. Para obter mais informações, consulte A aplicação em Python não é iniciada após a habilitação do Application Signals.
Configuração de uma aplicação do Node.js usando o formato de módulo ESM
Fornecemos suporte limitado para aplicações do Node.js com o formato de módulo ESM. Para obter detalhes, consulte Limitações conhecidas sobre o uso de ESM com o Node.js.
No formato de módulo ESM, a habilitação do Application Signals por meio do console ou ao usar a anotação do arquivo manifesto não funciona corretamente. Ignore a etapa 8 do procedimento anterior e, em vez disso, execute as ações apresentadas a seguir.
Para habilitar o Application Signals em uma aplicação do Node.js com o ESM
Instale as dependências relevantes para a instrumentação automática na aplicação do Node.js:
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
Adicione as variáveis de ambiente, apresentadas a seguir, ao Dockerfile da aplicação e crie a imagem.
... 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"]Adicione as variáveis de ambiente
OTEL_RESOURCE_ATTRIBUTES_POD_NAME
,OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
,OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME
,POD_NAMESPACE
eOTEL_RESOURCE_ATTRIBUTES
ao arquivo de implantação no formato YAML da aplicação. Por exemplo: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)"Realize a implantação da aplicação do Node.js no cluster.
Depois de habilitar as aplicações em clusters do Amazon EKS, você pode monitorar a integridade da aplicação. Para obter mais informações, consulte Monitorar a integridade operacional das suas aplicações com o Application Signals.
Habilitação do Application Signals em um cluster do Amazon EKS usando a configuração avançada do complemento de observabilidade do CloudWatch
A partir da versão v4.0.0-eksbuild.1 do complemento de observabilidade do Amazon EKS do CloudWatch, é possível habilitar automaticamente o Application Signals para todas as workloads de serviço em seus clusters do EKS, usando uma nova sinalização centralizada de configuração, chamada Monitoramento automático, nas configurações avançadas do complemento.
Para usar o recurso Monitoramento automático, é necessário modificar a configuração avançada ao criar ou ao atualizar o complemento ou o chart do Helm. Com monitorAllServices
definido como “true”, o complemento de observabilidade do CloudWatch detectará todas as workloads de serviços do Kubernetes e tentará injetar automaticamente os SDKs do AWS Distro para OpenTelemetry (ADOT) no momento da implantação. Além disso, ao habilitar restartPods
, todos os pods das workloads de serviços serão reiniciados para que os SDKs do ADOT sejam injetados imediatamente como parte de um processo automatizado de reimplantação.
--configuration-values '{ "manager":{ "applicationSignals":{ "autoMonitor":{ "monitorAllServices":true, "restartPods":true } } } }'
O complemento de observabilidade do CloudWatch também fornece controle granular adicional para incluir ou excluir serviços específicos, conforme necessário, na nova configuração avançada. Para obter mais informações, consulteConfiguração do Application Signals para o cluster do Amazon EKS
Habilitar o Application Signals no Amazon EKS usando o AWS CDK
Caso ainda não tenha habilitado o Application Signals nessa conta, você deve conceder as permissões necessárias para o Application Signals descobrir seus serviços. Consulte Habilitar o Application Signals na conta.
Habilite o Application Signals para aplicações.
import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );
O recurso Discovery CloudFormation concede as seguintes permissões ao Application Signals:
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
Para obter mais informações sobre essa função, consulte Permissões de perfis vinculados ao serviço para o CloudWatch Application Signals.
-
Instale o complemento
amazon-cloudwatch-observability
.Crie um perfil do IAM com o
CloudWatchAgentServerPolicy
e o OIDC associados ao cluster.const cloudwatchRole = new Role(this, 'CloudWatchAgentAddOnRole', { assumedBy: new OpenIdConnectPrincipal(cluster.openIdConnectProvider), managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('CloudWatchAgentServerPolicy')], });
Instale o complemento com o perfil do IAM criado acima.
new CfnAddon(this, 'CloudWatchAddon', { addonName: 'amazon-cloudwatch-observability', clusterName: cluster.clusterName, serviceAccountRoleArn: cloudwatchRole.roleArn });
Inclua uma das seguintes linhas na seção
PodTemplate
do arquivo de manifesto da workload.Idioma Arquivo 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)