Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custo de armazenamento e processamento do GCP #617

Open
1 task
Tracked by #616
laura-l-amaral opened this issue Jan 5, 2024 · 9 comments
Open
1 task
Tracked by #616

Custo de armazenamento e processamento do GCP #617

laura-l-amaral opened this issue Jan 5, 2024 · 9 comments
Assignees

Comments

@laura-l-amaral
Copy link
Contributor

laura-l-amaral commented Jan 5, 2024

  • Descobrir quais são os indicadores relevantes
@laura-l-amaral
Copy link
Contributor Author

É possível exportar as informações de billing para o BQ a partir desse tutorial
Mais informações a respeito aqui

Esse caminho me parece interessante! Ao ter os dados no BQ conseguimos facilmente montar gráficos no Metabase!

@rdahis o que acha de exportarmos essa informação para o BQ?

Alguns pontos que li que parecem relevantes:

  • Se quisermos ver o custo do GKE detalahado é necessário habilitar essa função, mais detalhes sobre isso nesse link
  • Eu não sei o que o GKE mede então não sei se isso é importante. Talvez podemos olhar juntos os relatórios pela interface do google para entender melhor sobre
  • Os conjuntos que contêm dados de preços coletam apenas dados de faturamento do Google Cloud incorridos a partir da data em que você configurou a exportação do Faturamento do Cloud. Ou seja, os dados do Google Cloud Billing não foram adicionados retroativamente. Sendo assim, você não verá os dados do Cloud Billing antes de ativar a exportação.

@laura-l-amaral
Copy link
Contributor Author

tem um tutorial que parece bem prático aqui também!

(confesso que estou confusa com a quantidade de tutoriais)

@rdahis
Copy link
Member

rdahis commented Jan 6, 2024

Já tínhamos todos os passos de setup feitos! Só não tenho certeza se está exportando dados de todos os projetos (em particular o basedosdados-dev) ou só o basedosdados.

Já viu esse conjunto basedosdados.br_bd_indicadores.gcp_billing_export_v1_01709D_1C0CEE_6E40BF? E esse basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF.

@laura-l-amaral
Copy link
Contributor Author

opa! Não tinha visto, vou ver!

@laura-l-amaral
Copy link
Contributor Author

laura-l-amaral commented Jan 12, 2024

Algumas anotações aqui:

  • Por enquanto não temos nenhuma tag

    aparentemente tags são ferramentas para gerenciar acessos de usuários, labels é o que precisamos usar aqui

  • As labels podem me ajudar a entender os custos, mas com certeza precisamos melhorar como elas estão sendo gravadas, por enquanto elas nao me ajudam em quase nada
  • Parece que os custos com k8 estão todos em dev, mas confesso que não entendo muito dessa parte de processamento
  • A tabela de dados detalhadas por recurso pode detalha os seguintes recursos:
    Compute Engine
    Google Kubernetes Engine (GKE)
    Cloud Functions
    Cloud Run
    Cloud SQL
    Cloud Spanner
    App Engine
    Firestore e Datastore
  • Os 2 recursos que temos contato direto em dados são Cloud Storage e BigQuery. Ambos não estão na lista e para melhor gerenciá-los vamos ter que usar labels
  • Ainda assim podemos ver se temos como entender melhor como funciona o Compute Engine e Kubernetes Engine pq são 2 custos importantes pra gente.
  • O próximo passo é ver se consigo entender de onde estão vindo as labels. Já temos algumas tabelas com labels, mas elas nao estão aparecendo do jeito que eu imaginei
  • Inclui algumas labels para ver sse segunda já consigo usar essas labels para montar um plano de acompanhamento
  • Seria interessante entender se temos como usar a label dbt_invocation_id para rastrear custos com o dbt

Query para visualizar os custos por projeto e por tipo de recurso:

SELECT 
  invoice.month,
  service.description,
  project.name,
  SUM(cost) as cost
FROM `basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF`
group by 1,2,3
order by 1 desc, 4 desc

Query para quais labels temos atualmente e os custos associados a elas mes a mes:

SELECT 
invoice.month,
labels.key,
labels.value,
SUM(cost) as cost
FROM `basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF`
LEFT JOIN UNNEST(labels) as labels
GROUP BY 1,2,3
ORDER BY invoice.month desc, cost desc

Query de todas as contas e labels que possuem a chave de dbt_invocation_id

SELECT 
invoice.month,
service.description,
project.name,
TO_JSON_STRING(labels),
SUM(cost) as cost
FROM `basedosdados.br_bd_indicadores.gcp_billing_export_resource_v1_01709D_1C0CEE_6E40BF`
WHERE TO_JSON_STRING(labels) LIKE ("%dbt_invocation_id%")
GROUP BY 1,2,3,4
ORDER BY invoice.month desc, cost desc

@rdahis
Copy link
Member

rdahis commented Jan 14, 2024

Eu entendi certo que parece possível visualizar o custo de cada dbt run com labels?

@laura-l-amaral
Copy link
Contributor Author

Parece, mas confesso que não entendi muito bem como que esse id é gerado e como podemos saber o que se relaciona com o que

@laura-l-amaral
Copy link
Contributor Author

Aparentemente na parte de custos do BigQuery só aparecem as labels de conjunto, não de tabela, o que é uma pena pq é bem mais fácil gerenciar as labels de tabela com o dbt.

Próximos passos:

  • Pensar num modelo de colocar labels que facilite o gerenciamento de custos

@laura-l-amaral
Copy link
Contributor Author

Primeira proposta de labels (já implementada no conjunto do cnpj)

  • dataset:dataset_slug
  • bdpro:true/false
  • environment:production/development/staging
  • pipeline:true/false
  • update-frequency:daily/weekly/monthly/yearly
  • size:small/medium/large
  • owner:owner_name
  • query-optimization: true

Descobri como usar a label dbt_invocation_id para monitorar custos do dbt: é necessário cruzar com a tabela INFORMATION_SCHEMA.JOBS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants