Neste documento, descrevemos como modificar uma configuração do coletor OpenTelemetry
que usa um exportador atual — neste caso, o
exportador googlemanagedprometheus —
para usar o exportador otlphttp
e a API Telemetry (OTLP),
telemetry.googleapis.com.
O OTLP para métricas do Prometheus só funciona quando você usa a versão 0.140.0 ou mais recente do coletor do OpenTelemetry.
Ativar a API Telemetry
O exportador otlphttp grava na API Telemetry, que precisa estar ativada no projeto. Ative a API Telemetry executando o
comando a seguir:
gcloud services enable telemetry.googleapis.com
Autorizar a conta de serviço do Kubernetes
A conta de serviço do Kubernetes precisa ter permissão para usar a API Telemetry. Os comandos a seguir concedem o papel necessário do Identity and Access Management (IAM) à conta de serviço do Kubernetes. Estes comandos pressupõem que você está usando a federação de identidade da carga de trabalho para o GKE:
export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding projects/PROJECT_ID \
--role=roles/telemetry.metricsWriter \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog.goog/subject/ns/opentelemetry/sa/opentelemetry-collector \
--condition=None
Substitua a variável PROJECT_ID pelo ID do seu projeto do Google Cloud .
Se a conta de serviço tiver um formato diferente, use o comando na documentação do Google Cloud Managed Service para Prometheus para autorizar a conta de serviço com as seguintes mudanças:
- Substitua o nome da conta de serviço
gmp-test-sapela sua conta. - Execute o comando para conceder o papel
roles/telemetry.metricsWriter.
Defina a variável de ambiente PROJECT_ID.
Defina a variável de ambiente PROJECT_ID na implantação do coletor. O
resultado será assim:
env:
- name: PROJECT_ID
value: PROJECT_ID
Localize o exportador a ser substituído
No arquivo de configuração, localize o exportador e o serviço que o usa:
exporters:
googlemanagedprometheus:
service:
pipelines:
metrics:
exporters: [googlemanagedprometheus]
Adicionar configuração para o exportador otlphttp
Nesta etapa, você adiciona o exportador otlphttp e o processador metricstarttime
à configuração. Esse exportador adicional faz com que o
coletor grave as métricas duas vezes.
- Se você estiver usando métricas nativas do OTLP, a gravação dupla não vai causar problemas porque a estrutura dos descritores de métricas criados pelos dois métodos é diferente. Elas são métricas separadas.
- Se você estiver usando métricas do Prometheus, haverá colisões até que você
remova o exportador
googlemanagedpromethus.
A configuração atualizada vai ficar assim:
exporters:
googlemanagedprometheus:
otlphttp:
encoding: json
endpoint: https://telemetry.googleapis.com
auth:
authenticator: googleclientauth
processors:
# This processor ensures the start time is set for Prometheus metrics. This must be set in the pipeline before the k8sattributes processor, if used.
metricstarttime:
strategy: subtract_initial_point
resource/gcp_project_id:
attributes:
- action: insert
# Make sure you set the PROJECT_ID environment variable.
value: ${PROJECT_ID}
key: gcp.project_id
extensions:
googleclientauth:
service:
extensions: [googleclientauth]
pipelines:
metrics:
processors: [resource/gcp_project_id, metricstarttime]
exporters: [googlemanagedprometheus, otlphttp]
Depois de gravar as métricas duas vezes, atualize seus painéis e políticas de alertas para usar os novos nomes de métricas gerados pelo exportador otlphttp.
O exportador otlphttp não renomeia as métricas para o estilo do Prometheus, usando substituições de sublinhado.
Remover a configuração do exportador anterior
Depois de atualizar os painéis e alertas para se referirem às métricas exportadas por otlphttp, remova o exportador antigo, googlemanagedprometheus nesse caso, da configuração. A configuração revisada é semelhante a esta:
exporters:
otlphttp:
encoding: json
endpoint: https://telemetry.googleapis.com
auth:
authenticator: googleclientauth
processors:
# This processor ensures the start time is set for Prometheus metrics. This must be set in the pipeline before the k8sattributes processor, if used.
metricstarttime:
strategy: subtract_initial_point
resource/gcp_project_id:
attributes:
- action: insert
# Make sure you set the PROJECT_ID environment variable.
value: ${PROJECT_ID}
key: gcp.project_id
extensions:
googleclientauth:
service:
extensions: [googleclientauth]
pipelines:
metrics:
processors: [resource/gcp_project_id, metricstarttime]
exporters: [otlphttp]
Migrar painéis e políticas de alertas, se necessário
Se você usou o exportador googlemanagedprometheus apenas para dados de métricas do Prometheus, os painéis e as políticas de alertas atuais vão continuar funcionando quando você mudar para o exportador OTLP.
No entanto, se você usou o exportador googlemanagedprometheus para coletar e
enviar dados que foram originalmente emitidos usando OTLP ou se você raspou
métricas do Prometheus com caracteres UTF-8, será necessário atualizar seus
painéis e alertas para usar o nome da métrica UTF-8.
Isso ocorre devido às seguintes diferenças entre as métricas exportadas usando o
OTLP e as métricas exportadas usando o exportador googlemanagedprometheus:
A API Telemetry permite o uso de ponto (
.) e barra (/) em nomes de métricas. O exportadorgooglemanagedprometheusconverte todas as instâncias desses caracteres no caractere de sublinhado (_). Por exemplo, uma métrica OTLP chamadaprometheus.googleapis.com/foo.bar/gaugeé exportada literalmente pelo exportador OTLP, mas é exportada comoprometheus.googleapis.com/foo_bar/gaugepelo exportadorgooglemanagedprometheus.Quando as métricas são ingeridas, o Cloud Monitoring cria descritores de métricas com base nos nomes. A diferença na forma como o ponto (
.) e a barra (/) são processados pelos caminhos de ingestão significa que os descritores de métricas resultantes são diferentes entre as métricas ingeridas usando o exportadorgooglemanagedprometheuse aquelas ingeridas usando o exportadorotlphttp. Se você usar os dois caminhos de ingestão, terá dois conjuntos de métricas. Para receber resultados completos ao consultar, é necessário unir manualmente os resultados das versões do Prometheus e do OTLP das métricas.A API Telemetry não anexa uma unidade a um nome de métrica quando uma unidade está presente, e não anexa um sufixo
_totalaos contadores. Portanto, uma métrica exportada comoprometheus.googleapis.com/foo/counterao usar a API Telemetry é exportada comoprometheus.googleapis.com/foo_seconds_total/counterpelo exportadorgooglemanagedprometheus. Essa diferença também se aplica aos sufixos_totale_ratio.
Para mais informações sobre as diferenças entre as métricas, consulte
Diferenças entre o exportador googlemanagedprometheus e
a API Telemetry.
Como as regras de transformação não se aplicam a métricas com caracteres UTF-8, é necessário reescrever os painéis e as políticas de alerta para usar os novos nomes de métricas ou unir os nomes antigos e novos.
Não recomendamos escrever regras de processador para recriar essas transformações e continuar gravando métricas UTF-8 como se elas fossem coletadas pelo exportador googlemanagedprometheus. Isso mantém a compatibilidade com versões anteriores, mas sacrifica a compatibilidade com versões futuras, e você não poderá usar facilmente recursos de código aberto que referenciam os nomes de métricas UTF-8.