Implemente usando a estratégia de arquivo associado - Amazon CloudWatch

Implemente usando a estratégia de arquivo associado

Etapa 1: habilitar o Application Signals em sua conta

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. Para fazê-lo, siga as etapas apresentadas a seguir. Você precisa fazer isso somente uma vez para a conta.

Como habilitar o Application Signals para suas aplicações
  1. Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/.

  2. No painel de navegação, escolha Serviços.

  3. Escolha Começar a descobrir os serviços.

  4. Marque a caixa de seleção e escolha Começar a descobrir serviços.

    A conclusão dessa etapa pela primeira vez em sua conta cria a função vinculada ao serviço AWSServiceRoleForCloudWatchApplicationSignals. Essa função 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.

Etapa 2: criar perfis do IAM

Você precisa criar um perfil do IAM. Se você já criou esse perfil, talvez seja necessário adicionar permissões a ele.

  • Função de tarefa do ECS: os contêineres usam essa função para serem executados. As permissões devem ser as necessárias para as aplicações, acrescidas de CloudWatchAgentServerPolicy.

Para obter mais informações sobre a criação de funções do IAM, consulte Criar funções do IAM.

Etapa 3: preparar a configuração do agente do CloudWatch

Primeiro, prepare a configuração do agente com o Application Signals habilitado. Para fazer isso, crie um arquivo local denominado /tmp/ecs-cwagent.json.

