O Managed Service for OpenTelemetry recebe dados de trace, métricas e logs das suas aplicações. O service oferece dois métodos de envio: direto ou por encaminhamento via OpenTelemetry Collector.
Escolha um método de envio
Envie dados de telemetria diretamente ao Managed Service for OpenTelemetry ou encaminhe-os por meio de um OpenTelemetry Collector. Selecione o método conforme o tipo de dado de telemetria desejado.
|
Método de envio |
Tipos de dados suportados |
|
Envio direto |
Traces e métricas |
|
OpenTelemetry Collector (Core) |
Traces e métricas |
|
OpenTelemetry Collector (Contrib) |
Traces, métricas e logs |
Os dados de log são encaminhados por meio do OpenTelemetry Collector (Contrib) para o Simple Log Service (SLS). Para enviar dados de log, utilize o método de encaminhamento pelo Collector na edição Contrib.
Ao encaminhar dados via OpenTelemetry Collector, escolha uma opção de implantação. O OpenTelemetry Collector está disponível em duas edições:
OpenTelemetry Collector (Core): suporta o envio de dados de traces e métricas.
OpenTelemetry Collector (Contrib): suporta o envio de dados de traces, métricas e logs. A tabela a seguir compara as opções de implantação descritas neste tópico.
|
Opção de implantação |
Edição suportada |
Tipos de dados suportados |
|
Implantar em um cluster ACK pelo ACK Marketplace |
OpenTelemetry Collector (Core) |
Traces e métricas |
|
Implantar com docker |
OpenTelemetry Collector (Core) e OpenTelemetry Collector (Contrib) |
Traces e métricas (Core). Traces, métricas e logs (Contrib). |
|
Outros métodos de instalação e implantação |
Varia conforme o método |
Antes de começar
Para enviar dados de log, ative primeiro o Simple Log Service (SLS), crie um Project e um Logstore e crie um par de AccessKey para envio de dados de log.
Obtenha os endpoints e as credenciais de autenticação. A tabela a seguir lista todas as variáveis de configuração utilizadas neste tópico. Nos exemplos de código e configuração, substitua os placeholders no formato
${VAR}pelos valores reais preparados. Prepare os endpoints e as credenciais necessários para o seu cenário, considerando o tipo de dado enviado e o método escolhido. Para mais informações, consulte Get started with Managed Service for OpenTelemetry.
| Caso de uso | Variável | Descrição | Exemplo |
| Enviar dados de trace e métrica via gRPC | ${GRPC_ENDPOINT} | Endpoint gRPC do Managed Service for OpenTelemetry, usado para enviar traces e métricas. Se o service executar na Alibaba Cloud na mesma região do endpoint selecionado, use o endpoint interno da Alibaba Cloud. Caso contrário, utilize o endpoint público. |
|
| Enviar dados de trace e métrica via gRPC | ${GRPC_AUTHENTICATION_TOKEN} | Token de autenticação necessário para enviar dados via gRPC ao Managed Service for OpenTelemetry. Para saber como obter o token, consulte Get started with Managed Service for OpenTelemetry. | abcdef1234@abcdef****56789_abcdef1234@abcdef****56789 |
| Enviar dados de trace e métrica via HTTP | ${HTTP_TRACES_ENDPOINT} | Endpoint HTTP do Managed Service for OpenTelemetry, utilizado para envio de traces. Se o service executar na Alibaba Cloud na mesma região do endpoint escolhido, prefira o endpoint interno da Alibaba Cloud. Caso contrário, use o endpoint público. |
|
| Enviar dados de trace e métrica via HTTP | ${HTTP_METRICS_ENDPOINT} | Endpoint HTTP do Managed Service for OpenTelemetry, destinado ao envio de métricas. Se o service executar na Alibaba Cloud na mesma região do endpoint, opte pelo endpoint interno da Alibaba Cloud. Caso contrário, utilize o endpoint público. |
|
| Enviar dados de log | ${SLS_ENDPOINT} | Endpoint do SLS Project. Necessário apenas para envio de logs. Para obter o endpoint, siga as etapas em Endpoint. | test-project.cn-hangzhou.log.aliyuncs.com |
| Enviar dados de log | ${SLS_PROJECT} | Nome do SLS Project. Obrigatório somente ao enviar dados de log. | test-project |
| Enviar dados de log | ${SLS_LOGSTORE} | Nome do SLS Logstore. Obrigatório apenas para envio de logs. | test-logstore |
| Enviar dados de log | ${ALIYUN_ACCESS_KEY_ID} | accesskey id da sua conta Alibaba Cloud. Necessário exclusivamente para envio de logs. Recomendamos usar o par de AccessKey (composto por AccessKey id e AccessKey secret) de um usuário do Resource Access Management (RAM) com permissões de escrita restritas ao SLS Project. Para conceder permissões de escrita em um Project específico a um usuário RAM, veja RAM custom policy examples. Para obter um par de AccessKey, consulte AccessKey pair. | N/A |
| Enviar dados de log | ${ALIYUN_ACCESS_KEY_SECRET} | AccessKey secret da sua conta Alibaba Cloud. Necessário apenas para envio de logs. Recomendamos utilizar o par de AccessKey de um usuário RAM com permissão de escrita limitada ao SLS Project. | N/A |
Envio direto
Configure o endpoint de envio e as informações de autenticação no OpenTelemetry Agent ou SDK para transmitir os dados de traces e métricas coletados pelo OpenTelemetry diretamente ao servidor do Managed Service for OpenTelemetry.
Opção 1: Configurar as definições de envio no código (exemplo em Java)
Os exemplos de código Java a seguir demonstram como configurar os endpoints do Managed Service for OpenTelemetry, que aceita envio via HTTP ou gRPC. Para acessar o código completo de integração e demonstrações, visite a Central de Integração ou consulte Report trace data from Java applications by using OpenTelemetry.
Envio via HTTP
...
// Report trace data
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
.setEndpoint("${HTTP_TRACES_ENDPOINT}") // Set the HTTP traces endpoint to report trace data to Managed Service for OpenTelemetry.
.build()).build())
.build();
// Report metric data
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
.registerMetricReader(PeriodicMetricReader.builder(OtlpHttpMetricExporter.builder()
.setEndpoint("${HTTP_METRICS_ENDPOINT}") // Set the HTTP metrics endpoint to report metric data to Managed Service for OpenTelemetry.
.build()).build())
.build();
...
Envio via gRPC
...
// Report trace data
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder()
.setEndpoint("${GRPC_ENDPOINT}") // Set the gRPC endpoint to report trace data to Managed Service for OpenTelemetry.
.addHeader("Authentication","${GRPC_AUTHENTICATION_TOKEN}") // Set the authentication token of Managed Service for OpenTelemetry.
.build()).build())
.setResource(resource)
.build();
// Report metric data
SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
.registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder()
.setEndpoint("${GRPC_ENDPOINT}") // Set the gRPC endpoint to report metric data to Managed Service for OpenTelemetry.
.addHeader("Authentication", "${GRPC_AUTHENTICATION_TOKEN}") // Set the authentication token of Managed Service for OpenTelemetry.
.build()).build())
.setResource(resource)
.build();
...
Opção 2: Configurar as definições de envio com variáveis de ambiente
O OpenTelemetry também permite configurar o endpoint de envio de dados por meio de variáveis de ambiente. A tabela abaixo apresenta as variáveis necessárias para enviar dados ao Managed Service for OpenTelemetry. Para conhecer outras variáveis de ambiente OTLP do OpenTelemetry, acesse Configuração do Exportador OTLP.
| Variável de ambiente | Descrição | Exemplo |
| OTEL_SERVICE_NAME | Nome da aplicação. | export OTEL_SERVICE_NAME=opentelemetry-demo-service |
| OTEL_EXPORTER_OTLP_PROTOCOL | Protocolo de envio. Traces aceitam grpc, http/protobuf e http/json. Métricas suportam grpc e http/protobuf. Ao escolher um endpoint gRPC, defina esta variável como grpc. Caso contrário, utilize http/protobuf ou http/json. | export OTEL_EXPORTER_OTLP_PROTOCOL=grpc |
| OTEL_EXPORTER_OTLP_TRACES_ENDPOINT | Endpoint para envio de traces. Suporta HTTP e gRPC. Utilize o valor ${GRPC_ENDPOINT} ou ${HTTP_TRACES_ENDPOINT} obtido anteriormente. |
|
| OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | Endpoint para envio de métricas. Compatível com HTTP e gRPC. Use o valor ${GRPC_ENDPOINT} ou ${HTTP_METRICS_ENDPOINT} obtido anteriormente. |
|
| OTEL_EXPORTER_OTLP_HEADERS | Cabeçalho de requisição para envio via gRPC, usado principalmente para autenticação. Adote o formato Authentication=${GRPC_AUTHENTICATION_TOKEN}, onde ${GRPC_AUTHENTICATION_TOKEN} corresponde ao token de autenticação obtido previamente. | export OTEL_EXPORTER_OTLP_HEADERS=Authentication=abcdef1234@abcdef****56789_abcdef1234@abcdef****56789 |
Encaminhamento de dados via OpenTelemetry Collector
Um OpenTelemetry Collector recebe dados de traces, métricas e logs das suas aplicações e os encaminha ao Managed Service for OpenTelemetry conforme a configuração do exportador.
Opção 1: Implantar em um cluster ACK pelo ACK Marketplace
Nesta opção, implante o collector em um cluster do Container Service for Kubernetes (ACK) por meio do ACK Marketplace. Atualmente, o ACK Marketplace disponibiliza apenas a edição OpenTelemetry Collector (Core), sem a versão Contrib. Para coletar dados de log, adote um dos outros métodos de implantação.
Etapa 1: Implantar o collector
Faça login no ACK console. No painel de navegação à esquerda, clique em .
No Marketplace, pesquise e clique em
opentelemetry-collectore, em seguida, clique em Deploy no canto superior direito da página.Na página Create , selecione o cluster e o namespace onde deseja implantar o
opentelemetry-collector. O namespace padrão é otel-collector. Depois, clique em Next.Na página Parameter Configurations, defina o parâmetro mode como
deploymentoudaemonsete clique em OK.
Etapa 2: Configurar os parâmetros do collector
Na página Clusters, clique no cluster desejado.
No painel de navegação à esquerda, escolha .
Selecione o namespace onde o opentelemetry-collector foi implantado. Por padrão, trata-se do namespace otel-collector.
Na página Configuration Item, localize opentelemetry-collector e clique em YAML.
-
Configure as seções exporters, processors, receivers e service com base no conteúdo YAML abaixo e clique em OK.
Item de configuração do opentelemetry-collector (envio via gRPC)
exporters: otlp: endpoint: "${GRPC_ENDPOINT}" headers: Authentication: "${GRPC_AUTHENTICATION_TOKEN}" tls: insecure: true processors: batch: {} memory_limiter: check_interval: 5s # The interval at which memory usage is checked. Change the value as needed. limit_percentage: 80 # The maximum memory usage as a percentage. Change the value as needed. spike_limit_percentage: 25 # The additional memory as a percentage that is allowed for spikes. Change the value as needed. receivers: otlp: protocols: grpc: endpoint: ${env:MY_POD_IP}:4317 http: endpoint: ${env:MY_POD_IP}:4318 service: pipelines: traces: exporters: [otlp] processors: [memory_limiter, batch] receivers: [otlp] metrics: exporters: [otlp] processors: [memory_limiter, batch] receivers: [otlp]Item de configuração do opentelemetry-collector (envio via HTTP)
exporters: otlphttp: traces_endpoint: "${HTTP_TRACES_ENDPOINT}" metrics_endpoint: "${HTTP_METRICS_ENDPOINT}" tls: insecure: true timeout: 5s # The timeout period. The default value is 5s. Change the value as needed. processors: batch: {} memory_limiter: check_interval: 5s # The interval at which memory usage is checked. Change the value as needed. limit_percentage: 80 # The maximum memory usage as a percentage. Change the value as needed. spike_limit_percentage: 25 # The additional memory as a percentage that is allowed for spikes. Change the value as needed. receivers: otlp: protocols: grpc: endpoint: ${env:MY_POD_IP}:4317 http: endpoint: ${env:MY_POD_IP}:4318 service: pipelines: traces: exporters: [otlphttp] processors: [memory_limiter, batch] receivers: [otlp] metrics: exporters: [otlphttp] processors: [memory_limiter, batch] receivers: [otlp] Após concluir a configuração, reinicie manualmente o opentelemetry-collector.
Opção 2: Implantar com docker
Neste método, execute o collector como um contêiner docker. As edições Core e Contrib estão disponíveis.
Etapa 1: Baixar a imagem
opentelemetry-collector
Para especificar uma versão da imagem, acesse Docker Hub - OpenTelemetry Collector.
docker pull otel/opentelemetry-collector:latest
opentelemetry-collector-contrib
Para definir uma versão específica da imagem, visite Docker Hub - OpenTelemetry Collector Contrib.
docker pull otel/opentelemetry-collector-contrib:latest
Etapa 2: Preparar o arquivo de configuração
Crie um arquivo config.yaml e configure os parâmetros relacionados. Nos exemplos a seguir, substitua os placeholders no formato ${VAR} pelos valores preparados na seção Antes de começar. Esses placeholders diferem da sintaxe nativa de expansão ${env:...} do Collector, como ${env:MY_POD_IP}, resolvida pelo Collector a partir de variáveis de ambiente em tempo de execução.
Item de configuração do opentelemetry-collector (envio via gRPC)
# config.yaml
exporters:
otlp:
endpoint: "${GRPC_ENDPOINT}"
headers:
Authentication: "${GRPC_AUTHENTICATION_TOKEN}"
tls:
insecure: true
processors:
batch: {}
memory_limiter:
check_interval: 5s # The interval at which memory usage is checked. Change the value as needed.
limit_percentage: 80 # The maximum memory usage as a percentage. Change the value as needed.
spike_limit_percentage: 25 # The additional memory as a percentage that is allowed for spikes. Change the value as needed.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # The default value is localhost:4317. Change the value as needed.
http:
endpoint: 0.0.0.0:4318 # The default value is localhost:4318. Change the value as needed.
service:
pipelines:
traces:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]
Item de configuração do opentelemetry-collector (envio via HTTP)
# config.yaml
exporters:
otlphttp:
traces_endpoint: "${HTTP_TRACES_ENDPOINT}"
metrics_endpoint: "${HTTP_METRICS_ENDPOINT}"
tls:
insecure: true
timeout: 5s # The timeout period. The default value is 5s. Change the value as needed.
processors:
batch: {}
memory_limiter:
check_interval: 5s # The interval at which memory usage is checked. Change the value as needed.
limit_percentage: 80 # The maximum memory usage as a percentage. Change the value as needed.
spike_limit_percentage: 25 # The additional memory as a percentage that is allowed for spikes. Change the value as needed.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # The default value is localhost:4317. Change the value as needed.
http:
endpoint: 0.0.0.0:4318 # The default value is localhost:4318. Change the value as needed.
service:
pipelines:
traces:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]
Item de configuração do opentelemetry-collector-contrib (envio via gRPC)
# config.yaml
exporters:
otlp:
endpoint: "${GRPC_ENDPOINT}"
headers:
Authentication: "${GRPC_AUTHENTICATION_TOKEN}"
tls:
insecure: true
# Log exporter configuration (optional)
alibabacloud_logservice/logs:
endpoint: "${SLS_ENDPOINT}"
project: "${SLS_PROJECT}"
logstore: "${SLS_LOGSTORE}"
access_key_id: "${ALIYUN_ACCESS_KEY_ID}"
access_key_secret: "${ALIYUN_ACCESS_KEY_SECRET}"
processors:
batch: {}
memory_limiter:
check_interval: 5s # The interval at which memory usage is checked. Change the value as needed.
limit_percentage: 80 # The maximum memory usage as a percentage. Change the value as needed.
spike_limit_percentage: 25 # The additional memory as a percentage that is allowed for spikes. Change the value as needed.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # The default value is localhost:4317. Change the value as needed.
http:
endpoint: 0.0.0.0:4318 # The default value is localhost:4318. Change the value as needed.
service:
pipelines:
traces:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlp]
processors: [memory_limiter, batch]
receivers: [otlp]
# Log data processing pipeline (optional)
logs:
exporters: [alibabacloud_logservice/logs]
processors: [memory_limiter, batch]
receivers: [otlp]
Item de configuração do opentelemetry-collector-contrib (envio via HTTP)
# config.yaml
exporters:
otlphttp:
traces_endpoint: "${HTTP_TRACES_ENDPOINT}"
metrics_endpoint: "${HTTP_METRICS_ENDPOINT}"
tls:
insecure: true
timeout: 5s # The timeout period. The default value is 5s. Change the value as needed.
# Log exporter configuration (optional)
alibabacloud_logservice/logs:
endpoint: "${SLS_ENDPOINT}"
project: "${SLS_PROJECT}"
logstore: "${SLS_LOGSTORE}"
access_key_id: "${ALIYUN_ACCESS_KEY_ID}"
access_key_secret: "${ALIYUN_ACCESS_KEY_SECRET}"
processors:
batch: {}
memory_limiter:
check_interval: 5s # The interval at which memory usage is checked. Change the value as needed.
limit_percentage: 80 # The maximum memory usage as a percentage. Change the value as needed.
spike_limit_percentage: 25 # The additional memory as a percentage that is allowed for spikes. Change the value as needed.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # The default value is localhost:4317. Change the value as needed.
http:
endpoint: 0.0.0.0:4318 # The default value is localhost:4318. Change the value as needed.
service:
pipelines:
traces:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]
metrics:
exporters: [otlphttp]
processors: [memory_limiter, batch]
receivers: [otlp]
# Log data processing pipeline (optional)
logs:
exporters: [alibabacloud_logservice/logs]
processors: [memory_limiter, batch]
receivers: [otlp]
Etapa 3: Montar o arquivo de configuração personalizado e executar o collector
As flags -p expõem as portas dos receivers para que suas aplicações enviem dados ao collector. Ajuste o mapeamento de portas para corresponder aos endpoints de receiver definidos no arquivo de configuração.
opentelemetry-collector
docker run -p 4317:4317 -p 4318:4318 -v $(pwd)/config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector:latest
opentelemetry-collector-contrib
docker run -p 4317:4317 -p 4318:4318 -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector-contrib:latest
Para outros métodos de implantação, consulte Outros métodos de instalação e implantação.