Neste documento, explicamos como configurar o OpenTelemetry gerenciado para o GKE enviar traces, métricas e registros do protocolo OpenTelemetry (OTLP) para o Google Cloud Observability de aplicativos em execução no GKE.
Para mais detalhes sobre como o OpenTelemetry gerenciado para GKE funciona, consulte OpenTelemetry gerenciado para GKE.
Use o OpenTelemetry gerenciado para GKE para fazer o seguinte:
- Configure as cargas de trabalho em execução no GKE para enviar traces, métricas e registros do protocolo OpenTelemetry (OTLP) ao coletor gerenciado.
- Receber traces, métricas e registros do OpenTelemetry Protocol (OTLP) dos aplicativos em execução no GKE.
- Exportar esses dados para o Google Cloud Observability.
Se você precisar de filtragem e controles no nível do coletor, use o coletor do OpenTelemetry criado pelo Google em vez dessa oferta gerenciada.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloudagora, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho sem custos financeiros.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um projeto do Google Cloud .
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: para selecionar um projeto, não é necessário ter um papel do IAM específico. É possível selecionar qualquer projeto em que você tenha um papel.
-
Criar um projeto: para criar um projeto, é preciso ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se você tem as permissões necessárias para concluir este guia.
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs do GKE, Telemetry (OTLP), Cloud Logging, Cloud Monitoring e API Cloud Trace, se ainda não estiverem ativadas:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable container.googleapis.com
telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com -
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um projeto do Google Cloud .
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: para selecionar um projeto, não é necessário ter um papel do IAM específico. É possível selecionar qualquer projeto em que você tenha um papel.
-
Criar um projeto: para criar um projeto, é preciso ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se você tem as permissões necessárias para concluir este guia.
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs do GKE, Telemetry (OTLP), Cloud Logging, Cloud Monitoring e API Cloud Trace, se ainda não estiverem ativadas:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable container.googleapis.com
telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com
Requisitos
Para usar o OpenTelemetry gerenciado para GKE, você precisa atender aos seguintes requisitos:
- O cluster precisa ter o GKE versão 1.34.1-gke.2178000 ou posterior. Para configurar o protocolo de exportação OTLP como gRPC no recurso personalizado de instrumentação, use o GKE versão 1.37.1-gke.1697000 ou mais recente.
- CLI gcloud ativada com a versão 576.0.0 ou mais recente.
- Se você usa o Terraform para provisionar sua infraestrutura do GKE, use o terraform-provider-google na versão v8.8.0 ou posterior.
Funções exigidas
Para receber as permissões necessárias para ativar e usar o OpenTelemetry gerenciado pelo GKE, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
- Administrador de cluster do Kubernetes Engine (
roles/container.clusterAdmin) - Leitor do Monitoring (
roles/monitoring.viewer) - Visualizador de registros (
roles/logging.viewer) - Usuário do Cloud Trace (
roles/cloudtrace.user)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Custos
Consulte Faturamento para detalhes sobre os custos relacionados ao uso do OpenTelemetry gerenciado para o GKE.
Ativar o OpenTelemetry gerenciado para GKE em um cluster
Para configurar o OpenTelemetry gerenciado para o GKE, faça o seguinte:
- Ativar o OpenTelemetry gerenciado para GKE em um cluster.
- Configure o aplicativo que você está monitorando para enviar sinais ao endpoint do coletor gerenciado.
Quando você ativa o OpenTelemetry gerenciado para o GKE, os seguintes objetos são implantados no cluster:
- Uma implantação do coletor do OpenTelemetry gerenciado pelo GKE que
é implantada no namespace
gke-managed-otel. Os endpoints do coletor do OpenTelemetry gerenciados no cluster para registros, métricas e traces são os seguintes:- Endpoint HTTP:
http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4318 - Endpoint gRPC:
http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4317
- Endpoint HTTP:
Uma definição de recurso personalizado,
instrumentations.telemetry.googleapis.com, que pode ser usada para definir a configuração automática das cargas de trabalho.Para mais detalhes sobre recursos personalizados, consulte recurso personalizado na documentação do Kubernetes.
Ativar em um novo cluster
Para ativar o OpenTelemetry gerenciado para GKE em um novo cluster, siga estas etapas:
gcloud
Para um cluster do Autopilot, use o seguinte comando:
gcloud container clusters create-auto CLUSTER_NAME \
--project=PROJECT_ID \
--managed-otel-scope=COLLECTION_AND_INSTRUMENTATION_COMPONENTS \
--location=LOCATION \
--cluster-version=VERSION
Substitua:
CLUSTER_NAME: o nome do cluster.PROJECT_ID: o ID do projeto do Google Cloud .LOCATION: a região ou zona.VERSION: a versão do GKE. Consulte os Requisitos para saber qual é a versão mínima que você pode usar.
Para um cluster padrão, use o seguinte comando:
gcloud container clusters create CLUSTER_NAME \
--project=PROJECT_ID \
--managed-otel-scope=COLLECTION_AND_INSTRUMENTATION_COMPONENTS \
--location=LOCATION \
--cluster-version=VERSION
Substitua:
CLUSTER_NAME: o nome do cluster.PROJECT_ID: o ID do projeto do Google Cloud .LOCATION: a região ou zona.VERSION: a versão do GKE. Consulte os Requisitos para saber qual é a versão mínima que você pode usar.
Console
Para um cluster do Autopilot, faça o seguinte:
No console do Google Cloud , acesse a página Criar um cluster do Autopilot.
No painel de navegação, clique em Configurações avançadas.
Na seção Operações, selecione Ativar o OpenTelemetry gerenciado.
Clique em Criar.
Para um cluster padrão, faça o seguinte:
- No console do Google Cloud , acesse a página Criar um cluster do Kubernetes.
- No painel de navegação, clique em Configurações avançadas.
- Na linha OpenTelemetry gerenciado, clique em edit Editar configuração.
- Selecione Ativar o OpenTelemetry gerenciado.
- Clique em Salvar.
- Clique em Criar.
Terraform
Para ativar o OpenTelemetry gerenciado para GKE em um novo cluster usando o Terraform, consulte o exemplo a seguir:
Para saber mais como usar o Terraform, consulte o Suporte do Terraform para GKE.
Ativar em um cluster atual
Para ativar o OpenTelemetry gerenciado para GKE em um cluster atual, siga estas etapas:
gcloud
Verifique se a versão do cluster atende aos requisitos. Para detalhes sobre como fazer upgrade de um cluster, consulte Upgrades de cluster padrão e Upgrades de cluster do Autopilot.
Ative o OpenTelemetry gerenciado para o GKE usando o seguinte comando:
gcloud container clusters update CLUSTER_NAME \ --project=PROJECT_ID \ --managed-otel-scope=COLLECTION_AND_INSTRUMENTATION_COMPONENTS \ --location=LOCATIONSubstitua:
CLUSTER_NAME: o nome do cluster.PROJECT_ID: o ID do projeto do Google Cloud .LOCATION: a região ou zona.
Console
Verifique se a versão do cluster atende aos requisitos. Para detalhes sobre como fazer upgrade de um cluster, consulte Upgrades de cluster padrão e Upgrades de cluster do Autopilot.
No console do Google Cloud , acesse a página de clusters do Kubernetes:
Clique no nome do cluster.
Na lista Recursos, localize a opção OpenTelemetry gerenciado. Se ele estiver listado como desativado, clique em Editar e selecione Ativar o OpenTelemetry gerenciado.
Clique em Salvar alterações.
Terraform
Para ativar o OpenTelemetry gerenciado para GKE em um cluster,
adicione o bloco managed_opentelemetry_config ao recurso google_container_cluster,
como no exemplo a seguir:
Para saber mais como usar o Terraform, consulte o Suporte do Terraform para GKE.
Configurar o aplicativo para usar o coletor do OpenTelemetry gerenciado
Os aplicativos precisam ser configurados para enviar sinais ao endpoint do coletor gerenciado. Quando os aplicativos são configurados, o coletor gerenciado do OpenTelemetry recebe indicadores dos aplicativos em execução no cluster em que o coletor está ativado. Os indicadores do aplicativo incluem traces, métricas e registros.
Para enviar sinais do OpenTelemetry, os aplicativos precisam já estar instrumentados para gerar métricas do OpenTelemetry. Para mais detalhes, consulte cargas de trabalho compatíveis.
É possível configurar o aplicativo manualmente para enviar sinais ao endpoint do coletor gerenciado ou usar a configuração automática. Não recomendamos o uso dos dois métodos juntos para a mesma carga de trabalho, porque a configuração automática pode substituir as alterações manuais. Essa combinação pode dificultar o acompanhamento das mudanças na configuração.
As seções a seguir descrevem como configurar aplicativos para enviar sinais ao coletor usando a configuração automática.
Configurar a configuração automática
A configuração automática usa variáveis de ambiente para configurar as cargas de trabalho para enviar indicadores ao endpoint do coletor gerenciado.
Para ativar a injeção automática de variáveis de ambiente em pods, use o recurso personalizado de instrumentação. As variáveis de ambiente têm a configuração do OpenTelemetry e podem ser injetadas em alguns pods com rótulos correspondentes em um namespace ou em todos os pods em um namespace.
Em seguida, quando um aplicativo é implantado no namespace, o GKE usa a configuração para injetar automaticamente variáveis de ambiente nos pods em que as cargas de trabalho são executadas.
Para configurar o recurso personalizado de instrumentação, faça o seguinte:
Salve o seguinte manifesto de instrumentação em um arquivo chamado
otlp-auto-config-namespace.yaml:apiVersion: telemetry.googleapis.com/v1alpha1 kind: Instrumentation metadata: namespace: NAMESPACE name: NAME spec: selector: matchLabels: KEY: VALUE autoInstrumentationConfig: configInjection: enabled: true otelSDKConfig: tracer_provider: sampler: parent_based: root: trace_id_ratio_based: ratio: "TRACE_RATIO" meter_provider: readers: - periodic: interval: METRICS_INTERVALSubstitua:
NAMESPACE: o namespace que contém os pods que você quer segmentar para a instrumentação automática. Usedefaultpara segmentar o namespace padrão.NAME: o nome do objeto Instrumentation no arquivo de manifesto.- (Opcional) O rótulo anexado aos pods a serem segmentados. Se um seletor vazio
for especificado (
{}), todos os pods no namespace serão segmentados.KEY: a chave do rótulo.VALUE: o valor do rótulo.
TRACE_RATIO: a proporção de dados de trace a serem coletados. Se não for especificado, o padrão será1.0. Para mais detalhes, consulte Modificar a taxa de amostragem de trace.METRICS_INTERVAL: o intervalo, em milissegundos, dos dados de monitoramento a serem coletados. O padrão é30000. O valor precisa ser não negativo, com um mínimo de 5.000 ms, um máximo de 300.000 ms e um múltiplo de 5.000 ms. Para mais detalhes, consulte Modificar o intervalo de exportação de métricas.
Se você quiser modificar alguma das configurações, consulte a seção a seguir para modificar a configuração.
Aplique a configuração executando o seguinte comando:
kubectl apply -f otlp-auto-config-namespace.yaml
Para injetar as variáveis de ambiente automaticamente, implante o aplicativo no namespace do cluster que tem a configuração aplicada.
Para aplicar a configuração a uma carga de trabalho que ainda não está em execução no namespace, implante a carga de trabalho usando o seguinte comando:
kubectl apply -f DEPLOYMENT_NAME -n NAMESPACESubstitua:
DEPLOYMENT_NAME: o nome da implantação.NAMESPACE: o namespace.
Para aplicar a configuração a uma carga de trabalho que já está em execução no namespace, reimplante a carga de trabalho usando o seguinte comando:
kubectl rollout restart deployment DEPLOYMENT_NAME -n NAMESPACESubstitua:
DEPLOYMENT_NAME: o nome da implantação.NAMESPACE: o namespace.
Depois de aplicar a configuração ao cluster, o GKE configura automaticamente todas as cargas de trabalho quando elas são implantadas no cluster. As cargas de trabalho são instrumentadas injetando variáveis de ambiente nos pods em que as cargas de trabalho são executadas.
Quando uma carga de trabalho configurada com essas variáveis de ambiente é executada em um cluster em que o coletor gerenciado é implantado, ela envia sinais do OpenTelemetry para o coletor gerenciado. Esses indicadores estão disponíveis para visualização no Google Cloud Observability.
Para mais detalhes sobre como visualizar os indicadores, consulte Ver telemetria. Para ver um exemplo, consulte Gerar telemetria de amostra.
Modifique a configuração
Para modificar a configuração, faça o seguinte:
Modifique o arquivo de manifesto de instrumentação.
Aplique a configuração modificada.
Implante novamente ou reinicie os aplicativos no namespace correspondente do cluster depois de aplicar a configuração modificada.
Para mais detalhes sobre essas etapas, siga as instruções na seção Configurar a configuração automática.
Configurar o protocolo de exportação do OTLP (HTTP ou gRPC)
Por padrão, a configuração automática define as cargas de trabalho para exportar telemetria por HTTP. No GKE versão 1.37.1-gke.1697000 e posterior, é possível configurar o recurso personalizado de instrumentação para exportar telemetria por HTTP ou gRPC.
Um recurso personalizado de instrumentação é compatível com apenas um protocolo para todos os
provedores. Para usar o gRPC, defina o exportador como otlp_grpc: {} para cada provedor
que você usa e defina qualquer provedor não utilizado como null. Por exemplo, para desativar
as métricas, use meter_provider: null.
O exemplo a seguir é um arquivo de manifesto de instrumentação configurado para exportar telemetria por gRPC para os provedores de trace, métricas e geração de registros:
apiVersion: telemetry.googleapis.com/v1alpha1
kind: Instrumentation
metadata:
namespace: NAMESPACE
name: NAME
spec:
selector:
matchLabels:
KEY: VALUE
autoInstrumentationConfig:
configInjection:
enabled: true
otelSDKConfig:
tracer_provider:
sampler:
parent_based:
root:
trace_id_ratio_based:
ratio: "TRACE_RATIO"
processors:
- batch:
exporter:
otlp_grpc: {}
meter_provider:
readers:
- periodic:
interval: METRICS_INTERVAL
exporter:
otlp_grpc: {}
logger_provider:
processors:
- batch:
exporter:
otlp_grpc: {}
Substitua:
NAMESPACE: o namespace que contém os pods que você quer segmentar para a instrumentação automática. Usedefaultpara segmentar o namespace padrão.NAME: o nome do objeto de instrumentação no arquivo de manifesto.- (Opcional) O rótulo anexado aos pods a serem segmentados. Se um seletor vazio
for especificado (
{}), todos os pods no namespace serão segmentados.KEY: a chave do rótulo.VALUE: o valor do rótulo.
TRACE_RATIO: a proporção de dados de trace a serem coletados. Se não for especificado, o padrão será1.0. Para mais detalhes, consulte Modificar a taxa de amostragem de trace.METRICS_INTERVAL: o intervalo, em milissegundos, dos dados de monitoramento a serem coletados. O padrão é30000. O valor precisa ser não negativo, com um mínimo de 5.000 ms, um máximo de 300.000 ms e um múltiplo de 5.000 ms. Para mais detalhes, consulte Modificar o intervalo de exportação de métricas.
Modificar a quantidade ou a frequência da coleta de dados
É possível modificar a quantidade de dados de trace coletados alterando a taxa de amostragem de trace.
É possível alterar a frequência com que os dados de monitoramento são enviados ao Cloud Monitoring modificando o intervalo de exportação de métricas.
Não é possível modificar a quantidade ou a frequência dos dados de registro coletados. No entanto, é possível desativar a coleta de todos os dados de geração de registros, métricas ou traces. Veja mais detalhes em Selecionar o tipo de indicador a ser coletado.
Modificar a taxa de amostragem de trace
Uma carga de trabalho pode gerar uma grande quantidade de dados de trace. Para sua própria situação, é importante determinar o equilíbrio entre o custo de coleta e armazenamento de dados e o nível de detalhes necessário para que os dados sejam úteis.
O
comportamento padrão do SDK do OpenTelemetry
é always_on, que equivale a uma proporção de 1.
Veja a seguir um exemplo da configuração da taxa de amostragem de trace. Neste exemplo, a proporção é de 0,25, então os dados de trace são coletados a uma taxa de 25%. Modifique esse número para alterar a taxa de amostragem.
tracer_provider:
sampler:
parent_based:
root:
trace_id_ratio_based:
ratio: "0.25"
Modificar o intervalo de exportação de métricas
O intervalo de exportação de métricas determina a granularidade dos dados que você pode ver nos gráficos do Cloud Monitoring.
Veja a seguir um exemplo da configuração do intervalo de exportação de métricas. Neste exemplo, o intervalo de exportação é de 30.000 ms.
O intervalo de exportação de métricas é usado para especificar o intervalo de atraso entre o início de duas exportações consecutivas de métricas do SDK do OpenTelemetry.
O valor desse intervalo precisa ser não negativo, com um mínimo de 5.000 ms, máximo de 300.000 ms e múltiplo de 5.000 ms. O valor é expresso em milissegundos.
meter_provider:
readers:
- periodic:
interval: 30000
Selecione os tipos de indicadores que serão coletados
Para controlar quais tipos de indicadores são coletados de uma carga de trabalho, desative os tipos de indicadores que você não quer coletar. Os tipos de indicadores são traces, métricas e registros.
Desative os tipos de sinal usando as variáveis de ambiente no contêiner em que a carga de trabalho é executada. Para modificar as variáveis de ambiente, modifique o recurso personalizado de instrumentação e reimplante a carga de trabalho no contêiner.
O exemplo a seguir é um arquivo de manifesto de instrumentação configurado para a
coleta de apenas dados de trace. A coleta de registros e métricas está desativada porque meter_provider e logger_provider estão definidos como null.
apiVersion: telemetry.googleapis.com/v1alpha1
kind: Instrumentation
metadata:
namespace: default
name: otlp-auto-config-disable-metrics-logs
spec:
selector:
matchLabels: # Update the labels to match your workloads
app: telemetrygen-app
autoInstrumentationConfig:
configInjection:
enabled: true
otelSDKConfig:
meter_provider: null
logger_provider: null
Coletar dados de comandos e respostas multimodais
Na versão 1.35.2-gke.1210000 ou mais recente do cluster do GKE, é possível configurar o OpenTelemetry gerenciado para o GKE coletar dados de comandos multimodais e respostas.
Essa funcionalidade está disponível para agentes ReAct do LangGraph e agentes de IA generativa criados com o framework do Kit de Desenvolvimento de Agente (ADK).
Quando você coleta dados de comandos e respostas multimodais com o OpenTelemetry gerenciado para GKE, todo o conteúdo dos comandos e respostas do usuário final é coletado. Esses dados de comando e resposta são armazenados em um bucket do Cloud Storage. Para saber como gerenciar o bucket de armazenamento, incluindo o controle de acesso ou a exclusão de dados, consulte a documentação do Cloud Storage.
É possível usar produtos como o Model Armor e a Proteção de Dados Sensíveis para gerenciar dados sensíveis que podem estar nos comandos e nas respostas.
Para configurar o OpenTelemetry gerenciado para o GKE para coletar dados de comandos multimodais e respostas, faça o seguinte:
Configure seu Google Cloud projeto e o SDK que você está usando seguindo as instruções na seção Coletar comandos multimodais e respostas.
Crie ou identifique um bucket do Cloud Storage para coletar comandos e respostas multimodais. Para mais detalhes, consulte Criar um bucket.
Conceda à conta de serviço usada pelo aplicativo a permissão
storage.objects.createpara o bucket do Cloud Storage.Essa permissão permite que o aplicativo grave objetos no bucket do Cloud Storage. Esses repositórios de objetos armazenam os comandos e as respostas que o aplicativo agêntico cria e recebe. Para mais informações, consulte Definir e gerenciar políticas do IAM em buckets.
Configure o campo
promptsResponses.uploadBasePathno recurso personalizado de instrumentação, por exemplo:apiVersion: telemetry.googleapis.com/v1alpha1 kind: Instrumentation metadata: namespace: default name: prompts-responses spec: selector: {} promptsResponses: uploadBasePath: gs://BUCKET_NAMESubstitua
BUCKET_NAMEpelo nome do bucket do Cloud Storage.
Quando o recurso personalizado de instrumentação é atualizado e as cargas de trabalho são reiniciadas, as variáveis de ambiente que configuram os comandos e as respostas são injetadas nos contêineres das cargas de trabalho.
Para mais detalhes sobre os tipos de mídia que podem ser coletados e como explorar seus comandos e respostas multimodais, consulte Coletar e visualizar comandos e respostas multimodais.
Desativar a configuração automática de cargas de trabalho
Para desativar a instrumentação automática de cargas de trabalho com a configuração especificada, exclua o recurso personalizado de instrumentação do cluster. Para isso, use o seguinte comando:
kubectl delete instrumentations.telemetry.googleapis.com INSTRUMENTATION_NAME -n NAMESPACE
Substitua:
INSTRUMENTATION_NAME: o nome do recurso personalizado de instrumentação.NAMESPACE: o namespace que contém os pods em que você quer desativar a configuração automática.
Para desativar temporariamente a injeção automática de variável de ambiente e
preservar a configuração de autoinstrumentação para uso futuro, defina
autoInstrumentationConfig.configInjection.enabled como false e aplique o
recurso personalizado atualizado.
Veja a seguir um exemplo do recurso personalizado com a injeção automática de variável de ambiente temporariamente desativada:
apiVersion: telemetry.googleapis.com/v1alpha1
kind: Instrumentation
metadata:
namespace: default
name: otlp-auto-config-example
spec:
selector:
matchLabels: # Update the labels to match your workloads
app: telemetrygen-app
autoInstrumentationConfig:
configInjection:
enabled: false # disable environment variables config injection
otelSDKConfig:
... # preserve OpenTelemetry configuration for future use
Depois de excluir o recurso personalizado ou atualizá-lo para desativar a injeção automática de configuração, o GKE não instrumenta automaticamente novas cargas de trabalho que são segmentadas pelo recurso personalizado de instrumentação.
Para interromper a exportação de indicadores OTLP para o coletor gerenciado de uma carga de trabalho que foi instrumentada anteriormente pelo recurso personalizado, reinicie a carga de trabalho para que a alteração entre em vigor. Para isso, use o seguinte comando:
kubectl rollout restart deployment DEPLOYMENT_NAME -n NAMESPACE
Substitua:
DEPLOYMENT_NAME: o nome da implantação.NAMESPACE: o namespace.
Ver telemetria
Quando uma carga de trabalho configurada é executada no GKE em que o OpenTelemetry gerenciado para GKE está ativado, os sinais do OpenTelemetry são enviados ao Google Cloud Observability.
Para detalhes sobre como visualizar dados no Google Cloud Observability, consulte:
- Encontrar e explorar traces.
- Criar gráficos com o Metrics Explorer.
- Visualizar e analisar registros.
Gerar telemetria de amostra
Nesta seção, descrevemos como implantar um aplicativo de exemplo e apontar esse aplicativo para o endpoint OTLP do coletor do OpenTelemetry gerenciado. Em seguida, é possível visualizar a telemetria no Google Cloud.
O aplicativo de exemplo é um pequeno gerador que exporta traces,
registros e métricas para o coletor do OpenTelemetry gerenciado no cluster.
O aplicativo é codificado para usar o endpoint gRPC do coletor:
http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4317
Se você já tiver um aplicativo instrumentado com um SDK do OpenTelemetry, será possível gerar telemetria do aplicativo apontando-o para o endpoint do coletor ou configurando a instrumentação automática para o aplicativo.
Para implantar o aplicativo de exemplo, faça o seguinte:
Conecte-se ao cluster em que você ativou o OpenTelemetry gerenciado. Para fazer isso, consulte Definir um cluster padrão para comandos da
kubectl.Execute este comando:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/otlp-k8s-ingest/main/sample/gke-app.yamlApós alguns minutos, a telemetria gerada pelo aplicativo começa a fluir pelo coletor para o back-end do Google Cloud para cada indicador.
Verifique se a telemetria foi ingerida visualizando registros, métricas e traces do aplicativo de demonstração no console do Google Cloud :
Para visualizar métricas, faça o seguinte:
No console do Google Cloud , acesse a página do Metrics Explorer:
Execute a seguinte consulta PromQL no Metrics Explorer:
sum(avg_over_time({"__name__"="gen","namespace"="opentelemetry-demo","job"="telemetrygen"}[1h]))
Para ver os traces, faça o seguinte:
No console do Google Cloud , acesse a página Análise de traces.
Filtre os períodos de trace por nome de período igual a
lets-go.
Para ver os registros, faça o seguinte:
No console do Google Cloud , acesse a página Análise de registros.
Execute a seguinte consulta:
resource.type="k8s_pod" resource.labels.namespace_name="opentelemetry-demo"
Desativar o OpenTelemetry gerenciado para GKE
É possível desativar o OpenTelemetry gerenciado para GKE no cluster. Quando você desativa o coletor, o coletor gerenciado do OpenTelemetry é removido do cluster, e nenhum dado de telemetria novo é coletado.
Para desativar o OpenTelemetry gerenciado para GKE, siga as etapas abaixo.
gcloud
Para desativar o OpenTelemetry gerenciado para GKE em um cluster, execute
o seguinte comando gcloud:
gcloud container clusters update CLUSTER_NAME \
--project=PROJECT_ID \
--managed-otel-scope=NONE \
--location=LOCATION
Substitua:
CLUSTER_NAME: o nome do cluster.PROJECT_ID: o ID do projeto do Google Cloud .LOCATION: a região ou zona.
Console
No console, acesse a lista de clusters:
Selecione o cluster em que você quer desativar o OpenTelemetry gerenciado.
Em Detalhes do cluster, ao lado de OpenTelemetry gerenciado, selecione o ícone de edição.
Desmarque a caixa de seleção para desativar o recurso.
Terraform
Para desativar o OpenTelemetry gerenciado para GKE, atualize o bloco managed_opentelemetry_config no recurso google_container_cluster para definir o escopo como NONE.
Atualize o arquivo de configuração do Terraform:
resource "google_container_cluster" "default" { name = "CLUSTER_NAME" location = "LOCATION" project = "PROJECT_ID" # ... other configuration ... managed_opentelemetry_config { scope = "NONE" } }Aplique a configuração do Terraform:
terraform apply
Substitua:
CLUSTER_NAME: o nome do cluster.LOCATION: a região ou zona.PROJECT_ID: o ID do projeto do Google Cloud .
Quando você desativa o OpenTelemetry gerenciado para GKE, o CustomResourceDefinition de instrumentação e todos os recursos personalizados de instrumentação criados não são removidos do cluster.
Se você reativar o OpenTelemetry gerenciado, ele vai usar a configuração preservada nos recursos personalizados de instrumentação.
Se você tiver dados de telemetria que já foram coletados pelo OpenTelemetry gerenciado para GKE, desativar o coletor não vai afetar esses dados. Os dados atuais ainda são armazenados no Google Cloud Observability, e nenhum dado de telemetria novo é coletado.
Solução de problemas
Cargas de trabalho privilegiadas de parceiros do Autopilot
Se você tentar usar a configuração automática com uma carga de trabalho privilegiada de parceiro do Autopilot, talvez o pod da carga de trabalho seja rejeitado.
A injeção de configuração do OpenTelemetry não é compatível com cargas de trabalho privilegiadas de parceiros do GKE Autopilot. Segmentar essas cargas de trabalho usando um recurso personalizado de instrumentação para ativar a injeção variável de ambiente do OpenTelemetry pode fazer com que a carga de trabalho não corresponda à lista de permissões de carga de trabalho privilegiada do Autopilot, o que significa que o pod com injeção de configuração seria rejeitado pelo GKE Autopilot.
Os registros, as métricas ou os traces não estão visíveis no console do Google Cloud
Os dados podem não estar visíveis por vários motivos. Esses motivos incluem permissões ausentes para visualizar os dados ou configuração incorreta que impede a coleta de dados.
As etapas para resolver problemas comuns são as seguintes:
Verifique se todas as APIs necessárias estão ativadas no seu projeto.
Verifique se o recurso personalizado de instrumentação está configurado corretamente, com o namespace correspondente ao namespace em que a carga de trabalho está em execução e o seletor correspondente ao rótulo da carga de trabalho.
Inspecione o pod da carga de trabalho para ver se as variáveis de ambiente foram injetadas corretamente.
Verifique os registros de contêiner do coletor do OpenTelemetry para ver se há erros no coletor. Para isso, execute o seguinte comando:
kubectl logs -n gke-managed-otel -l app=opentelemetry-collector -c opentelemetry-collector
A desativação de um indicador de telemetria não está funcionando
Ao desativar um sinal de telemetria usando o recurso personalizado de instrumentação, aplique o recurso personalizado e reimplante as cargas de trabalho.
Ao aplicar o recurso personalizado, use a
aplicação do lado do servidor
no comando kubectl apply ao atualizar o recurso personalizado
de instrumentação.
Para saber como desativar um indicador de telemetria, consulte Selecionar os tipos de indicador a serem coletados.
As variáveis injetadas do OpenTelemetry não estão visíveis na minha carga de trabalho
As variáveis são injetadas nos contêineres dos pods de carga de trabalho, não na carga de trabalho. Verifique os pods, não os objetos proprietários, como ReplicaSets ou implantações.
Por exemplo, para confirmar se as variáveis foram injetadas corretamente para a carga de trabalho de amostra no namespace padrão usado na seção anterior Gerar telemetria, faça o seguinte:
Execute este comando:
kubectl get pods -n default -l app=telemetrygen-app -o yamlExamine o
spec.containers[*].envdos pods.Verifique se há um objeto de instrumentação no mesmo namespace e se ele está segmentando o pod e tem o recurso de injeção de configuração ativado. Para isso, execute o seguinte comando:
kubectl get instrumentations.telemetry.googleapis.com -n default -o yaml
As variáveis são injetadas nos contêineres somente quando os pods são criados,
porque a
API Kubernetes não permite modificar a maioria dos campos na especificação de um pod
existente, como variáveis de ambiente. Para que a configuração entre em vigor em
cargas de trabalho criadas antes do objeto de instrumentação,
reinicie a carga de trabalho. Por exemplo, para uma implantação chamada telemetry-gen-app,
execute o seguinte comando:
kubectl rollout restart deployment -n default telemetry-gen-app
Uma quantidade excessiva de dados de trace no Cloud Trace
Para reduzir a coleta de dados pelo Cloud Trace, configure um amostrador baseado em pai com uma proporção de ID de trace para amostrar apenas uma porcentagem dos traces.
Por exemplo, adicione o seguinte ao objeto Instrumentation:
spec:
otelSDKConfig:
tracer_provider:
sampler:
parent_based:
root:
trace_id_ratio_based:
ratio: "0.01"
O comportamento padrão do SDK do OpenTelemetry é o rastreamento "always_on", que equivale a uma proporção de 1.
As variáveis de ambiente não correspondem à configuração
Se você fez uma atualização no objeto de instrumentação, verifique se reiniciou os pods, conforme descrito na seção Modificar a configuração.
Se a configuração do pod estiver incorreta, verifique se ele é corretamente segmentado pelo objeto Instrumentation e se não há vários objetos Instrumentation segmentando o mesmo pod:
kubectl get instrumentations --all-namespaces \
-o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,SELECTOR:.spec.selector
kubectl get pod -n ${NAMESPACE:?} ${POD_NAME:?} --show-labels
Um seletor vazio segmenta todos os pods no namespace.
Se várias instrumentações forem direcionadas ao mesmo pod quando ele for criado, a instrumentação atualizada mais recentemente vai entrar em vigor.
O comando kubectl logs não retorna saída.
Quando os registros são transmitidos diretamente de um aplicativo para um
coletor do OpenTelemetry, eles ignoram o caminho de geração de registros padrão
do ambiente de execução do contêiner. Esse é o cenário comum ao usar o OpenTelemetry
para registros. Por padrão, o exportador envia os registros para o endpoint otlp,
em vez de para os streams stdout e stderr.
Nesse caso, como os registros não são gravados nos streams stdout ou stderr para que o ambiente de execução do contêiner os capture, o comando kubectl logs não vai exibir nenhuma saída para esse aplicativo. Em vez disso,
a saída de registro está disponível no Cloud Logging.
Se você quiser usar o SDK do OpenTelemetry e também enviar registros para o stream stdout, configure isso usando o exportador de registros. Para mais
informações, consulte
Exportador de registros: saída padrão.
A seguir
- Para saber como o OpenTelemetry gerenciado para GKE funciona, consulte OpenTelemetry gerenciado para GKE.
- Para uma alternativa autoimplantada ao OpenTelemetry gerenciado para GKE, consulte Coletor do OpenTelemetry criado pelo Google.