{ "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {} } } }

Em seguida, faça o upload dessa configuração no SSM Parameter Store. Para fazer isso, insira o comando a seguir. No arquivo, substitua $REGION pelo nome real da sua região.

aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "$REGION"

Etapa 4: instrumentalizar a aplicação com o agente do CloudWatch

A próxima etapa corresponde à instrumentação da sua aplicação para o CloudWatch Application Signals.

Java
Como instrumentalizar a aplicação no Amazon ECS com o agente do CloudWatch
  1. Primeiro, especifique uma associação de montagem. O volume será usado para compartilhar arquivos entre contêineres nas próximas etapas. Você usará essa associação de montagem posteriormente nesse procedimento.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. Adicione uma definição de arquivo associado para o agente do CloudWatch. Para fazer isso, anexe um novo contêiner, denominado ecs-cwagent, à definição de tarefa da aplicação. Substitua $REGION pelo nome real da sua região. Substitua $IMAGE pelo caminho da imagem de contêiner mais recente do CloudWatch no Amazon Elastic Container Registry. Para obter mais informações, consulte cloudwatch-agent no Amazon ECR.

    Se, em vez disso, você quiser habilitar o agente do CloudWatch com uma estratégia de daemon, consulte as instruções em Implemente usando a estratégia de daemon.

    { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION", "awslogs-stream-prefix": "ecs" } } }
  3. Anexe um novo contêiner init à definição de tarefa da aplicação. Substitua $IMAGE pela imagem mais recente do repositório de imagens do AWS Distro para OpenTelemetry do Amazon ECR.

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "/javaagent.jar", "/otel-auto-instrumentation/javaagent.jar" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
  4. Adicione as variáveis ​​de ambiente apresentadas a seguir ao contêiner da aplicação. Você deverá usar a versão 1.32.2 ou posterior do agente de instrumentação automática para Java do AWS Distro para OpenTelemetry.

    Variável de ambiente Configuração para habilitação do Application Signals

    OTEL_RESOURCE_ATTRIBUTES

    Especifique as seguintes informações como pares de chave-valor:

    • service.name define o nome do serviço. Isso será exibido como o nome do serviço para a aplicação nos painéis do Application Signals. Se você não fornecer um valor para essa chave, o padrão UnknownService será usado.

    • deployment.environment define o ambiente em que a aplicação é executada. Essa variável será exibida como o ambiente Hospedado em da aplicação nos painéis do Application Signals. Se você não especificar, o padrão de generic:default será usado.

    Essa chave de atributo é usada somente pelo Application Signals e é convertida em anotações de rastreamentos do X-Ray e em dimensões de métricas do CloudWatch.

    (Opcional) Para habilitar a correlação de logs para o Application Signals, defina uma variável de ambiente aws.log.group.names adicional para ser o nome do grupo de logs para o log da sua aplicação. Ao fazer isso, será possível correlacionar os rastreamentos e métricas da sua aplicação com as entradas de log relevantes do grupo de logs. Para essa variável, substitua $YOUR_APPLICATION_LOG_GROUP pelos nomes do grupo de logs da sua aplicação. Se você tiver vários grupos de logs, é possível usar um e comercial (&) para separá-los, como neste exemplo: aws.log.group.names=log-group-1&log-group-2. Para permitir que a métrica registre a correlação em log, basta definir essa variável ambiental atual. Para ter mais informações, consulte Habilitar a correlação entre métrica e logs. Para habilitar a correlação entre logs e rastreamento, você também precisará alterar a configuração de registro em log em sua aplicação. Para ter mais informações, consulte Habilitar a correlação entre rastreamento e logs.

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    Defina como true para que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.

    OTEL_METRICS_EXPORTER

    Defina como none para desabilitar outros exportadores de métricas.

    OTEL_LOGS_EXPORTER

    Defina como none para desabilitar outros exportadores de logs.

    OTEL_EXPORTER_OTLP_PROTOCOL

    Defina como http/protobuf para enviar métricas e rastreamentos ao Application Signals usando HTTP.

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    Defina como http://localhost:4316/v1/metrics para enviar métricas para o arquivo associado do CloudWatch.

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    Defina como http://localhost:4316/v1/traces para enviar rastreamentos para o arquivo associado do CloudWatch.

    OTEL_TRACES_SAMPLER

    Defina essa opção como xray para definir o X-Ray como o gerador de amostras de rastreamentos.

    OTEL_PROPAGATORS

    Defina xray como um dos propagadores.

    JAVA_TOOL_OPTIONS

    Defina " -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH" para substituir AWS_ADOT_JAVA_INSTRUMENTATION_PATH pelo caminho no qual o agente de instrumentação automática em Java do AWS Distro para OpenTelemetry está armazenado. Por exemplo, /otel-auto-instrumentation/javaagent.jar

  5. Monte o volume opentelemetry-auto-instrumentation definido na etapa 1 deste procedimento. Se você não precisar habilitar a correlação de logs com métricas e rastreamentos, use o exemplo a seguir para uma aplicação em Java. Se quiser habilitar a correlação de logs, consulte a próxima etapa.

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "JAVA_TOOL_OPTIONS", "value": " -javaagent:/otel-auto-instrumentation/javaagent.jar" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
Python

Antes de habilitar o Application Signals para suas aplicações em Python, esteja ciente das considerações apresentadas a seguir.

  • Em algumas aplicações em contêineres, uma variável de ambiente PYTHONPATH ausente pode, às vezes, causar falhas na inicialização da aplicação. Para resolver isso, certifique-se de definir a variável de ambiente PYTHONPATH para o local do diretório de trabalho da sua aplicação. Isso ocorre devido a um problema conhecido com a instrumentação automática do OpenTelemetry. Para obter mais informações sobre esse problema, consulte Python autoinstrumentation setting of PYTHONPATH is not compliant.

  • Para aplicações em Django, existem configurações adicionais necessárias, descritas na documentação do OpenTelemetry em Python.

    • Use o sinalizador --noreload para evitar o recarregamento automático.

    • Defina a variável de ambiente DJANGO_SETTINGS_MODULE para o local do arquivo settings.py da sua aplicação em Django. Isso garante que o OpenTelemetry possa acessar e se integrar adequadamente às suas configurações do Django.

  • Se você estiver usando um servidor WSGI para a aplicação em Python, além das etapas apresentadas a seguir nesta seção, 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.

Como instrumentalizar a aplicação em Python no Amazon ECS com o agente do CloudWatch
  1. Primeiro, especifique uma associação de montagem. O volume será usado para compartilhar arquivos entre contêineres nas próximas etapas. Você usará essa associação de montagem posteriormente nesse procedimento.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
  2. Adicione uma definição de arquivo associado para o agente do CloudWatch. Para fazer isso, anexe um novo contêiner, denominado ecs-cwagent, à definição de tarefa da aplicação. Substitua $REGION pelo nome real da sua região. Substitua $IMAGE pelo caminho da imagem de contêiner mais recente do CloudWatch no Amazon Elastic Container Registry. Para obter mais informações, consulte cloudwatch-agent no Amazon ECR.

    Se, em vez disso, você quiser habilitar o agente do CloudWatch com uma estratégia de daemon, consulte as instruções em Implemente usando a estratégia de daemon.

    { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION", "awslogs-stream-prefix": "ecs" } } }
  3. Anexe um novo contêiner init à definição de tarefa da aplicação. Substitua $IMAGE pela imagem mais recente do repositório de imagens do AWS Distro para OpenTelemetry do Amazon ECR.

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-python" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
  4. Adicione as variáveis ​​de ambiente apresentadas a seguir ao contêiner da aplicação.

    Variável de ambiente Configuração para habilitação do Application Signals

    OTEL_RESOURCE_ATTRIBUTES

    Especifique as seguintes informações como pares de chave-valor:

    • service.name define o nome do serviço. Isso será exibido como o nome do serviço para a aplicação nos painéis do Application Signals. Se você não fornecer um valor para essa chave, o padrão UnknownService será usado.

    • deployment.environment define o ambiente em que a aplicação é executada. Essa variável será exibida como o ambiente Hospedado em da aplicação nos painéis do Application Signals. Se você não especificar, o padrão de generic:default será usado.

    Essa chave de atributo é usada somente pelo Application Signals e é convertida em anotações de rastreamentos do X-Ray e em dimensões de métricas do CloudWatch.

    (Opcional) Para habilitar a correlação de logs para o Application Signals, defina uma variável de ambiente aws.log.group.names adicional para ser o nome do grupo de logs para o log da sua aplicação. Ao fazer isso, será possível correlacionar os rastreamentos e métricas da sua aplicação com as entradas de log relevantes do grupo de logs. Para essa variável, substitua $YOUR_APPLICATION_LOG_GROUP pelos nomes do grupo de logs da sua aplicação. Se você tiver vários grupos de logs, é possível usar um e comercial (&) para separá-los, como neste exemplo: aws.log.group.names=log-group-1&log-group-2. Para permitir que a métrica registre a correlação em log, basta definir essa variável ambiental atual. Para ter mais informações, consulte Habilitar a correlação entre métrica e logs. Para habilitar a correlação entre logs e rastreamento, você também precisará alterar a configuração de registro em log em sua aplicação. Para ter mais informações, consulte Habilitar a correlação entre rastreamento e logs.

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    Defina como true para que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.

    OTEL_METRICS_EXPORTER

    Defina como none para desabilitar outros exportadores de métricas.

    OTEL_EXPORTER_OTLP_PROTOCOL

    Defina como http/protobuf para enviar métricas e rastreamentos ao CloudWatch usando HTTP.

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    Defina como http://127.0.0.1:4316/v1/metrics para enviar métricas para o arquivo associado do CloudWatch.

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    Defina como http://127.0.0.1:4316/v1/traces para enviar rastreamentos para o arquivo associado do CloudWatch.

    OTEL_TRACES_SAMPLER

    Defina essa opção como xray para definir o X-Ray como o gerador de amostras de rastreamentos.

    OTEL_PROPAGATORS

    Adicione o xray como um dos propagadores.

    OTEL_PYTHON_DISTRO

    Defina como aws_distro para usar a instrumentação do ADOT em Python.

    OTEL_PYTHON_CONFIGURATOR

    Defina como aws_configuration para usar a configuração do ADOT em Python.

    PYTHONPATH

    Substitua $APP_PATH pelo local do diretório de trabalho da aplicação no contêiner. Isso é necessário para que o interpretador em Python localize os módulos da aplicação.

    DJANGO_SETTINGS_MODULE

    Obrigatória somente para aplicações em Django. Defina-a como o local do arquivo settings.py da sua aplicação em Django. Substitua $PATH_TO_SETTINGS.

  5. Monte o volume opentelemetry-auto-instrumentation-python definido na etapa 1 deste procedimento. Se você não precisar habilitar a correlação de logs com métricas e rastreamentos, use o exemplo a seguir para uma aplicação em Python. Se quiser habilitar a correlação de logs, consulte a próxima etapa.

    { "name": "my-app", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
  6. (Opcional) Para habilitar a correlação de logs, faça o seguinte antes de montar o volume. Em OTEL_RESOURCE_ATTRIBUTES, defina uma variável de ambiente aws.log.group.names adicional para os grupos de logs da sua aplicação. Ao fazer isso, será possível correlacionar os rastreamentos e métricas da sua aplicação com as entradas de log relevantes desses grupos de logs. Para essa variável, substitua $YOUR_APPLICATION_LOG_GROUP pelos nomes do grupo de logs da sua aplicação. Se você tiver vários grupos de logs, é possível usar um e comercial (&) para separá-los, como neste exemplo: aws.log.group.names=log-group-1&log-group-2. Para permitir que a métrica registre a correlação em log, basta definir essa variável ambiental atual. Para ter mais informações, consulte Habilitar a correlação entre métrica e logs. Para habilitar a correlação entre logs e rastreamento, você também precisará alterar a configuração de registro em log em sua aplicação. Para ter mais informações, consulte Habilitar a correlação entre rastreamento e logs.

    Veja um exemplo a seguir. Para habilitar a correlação de logs, siga este exemplo ao montar o volume opentelemetry-auto-instrumentation-python definido na etapa 1 deste procedimento.

    { "name": "my-app", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
.NET
Como instrumentalizar a aplicação no Amazon ECS com o agente do CloudWatch
  1. Primeiro, especifique uma associação de montagem. O volume será usado para compartilhar arquivos entre contêineres nas próximas etapas. Você usará essa associação de montagem posteriormente nesse procedimento.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. Adicione uma definição de arquivo associado para o agente do CloudWatch. Para fazer isso, anexe um novo contêiner, denominado ecs-cwagent, à definição de tarefa da aplicação. Substitua $REGION pelo nome real da sua região. Substitua $IMAGE pelo caminho da imagem de contêiner mais recente do CloudWatch no Amazon Elastic Container Registry. Para obter mais informações, consulte cloudwatch-agent no Amazon ECR.

    Se, em vez disso, você quiser habilitar o agente do CloudWatch com uma estratégia de daemon, consulte as instruções em Implemente usando a estratégia de daemon.

    { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION", "awslogs-stream-prefix": "ecs" } } }
  3. Anexe um novo contêiner init à definição de tarefa da aplicação. Substitua $IMAGE pela imagem mais recente do repositório de imagens do AWS Distro para OpenTelemetry do Amazon ECR.

    Para uma instância de contêiner Linux, use o seguinte.

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "autoinstrumentation/.", "/otel-auto-instrumentation" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }

    Para uma instância de contêiner Windows Server, use o seguinte.

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "CMD", "/c", "xcopy", "/e", "C:\\autoinstrumentation\\*", "C:\\otel-auto-instrumentation", "&&", "icacls", "C:\\otel-auto-instrumentation", "/grant", "*S-1-1-0:R", "/T" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ] }
  4. Adicione uma dependência no contêiner init para garantir que o contêiner termine antes do início do contêiner da aplicação.

    "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
  5. Adicione as variáveis ​​de ambiente apresentadas a seguir ao contêiner da aplicação. Você deverá usar a versão 1.1.0 ou posterior do agente de instrumentação automática para .NET do AWS Distro para OpenTelemetry.

    Variável de ambiente Configuração para habilitação do Application Signals

    OTEL_RESOURCE_ATTRIBUTES

    Especifique as seguintes informações como pares de chave-valor:

    • service.name define o nome do serviço. Isso será exibido como o nome do serviço para a aplicação nos painéis do Application Signals. Se você não fornecer um valor para essa chave, o padrão UnknownService será usado.

    • deployment.environment define o ambiente em que a aplicação é executada. Essa variável será exibida como o ambiente Hospedado em da aplicação nos painéis do Application Signals. Se você não especificar, o padrão de generic:default será usado.

    Essa chave de atributo é usada somente pelo Application Signals e é convertida em anotações de rastreamentos do X-Ray e em dimensões de métricas do CloudWatch.

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    Defina como true para que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.

    OTEL_METRICS_EXPORTER

    Defina como none para desabilitar outros exportadores de métricas.

    OTEL_LOGS_EXPORTER

    Defina como none para desabilitar outros exportadores de logs.

    OTEL_EXPORTER_OTLP_PROTOCOL

    Defina como http/protobuf para enviar métricas e rastreamentos ao Application Signals usando HTTP.

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    Defina como http://localhost:4316/v1/metrics para enviar métricas para o arquivo associado do CloudWatch.

    OTEL_EXPORTER_OTLP_ENDPOINT

    Defina como http://localhost:4316/ para enviar rastreamentos para o arquivo associado do CloudWatch.

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    Defina como http://localhost:4316/v1/traces para enviar rastreamentos para o arquivo associado do CloudWatch.

    OTEL_DOTNET_AUTO_HOME

    Defina o local de instalação da instrumentação automática para .NET. do ADOT

    OTEL_DOTNET_AUTO_PLUGINS

    Defina como AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation para habilitar o plug-in Application Signals.

    CORECLR_ENABLE_PROFILING

    Defina como 1 para habilitar o criador de perfil.

    CORECLR_PROFILER

    Defina {918728DD-259F-4A6A-AC2B-B85E1B658318} como o CLSID do criador de perfil.

    CORECLR_PROFILER_PATH

    Defina isso como o caminho do criador de perfil.

    No Linux, defina como ${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so

    No Windows Server, defina como ${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dll

    DOTNET_ADDITIONAL_DEPS

    Defina isso como o caminho da pasta ${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps.

    DOTNET_SHARED_STORE

    Defina isso como o caminho da pasta ${OTEL_DOTNET_AUTO_HOME}/store.

    DOTNET_STARTUP_HOOKS

    Defina isso como o caminho da montagem gerenciada ${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll a ser executada antes do ponto de entrada da aplicação principal.

  6. Monte o volume opentelemetry-auto-instrumentation definido na etapa 1 deste procedimento. Para Linux, use o seguinte.

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "/otel-auto-instrumentation/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "/otel-auto-instrumentation/AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "/otel-auto-instrumentation/store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "/otel-auto-instrumentation/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "/otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }

    Para Windows, use o seguinte.

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "C:\\otel-auto-instrumentation\\win-x64\\OpenTelemetry.AutoInstrumentation.Native.dll" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "C:\\otel-auto-instrumentation\\AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "C:\\otel-auto-instrumentation\\store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "C:\\otel-auto-instrumentation\\net\\OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "C:\\otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
Node.js (Preview)
Como instrumentalizar a aplicação no Amazon ECS com o agente do CloudWatch
  1. Primeiro, especifique uma associação de montagem. O volume será usado para compartilhar arquivos entre contêineres nas próximas etapas. Você usará essa associação de montagem posteriormente nesse procedimento.

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
  2. Adicione uma definição de arquivo associado para o agente do CloudWatch. Para fazer isso, anexe um novo contêiner, denominado ecs-cwagent, à definição de tarefa da aplicação. Substitua $REGION pelo nome real da sua região. Substitua $IMAGE pelo caminho da imagem de contêiner mais recente do CloudWatch no Amazon Elastic Container Registry. Para obter mais informações, consulte cloudwatch-agent no Amazon ECR.

    Se, em vez disso, você quiser habilitar o agente do CloudWatch com uma estratégia de daemon, consulte as instruções em Implemente usando a estratégia de daemon.

    { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION", "awslogs-stream-prefix": "ecs" } } }
  3. Anexe um novo contêiner init à definição de tarefa da aplicação. Substitua $IMAGE pela imagem mais recente do repositório de imagens do AWS Distro para OpenTelemetry do Amazon ECR.

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-node" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], }
  4. Adicione as variáveis ​​de ambiente apresentadas a seguir ao contêiner da aplicação.

    Variável de ambiente Configuração para habilitação do Application Signals

    OTEL_RESOURCE_ATTRIBUTES

    Especifique as seguintes informações como pares de chave-valor:

    • service.name define o nome do serviço. Isso será exibido como o nome do serviço para a aplicação nos painéis do Application Signals. Se você não fornecer um valor para essa chave, o padrão UnknownService será usado.

    • deployment.environment define o ambiente em que a aplicação é executada. Essa variável será exibida como o ambiente Hospedado em da aplicação nos painéis do Application Signals. Se você não especificar, o padrão de generic:default será usado.

    Essa chave de atributo é usada somente pelo Application Signals e é convertida em anotações de rastreamentos do X-Ray e em dimensões de métricas do CloudWatch.

    (Opcional) Para habilitar a correlação de logs para o Application Signals, defina uma variável de ambiente aws.log.group.names adicional para ser o nome do grupo de logs para o log da sua aplicação. Ao fazer isso, será possível correlacionar os rastreamentos e métricas da sua aplicação com as entradas de log relevantes do grupo de logs. Para essa variável, substitua $YOUR_APPLICATION_LOG_GROUP pelos nomes do grupo de logs da sua aplicação. Se você tiver vários grupos de logs, é possível usar um e comercial (&) para separá-los, como neste exemplo: aws.log.group.names=log-group-1&log-group-2. Para permitir que a métrica registre a correlação em log, basta definir essa variável ambiental atual. Para ter mais informações, consulte Habilitar a correlação entre métrica e logs. Para habilitar a correlação entre logs e rastreamento, você também precisará alterar a configuração de registro em log em sua aplicação. Para ter mais informações, consulte Habilitar a correlação entre rastreamento e logs.

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    Defina como true para que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.

    OTEL_METRICS_EXPORTER

    Defina como none para desabilitar outros exportadores de métricas.

    OTEL_LOGS_EXPORTER

    Defina como none para desabilitar outros exportadores de logs.

    OTEL_EXPORTER_OTLP_PROTOCOL

    Defina como http/protobuf para enviar métricas e acompanhamentos para o Application Signals usando OTLP/HTTP e protobuf.

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    Defina como http://localhost:4316/v1/metrics para enviar métricas para o arquivo associado do CloudWatch.

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    Defina como http://localhost:4316/v1/traces para enviar rastreamentos para o arquivo associado do CloudWatch.

    OTEL_TRACES_SAMPLER

    Defina essa opção como xray para definir o X-Ray como o gerador de amostras de rastreamentos.

    OTEL_PROPAGATORS

    Defina xray como um dos propagadores.

    NODE_OPTIONS

    Definido como --require AWS_ADOT_NODE_INSTRUMENTATION_PATH. Substitua AWS_ADOT_NODE_INSTRUMENTATION_PATH pelo caminho que direcionada para a instrumentação automática em Node.js do AWS Distro para OpenTelemetry armazenada. Por exemplo, /otel-auto-instrumentation-node/autoinstrumentation.js

  5. Monte o volume opentelemetry-auto-instrumentation definido na etapa 1 deste procedimento. Se não for necessário habilitar a correlação de logs com métricas e acompanhamentos, use o exemplo apresentado a seguir para uma aplicação em Node.js. Se quiser habilitar a correlação de logs, consulte a próxima etapa.

    Em seu Application Container, adicione uma dependência ao contêiner init para garantir que ele seja finalizado antes que o contêiner da sua aplicação comece.

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
  6. (Opcional) Para habilitar a correlação de logs, faça o seguinte antes de montar o volume. Em OTEL_RESOURCE_ATTRIBUTES, defina uma variável de ambiente aws.log.group.names adicional para os grupos de logs da sua aplicação. Ao fazer isso, será possível correlacionar os rastreamentos e métricas da sua aplicação com as entradas de log relevantes desses grupos de logs. Para essa variável, substitua $YOUR_APPLICATION_LOG_GROUP pelos nomes do grupo de logs da sua aplicação. Se você tiver vários grupos de logs, é possível usar um e comercial (&) para separá-los, como neste exemplo: aws.log.group.names=log-group-1&log-group-2. Para permitir que a métrica registre a correlação em log, basta definir essa variável ambiental atual. Para ter mais informações, consulte Habilitar a correlação entre métrica e logs. Para habilitar a correlação entre logs e rastreamento, você também precisará alterar a configuração de registro em log em sua aplicação. Para ter mais informações, consulte Habilitar a correlação entre rastreamento e logs.

    Veja um exemplo a seguir. Siga este exemplo para habilitar a correlação de logs ao montar o volume opentelemetry-auto-instrumentation definido na etapa 1 deste procedimento.

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }

Etapa 5: implantar a aplicação

Crie uma nova revisão da sua definição de tarefa e implante-a no cluster da aplicação. Você deverá visualizar três contêineres na tarefa recém-criada:

  • init: um contêiner necessário para inicializar o Application Signals.

  • ecs-cwagent: um contêiner executando o agente do CloudWatch

  • my-app: esse é o exemplo de contêiner de aplicação na nossa documentação. Nas suas workloads reais, esse contêiner específico pode não existir ou pode ser substituído por seus próprios contêineres de serviço.