Implemente usando a estratégia de daemon
Etapa 1: habilitar o Application Signals em sua conta
Você deve primeiro habilitar o Application Signals na conta. Se você não tiver feito isso, consulte Habilitar o Application Signals na conta.
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: implantar o serviço de daemon do agente do CloudWatch
Crie a definição de tarefa a seguir e implante-a no cluster da aplicação. Substitua $REGION pelo nome real da sua região. Substitua $TASK_ROLE_ARN e $EXECUTION_ROLE_ARN pelos perfis do IAM você preparou em Etapa 2: criar perfis do IAM. 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
nota
O serviço de daemon expõe duas portas no host, com 4316 usadas como endpoint para receber métricas e rastreamentos e 2 mil como endpoint do amostrador de rastreamento do CloudWatch. Essa configuração permite que o agente colete e transmita dados de telemetria de todas as tarefas da aplicação em execução no host. Certifique-se de que essas portas não sejam usadas por outros serviços no host para evitar conflitos.
{ "family": "ecs-cwagent-daemon", "taskRoleArn": "$TASK_ROLE_ARN", "executionRoleArn": "$EXECUTION_ROLE_ARN", "networkMode": "bridge", "containerDefinitions": [ { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "portMappings": [ { "containerPort": 4316, "hostPort": 4316 }, { "containerPort": 2000, "hostPort": 2000 } ], "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" } } } ], "requiresCompatibilities": [ "EC2" ], "cpu": "128", "memory": "64" }
Etapa 5: instrumentalizar a aplicação
A próxima etapa corresponde à instrumentação da aplicação para o Application Signals.
- Java
-
Como instrumentalizar a aplicação no Amazon ECS com o agente do CloudWatch
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" } ]Anexe um novo contêiner
inità definição de tarefa da aplicação. Substitua$IMAGEpela 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 } ] }Adicione uma dependência no contêiner
initpara garantir que esse contêiner termine antes do início do contêiner da aplicação."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]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_ATTRIBUTESEspecifique as seguintes informações como pares de chave-valor:
service.namedefine 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ãoUnknownServiceserá usado.deployment.environmentdefine 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 degeneric:defaultserá 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.namesadicional 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_GROUPpelos 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 obter 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 obter mais informações, consulte Habilitar a correlação entre rastreamento e logs.OTEL_AWS_APPLICATION_SIGNALS_ENABLEDDefina como
truepara que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.OTEL_METRICS_EXPORTERDefina como
nonepara desabilitar outros exportadores de métricas.OTEL_LOGS_EXPORTERDefina como
nonepara desabilitar outros exportadores de logs.OTEL_EXPORTER_OTLP_PROTOCOLDefina como
http/protobufpara enviar métricas e rastreamentos ao Application Signals usando HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvia métricas para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/metrics.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/metrics, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvia rastreamentos para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/traces.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/traces, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_TRACES_SAMPLERDefina essa opção como
xraypara definir o X-Ray como o gerador de amostras de rastreamentos.OTEL_PROPAGATORSDefina
xraycomo um dos propagadores.JAVA_TOOL_OPTIONSDefina
" -javaagent:$para substituirAWS_ADOT_JAVA_INSTRUMENTATION_PATH"AWS_ADOT_JAVA_INSTRUMENTATION_PATHpelo 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.Monte o volume
opentelemetry-auto-instrumentationdefinido 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://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "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
PYTHONPATHausente pode, às vezes, causar falhas na inicialização da aplicação. Para resolver isso, certifique-se de definir a variável de ambientePYTHONPATHpara 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
--noreloadpara evitar o recarregamento automático.Defina a variável de ambiente
DJANGO_SETTINGS_MODULEpara o local do arquivosettings.pyda 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
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" } ]Anexe um novo contêiner
inità definição de tarefa da aplicação. Substitua$IMAGEpela 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 } ] }Adicione uma dependência no contêiner
initpara garantir que esse contêiner termine antes do início do contêiner da aplicação."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]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_ATTRIBUTESEspecifique as seguintes informações como pares de chave-valor:
service.namedefine 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ãoUnknownServiceserá usado.deployment.environmentdefine 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 degeneric:defaultserá 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.namesadicional 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_GROUPpelos 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 obter 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 obter mais informações, consulte Habilitar a correlação entre rastreamento e logs.OTEL_AWS_APPLICATION_SIGNALS_ENABLEDDefina como
truepara que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.OTEL_METRICS_EXPORTERDefina como
nonepara desabilitar outros exportadores de métricas.OTEL_EXPORTER_OTLP_PROTOCOLDefina como
http/protobufpara enviar métricas e rastreamentos ao CloudWatch usando HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvia métricas para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/metrics.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/metrics, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvia rastreamentos para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/traces.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/traces, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_TRACES_SAMPLERDefina essa opção como
xraypara definir o X-Ray como o gerador de amostras de rastreamentos.OTEL_TRACES_SAMPLER_ARGDefine o endpoint do amostrador dos rastreamentos.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:2000.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso comohttp://, em queCW_CONTAINER_IP:2000CW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_PROPAGATORSAdicione o
xraycomo um dos propagadores.OTEL_PYTHON_DISTRODefina como
aws_distropara usar a instrumentação do ADOT em Python.OTEL_PYTHON_CONFIGURATORDefina como
aws_configurationpara usar a configuração do ADOT em Python.PYTHONPATHSubstitua
$APP_PATHpelo 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_MODULEObrigatória somente para aplicações em Django. Defina-a como o local do arquivo
settings.pyda sua aplicação em Django. Substitua$PATH_TO_SETTINGS.Monte o volume
opentelemetry-auto-instrumentation-pythondefinido 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://CW_CONTAINER_IP: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://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP: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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }(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 ambienteaws.log.group.namesadicional 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_GROUPpelos 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 obter 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 obter 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-pythondefinido 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://CW_CONTAINER_IP: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://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP: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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "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
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" } ]Anexe um novo contêiner
inità definição de tarefa da aplicação. Substitua$IMAGEpela 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 } ] }Adicione uma dependência no contêiner
initpara garantir que o contêiner termine antes do início do contêiner da aplicação."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]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_ATTRIBUTESEspecifique as seguintes informações como pares de chave-valor:
service.namedefine 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ãoUnknownServiceserá usado.deployment.environmentdefine 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 degeneric:defaultserá 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_ENABLEDDefina como
truepara que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.OTEL_METRICS_EXPORTERDefina como
nonepara desabilitar outros exportadores de métricas.OTEL_LOGS_EXPORTERDefina como
nonepara desabilitar outros exportadores de logs.OTEL_EXPORTER_OTLP_PROTOCOLDefina como
http/protobufpara enviar métricas e rastreamentos ao Application Signals usando HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvia métricas para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/metrics.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/metrics, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_EXPORTER_OTLP_ENDPOINTEnvia rastreamentos para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvia rastreamentos para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/traces.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/traces, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_TRACES_SAMPLER_ARGDefine o endpoint do amostrador dos rastreamentos.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:2000.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso comohttp://, em queCW_CONTAINER_IP:2000CW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_DOTNET_AUTO_HOMEDefina o local de instalação da instrumentação automática para .NET. do ADOT
OTEL_DOTNET_AUTO_PLUGINSDefina como
AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentationpara habilitar o plug-in Application Signals.CORECLR_ENABLE_PROFILINGDefina como
1para habilitar o criador de perfil.CORECLR_PROFILERDefina
{918728DD-259F-4A6A-AC2B-B85E1B658318}como o CLSID do criador de perfil.CORECLR_PROFILER_PATHDefina isso como o caminho do criador de perfil.
No Linux, defina como
${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.soNo Windows Server, defina como
${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dllDOTNET_ADDITIONAL_DEPSDefina isso como o caminho da pasta
${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps.DOTNET_SHARED_STOREDefina isso como o caminho da pasta
${OTEL_DOTNET_AUTO_HOME}/store.DOTNET_STARTUP_HOOKSDefina isso como o caminho da montagem gerenciada
${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dlla ser executada antes do ponto de entrada da aplicação principal.Monte o volume
opentelemetry-auto-instrumentationdefinido 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=dotnet-service-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://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "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=dotnet-service-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://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP: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
-
nota
Se você estiver habilitando o Application Signals para uma aplicação do Node.js com ESM, consulte Setting up a Node.js application with the ESM module format antes de iniciar essas etapas.
Como instrumentalizar a aplicação no Amazon ECS com o agente do CloudWatch
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" } ]Anexe um novo contêiner
inità definição de tarefa da aplicação. Substitua$IMAGEpela 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 } ], }Adicione uma dependência no contêiner
initpara garantir que esse contêiner termine antes do início do contêiner da aplicação."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]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_ATTRIBUTESEspecifique as seguintes informações como pares de chave-valor:
service.namedefine 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ãoUnknownServiceserá usado.deployment.environmentdefine 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 degeneric:defaultserá 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.namesadicional 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_GROUPpelos 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 obter 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 obter mais informações, consulte Habilitar a correlação entre rastreamento e logs.OTEL_AWS_APPLICATION_SIGNALS_ENABLEDDefina como
truepara que seu contêiner comece a enviar rastreamentos do X-Ray e métricas do CloudWatch para o Application Signals.OTEL_METRICS_EXPORTERDefina como
nonepara desabilitar outros exportadores de métricas.OTEL_LOGS_EXPORTERDefina como
nonepara desabilitar outros exportadores de logs.OTEL_EXPORTER_OTLP_PROTOCOLDefina como
http/protobufpara enviar métricas e acompanhamentos para o Application Signals usando OTLP/HTTP e protobuf.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvia métricas para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/metrics.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/metrics, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvia rastreamentos para o contêiner daemon do CloudWatch.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:4316/v1/traces.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso como http://CW_CONTAINER_IP:4316/v1/traces, em queCW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_TRACES_SAMPLERDefina essa opção como
xraypara definir o X-Ray como o gerador de amostras de rastreamentos.OTEL_TRACES_SAMPLER_ARGDefine o endpoint do amostrador dos rastreamentos.
Para aplicações em execução no modo
host, defina isso comohttp://localhost:2000.Para aplicações em execução no modo
bridgeou no modoawsvpc, defina isso comohttp://, em queCW_CONTAINER_IP:2000CW_CONTAINER_IPé o endereço IP privado da instância de contêiner do EC2. Você também pode recuperar esse endereço no serviço de metadados de instância (IMDS).
OTEL_PROPAGATORSDefina
xraycomo um dos propagadores.NODE_OPTIONSDefinido como
--require. SubstituaAWS_ADOT_NODE_INSTRUMENTATION_PATHAWS_ADOT_NODE_INSTRUMENTATION_PATHpelo 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.Monte o volume
opentelemetry-auto-instrumentation-nodedefinido 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
initpara 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://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP: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" } ] }(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 ambienteaws.log.group.namesadicional 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_GROUPpelos 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 obter 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 obter 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-instrumentationdefinido 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://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP: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" } ] }
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, o uso do contêiner
initpara injetar o SDK de instrumentação do Node.js não é aplicável. Para habilitar o Application Signals para o Node.js com o ESM, ignore as etapas 1 e 2 no 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.0Nas etapas 4 e 5 do procedimento anterior, remova a montagem do volume
opentelemetry-auto-instrumentation-node:"mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ]Substitua as opções do nó pelas opções apresentadas a seguir.
{ "name": "NODE_OPTIONS", "value": "--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs" }
Etapa 6: 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á ver dois contêineres na tarefa recém-criada:
init: um contêiner necessário para inicializar o Application Signals: 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.my-app
(Opcional) Etapa 7: monitorar a integridade da aplicação
Depois de habilitar as aplicações no Amazon ECS, 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.