googleapis / googleapis/google-cloud-python

(google-cloud-spanner) Built-in metrics fail when one process uses databases in different projects

Aberta
#18,155 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Python
Estrelas
5.4k
Forks
1.8k
Merge médio
2d 23h
PRs com merge (30d)
123

Descrição

Environment details
  • OS type and version: Linux (also happens on macOS)
  • Python version: 3.13
  • google-cloud-spanner version: 3.68.0
Steps to reproduce
  1. In one process, create two clients for databases in two different projects.
  2. Run a query on each.
  3. Wait a minute for the metrics export.
Code example
from google.cloud import spanner

a = spanner.Client(project="project-a")
b = spanner.Client(project="project-b")

a.instance("i").database("d").snapshot().execute_sql("SELECT 1")
b.instance("i").database("d").snapshot().execute_sql("SELECT 1")
What happens

The metrics export fails, and no metrics show up in Cloud Monitoring for either project:

InvalidArgument: 400 Field resource.labels.project_id had an invalid value of
"project-b": if present, must be the project number or ID in the request name
(projects/project-a).

Whichever client is created first decides where all metrics go, so everything from the other project is rejected — and it takes the first project's metrics down with it, since they're sent in the same request.

What I expected

Metrics for each database go to that database's project. Running against several projects is pretty normal, and right now it means no built-in metrics at all.

What I tried

SPANNER_DISABLE_BUILTIN_METRICS=true and Client(disable_builtin_metrics=True) both work, but only by giving up the metrics. As far as I can tell there's no way to pass in my own exporter or meter provider, so there's no way to keep them. Java has this (googleapis/google-cloud-java#13679) and there's an open request for Go (googleapis/google-cloud-go#11204), but I couldn't find anything similar here.

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece executando o exemplo fornecido com dois projetos usando google-cloud-spanner 3.68.0 e inspecione o caminho de métricas integradas usado por spanner.Client. Compare o comportamento padrão com SPANNER_DISABLE_BUILTIN_METRICS e Client(disable_builtin_metrics=True) e, em seguida, rastreie como o projeto do primeiro cliente é reutilizado durante a exportação. O trabalho estará concluído quando as métricas de cada banco de dados chegarem ao seu próprio projeto sem desabilitar as métricas integradas.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
google-cloud, python
Domínio
cloud, observability-sre
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Ativa
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.